CoolFace
Datasetpublic

GSaha567/seq_level_training_data

sourceHugging Faceupdated 8mo agoView on Hugging Face
0likes52downloads
shard_000020.csv71212 linesDownload Raw Back to root
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

Showing the first 1,200 of 71212 lines. Download the file for the rest.