GSaha567/seq_level_training_data
052
1text,length,is_long_context,metric_val,label_metric2"names db 'UNKNOWN' ; 00
3 db 'AAA ' ; 01
4 db 'AAD ' ; 02
5 db 'AAM ' ; 03
6 db 'AAS ' ; 04
7 db 'ADC ' ; 05
8 db 'ADD ' ; 06
9 db 'AND ' ; 07
10 db 'CALL ' ; 08
11 db 'CBW ' ; 09
12 db 'CLC ' ; 0A
13 db 'CLD ' ; 0B
14 db 'CLI ' ; 0C
15 db 'CMC ' ; 0D
16 db 'CMP ' ; 0E
17 db 'CMPSB ' ; 0F
18 db 'CMPSW ' ; 10
19 db 'CWD ' ; 11
20 db 'DAA ' ; 12
21 db 'DAS ' ; 13
22 db 'DEC ' ; 14
23 db 'DIV ' ; 15
24 db 'ESC ' ; 16
25 db 'HLT ' ; 17
26 db 'IDIV ' ; 18
27 db 'IMUL ' ; 19
28 db 'IN ' ; 1A
29 db 'INC ' ; 1B
30 db 'INT ' ; 1C
31 db 'INTO ' ; 1D
32 db 'IRET ' ; 1E
33 db 'JA ' ; 1F
34 db 'JB ' ; 20
35 db 'JCXZ ' ; 21
36 db 'JE ' ; 22
37 db 'JG ' ; 23
38 db 'JL ' ; 24
39 db 'JMP ' ; 25
40 db 'JNA ' ; 26
41 db 'JNB ' ; 27
42 db 'JNE ' ; 28
43 db 'JNG ' ; 29
44 db 'JNL ' ; 2A
45 db 'JNO ' ; 2B
46 db 'JNP ' ; 2C
47 db 'JNS ' ; 2D
48 db 'JO ' ; 2E
49 db 'JP ' ; 2F
50 db 'JS ' ; 30
51 db 'LAHF ' ; 31
52 db 'LDS ' ; 32
53 db 'LEA ' ; 33
54 db 'LES ' ; 34
55 db 'LOCK ' ; 35
56 db 'LODSB ' ; 36
57 db 'LODSW ' ; 37
58 db 'LOOP ' ; 38
59 db 'LOOPE ' ; 39
60 db 'LOOPNE ' ; 3A
61 db 'MOV ' ; 3B
62 db 'MOVSB ' ; 3C
63 db 'MOVSW ' ; 3D
64 db 'MUL ' ; 3E
65 db 'NEG ' ; 3F
66 db 'NOP ' ; 40
67 db 'NOT ' ; 41
68 db 'OR ' ; 42
69 db 'OUT ' ; 43
70 db 'POP ' ; 44
71 db 'POPF ' ; 45
72 db 'PUSH ' ; 46
73 db 'PUSHF ' ; 47
74 db 'RCL ' ; 48
75 db 'RCR ' ; 49
76 db 'REP ' ; 4A
77 db 'REPNE ' ; 4B
78 db 'RET ' ; 4C
79 db 'RETF ' ; 4D
80 db 'RETN ' ; 4E
81 db 'ROL ' ; 4F
82 db 'ROR ' ; 50
83 db 'SAHF ' ; 51
84 db 'SAR ' ; 52
85 db 'SBB ' ; 53
86 db 'SCASB ' ; 54
87 db 'SCASW ' ; 55
88 db 'SEGCS ' ; 56
89 db 'SEGDS ' ; 57
90 db 'SEGES ' ; 58
91 db 'SEGSS ' ; 59
92 db 'SHL ' ; 5A
93 db 'SHR ' ; 5B
94 db 'STC ' ; 5C
95 db 'STD ' ; 5D
96 db 'STI ' ; 5E
97 db 'STOSB ' ; 5F
98 db 'STOSW ' ; 60
99 db 'SUB ' ; 61
100 db 'TEST ' ; 62
101 db 'WAIT ' ; 63
102 db 'XCHG ' ; 64
103 db 'XLAT ' ; 65
104 db 'XOR ' ; 66
105
106; 0 1 2 3 4 5 6 7
107regs dw 'AL','CL','DL','BL','AH','CH','DH','BH'
108regs2 dw 'AX','CX','DX','BX','SP','BP','SI','DI'
109
110mem db 'BX+SI','BX+DI','BP+SI','BP+DI',0h,0h
111mem2 dw 0h,0h,0h,0h,'SI','DI','BP','BX'
112
113regsS dw 'ES' ; 0
114 dw 'CS' ; 1
115 dw 'SS' ; 2
116 dw 'DS' ; 3
117
118farTxt db 'far '
119bptr db 'byte ptr '
120wptr db 'word ptr '
121
122; Bits composition
123; sreg scvw
124; sc - subcode, specifies which block of names to look at for rMWN command
125
126; Read functions
127rMWR equ 01h ; Read MOD with REG
128rMWN equ 02h ; Read MOD with name code
129rBIT equ 03h ; Read next command byte as bits
130rOFF equ 04h ; Read offset
131rILM equ 05h ; Read immediate LSB [MSB]
132rALM equ 06h ; Read address ALSB AMSB
133
134; Write functions
135wROM equ 10h ; Write r/m
136wREG equ 11h ; Write REG
137wNAM equ 12h ; Write command name
138wCOM equ 13h ; Write comma (,)
139wACC equ 14h ; Write accumulator
140wIML equ 15h ; Write MSB LSB
141wAML equ 16h ; Write [AMSB ALSB]
142wIPO equ 17h ; Write IP+offset
143wSEG equ 18h ; Write SR
144wPRM equ 19h ; Write size ptr r/m
145
146; Special functions
147sPRE equ 20h ; Set the prefix for next command
148sEXP equ 21h ; Write sign-extended LSB
149sSPC equ 22h ; reg = 0: write 1; reg = 1: write AL; reg = 2: write AX; reg = 3: write 3; reg = 4: write ""far""; reg = 5: write CL
150sESC equ 23h ; Read next command byte as yyy and then write hex(""reg yyy"")
151sIAM equ 24h ; Write MSB LSB:AMSB ALSB
152sEXT equ 25h ; Execute extended function
153sIPI equ 26h ; Write IP+MSB LSB
154sREP equ 27h ; Step into different command using offset as address
155
156outOffset equ 40h
157namOffset equ 58h
158argOffset equ 60h
159
160emptySpace db 38h DUP(' ')
161 db 0Ah, 0Dh
162
163functions dw 0h, frMWR, frMWN, frBIT, frOFF, frILM, frALM, 0h, 0h,0h,0h,0h,0h,0h,0h,0h
164 dw fwROM, fwREG, fwNAM, fwCOM, fwACC, fwIML, fwAML, fwIPO, fwSEG, fwPRM,0h,0h,0h,0h,0h,0h
165 dw fsPRE, fsEXP, fsSPC, fsESC, fsIAM, fsEXT, fsIPI, fsREP,0h,0h,0h,0h,0h,0h,0h
166
167; 000 001 010 011 100 101 110 111
168subNames db 1Bh, 14h, 08h, 08h, 25h, 25h, 46h, 00h ; 0xFE - 0xFF
169 db 62h, 00h, 41h, 3Fh, 3Eh, 19h, 15h, 18h ; 0xF6 - 0xF7
170 db 4Fh, 50h, 48h, 49h, 5Ah, 5Bh, 00h, 52h ; 0xD0 - 0xD3
171 db 06h, 42h, 05h, 53h, 07h, 61h, 66h, 0Eh ; 0x80 - 0x83
172
173
174; Hex Com Args Size
175
176codes db 06h, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 00 ADD r/m, reg Byte
177 db 06h, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 01 ADD r/m, reg Word
178 db 06h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 02 ADD reg, r/m Byte
179 db 06h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 03 ADD reg, r/m Word
180 db 06h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 04 ADD AL, LSB Byte
181 db 06h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 05 ADD AX, MSB LSB Word
182 db 46h, rBIT,000h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 06 PUSH ES
183 db 44h, rBIT,000h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 07 POP ES
184
185 db 42h, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 08 OR r/m, reg Byte
186 db 42h, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 09 OR r/m, reg Word
187 db 42h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 0A OR reg, r/m Byte
188 db 42h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 0B OR reg, r/m Word
189 db 42h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 0C OR AL, LSB Byte
190 db 42h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 0D OR AX, MSB LSB Word
191 db 46h, rBIT,010h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 0E PUSH CS
192 db 44h, rBIT,010h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 0F POP CS
193
194 db 05h, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 10 ADC r/m, reg Byte
195 db 05h, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 11 ADC r/m, reg Word
196 db 05h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 12 ADC reg, r/m Byte
197 db 05h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 13 ADC reg, r/m Word
198 db 05h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 14 ADC AL, LSB Byte
199 db 05h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 15 ADC AX, MSB LSB Word
200 db 46h, rBIT,020h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 16 PUSH SS
201 db 44h, rBIT,020h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 17 POP SS
202
203 db 53h, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 18 SBB r/m, reg Byte
204 db 53h, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 19 SBB r/m, reg Word
205 db 53h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 1A SBB reg, r/m Byte
206 db 53h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 1B SBB reg, r/m Word
207 db 53h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 1C SBB AL, LSB Byte
208 db 53h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 1D SBB AX, MSB LSB Word
209 db 46h, rBIT,030h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 1E PUSH DS
210 db 44h, rBIT,030h,wNAM,wSEG, 0h, 0h, 0h, 0h,0 ; 1F POP DS
211
212 db 07h, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 20 AND r/m, reg Byte
213 db 07h, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 21 AND r/m, reg Word
214 db 07h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 22 AND reg, r/m Byte
215 db 07h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 23 AND reg, r/m Word
216 db 07h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 24 AND AL, LSB Byte
217 db 07h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 25 AND AX, MSB LSB Word
218 db 00h, rBIT,000h,sPRE, 0h, 0h, 0h, 0h, 0h,0 ; 26 Prefix ES
219 db 12h, wNAM,000h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 27 DAA
220
221 db 61h, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 28 SUB r/m, reg Byte
222 db 61h, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 29 SUB r/m, reg Word
223 db 61h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 2A SUB reg, r/m Byte
224 db 61h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 2B SUB reg, r/m Word
225 db 61h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 2C SUB AL, LSB Byte
226 db 61h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 2D SUB AX, MSB LSB Word
227 db 00h, rBIT,010h,sPRE, 0h, 0h, 0h, 0h, 0h,0 ; 2E Prefix CS
228 db 13h, wNAM,000h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 2F DAS
229
230 db 66h, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 30 XOR r/m, reg Byte
231 db 66h, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 31 XOR r/m, reg Word
232 db 66h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 32 XOR reg, r/m Byte
233 db 66h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 33 XOR reg, r/m Word
234 db 66h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 34 XOR AL, LSB Byte
235 db 66h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 35 XOR AX, MSB LSB Word
236 db 00h, rBIT,020h,sPRE, 0h, 0h, 0h, 0h, 0h,0 ; 36 Prefix SS
237 db 01h, wNAM,000h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 37 AAA
238
239 db 0Eh, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 38 CMP r/m, reg Byte
240 db 0Eh, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 39 CMP r/m, reg Word
241 db 0Eh, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 3A CMP reg, r/m Byte
242 db 0Eh, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 3B CMP reg, r/m Word
243 db 0Eh, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 3C CMP AL, LSB Byte
244 db 0Eh, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; 3D CMP AX, MSB LSB Word
245 db 00h, rBIT,030h,sPRE, 0h, 0h, 0h, 0h, 0h,0 ; 3E Prefix DS
246 db 04h, wNAM,000h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 3F AAS
247
248 db 1Bh, rBIT,001h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 40 INC AX Word
249 db 1Bh, rBIT,011h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 41 INC CX Word
250 db 1Bh, rBIT,021h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 42 INC DX Word
251 db 1Bh, rBIT,031h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 43 INC BX Word
252 db 1Bh, rBIT,041h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 44 INC SP Word
253 db 1Bh, rBIT,051h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 45 INC BP Word
254 db 1Bh, rBIT,061h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 46 INC SI Word
255 db 1Bh, rBIT,071h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 47 INC DI Word
256
257 db 14h, rBIT,001h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 48 DEC AX Word
258 db 14h, rBIT,011h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 49 DEC CX Word
259 db 14h, rBIT,021h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 4A DEC DX Word
260 db 14h, rBIT,031h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 4B DEC BX Word
261 db 14h, rBIT,041h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 4C DEC SP Word
262 db 14h, rBIT,051h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 4D DEC BP Word
263 db 14h, rBIT,061h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 4E DEC SI Word
264 db 14h, rBIT,071h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 4F DEC DI Word
265
266 db 46h, rBIT,001h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 50 PUSH AX Word
267 db 46h, rBIT,011h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 51 PUSH CX Word
268 db 46h, rBIT,021h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 52 PUSH DX Word
269 db 46h, rBIT,031h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 53 PUSH BX Word
270 db 46h, rBIT,041h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 54 PUSH SP Word
271 db 46h, rBIT,051h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 55 PUSH BP Word
272 db 46h, rBIT,061h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 56 PUSH SI Word
273 db 46h, rBIT,071h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 57 PUSH DI Word
274
275 db 44h, rBIT,001h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 58 POP AX Word
276 db 44h, rBIT,011h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 59 POP CX Word
277 db 44h, rBIT,021h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 5A POP DX Word
278 db 44h, rBIT,031h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 5B POP BX Word
279 db 44h, rBIT,041h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 5C POP SP Word
280 db 44h, rBIT,051h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 5D POP BP Word
281 db 44h, rBIT,061h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 5E POP SI Word
282 db 44h, rBIT,071h,wNAM,wREG, 0h, 0h, 0h, 0h,0 ; 5F POP DI Word
283
284 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 60 NO COMMAND
285 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 61 NO COMMAND
286 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 62 NO COMMAND
287 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 63 NO COMMAND
288 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 64 NO COMMAND
289 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 65 NO COMMAND
290 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 66 NO COMMAND
291 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 67 NO COMMAND
292
293 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 68 NO COMMAND
294 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 69 NO COMMAND
295 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 6A NO COMMAND
296 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 6B NO COMMAND
297 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 6C NO COMMAND
298 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 6D NO COMMAND
299 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 6E NO COMMAND
300 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 6F NO COMMAND
301
302 db 2Eh, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 70 JO IP+offset
303 db 2Bh, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 71 JNO IP+offset
304 db 20h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 72 JB IP+offset
305 db 27h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 73 JNB IP+offset
306 db 22h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 74 JE IP+offset
307 db 28h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 75 JNE IP+offset
308 db 26h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 76 JNA IP+offset
309 db 1Fh, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 77 JA IP+offset
310
311 db 30h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 78 JS IP+offset
312 db 2Dh, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 79 JNS IP+offset
313 db 2Fh, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 7A JP IP+offset
314 db 25h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 7B JNP IP+offset
315 db 24h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 7C JL IP+offset
316 db 2Ah, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 7D JNL IP+offset
317 db 29h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 7E JNG IP+offset
318 db 23h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; 7F JG IP+offset
319
320 db 00h, rBIT,00Ch,rMWN,rILM,wNAM,wPRM,wCOM,wIML,0 ; 80 Comm depends on code Byte
321 db 00h, rBIT,00Dh,rMWN,rILM,wNAM,wPRM,wCOM,wIML,0 ; 81 Comm depends on code Word
322 db 00h, rBIT,00Ch,rMWN,rILM,wNAM,wPRM,wCOM,wIML,0 ; 82 Comm depends on code Byte
323 db 00h, rBIT,08Dh,rMWN,rILM,wNAM,wPRM,wCOM,sEXP,0 ; 83 Comm depends on code Word
324 db 62h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 84 TEST reg, r/m Byte
325 db 62h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 85 TEST reg, r/m Word
326 db 64h, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 86 XCHG reg, r/m Byte
327 db 64h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 87 XCHG reg, r/m Word
328
329 db 3Bh, rBIT,000h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 88 MOV r/m, reg Byte
330 db 3Bh, rBIT,001h,rMWR,wNAM,wROM,wCOM,wREG, 0h,0 ; 89 MOV r/m, reg Word
331 db 3Bh, rBIT,000h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 8A MOV reg, r/m Byte
332 db 3Bh, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; 8B MOV reg, r/m Word
333 db 3Bh, rBIT,001h,rMWR,wNAM,wROM,wCOM,wSEG, 0h,0 ; 8C MOV r/m, SEG
334 db 33h, rMWR,wNAM,wREG,wCOM,wROM, 0h, 0h, 0h,0 ; 8D LEA reg, r/m
335 db 3Bh, rMWR,wNAM,wSEG,wCOM,wROM, 0h, 0h, 0h,0 ; 8E MOV SEG, r/m
336 db 44h, rMWR,wNAM,wROM, 0h, 0h, 0h, 0h, 0h,0 ; 8F POP r/m
337
338 db 40h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 90 NOP
339 db 64h, rBIT,011h,wNAM,wREG,wCOM,wACC, 0h, 0h,0 ; 91 XCHG CX, AX Word
340 db 64h, rBIT,021h,wNAM,wREG,wCOM,wACC, 0h, 0h,0 ; 92 XCHG DX, AX Word
341 db 64h, rBIT,031h,wNAM,wREG,wCOM,wACC, 0h, 0h,0 ; 93 XCHG BX, AX Word
342 db 64h, rBIT,041h,wNAM,wREG,wCOM,wACC, 0h, 0h,0 ; 94 XCHG SP, AX Word
343 db 64h, rBIT,051h,wNAM,wREG,wCOM,wACC, 0h, 0h,0 ; 95 XCHG BP, AX Word
344 db 64h, rBIT,061h,wNAM,wREG,wCOM,wACC, 0h, 0h,0 ; 96 XCHG SI, AX Word
345 db 64h, rBIT,071h,wNAM,wREG,wCOM,wACC, 0h, 0h,0 ; 97 XCHG DI, AX Word
346
347 db 09h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 98 CBW
348 db 11h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 99 CWD
349 db 08h, rBIT,001h,rALM,rILM,wNAM,sIAM, 0h, 0h,0 ; 9A CALL MSB LSB:AMSB ALSB
350 db 63h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 9B WAIT
351 db 47h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 9C PUSHF
352 db 45h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 9D POPF
353 db 51h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 9E SAHF
354 db 31h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; 9F LAHF
355
356 db 3Bh, rBIT,000h,rALM,wNAM,wACC,wCOM,wAML, 0h,0 ; A0 MOV AL, AMSB ALSB Byte
357 db 3Bh, rBIT,001h,rALM,wNAM,wACC,wCOM,wAML, 0h,0 ; A1 MOV AX, AMSB ALSB Word
358 db 3Bh, rBIT,000h,rALM,wNAM,wAML,wCOM,wACC, 0h,0 ; A2 MOV AMSB ALSB, AL Byte
359 db 3Bh, rBIT,001h,rALM,wNAM,wAML,wCOM,wACC, 0h,0 ; A3 MOV AMSB ALSB, AX Word
360 db 3Ch, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; A4 MOVSB
361 db 3Dh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; A5 MOVSW
362 db 0Fh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; A6 CMPSB
363 db 10h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; A7 CMPSW
364
365 db 62h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; A8 TEST AL, LSB Byte
366 db 62h, rBIT,001h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; A9 TEST AX, MSB, LSB Byte
367 db 5Fh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; AA STOSB
368 db 60h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; AB STOSW
369 db 36h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; AC LODSB
370 db 37h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; AD LODSW
371 db 54h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; AE SCASB
372 db 55h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; AF SCASW
373
374 db 3Bh, rBIT,000h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B0 MOV AL, LSB Byte
375 db 3Bh, rBIT,010h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B1 MOV CL, LSB Byte
376 db 3Bh, rBIT,020h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B2 MOV DL, LSB Byte
377 db 3Bh, rBIT,030h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B3 MOV BL, LSB Byte
378 db 3Bh, rBIT,040h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B4 MOV AH, LSB Byte
379 db 3Bh, rBIT,050h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B5 MOV CH, LSB Byte
380 db 3Bh, rBIT,060h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B6 MOV DH, LSB Byte
381 db 3Bh, rBIT,070h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B7 MOV BH, LSB Byte
382
383 db 3Bh, rBIT,001h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B8 MOV AX, MSB LSB Word
384 db 3Bh, rBIT,011h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; B9 MOV CX, MSB LSB Word
385 db 3Bh, rBIT,021h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; BA MOV DX, MSB LSB Word
386 db 3Bh, rBIT,031h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; BB MOV BX, MSB LSB Word
387 db 3Bh, rBIT,041h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; BC MOV SP, MSB LSB Word
388 db 3Bh, rBIT,051h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; BD MOV BP, MSB LSB Word
389 db 3Bh, rBIT,061h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; BE MOV SI, MSB LSB Word
390 db 3Bh, rBIT,071h,rILM,wNAM,wREG,wCOM,wIML, 0h,0 ; BF MOV DI, MSB LSB Word
391
392 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; C0 NO COMMAND
393 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; C1 NO COMMAND
394 db 4Ch, rBIT,001h,rILM,wNAM,wIML, 0h, 0h, 0h,0 ; C2 RET MSB LSB Word
395 db 4Ch, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; C3 RET
396 db 34h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; C4 LES reg, r/m
397 db 32h, rBIT,001h,rMWR,wNAM,wREG,wCOM,wROM, 0h,0 ; C5 LDS reg, r/m
398 db 3Bh, rBIT,000h,rMWR,rILM,wNAM,wPRM,wCOM,wIML,0 ; C6 MOV r/m, LSB
399 db 3Bh, rBIT,001h,rMWR,rILM,wNAM,wPRM,wCOM,wIML,0 ; C7 MOV r/m, MSB LSB
400
401 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; C8 NO COMMAND
402 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; C9 NO COMMAND
403 db 40h, rBIT,001h,rILM,wNAM,wIML, 0h, 0h, 0h,0 ; CA RETF MSB LSB
404 db 40h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; CB RETF
405 db 1Ch, rBIT,030h,wNAM,sSPC, 0h, 0h, 0h, 0h,0 ; CC INT 3
406 db 1Ch, rBIT,000h,rILM,wNAM,wIML, 0h, 0h, 0h,0 ; CD INT number
407 db 1Dh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; CE INTO
408 db 1Eh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; CF IRET
409
410 db 00h, rBIT,008h,rMWN,wNAM,wROM,wCOM,sSPC, 0h,0 ; D0 Comm depends on code Byte
411 db 00h, rBIT,009h,rMWN,wNAM,wROM,wCOM,sSPC, 0h,0 ; D1 Comm depends on code Word
412 db 00h, rBIT,058h,rMWN,wNAM,wROM,wCOM,sSPC, 0h,0 ; D2 Comm depends on code Byte
413 db 00h, rBIT,059h,rMWN,wNAM,wROM,wCOM,sSPC, 0h,0 ; D3 Comm depends on code Word
414 db 03h, rOFF,wNAM, 0h, 0h, 0h, 0h, 0h, 0h,0 ; D4 AAM
415 db 02h, rOFF,wNAM, 0h, 0h, 0h, 0h, 0h, 0h,0 ; D5 AAD
416 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; D6 NO COMMAND
417 db 65h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; D7 XLAT
418
419 db 16h, rBIT,000h,rMWR,wNAM,sESC,000h,wCOM,wROM,0 ; D8 ESC hex(000 yyy), r/m
420 db 16h, rBIT,000h,rMWR,wNAM,sESC,001h,wCOM,wROM,0 ; D9 ESC hex(001 yyy), r/m
421 db 16h, rBIT,000h,rMWR,wNAM,sESC,002h,wCOM,wROM,0 ; DA ESC hex(010 yyy), r/m
422 db 16h, rBIT,000h,rMWR,wNAM,sESC,003h,wCOM,wROM,0 ; DB ESC hex(011 yyy), r/m
423 db 16h, rBIT,000h,rMWR,wNAM,sESC,004h,wCOM,wROM,0 ; DC ESC hex(100 yyy), r/m
424 db 16h, rBIT,000h,rMWR,wNAM,sESC,005h,wCOM,wROM,0 ; DD ESC hex(101 yyy), r/m
425 db 16h, rBIT,000h,rMWR,wNAM,sESC,006h,wCOM,wROM,0 ; DE ESC hex(110 yyy), r/m
426 db 16h, rBIT,000h,rMWR,wNAM,sESC,007h,wCOM,wROM,0 ; DF ESC hex(111 yyy), r/m
427
428 db 3Ah, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; E0 LOOPNE IP+offset
429 db 39h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; E1 LOOPE IP+offset
430 db 38h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; E2 LOOP IP+offset
431 db 21h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; E3 JCXZ IP+offset
432 db 1Ah, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; E4 IN AL, port
433 db 1Ah, rBIT,020h,rILM,wNAM,sSPC,wCOM,wIML, 0h,0 ; E5 IN AX, port
434 db 43h, rBIT,000h,rILM,wNAM,wACC,wCOM,wIML, 0h,0 ; E6 OUT AL, port
435 db 43h, rBIT,020h,rILM,wNAM,sSPC,wCOM,wIML, 0h,0 ; E7 OUT AX, port
436
437 db 08h, rBIT,001h,rILM,wNAM,sIPI, 0h, 0h, 0h,0 ; E8 CALL MSB LSB
438 db 25h, rBIT,001h,rILM,wNAM,sIPI, 0h, 0h, 0h,0 ; E9 JMP MSB LSB
439 db 25h, rBIT,001h,rALM,rILM,wNAM,sIAM, 0h, 0h,0 ; EA JMP MSB LSB:AMSB ALSB
440 db 25h, rOFF,wNAM,wIPO, 0h, 0h, 0h, 0h, 0h,0 ; EB JMP IP+offset
441 db 1Ah, rBIT,000h,wNAM,wACC,wCOM,rBIT,021h,wREG,0 ; EC IN AL, DX
442 db 1Ah, rBIT,021h,wNAM,wACC,wCOM,wREG, 0h, 0h,0 ; ED IN AX, DX
443 db 43h, rBIT,000h,wNAM,wACC,wCOM,rBIT,021h,wREG,0 ; EE OUT AL, DX
444 db 43h, rBIT,021h,wNAM,wACC,wCOM,wREG, 0h, 0h,0 ; EF OUT AX, DX
445
446 db 35h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; F0 LOCK
447 db 00h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; F1 NO COMMAND
448 db 4Bh, rOFF,wNAM,sREP,wNAM, 0h, 0h, 0h, 0h,0 ; F2 REPNE
449 db 4Ah, rOFF,wNAM,sREP,wNAM, 0h, 0h, 0h, 0h,0 ; F3 REP
450 db 17h, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; F4 HLT
451 db 0Dh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; F5 CMC
452 db 00h, rBIT,004h,rMWN,sEXT, 0h, 0h, 0h, 0h,0 ; F6 Comm depends on code Byte
453 db 00h, rBIT,005h,rMWN,sEXT, 0h, 0h, 0h, 0h,0 ; F7 Comm depends on code Word
454
455 db 0Ah, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; F8 CLC
456 db 5Ch, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; F9 STC
457 db 0Ch, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; FA CLI
458 db 5Eh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; FB STI
459 db 0Bh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; FC CLD
460 db 5Dh, wNAM, 0h, 0h, 0h, 0h, 0h, 0h, 0h,0 ; FD STD
461 db 00h, rBIT,000h,rMWN,sEXT, 0h, 0h, 0h, 0h,0 ; FE Comm depends on code Byte
462 db 00h, rBIT,041h,rMWN,sEXT, 0h, 0h, 0h, 0h,0 ; FF Comm depends on code Word
463
464
465extCodes db wNAM,wROM, 0h, 0h, 0h,0 ; 000
466 db wNAM,wROM, 0h, 0h, 0h,0 ; 001
467 db wNAM,wROM, 0h, 0h, 0h,0 ; 010
468 db wNAM,sSPC,wROM, 0h, 0h,0 ; 011
469 db wNAM,wROM, 0h, 0h, 0h,0 ; 100
470 db wNAM,sSPC,wROM, 0h, 0h,0 ; 101
471 db wNAM,wROM, 0h, 0h, 0h,0 ; 110
472 db 0h, 0h, 0h, 0h, 0h,0 ; 111
473
474 db rILM,wNAM,wPRM,wCOM,wIML,0 ; 000
475 db 0h, 0h, 0h, 0h, 0h,0 ; 001
476 db wNAM,wROM, 0h, 0h, 0h,0 ; 010
477 db wNAM,wROM, 0h, 0h, 0h,0 ; 011
478 db wNAM,wROM, 0h, 0h, 0h,0 ; 100
479 db wNAM,wROM, 0h, 0h, 0h,0 ; 101
480 db wNAM,wROM, 0h, 0h, 0h,0 ; 110
481 db wNAM,wROM, 0h, 0h, 0h,0 ; 111
482",16241,True,4879.4983050037235,median483"; Copyright © 2020, VideoLAN and dav1d authors484; Copyright © 2020, Two Orioles, LLC485; All rights reserved.486;487; Redistribution and use in source and binary forms, with or without488; modification, are permitted provided that the following conditions are met:489;490; 1. Redistributions of source code must retain the above copyright notice, this491; list of conditions and the following disclaimer.492;493; 2. Redistributions in binary form must reproduce the above copyright notice,494; this list of conditions and the following disclaimer in the documentation495; and/or other materials provided with the distribution.496;497; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS"" AND498; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED499; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE500; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR501; ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES502; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;503; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND504; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT505; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS506; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.507 508%include ""ext/x86/x86inc.asm""509 510%if HAVE_AVX512ICL && ARCH_X86_64511 512%macro DUP4 1-*513 %rep %0514 times 4 db %1515 %rotate 1516 %endrep517%endmacro518 519%macro DIRS 16 ; cdef_directions[]520 %rep 4 + 16 + 4 ; 6 7 0 1 2 3 4 5 6 7 0 1521 ; masking away unused bits allows us to use a single vpaddd {1to16}522 ; instruction instead of having to do vpbroadcastd + paddb523 db %13 & 0x3f, -%13 & 0x3f524 %rotate 1525 %endrep526%endmacro527 528SECTION_RODATA 64529 530lut_perm_4x4: db 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79531 db 16, 17, 0, 1, 2, 3, 4, 5, 18, 19, 8, 9, 10, 11, 12, 13532 db 20, 21, 80, 81, 82, 83, 84, 85, 22, 23, 32, 33, 34, 35, 36, 37533 db 98, 99,100,101,102,103,104,105, 50, 51, 52, 53, 54, 55, 56, 57534lut_perm_4x8a: db 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79535 db 96, 97, 0, 1, 2, 3, 4, 5, 98, 99, 8, 9, 10, 11, 12, 13536lut_perm_4x8b:db 100,101, 16, 17, 18, 19, 20, 21,102,103, 24, 25, 26, 27, 28, 29537 db 104,105, 32, 33, 34, 35, 36, 37,106,107, 40, 41, 42, 43, 44, 45538 db 108,109, 48, 49, 50, 51, 52, 53,110,111, 56, 57, 58, 59, 60, 61539 db 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95540pd_01234567: dd 0, 1, 2, 3, 4, 5, 6, 7541lut_perm_8x8a: db 0, 1, 2, 3, 4, 5, 6, 7, 16, 17, 18, 19, 20, 21, 22, 23542 db -1, -1, 34, 35, 36, 37, 38, 39, -1, -1, 50, 51, 52, 53, 54, 55543 db -1, -1, 66, 67, 68, 69, 70, 71, -1, -1, 82, 83, 84, 85, 86, 87544 db 96, 97, 98, 99,100,101,102,103,112,113,114,115,116,117,118,119545lut_perm_8x8b: db 4, 5, 6, 7, 8, 9, 10, 11, 20, 21, 22, 23, 24, 25, 26, 27546 db 36, 37, 38, 39, 40, 41, 42, 43, 52, 53, 54, 55, 56, 57, 58, 59547 db 68, 69, 70, 71, 72, 73, 74, 75, 84, 85, 86, 87, 88, 89, 90, 91548 db 100,101,102,103,104,105,106,107,116,117,118,119,120,121,122,123549edge_mask: dq 0x00003c3c3c3c0000, 0x00003f3f3f3f0000 ; 0000, 0001550 dq 0x0000fcfcfcfc0000, 0x0000ffffffff0000 ; 0010, 0011551 dq 0x00003c3c3c3c3c3c, 0x00003f3f3f3f3f3f ; 0100, 0101552 dq 0x0000fcfcfcfcfcfc, 0x0000ffffffffffff ; 0110, 0111553 dq 0x3c3c3c3c3c3c0000, 0x3f3f3f3f3f3f0000 ; 1000, 1001554 dq 0xfcfcfcfcfcfc0000, 0xffffffffffff0000 ; 1010, 1011555 dq 0x3c3c3c3c3c3c3c3c, 0x3f3f3f3f3f3f3f3f ; 1100, 1101556 dq 0xfcfcfcfcfcfcfcfc, 0xffffffffffffffff ; 1110, 1111557px_idx: DUP4 18, 19, 20, 21, 26, 27, 28, 29, 34, 35, 36, 37, 42, 43, 44, 45558cdef_dirs: DIRS -7,-14, 1, -6, 1, 2, 1, 10, 9, 18, 8, 17, 8, 16, 8, 15559gf_shr: dq 0x0102040810204080, 0x0102040810204080 ; >> 0, >> 0560 dq 0x0204081020408000, 0x0408102040800000 ; >> 1, >> 2561 dq 0x0810204080000000, 0x1020408000000000 ; >> 3, >> 4562 dq 0x2040800000000000, 0x4080000000000000 ; >> 5, >> 6563 times 16 db 0 ; realign (introduced by cdef_dirs)564end_perm_w8clip:db 0, 4, 8, 12, 2, 6, 10, 14, 16, 20, 24, 28, 18, 22, 26, 30565 db 32, 36, 40, 44, 34, 38, 42, 46, 48, 52, 56, 60, 50, 54, 58, 62566 db 1, 5, 9, 13, 3, 7, 11, 15, 17, 21, 25, 29, 19, 23, 27, 31567 db 33, 37, 41, 45, 35, 39, 43, 47, 49, 53, 57, 61, 51, 55, 59, 63568end_perm: db 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61569 db 3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63570pri_tap: db 64, 64, 32, 32, 48, 48, 48, 48 ; left-shifted by 4571sec_tap: db 32, 32, 16, 16572pd_268435568: dd 268435568573 574SECTION .text575 576%if WIN64577DECLARE_REG_TMP 5, 6578%else579DECLARE_REG_TMP 8, 5580%endif581 582; lut:583; t0 t1 t2 t3 t4 t5 t6 t7584; T0 T1 T2 T3 T4 T5 T6 T7585; L0 L1 00 01 02 03 04 05586; L2 L3 10 11 12 13 14 15587; L4 L5 20 21 22 23 24 25588; L6 L7 30 31 32 33 34 35589; 4e 4f 40 41 42 43 44 45590; 5e 5f 50 51 52 53 54 55591 592INIT_ZMM avx512icl593cglobal cdef_filter_4x4, 4, 8, 13, dst, stride, left, top, pri, sec, dir, damping, edge594%define base r7-edge_mask595 movq xmm0, [dstq+strideq*0]596 movhps xmm0, [dstq+strideq*1]597 lea r7, [edge_mask]598 movq xmm1, [topq+strideq*0-2]599 movhps xmm1, [topq+strideq*1-2]600 mov r6d, edgem601 vinserti32x4 ym0, ymm0, [leftq], 1602 lea r2, [strideq*3]603 vinserti32x4 ym1, ymm1, [dstq+strideq*2], 1604 mova m5, [base+lut_perm_4x4]605 vinserti32x4 m0, [dstq+r2], 2606 test r6b, 0x08 ; avoid buffer overread607 jz .main608 lea r3, [dstq+strideq*4-4]609 vinserti32x4 m1, [r3+strideq*0], 2610 vinserti32x4 m0, [r3+strideq*1], 3611.main:612 movifnidn prid, prim613 mov t0d, dirm614 mova m3, [base+px_idx]615 mov r3d, dampingm616 vpermi2b m5, m0, m1 ; lut617 vpbroadcastd m0, [base+pd_268435568] ; (1 << 28) + (7 << 4)618 pxor m7, m7619 lea r3, [r7+r3*8] ; gf_shr + (damping - 30) * 8620 vpermb m6, m3, m5 ; px621 cmp r6d, 0x0f622 jne .mask_edges ; mask edges only if required623 test prid, prid624 jz .sec_only625 vpaddd m1, m3, [base+cdef_dirs+(t0+2)*4] {1to16} ; dir626 vpermb m1, m1, m5 ; k0p0 k0p1 k1p0 k1p1627%macro CDEF_FILTER_4x4_PRI 0628 vpcmpub k1, m6, m1, 6 ; px > pN629 psubb m2, m1, m6630 lzcnt r6d, prid631 vpsubb m2{k1}, m6, m1 ; abs(diff)632 vpbroadcastb m4, prid633 and prid, 1634 vgf2p8affineqb m9, m2, [r3+r6*8] {1to8}, 0 ; abs(diff) >> shift635 movifnidn t1d, secm636 vpbroadcastd m10, [base+pri_tap+priq*4]637 vpsubb m10{k1}, m7, m10 ; apply_sign(pri_tap)638 psubusb m4, m9 ; imax(0, pri_strength - (abs(diff) >> shift)))639 pminub m2, m4640 vpdpbusd m0, m2, m10 ; sum641%endmacro642 CDEF_FILTER_4x4_PRI643 test t1d, t1d ; sec644 jz .end_no_clip645 call .sec646.end_clip:647 pminub m4, m6, m1648 pmaxub m1, m6649 pminub m5, m2, m3650 pmaxub m2, m3651 pminub m4, m5652 pmaxub m2, m1653 psrldq m1, m4, 2654 psrldq m3, m2, 2655 pminub m1, m4656 vpcmpw k1, m0, m7, 1657 vpshldd m6, m0, 8658 pmaxub m2, m3659 pslldq m3, m1, 1660 psubw m7, m0661 paddusw m0, m6 ; clip >0xff662 vpsubusw m0{k1}, m6, m7 ; clip <0x00663 pslldq m4, m2, 1664 pminub m1, m3665 pmaxub m2, m4666 pmaxub m0, m1667 pminub m0, m2668 jmp .end669.sec_only:670 movifnidn t1d, secm671 call .sec672.end_no_clip:673 vpshldd m6, m0, 8 ; (px << 8) + ((sum > -8) << 4)674 paddw m0, m6 ; (px << 8) + ((sum + (sum > -8) + 7) << 4)675.end:676 mova xm1, [base+end_perm]677 vpermb m0, m1, m0 ; output in bits 8-15 of each dword678 movd [dstq+strideq*0], xm0679 pextrd [dstq+strideq*1], xm0, 1680 pextrd [dstq+strideq*2], xm0, 2681 pextrd [dstq+r2 ], xm0, 3682 RET683.mask_edges_sec_only:684 movifnidn t1d, secm685 call .mask_edges_sec686 jmp .end_no_clip687ALIGN function_align688.mask_edges:689 vpbroadcastq m8, [base+edge_mask+r6*8]690 test prid, prid691 jz .mask_edges_sec_only692 vpaddd m2, m3, [base+cdef_dirs+(t0+2)*4] {1to16}693 vpshufbitqmb k1, m8, m2 ; index in-range694 mova m1, m6695 vpermb m1{k1}, m2, m5696 CDEF_FILTER_4x4_PRI697 test t1d, t1d698 jz .end_no_clip699 call .mask_edges_sec700 jmp .end_clip701.mask_edges_sec:702 vpaddd m4, m3, [base+cdef_dirs+(t0+4)*4] {1to16}703 vpaddd m9, m3, [base+cdef_dirs+(t0+0)*4] {1to16}704 vpshufbitqmb k1, m8, m4705 mova m2, m6706 vpermb m2{k1}, m4, m5707 vpshufbitqmb k1, m8, m9708 mova m3, m6709 vpermb m3{k1}, m9, m5710 jmp .sec_main711ALIGN function_align712.sec:713 vpaddd m2, m3, [base+cdef_dirs+(t0+4)*4] {1to16} ; dir + 2714 vpaddd m3, [base+cdef_dirs+(t0+0)*4] {1to16} ; dir - 2715 vpermb m2, m2, m5 ; k0s0 k0s1 k1s0 k1s1716 vpermb m3, m3, m5 ; k0s2 k0s3 k1s2 k1s3717.sec_main:718 vpbroadcastd m8, [base+sec_tap]719 vpcmpub k1, m6, m2, 6720 psubb m4, m2, m6721 vpbroadcastb m12, t1d722 lzcnt t1d, t1d723 vpsubb m4{k1}, m6, m2724 vpcmpub k2, m6, m3, 6725 vpbroadcastq m11, [r3+t1*8]726 gf2p8affineqb m10, m4, m11, 0727 psubb m5, m3, m6728 mova m9, m8729 vpsubb m8{k1}, m7, m8730 psubusb m10, m12, m10731 vpsubb m5{k2}, m6, m3732 pminub m4, m10733 vpdpbusd m0, m4, m8734 gf2p8affineqb m11, m5, m11, 0735 vpsubb m9{k2}, m7, m9736 psubusb m12, m11737 pminub m5, m12738 vpdpbusd m0, m5, m9739 ret740 741DECLARE_REG_TMP 2, 7742 743; lut top lut bottom744; t0 t1 t2 t3 t4 t5 t6 t7 L4 L5 20 21 22 23 24 25745; T0 T1 T2 T3 T4 T5 T6 T7 L6 L7 30 31 32 33 34 35746; L0 L1 00 01 02 03 04 05 L8 L9 40 41 42 43 44 45747; L2 L3 10 11 12 13 14 15 La Lb 50 51 52 53 54 55748; L4 L5 20 21 22 23 24 25 Lc Ld 60 61 62 63 64 65749; L6 L7 30 31 32 33 34 35 Le Lf 70 71 72 73 74 75750; L8 L9 40 41 42 43 44 45 8e 8f 80 81 82 83 84 85751; La Lb 50 51 52 53 54 55 9e 9f 90 91 92 93 94 95752 753cglobal cdef_filter_4x8, 4, 9, 22, dst, stride, left, top, \\754 pri, sec, dir, damping, edge755%define base r8-edge_mask756 vpbroadcastd ym21, strided757 mov r6d, edgem758 lea r8, [edge_mask]759 movq xm1, [topq+strideq*0-2]760 pmulld ym21, [base+pd_01234567]761 kxnorb k1, k1, k1762 movq xm2, [topq+strideq*1-2]763 vpgatherdq m0{k1}, [dstq+ym21] ; +0+1 +2+3 +4+5 +6+7764 mova m14, [base+lut_perm_4x8a]765 movu m15, [base+lut_perm_4x8b]766 test r6b, 0x08 ; avoid buffer overread767 jz .main768 lea r7, [dstq+strideq*8-2]769 vinserti32x4 ym1, [r7+strideq*0], 1770 vinserti32x4 ym2, [r7+strideq*1], 1771.main:772 punpcklqdq ym1, ym2773 vinserti32x4 m1, [leftq], 2 ; -2-1 +8+9 left ____774 movifnidn prid, prim775 mov t0d, dirm776 mova m16, [base+px_idx]777 mov r3d, dampingm778 vpermi2b m14, m0, m1 ; lut top779 vpermi2b m15, m0, m1 ; lut bottom780 vpbroadcastd m0, [base+pd_268435568] ; (1 << 28) + (7 << 4)781 pxor m20, m20782 lea r3, [r8+r3*8] ; gf_shr + (damping - 30) * 8783 vpermb m2, m16, m14 ; pxt784 vpermb m3, m16, m15 ; pxb785 mova m1, m0786 cmp r6b, 0x0f787 jne .mask_edges ; mask edges only if required788 test prid, prid789 jz .sec_only790 vpaddd m6, m16, [base+cdef_dirs+(t0+2)*4] {1to16} ; dir791 vpermb m4, m6, m14 ; pNt k0p0 k0p1 k1p0 k1p1792 vpermb m5, m6, m15 ; pNb793%macro CDEF_FILTER_4x8_PRI 0794 vpcmpub k1, m2, m4, 6 ; pxt > pNt795 vpcmpub k2, m3, m5, 6 ; pxb > pNb796 psubb m6, m4, m2797 psubb m7, m5, m3798 lzcnt r6d, prid799 vpsubb m6{k1}, m2, m4 ; abs(diff_top)800 vpsubb m7{k2}, m3, m5 ; abs(diff_bottom)801 vpbroadcastb m13, prid802 vpbroadcastq m9, [r3+r6*8]803 and prid, 1804 vpbroadcastd m11, [base+pri_tap+priq*4]805 vgf2p8affineqb m8, m6, m9, 0 ; abs(dt) >> shift806 vgf2p8affineqb m9, m7, m9, 0 ; abs(db) >> shift807 mova m10, m11808 movifnidn t1d, secm809 vpsubb m10{k1}, m20, m11 ; apply_sign(pri_tap_top)810 vpsubb m11{k2}, m20, m11 ; apply_sign(pri_tap_bottom)811 psubusb m12, m13, m8 ; imax(0, pri_strength - (abs(dt) >> shift)))812 psubusb m13, m13, m9 ; imax(0, pri_strength - (abs(db) >> shift)))813 pminub m6, m12814 pminub m7, m13815 vpdpbusd m0, m6, m10 ; sum top816 vpdpbusd m1, m7, m11 ; sum bottom817%endmacro818 CDEF_FILTER_4x8_PRI819 test t1d, t1d ; sec820 jz .end_no_clip821 call .sec822.end_clip:823 pminub m10, m4, m2824 pminub m12, m6, m8825 pminub m11, m5, m3826 pminub m13, m7, m9827 pmaxub m4, m2828 pmaxub m6, m8829 pmaxub m5, m3830 pmaxub m7, m9831 pminub m10, m12832 pminub m11, m13833 pmaxub m4, m6834 pmaxub m5, m7835 mov r2d, 0xAAAAAAAA836 kmovd k1, r2d837 kxnorb k2, k2, k2 ; hw lw838 vpshrdd m12, m0, m1, 16 ; m1lw m0hw839 vpshrdd m6, m10, m11, 16 ; m11lw m10hw840 vpshrdd m8, m4, m5, 16 ; m5lw m4hw841 vpblendmw m7{k1}, m10, m11 ; m11hw m10lw842 vpblendmw m9{k1}, m4, m5 ; m5hw m4lw843 vpblendmw m4{k1}, m0, m12 ; m1lw m0lw844 vpblendmw m5{k1}, m12, m1 ; m1hw m0hw845 vpshrdd m2, m3, 16846 pminub m6, m7847 pmaxub m8, m9848 mova ym14, [base+end_perm]849 vpcmpw k1, m4, m20, 1850 vpshldw m2, m5, 8851 pslldq m7, m6, 1852 pslldq m9, m8, 1853 psubw m5, m20, m4854 paddusw m0, m4, m2 ; clip >0xff855 pminub m6, m7856 pmaxub m8, m9857 psubusw m0{k1}, m2, m5 ; clip <0x00858 pmaxub m0, m6859 pminub m0, m8860 vpermb m0, m14, m0861 vpscatterdd [dstq+ym21]{k2}, ym0862 RET863.sec_only:864 movifnidn t1d, secm865 call .sec866.end_no_clip:867 mova ym4, [base+end_perm]868 kxnorb k1, k1, k1869 vpshldd m2, m0, 8 ; (px << 8) + ((sum > -8) << 4)870 vpshldd m3, m1, 8871 paddw m0, m2 ; (px << 8) + ((sum + (sum > -8) + 7) << 4)872 paddw m1, m3873 pslld m0, 16874 vpshrdd m0, m1, 16875 vpermb m0, m4, m0 ; output in bits 8-15 of each word876 vpscatterdd [dstq+ym21]{k1}, ym0877 RET878.mask_edges_sec_only:879 movifnidn t1d, secm880 call .mask_edges_sec881 jmp .end_no_clip882ALIGN function_align883.mask_edges:884 mov t1d, r6d885 or r6d, 8 ; top 4x4 has bottom886 or t1d, 4 ; bottom 4x4 has top887 vpbroadcastq m17, [base+edge_mask+r6*8]888 vpbroadcastq m18, [base+edge_mask+t1*8]889 test prid, prid890 jz .mask_edges_sec_only891 vpaddd m6, m16, [base+cdef_dirs+(t0+2)*4] {1to16}892 vpshufbitqmb k1, m17, m6 ; index in-range893 vpshufbitqmb k2, m18, m6894 mova m4, m2895 mova m5, m3896 vpermb m4{k1}, m6, m14897 vpermb m5{k2}, m6, m15898 CDEF_FILTER_4x8_PRI899 test t1d, t1d900 jz .end_no_clip901 call .mask_edges_sec902 jmp .end_clip903.mask_edges_sec:904 vpaddd m10, m16, [base+cdef_dirs+(t0+4)*4] {1to16}905 vpaddd m11, m16, [base+cdef_dirs+(t0+0)*4] {1to16}906 vpshufbitqmb k1, m17, m10907 vpshufbitqmb k2, m18, m10908 vpshufbitqmb k3, m17, m11909 vpshufbitqmb k4, m18, m11910 mova m6, m2911 mova m7, m3912 mova m8, m2913 mova m9, m3914 vpermb m6{k1}, m10, m14915 vpermb m7{k2}, m10, m15916 vpermb m8{k3}, m11, m14917 vpermb m9{k4}, m11, m15918 jmp .sec_main919ALIGN function_align920.sec:921 vpaddd m8, m16, [base+cdef_dirs+(t0+4)*4] {1to16} ; dir + 2922 vpaddd m9, m16, [base+cdef_dirs+(t0+0)*4] {1to16} ; dir - 2923 vpermb m6, m8, m14 ; pNt k0s0 k0s1 k1s0 k1s1924 vpermb m7, m8, m15 ; pNb925 vpermb m8, m9, m14 ; pNt k0s2 k0s3 k1s2 k1s3926 vpermb m9, m9, m15 ; pNb927.sec_main:928 vpbroadcastb m18, t1d929 lzcnt t1d, t1d930 vpcmpub k1, m2, m6, 6931 vpcmpub k2, m3, m7, 6932 vpcmpub k3, m2, m8, 6933 vpcmpub k4, m3, m9, 6934 vpbroadcastq m17, [r3+t1*8]935 psubb m10, m6, m2936 psubb m11, m7, m3937 psubb m12, m8, m2938 psubb m13, m9, m3939 vpsubb m10{k1}, m2, m6 ; abs(dt0)940 vpsubb m11{k2}, m3, m7 ; abs(db0)941 vpsubb m12{k3}, m2, m8 ; abs(dt1)942 vpsubb m13{k4}, m3, m9 ; abs(db1)943 vpbroadcastd m19, [base+sec_tap]944 gf2p8affineqb m14, m10, m17, 0 ; abs(dt0) >> shift945 gf2p8affineqb m15, m11, m17, 0 ; abs(db0) >> shift946 gf2p8affineqb m16, m12, m17, 0 ; abs(dt1) >> shift947 gf2p8affineqb m17, m13, m17, 0 ; abs(db1) >> shift948 psubusb m14, m18, m14 ; imax(0, sec_strength - (abs(dt0) >> shift)))949 psubusb m15, m18, m15 ; imax(0, sec_strength - (abs(db0) >> shift)))950 psubusb m16, m18, m16 ; imax(0, sec_strength - (abs(dt1) >> shift)))951 psubusb m17, m18, m17 ; imax(0, sec_strength - (abs(db1) >> shift)))952 pminub m10, m14953 pminub m11, m15954 pminub m12, m16955 pminub m13, m17956 mova m14, m19957 mova m15, m19958 mova m16, m19959 vpsubb m14{k1}, m20, m19 ; apply_sign(sec_tap_top_0)960 vpsubb m15{k2}, m20, m19 ; apply_sign(sec_tap_bottom_0)961 vpsubb m16{k3}, m20, m19 ; apply_sign(sec_tap_top_1)962 vpsubb m19{k4}, m20, m19 ; apply_sign(sec_tap_bottom_1)963 vpdpbusd m0, m10, m14964 vpdpbusd m1, m11, m15965 vpdpbusd m0, m12, m16966 vpdpbusd m1, m13, m19967 ret968 969; lut tl lut tr970; t0 t1 t2 t3 t4 t5 t6 t7 t6 t7 t8 t9 ta tb tc td971; T0 T1 T2 T3 T4 T5 T6 T7 T6 T7 T8 T9 TA TB TC TD972; L0 L1 00 01 02 03 04 05 04 05 06 07 08 09 0a 0b973; L2 L3 10 11 12 13 14 15 14 15 16 17 18 19 1a 1b974; L4 L5 20 21 22 23 24 25 24 25 26 27 28 29 2a 2b975; L6 L7 30 31 32 33 34 35 34 35 36 37 38 39 3a 3b976; L8 L9 40 41 42 43 44 45 44 45 46 47 48 49 4a 4b977; La Lb 50 51 52 53 54 55 54 55 56 57 58 59 5a 5b978; lut bl lut br979; L4 L5 20 21 22 23 24 25 24 25 26 27 28 29 2a 2b980; L6 L7 30 31 32 33 34 35 34 35 36 37 38 39 3a 3b981; L8 L9 40 41 42 43 44 45 44 45 46 47 48 49 4a 4b982; La Lb 50 51 52 53 54 55 54 55 56 57 58 59 5a 5b983; Lc Ld 60 61 62 63 64 65 64 65 66 67 68 69 6a 6b984; Le Lf 70 71 72 73 74 75 74 75 76 77 78 79 7a 7b985; 8e 8f 80 81 82 83 84 85 84 85 86 87 88 89 8a 8b986; 9e 9f 90 91 92 93 94 95 94 95 96 97 98 99 9a 9b987 988cglobal cdef_filter_8x8, 4, 11, 32, 4*64, dst, stride, left, top, \\989 pri, sec, dir, damping, edge990%define base r8-edge_mask991 mov r6d, edgem992 lea r10, [dstq+strideq*4-2]993 movu xmm0, [topq+strideq*0-2]994 movu xmm1, [dstq+strideq*2-2]995 movu xmm2, [r10 +strideq*2 ]996 lea r8, [edge_mask]997 lea r9, [strideq*3]998 pmovzxwq m10, [leftq-4]999 vinserti32x4 ym0, ymm0, [topq+strideq*1-2], 11000 vinserti32x4 ym1, ymm1, [dstq+r9 -2], 11001 vinserti32x4 ym2, ymm2, [r10 +r9 ], 11002 lea r7, [r10 +strideq*4 ]1003 pmovzxwq m11, [leftq+4]1004 vinserti32x4 m0, [dstq+strideq*0-2], 21005 vinserti32x4 m1, [r10 +strideq*0 ], 21006 mova m12, [base+lut_perm_8x8a]1007 movu m13, [base+lut_perm_8x8b]1008 vinserti32x4 m0, [dstq+strideq*1-2], 31009 vinserti32x4 m1, [r10 +strideq*1 ], 31010 test r6b, 0x08 ; avoid buffer overread1011 jz .main1012 vinserti32x4 m2, [r7 +strideq*0], 21013 vinserti32x4 m2, [r7 +strideq*1], 31014.main:1015 mov t1d, 0x111111001016 mova m14, m121017 mova m15, m131018 kmovd k1, t1d1019 kshiftrd k2, k1, 81020 movifnidn prid, prim1021 mov t0d, dirm1022 mova m30, [base+px_idx]1023 mov r3d, dampingm1024 vpermi2b m12, m0, m1 ; lut tl1025 vpermi2b m14, m1, m2 ; lut bl1026 vpermi2b m13, m0, m1 ; lut tr1027 vpermi2b m15, m1, m2 ; lut br1028 vpblendmw m12{k1}, m12, m101029 vpblendmw m14{k2}, m14, m111030 vpbroadcastd m0, [base+pd_268435568] ; (1 << 28) + (7 << 4)1031 pxor m31, m311032 lea r3, [r8+r3*8] ; gf_shr + (damping - 30) * 81033 vpermb m4, m30, m12 ; pxtl1034 vpermb m5, m30, m13 ; pxtr1035 vpermb m6, m30, m14 ; pxbl1036 vpermb m7, m30, m15 ; pxbr1037 mova m1, m01038 mova m2, m01039 mova m3, m01040 cmp r6b, 0x0f1041 jne .mask_edges ; mask edges only if required1042 test prid, prid1043 jz .sec_only1044 vpaddd m11, m30, [base+cdef_dirs+(t0+2)*4] {1to16} ; dir1045 vpermb m8, m11, m12 ; pNtl k0p0 k0p1 k1p0 k1p11046 vpermb m9, m11, m13 ; pNtr1047 vpermb m10, m11, m14 ; pNbl1048 vpermb m11, m11, m15 ; pNbr1049%macro CDEF_FILTER_8x8_PRI 01050 vpcmpub k1, m4, m8, 6 ; pxtl > pNtl1051 vpcmpub k2, m5, m9, 6 ; pxtr > pNtr1052 vpcmpub k3, m6, m10, 6 ; pxbl > pNbl1053 vpcmpub k4, m7, m11, 6 ; pxbr > pNbr1054 psubb m16, m8, m41055 psubb m17, m9, m51056 psubb m18, m10, m61057 psubb m19, m11, m71058 lzcnt r6d, prid1059 vpsubb m16{k1}, m4, m8 ; abs(diff_tl)1060 vpsubb m17{k2}, m5, m9 ; abs(diff_tr)1061 vpsubb m18{k3}, m6, m10 ; abs(diff_bl)1062 vpsubb m19{k4}, m7, m11 ; abs(diff_br)1063 vpbroadcastq m28, [r3+r6*8]1064 vpbroadcastb m29, prid1065 and prid, 11066 vpbroadcastd m27, [base+pri_tap+priq*4]1067 vgf2p8affineqb m20, m16, m28, 0 ; abs(dtl) >> shift1068 vgf2p8affineqb m21, m17, m28, 0 ; abs(dtr) >> shift1069 vgf2p8affineqb m22, m18, m28, 0 ; abs(dbl) >> shift1070 vgf2p8affineqb m23, m19, m28, 0 ; abs(dbl) >> shift1071 mova m24, m271072 mova m25, m271073 mova m26, m271074 movifnidn t1d, secm1075 vpsubb m24{k1}, m31, m27 ; apply_sign(pri_tap_tl)1076 vpsubb m25{k2}, m31, m27 ; apply_sign(pri_tap_tr)1077 vpsubb m26{k3}, m31, m27 ; apply_sign(pri_tap_tl)1078 vpsubb m27{k4}, m31, m27 ; apply_sign(pri_tap_tr)1079 psubusb m20, m29, m20 ; imax(0, pri_strength - (abs(dtl) >> shift)))1080 psubusb m21, m29, m21 ; imax(0, pri_strength - (abs(dtr) >> shift)))1081 psubusb m22, m29, m22 ; imax(0, pri_strength - (abs(dbl) >> shift)))1082 psubusb m23, m29, m23 ; imax(0, pri_strength - (abs(dbr) >> shift)))1083 pminub m16, m201084 pminub m17, m211085 pminub m18, m221086 pminub m19, m231087 vpdpbusd m0, m16, m24 ; sum tl1088 vpdpbusd m1, m17, m25 ; sum tr1089 vpdpbusd m2, m18, m26 ; sum bl1090 vpdpbusd m3, m19, m27 ; sum br1091%endmacro1092 CDEF_FILTER_8x8_PRI1093 test t1d, t1d ; sec1094 jz .end_no_clip1095 call .sec1096.end_clip:1097 pminub m20, m8, m41098 pminub m24, m12, m161099 pminub m21, m9, m51100 pminub m25, m13, m171101 pminub m22, m10, m61102 pminub m26, m14, m181103 pminub m23, m11, m71104 pminub m27, m15, m191105 pmaxub m8, m41106 pmaxub m12, m161107 pmaxub m9, m51108 pmaxub m13, m171109 pmaxub m10, m61110 pmaxub m14, m181111 pmaxub m11, m71112 pmaxub m15, m191113 pminub m20, m241114 pminub m21, m251115 pminub m22, m261116 pminub m23, m271117 pmaxub m8, m121118 pmaxub m9, m131119 pmaxub m10, m141120 pmaxub m11, m151121 mov r2d, 0xAAAAAAAA1122 kmovd k1, r2d1123 vpshrdd m24, m0, m1, 161124 vpshrdd m25, m2, m3, 161125 vpshrdd m12, m20, m21, 161126 vpshrdd m14, m22, m23, 161127 vpshrdd m16, m8, m9, 161128 vpshrdd m18, m10, m11, 161129 vpblendmw m13{k1}, m20, m211130 vpblendmw m15{k1}, m22, m231131 vpblendmw m17{k1}, m8, m91132 vpblendmw m19{k1}, m10, m111133 vpblendmw m20{k1}, m0, m241134 vpblendmw m21{k1}, m24, m11135 vpblendmw m22{k1}, m2, m251136 vpblendmw m23{k1}, m25, m31137 vpshrdd m4, m5, 161138 vpshrdd m6, m7, 161139 pminub m12, m131140 pminub m14, m151141 pmaxub m16, m171142 pmaxub m18, m191143 mova m8, [base+end_perm_w8clip]1144 vpcmpw k2, m20, m31, 11145 vpcmpw k3, m22, m31, 11146 vpshldw m4, m21, 81147 vpshldw m6, m23, 81148 kunpckdq k1, k1, k11149 kxnorb k4, k4, k41150 vpshrdw m11, m12, m14, 81151 vpshrdw m15, m16, m18, 81152 vpblendmb m13{k1}, m12, m141153 vpblendmb m17{k1}, m16, m181154 psubw m21, m31, m201155 psubw m23, m31, m221156 paddusw m0, m20, m4 ; clip >0xff1157 paddusw m1, m22, m61158 pminub m11, m131159 pmaxub m15, m171160 psubusw m0{k2}, m4, m21 ; clip <0x001161 psubusw m1{k3}, m6, m231162 psrlw m0, 81163 vmovdqu8 m0{k1}, m11164 pmaxub m0, m111165 pminub m0, m151166 vpermb m0, m8, m01167 add r10, 21168 vextracti32x4 xm1, m0, 11169 vextracti32x4 xm2, m0, 21170 vextracti32x4 xm3, m0, 31171 movq [dstq+strideq*0], xm01172 movq [dstq+strideq*2], xm11173 movq [r10 +strideq*0], xm21174 movq [r10 +strideq*2], xm31175 movhps [dstq+strideq*1], xm01176 movhps [dstq+r9 ], xm11177 movhps [r10 +strideq*1], xm21178 movhps [r10 +r9 ], xm31179 RET1180.sec_only:1181 movifnidn t1d, secm1182 call .sec1183.end_no_clip:1184 mova xm8, [base+end_perm]1185 kxnorb k1, k1, k11186 vpshldd m4, m0, 8 ; (px << 8) + ((sum > -8) << 4)1187 vpshldd m5, m1, 81188 vpshldd m6, m2, 81189 vpshldd m7, m3, 81190 paddw m0, m4 ; (px << 8) + ((sum + (sum > -8) + 7) << 4)1191 paddw m1, m51192 paddw m2, m61193 paddw m3, m71194 vpermb m0, m8, m01195 vpermb m1, m8, m11196 vpermb m2, m8, m21197 vpermb m3, m8, m31198 add r10, 21199 punpckldq m4, m0, m11200 punpckhdq m0, m1