xref: /minix3/crypto/external/bsd/openssl/lib/libcrypto/arch/sparc/ghash-sparcv9.S (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc.section	".text",#alloc,#execinstr
2*0a6a1f1dSLionel Sambuc
3*0a6a1f1dSLionel Sambuc.align	64
4*0a6a1f1dSLionel Sambucrem_4bit:
5*0a6a1f1dSLionel Sambuc	.long	0,0,471859200,0,943718400,0,610271232,0
6*0a6a1f1dSLionel Sambuc	.long	1887436800,0,1822425088,0,1220542464,0,1423966208,0
7*0a6a1f1dSLionel Sambuc	.long	3774873600,0,4246732800,0,3644850176,0,3311403008,0
8*0a6a1f1dSLionel Sambuc	.long	2441084928,0,2376073216,0,2847932416,0,3051356160,0
9*0a6a1f1dSLionel Sambuc.type	rem_4bit,#object
10*0a6a1f1dSLionel Sambuc.size	rem_4bit,(.-rem_4bit)
11*0a6a1f1dSLionel Sambuc
12*0a6a1f1dSLionel Sambuc.globl	gcm_ghash_4bit
13*0a6a1f1dSLionel Sambuc.align	32
14*0a6a1f1dSLionel Sambucgcm_ghash_4bit:
15*0a6a1f1dSLionel Sambuc	save	%sp,-112,%sp
16*0a6a1f1dSLionel Sambuc	ldub	[%i2+15],%l1
17*0a6a1f1dSLionel Sambuc	ldub	[%i0+15],%l2
18*0a6a1f1dSLionel Sambuc	ldub	[%i0+14],%l3
19*0a6a1f1dSLionel Sambuc	add	%i3,%i2,%i3
20*0a6a1f1dSLionel Sambuc	add	%i1,8,%l6
21*0a6a1f1dSLionel Sambuc
22*0a6a1f1dSLionel Sambuc1:	call	.+8
23*0a6a1f1dSLionel Sambuc	add	%o7,rem_4bit-1b,%l4
24*0a6a1f1dSLionel Sambuc
25*0a6a1f1dSLionel Sambuc.Louter:
26*0a6a1f1dSLionel Sambuc	xor	%l2,%l1,%l1
27*0a6a1f1dSLionel Sambuc	and	%l1,0xf0,%l0
28*0a6a1f1dSLionel Sambuc	and	%l1,0x0f,%l1
29*0a6a1f1dSLionel Sambuc	sll	%l1,4,%l1
30*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l1],%o1
31*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l1],%o0
32*0a6a1f1dSLionel Sambuc
33*0a6a1f1dSLionel Sambuc	ldub	[%i2+14],%l1
34*0a6a1f1dSLionel Sambuc
35*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l0],%o3
36*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
37*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l0],%o2
38*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
39*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
40*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
41*0a6a1f1dSLionel Sambuc	mov	13,%l7
42*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
43*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
44*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
45*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
46*0a6a1f1dSLionel Sambuc
47*0a6a1f1dSLionel Sambuc	xor	%l3,%l1,%l1
48*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
49*0a6a1f1dSLionel Sambuc	and	%l1,0xf0,%l0
50*0a6a1f1dSLionel Sambuc	and	%l1,0x0f,%l1
51*0a6a1f1dSLionel Sambuc	ba	.Lghash_inner
52*0a6a1f1dSLionel Sambuc	sll	%l1,4,%l1
53*0a6a1f1dSLionel Sambuc.align	32
54*0a6a1f1dSLionel Sambuc.Lghash_inner:
55*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l1],%o3
56*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
57*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
58*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l1],%o2
59*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
60*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
61*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
62*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
63*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
64*0a6a1f1dSLionel Sambuc	ldub	[%i2+%l7],%l1
65*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
66*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
67*0a6a1f1dSLionel Sambuc	ldub	[%i0+%l7],%l3
68*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
69*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
70*0a6a1f1dSLionel Sambuc
71*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l0],%o3
72*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
73*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
74*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l0],%o2
75*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
76*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
77*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
78*0a6a1f1dSLionel Sambuc	xor	%l3,%l1,%l1
79*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
80*0a6a1f1dSLionel Sambuc	and	%l1,0xf0,%l0
81*0a6a1f1dSLionel Sambuc	addcc	%l7,-1,%l7
82*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
83*0a6a1f1dSLionel Sambuc	and	%l1,0x0f,%l1
84*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
85*0a6a1f1dSLionel Sambuc	sll	%l1,4,%l1
86*0a6a1f1dSLionel Sambuc	blu	.Lghash_inner
87*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
88*0a6a1f1dSLionel Sambuc
89*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l1],%o3
90*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
91*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
92*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l1],%o2
93*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
94*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
95*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
96*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
97*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
98*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
99*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
100*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
101*0a6a1f1dSLionel Sambuc
102*0a6a1f1dSLionel Sambuc	add	%i2,16,%i2
103*0a6a1f1dSLionel Sambuc	cmp	%i2,%i3
104*0a6a1f1dSLionel Sambuc	be,pn	%icc,.Ldone
105*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
106*0a6a1f1dSLionel Sambuc
107*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l0],%o3
108*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
109*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
110*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l0],%o2
111*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
112*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
113*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
114*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
115*0a6a1f1dSLionel Sambuc	ldub	[%i2+15],%l1
116*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
117*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
118*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
119*0a6a1f1dSLionel Sambuc	stx	%o1,[%i0+8]
120*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
121*0a6a1f1dSLionel Sambuc	stx	%o0,[%i0]
122*0a6a1f1dSLionel Sambuc	srl	%o1,8,%l3
123*0a6a1f1dSLionel Sambuc	and	%o1,0xff,%l2
124*0a6a1f1dSLionel Sambuc	ba	.Louter
125*0a6a1f1dSLionel Sambuc	and	%l3,0xff,%l3
126*0a6a1f1dSLionel Sambuc.align	32
127*0a6a1f1dSLionel Sambuc.Ldone:
128*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l0],%o3
129*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
130*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
131*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l0],%o2
132*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
133*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
134*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
135*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
136*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
137*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
138*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
139*0a6a1f1dSLionel Sambuc	stx	%o1,[%i0+8]
140*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
141*0a6a1f1dSLionel Sambuc	stx	%o0,[%i0]
142*0a6a1f1dSLionel Sambuc
143*0a6a1f1dSLionel Sambuc	ret
144*0a6a1f1dSLionel Sambuc	restore
145*0a6a1f1dSLionel Sambuc.type	gcm_ghash_4bit,#function
146*0a6a1f1dSLionel Sambuc.size	gcm_ghash_4bit,(.-gcm_ghash_4bit)
147*0a6a1f1dSLionel Sambuc.globl	gcm_gmult_4bit
148*0a6a1f1dSLionel Sambuc.align	32
149*0a6a1f1dSLionel Sambucgcm_gmult_4bit:
150*0a6a1f1dSLionel Sambuc	save	%sp,-112,%sp
151*0a6a1f1dSLionel Sambuc	ldub	[%i0+15],%l1
152*0a6a1f1dSLionel Sambuc	add	%i1,8,%l6
153*0a6a1f1dSLionel Sambuc
154*0a6a1f1dSLionel Sambuc1:	call	.+8
155*0a6a1f1dSLionel Sambuc	add	%o7,rem_4bit-1b,%l4
156*0a6a1f1dSLionel Sambuc
157*0a6a1f1dSLionel Sambuc	and	%l1,0xf0,%l0
158*0a6a1f1dSLionel Sambuc	and	%l1,0x0f,%l1
159*0a6a1f1dSLionel Sambuc	sll	%l1,4,%l1
160*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l1],%o1
161*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l1],%o0
162*0a6a1f1dSLionel Sambuc
163*0a6a1f1dSLionel Sambuc	ldub	[%i0+14],%l1
164*0a6a1f1dSLionel Sambuc
165*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l0],%o3
166*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
167*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l0],%o2
168*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
169*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
170*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
171*0a6a1f1dSLionel Sambuc	mov	13,%l7
172*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
173*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
174*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
175*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
176*0a6a1f1dSLionel Sambuc
177*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
178*0a6a1f1dSLionel Sambuc	and	%l1,0xf0,%l0
179*0a6a1f1dSLionel Sambuc	and	%l1,0x0f,%l1
180*0a6a1f1dSLionel Sambuc	ba	.Lgmult_inner
181*0a6a1f1dSLionel Sambuc	sll	%l1,4,%l1
182*0a6a1f1dSLionel Sambuc.align	32
183*0a6a1f1dSLionel Sambuc.Lgmult_inner:
184*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l1],%o3
185*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
186*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
187*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l1],%o2
188*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
189*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
190*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
191*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
192*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
193*0a6a1f1dSLionel Sambuc	ldub	[%i0+%l7],%l1
194*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
195*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
196*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
197*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
198*0a6a1f1dSLionel Sambuc
199*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l0],%o3
200*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
201*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
202*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l0],%o2
203*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
204*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
205*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
206*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
207*0a6a1f1dSLionel Sambuc	and	%l1,0xf0,%l0
208*0a6a1f1dSLionel Sambuc	addcc	%l7,-1,%l7
209*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
210*0a6a1f1dSLionel Sambuc	and	%l1,0x0f,%l1
211*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
212*0a6a1f1dSLionel Sambuc	sll	%l1,4,%l1
213*0a6a1f1dSLionel Sambuc	blu	.Lgmult_inner
214*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
215*0a6a1f1dSLionel Sambuc
216*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l1],%o3
217*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
218*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
219*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l1],%o2
220*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
221*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
222*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
223*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
224*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
225*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
226*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
227*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
228*0a6a1f1dSLionel Sambuc	and	%o1,0xf,%l5
229*0a6a1f1dSLionel Sambuc
230*0a6a1f1dSLionel Sambuc	ldx	[%l6+%l0],%o3
231*0a6a1f1dSLionel Sambuc	sll	%l5,3,%l5
232*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
233*0a6a1f1dSLionel Sambuc	ldx	[%i1+%l0],%o2
234*0a6a1f1dSLionel Sambuc	srlx	%o1,4,%o1
235*0a6a1f1dSLionel Sambuc	ldx	[%l4+%l5],%o4
236*0a6a1f1dSLionel Sambuc	sllx	%o0,60,%o5
237*0a6a1f1dSLionel Sambuc	xor	%o3,%o1,%o1
238*0a6a1f1dSLionel Sambuc	srlx	%o0,4,%o0
239*0a6a1f1dSLionel Sambuc	xor	%o1,%o5,%o1
240*0a6a1f1dSLionel Sambuc	xor	%o2,%o0,%o0
241*0a6a1f1dSLionel Sambuc	stx	%o1,[%i0+8]
242*0a6a1f1dSLionel Sambuc	xor	%o4,%o0,%o0
243*0a6a1f1dSLionel Sambuc	stx	%o0,[%i0]
244*0a6a1f1dSLionel Sambuc
245*0a6a1f1dSLionel Sambuc	ret
246*0a6a1f1dSLionel Sambuc	restore
247*0a6a1f1dSLionel Sambuc.type	gcm_gmult_4bit,#function
248*0a6a1f1dSLionel Sambuc.size	gcm_gmult_4bit,(.-gcm_gmult_4bit)
249*0a6a1f1dSLionel Sambuc.asciz	"GHASH for SPARCv9, CRYPTOGAMS by <appro@openssl.org>"
250*0a6a1f1dSLionel Sambuc.align	4
251