1e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%ifidn __OUTPUT_FORMAT__,obj
2e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleysection	code	use32 class=code align=64
3e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%elifidn __OUTPUT_FORMAT__,win32
4e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%ifdef __YASM_VERSION_ID__
5e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%if __YASM_VERSION_ID__ < 01010000h
6e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%error yasm version 1.1.0 or later needed.
7e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%endif
8e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley; Yasm automatically includes .00 and complains about redefining it.
9e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html
10e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%else
11e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley$@feat.00 equ 1
12e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%endif
13e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleysection	.text	code align=64
14e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%else
15e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleysection	.text	code
16e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley%endif
17e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	64
18e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$_vpaes_consts:
19e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	218628480,235210255,168496130,67568393
20e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	252381056,17041926,33884169,51187212
21e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	252645135,252645135,252645135,252645135
22e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1512730624,3266504856,1377990664,3401244816
23e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	830229760,1275146365,2969422977,3447763452
24e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	3411033600,2979783055,338359620,2782886510
25e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	4209124096,907596821,221174255,1006095553
26e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	191964160,3799684038,3164090317,1589111125
27e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	182528256,1777043520,2877432650,3265356744
28e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1874708224,3503451415,3305285752,363511674
29e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1606117888,3487855781,1093350906,2384367825
30e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	197121,67569157,134941193,202313229
31e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	67569157,134941193,202313229,197121
32e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	134941193,202313229,197121,67569157
33e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	202313229,197121,67569157,134941193
34e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	33619971,100992007,168364043,235736079
35e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	235736079,33619971,100992007,168364043
36e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	168364043,235736079,33619971,100992007
37e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	100992007,168364043,235736079,33619971
38e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	50462976,117835012,185207048,252579084
39e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	252314880,51251460,117574920,184942860
40e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	184682752,252054788,50987272,118359308
41e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	118099200,185467140,251790600,50727180
42e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2946363062,528716217,1300004225,1881839624
43e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1532713819,1532713819,1532713819,1532713819
44e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	3602276352,4288629033,3737020424,4153884961
45e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1354558464,32357713,2958822624,3775749553
46e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1201988352,132424512,1572796698,503232858
47e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2213177600,1597421020,4103937655,675398315
48e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2749646592,4273543773,1511898873,121693092
49e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	3040248576,1103263732,2871565598,1608280554
50e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2236667136,2588920351,482954393,64377734
51e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	3069987328,291237287,2117370568,3650299247
52e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	533321216,3573750986,2572112006,1401264716
53e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1339849704,2721158661,548607111,3445553514
54e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2128193280,3054596040,2183486460,1257083700
55e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	655635200,1165381986,3923443150,2344132524
56e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	190078720,256924420,290342170,357187870
57e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	1610966272,2263057382,4103205268,309794674
58e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2592527872,2233205587,1335446729,3402964816
59e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	3973531904,3225098121,3002836325,1918774430
60e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	3870401024,2102906079,2284471353,4117666579
61e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	617007872,1021508343,366931923,691083277
62e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2528395776,3491914898,2968704004,1613121270
63e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	3445188352,3247741094,844474987,4093578302
64e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	651481088,1190302358,1689581232,574775300
65e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	4289380608,206939853,2555985458,2489840491
66e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2130264064,327674451,3566485037,3349835193
67e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydd	2470714624,316102159,3636825756,3393945945
68e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
69e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
70e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
71e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
72e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	118,101,114,115,105,116,121,41,0
73e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	64
74e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
75e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_preheat:
76e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	ebp,DWORD [esp]
77e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm7,[ebp-48]
78e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm6,[ebp-16]
79e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
80e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
81e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_encrypt_core:
82e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ecx,16
83e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,DWORD [240+edx]
84e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm6
85e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ebp]
86e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pandn	xmm1,xmm0
87e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pand	xmm0,xmm6
88e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm5,[edx]
89e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,208
90e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,[16+ebp]
91e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm5
92e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	psrld	xmm1,4
93e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,16
94e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,193
95e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[192+ebp]
96e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm2
97e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$000enc_entry
98e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
99e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$001enc_loop:
100e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[32+ebp]
101e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,[48+ebp]
102e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
103e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,195
104e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm5
105e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm5,[64+ebp]
106e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
107e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[ecx*1+ebx-64]
108e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,234
109e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[80+ebp]
110e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[ecx*1+ebx]
111e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,211
112e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm0
113e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm5
114e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,193
115e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,16
116e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm2
117e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,220
118e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	ecx,16
119e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm0
120e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,193
121e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ecx,48
122e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	sub	eax,1
123e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm3
124e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$000enc_entry:
125e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm6
126e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm5,[ebp-32]
127e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pandn	xmm1,xmm0
128e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	psrld	xmm1,4
129e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pand	xmm0,xmm6
130e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,232
131e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm7
132e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
133e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
134e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,xmm7
135e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm5
136e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,224
137e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,xmm7
138e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm5
139e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,211
140e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm7
141e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm0
142e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,220
143e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm5,[edx]
144e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm1
145e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jnz	NEAR L$001enc_loop
146e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[96+ebp]
147e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,[112+ebp]
148e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
149e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm5
150e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,195
151e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[64+ecx*1+ebx]
152e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
153e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,193
154e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
155e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
156e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_decrypt_core:
157e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[608+ebp]
158e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,DWORD [240+edx]
159e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm6
160e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ebx-64]
161e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pandn	xmm1,xmm0
162e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ecx,eax
163e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	psrld	xmm1,4
164e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm5,[edx]
165e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	shl	ecx,4
166e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pand	xmm0,xmm6
167e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,208
168e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,[ebx-48]
169e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xor	ecx,48
170e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,193
171e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ecx,48
172e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm5
173e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm5,[176+ebp]
174e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm2
175e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,16
176e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ecx,[ecx*1+ebx-352]
177e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$002dec_entry
178e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
179e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$003dec_loop:
180e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[ebx-32]
181e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[ebx-16]
182e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
183e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,203
184e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
185e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[ebx]
186e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
187e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[16+ebx]
188e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
189e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,197
190e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,203
191e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
192e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[32+ebx]
193e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
194e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[48+ebx]
195e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
196e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,197
197e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,203
198e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
199e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[64+ebx]
200e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
201e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[80+ebx]
202e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
203e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,197
204e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,203
205e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
206e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,16
207e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,58,15,237,12
208e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
209e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	sub	eax,1
210e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$002dec_entry:
211e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm6
212e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ebp-32]
213e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pandn	xmm1,xmm0
214e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pand	xmm0,xmm6
215e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	psrld	xmm1,4
216e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,208
217e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm7
218e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
219e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
220e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,xmm7
221e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm2
222e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,224
223e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm2
224e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,xmm7
225e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,211
226e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm7
227e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm0
228e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,220
229e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[edx]
230e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm1
231e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jnz	NEAR L$003dec_loop
232e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[96+ebx]
233e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
234e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm0
235e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,[112+ebx]
236e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ecx]
237e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,195
238e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
239e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,194
240e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
241e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
242e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_schedule_core:
243e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	ebp,DWORD [esp]
244e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[esi]
245e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[320+ebp]
246e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm0
247e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[ebp]
248e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	[4+esp],xmm2
249e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_transform
250e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm7,xmm0
251e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	test	edi,edi
252e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jnz	NEAR L$004schedule_am_decrypting
253e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[edx],xmm0
254e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$005schedule_go
255e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$004schedule_am_decrypting:
256e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[256+ecx*1+ebp]
257e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
258e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[edx],xmm3
259e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xor	ecx,48
260e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$005schedule_go:
261e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	cmp	eax,192
262e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ja	NEAR L$006schedule_256
263e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	je	NEAR L$007schedule_192
264e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$008schedule_128:
265e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,10
266e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$009loop_schedule_128:
267e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_round
268e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	dec	eax
269e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jz	NEAR L$010schedule_mangle_last
270e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_mangle
271e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$009loop_schedule_128
272e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
273e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$007schedule_192:
274e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[8+esi]
275e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_transform
276e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm6,xmm0
277e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm4
278e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movhlps	xmm6,xmm4
279e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,4
280e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$011loop_schedule_192:
281e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_round
282e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,58,15,198,8
283e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_mangle
284e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_192_smear
285e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_mangle
286e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_round
287e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	dec	eax
288e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jz	NEAR L$010schedule_mangle_last
289e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_mangle
290e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_192_smear
291e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$011loop_schedule_192
292e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
293e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$006schedule_256:
294e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[16+esi]
295e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_transform
296e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,7
297e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$012loop_schedule_256:
298e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_mangle
299e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm6,xmm0
300e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_round
301e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	dec	eax
302e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jz	NEAR L$010schedule_mangle_last
303e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_mangle
304e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pshufd	xmm0,xmm0,255
305e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	[20+esp],xmm7
306e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm7,xmm6
307e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	L$_vpaes_schedule_low_round
308e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm7,[20+esp]
309e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$012loop_schedule_256
310e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
311e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$010schedule_mangle_last:
312e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[384+ebp]
313e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	test	edi,edi
314e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jnz	NEAR L$013schedule_mangle_last_dec
315e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[256+ecx*1+ebp]
316e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,193
317e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[352+ebp]
318e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,32
319e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$013schedule_mangle_last_dec:
320e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,-16
321e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,[336+ebp]
322e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_transform
323e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[edx],xmm0
324e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm0
325e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm1,xmm1
326e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm2
327e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm3
328e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm4
329e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm5,xmm5
330e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm6,xmm6
331e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm7,xmm7
332e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
333e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
334e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_schedule_192_smear:
335e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pshufd	xmm1,xmm6,128
336e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pshufd	xmm0,xmm7,254
337e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm6,xmm1
338e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm1,xmm1
339e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm6,xmm0
340e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,xmm6
341e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movhlps	xmm6,xmm1
342e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
343e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
344e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_schedule_round:
345e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[8+esp]
346e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm1,xmm1
347e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,58,15,202,15
348e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,58,15,210,15
349e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm7,xmm1
350e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pshufd	xmm0,xmm0,255
351e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,58,15,192,1
352e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	[8+esp],xmm2
353e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$_vpaes_schedule_low_round:
354e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm7
355e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pslldq	xmm7,4
356e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm7,xmm1
357e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm7
358e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pslldq	xmm7,8
359e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm7,xmm1
360e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm7,[336+ebp]
361e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[ebp-16]
362e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm5,[ebp-48]
363e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm4
364e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pandn	xmm1,xmm0
365e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	psrld	xmm1,4
366e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pand	xmm0,xmm4
367e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ebp-32]
368e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,208
369e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
370e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm5
371e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
372e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm2
373e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,xmm5
374e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,224
375e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,xmm2
376e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,xmm5
377e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,211
378e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm0
379e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm5
380e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,220
381e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm1
382e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,[32+ebp]
383e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,226
384e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,[48+ebp]
385e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,195
386e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm4
387e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm7
388e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm7,xmm0
389e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
390e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
391e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_schedule_transform:
392e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ebp-16]
393e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm2
394e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pandn	xmm1,xmm0
395e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	psrld	xmm1,4
396e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pand	xmm0,xmm2
397e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ebx]
398e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,208
399e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm0,[16+ebx]
400e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,193
401e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm2
402e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
403e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
404e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley__vpaes_schedule_mangle:
405e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm4,xmm0
406e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm5,[128+ebp]
407e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	test	edi,edi
408e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jnz	NEAR L$014schedule_mangle_dec
409e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,16
410e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm4,[336+ebp]
411e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,229
412e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,xmm4
413e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,229
414e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm4
415e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,229
416e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm4
417e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$015schedule_mangle_both
418e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
419e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$014schedule_mangle_dec:
420e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[ebp-16]
421e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	esi,[416+ebp]
422e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm2
423e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pandn	xmm1,xmm4
424e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	psrld	xmm1,4
425e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pand	xmm4,xmm2
426e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[esi]
427e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,212
428e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,[16+esi]
429e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
430e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm2
431e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,221
432e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[32+esi]
433e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,212
434e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm3
435e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,[48+esi]
436e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
437e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm2
438e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,221
439e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[64+esi]
440e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,212
441e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm3
442e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,[80+esi]
443e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
444e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm2
445e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,221
446e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm2,[96+esi]
447e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,212
448e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm2,xmm3
449e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm3,[112+esi]
450e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
451e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm3,xmm2
452e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	edx,-16
453e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$015schedule_mangle_both:
454e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[256+ecx*1+ebp]
455e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleydb	102,15,56,0,217
456e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	ecx,-16
457e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ecx,48
458e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[edx],xmm3
459e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
460e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyglobal	_vpaes_set_encrypt_key
461e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
462e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley_vpaes_set_encrypt_key:
463e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$_vpaes_set_encrypt_key_begin:
464e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebp
465e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebx
466e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	esi
467e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	edi
468e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esi,DWORD [20+esp]
469e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[esp-56]
470e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,DWORD [24+esp]
471e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ebx,-16
472e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edx,DWORD [28+esp]
473e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xchg	ebx,esp
474e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [48+esp],ebx
475e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ebx,eax
476e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	shr	ebx,5
477e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	ebx,5
478e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [240+edx],ebx
479e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ecx,48
480e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edi,0
481e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebp,[(L$_vpaes_consts+0x30-L$016pic_point)]
482e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_core
483e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$016pic_point:
484e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esp,DWORD [48+esp]
485e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xor	eax,eax
486e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	edi
487e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	esi
488e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebx
489e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebp
490e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
491e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyglobal	_vpaes_set_decrypt_key
492e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
493e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley_vpaes_set_decrypt_key:
494e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$_vpaes_set_decrypt_key_begin:
495e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebp
496e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebx
497e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	esi
498e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	edi
499e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esi,DWORD [20+esp]
500e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[esp-56]
501e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,DWORD [24+esp]
502e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ebx,-16
503e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edx,DWORD [28+esp]
504e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xchg	ebx,esp
505e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [48+esp],ebx
506e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ebx,eax
507e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	shr	ebx,5
508e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	add	ebx,5
509e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [240+edx],ebx
510e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	shl	ebx,4
511e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	edx,[16+ebx*1+edx]
512e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edi,1
513e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ecx,eax
514e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	shr	ecx,1
515e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ecx,32
516e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xor	ecx,32
517e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebp,[(L$_vpaes_consts+0x30-L$017pic_point)]
518e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_schedule_core
519e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$017pic_point:
520e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esp,DWORD [48+esp]
521e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xor	eax,eax
522e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	edi
523e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	esi
524e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebx
525e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebp
526e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
527e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyglobal	_vpaes_encrypt
528e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
529e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley_vpaes_encrypt:
530e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$_vpaes_encrypt_begin:
531e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebp
532e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebx
533e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	esi
534e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	edi
535e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebp,[(L$_vpaes_consts+0x30-L$018pic_point)]
536e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_preheat
537e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$018pic_point:
538e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esi,DWORD [20+esp]
539e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[esp-56]
540e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edi,DWORD [24+esp]
541e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ebx,-16
542e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edx,DWORD [28+esp]
543e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xchg	ebx,esp
544e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [48+esp],ebx
545e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[esi]
546e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_encrypt_core
547e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[edi],xmm0
548e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esp,DWORD [48+esp]
549e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	edi
550e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	esi
551e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebx
552e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebp
553e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
554e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyglobal	_vpaes_decrypt
555e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
556e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley_vpaes_decrypt:
557e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$_vpaes_decrypt_begin:
558e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebp
559e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebx
560e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	esi
561e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	edi
562e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebp,[(L$_vpaes_consts+0x30-L$019pic_point)]
563e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_preheat
564e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$019pic_point:
565e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esi,DWORD [20+esp]
566e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[esp-56]
567e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edi,DWORD [24+esp]
568e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ebx,-16
569e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edx,DWORD [28+esp]
570e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xchg	ebx,esp
571e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [48+esp],ebx
572e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[esi]
573e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_decrypt_core
574e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[edi],xmm0
575e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esp,DWORD [48+esp]
576e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	edi
577e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	esi
578e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebx
579e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebp
580e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
581e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyglobal	_vpaes_cbc_encrypt
582e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
583e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley_vpaes_cbc_encrypt:
584e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$_vpaes_cbc_encrypt_begin:
585e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebp
586e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	ebx
587e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	esi
588e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	push	edi
589e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esi,DWORD [20+esp]
590e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edi,DWORD [24+esp]
591e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	eax,DWORD [28+esp]
592e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edx,DWORD [32+esp]
593e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	sub	eax,16
594e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jc	NEAR L$020cbc_abort
595e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebx,[esp-56]
596e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ebp,DWORD [36+esp]
597e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	and	ebx,-16
598e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ecx,DWORD [40+esp]
599e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	xchg	ebx,esp
600e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm1,[ebp]
601e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	sub	edi,esi
602e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [48+esp],ebx
603e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [esp],edi
604e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [4+esp],edx
605e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	DWORD [8+esp],ebp
606e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edi,eax
607e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	ebp,[(L$_vpaes_consts+0x30-L$021pic_point)]
608e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_preheat
609e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$021pic_point:
610e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	cmp	ecx,0
611e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	je	NEAR L$022cbc_dec_loop
612e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$023cbc_enc_loop
613e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
614e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$023cbc_enc_loop:
615e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[esi]
616e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,xmm1
617e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_encrypt_core
618e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ebx,DWORD [esp]
619e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edx,DWORD [4+esp]
620e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,xmm0
621e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[esi*1+ebx],xmm0
622e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	esi,[16+esi]
623e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	sub	edi,16
624e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jnc	NEAR L$023cbc_enc_loop
625e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jmp	NEAR L$024cbc_done
626e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langleyalign	16
627e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$022cbc_dec_loop:
628e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	xmm0,[esi]
629e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	[16+esp],xmm1
630e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	[32+esp],xmm0
631e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	call	__vpaes_decrypt_core
632e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ebx,DWORD [esp]
633e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	edx,DWORD [4+esp]
634e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pxor	xmm0,[16+esp]
635e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqa	xmm1,[32+esp]
636e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[esi*1+ebx],xmm0
637e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	lea	esi,[16+esi]
638e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	sub	edi,16
639e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	jnc	NEAR L$022cbc_dec_loop
640e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$024cbc_done:
641e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	ebx,DWORD [8+esp]
642e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	mov	esp,DWORD [48+esp]
643e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	movdqu	[ebx],xmm1
644e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam LangleyL$020cbc_abort:
645e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	edi
646e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	esi
647e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebx
648e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	pop	ebp
649e9ada863a7b3e81f5d2b1e3bdd2305da902a87f5Adam Langley	ret
650