1 .text
2 
3 .type	_mul_1x1,@function
4 .align	16
5 _mul_1x1:
6 	lgr	%r6,%r3
7 	sllg	%r7,%r3,1
8 	sllg	%r8,%r3,2
9 	sllg	%r9,%r3,3
10 
11 	srag	%r3,%r6,63			# broadcast 63rd bit
12 	nihh	%r6,0x1fff
13 	srag	%r12,%r7,63			# broadcast 62nd bit
14 	nihh	%r7,0x3fff
15 	srag	%r13,%r8,63			# broadcast 61st bit
16 	nihh	%r8,0x7fff
17 	ngr	%r3,%r5
18 	ngr	%r12,%r5
19 	ngr	%r13,%r5
20 
21 	lghi	%r0,0
22 	lgr	%r10,%r6
23 	stg	%r0,160(%r15)	# tab[0]=0
24 	xgr	%r10,%r7
25 	stg	%r6,168(%r15)	# tab[1]=a1
26 	 lgr	%r11,%r8
27 	stg	%r7,176(%r15)	# tab[2]=a2
28 	 xgr	%r11,%r9
29 	stg	%r10,184(%r15)	# tab[3]=a1^a2
30 	 xgr	%r6,%r8
31 
32 	stg	%r8,192(%r15)	# tab[4]=a4
33 	xgr	%r7,%r8
34 	stg	%r6,200(%r15)	# tab[5]=a1^a4
35 	xgr	%r10,%r8
36 	stg	%r7,208(%r15)	# tab[6]=a2^a4
37 	 xgr	%r6,%r11
38 	stg	%r10,216(%r15)	# tab[7]=a1^a2^a4
39 	 xgr	%r7,%r11
40 
41 	stg	%r9,224(%r15)	# tab[8]=a8
42 	xgr	%r10,%r11
43 	stg	%r6,232(%r15)	# tab[9]=a1^a8
44 	 xgr	%r6,%r8
45 	stg	%r7,240(%r15)	# tab[10]=a2^a8
46 	 xgr	%r7,%r8
47 	stg	%r10,248(%r15)	# tab[11]=a1^a2^a8
48 
49 	xgr	%r10,%r8
50 	stg	%r11,256(%r15)	# tab[12]=a4^a8
51 	 srlg	%r4,%r3,1
52 	stg	%r6,264(%r15)	# tab[13]=a1^a4^a8
53 	 sllg	%r3,%r3,63
54 	stg	%r7,272(%r15)	# tab[14]=a2^a4^a8
55 	 srlg	%r0,%r12,2
56 	stg	%r10,280(%r15)	# tab[15]=a1^a2^a4^a8
57 
58 	lghi	%r9,120
59 	sllg	%r6,%r12,62
60 	 sllg	%r12,%r5,3
61 	srlg	%r1,%r13,3
62 	 ngr	%r12,%r9
63 	sllg	%r7,%r13,61
64 	 srlg	%r13,%r5,4-3
65 	xgr	%r4,%r0
66 	 ngr	%r13,%r9
67 	xgr	%r3,%r6
68 	xgr	%r4,%r1
69 	xgr	%r3,%r7
70 
71 	xg	%r3,160(%r12,%r15)
72 	srlg	%r12,%r5,8-3
73 	ngr	%r12,%r9
74 	lg	%r1,160(%r13,%r15)
75 	srlg	%r13,%r5,12-3
76 	sllg	%r0,%r1,4
77 	ngr	%r13,%r9
78 	srlg	%r1,%r1,60
79 	xgr	%r3,%r0
80 	xgr	%r4,%r1
81 	lg	%r0,160(%r12,%r15)
82 	srlg	%r12,%r5,16-3
83 	sllg	%r1,%r0,8
84 	ngr	%r12,%r9
85 	srlg	%r0,%r0,56
86 	xgr	%r3,%r1
87 	xgr	%r4,%r0
88 	lg	%r1,160(%r13,%r15)
89 	srlg	%r13,%r5,20-3
90 	sllg	%r0,%r1,12
91 	ngr	%r13,%r9
92 	srlg	%r1,%r1,52
93 	xgr	%r3,%r0
94 	xgr	%r4,%r1
95 	lg	%r0,160(%r12,%r15)
96 	srlg	%r12,%r5,24-3
97 	sllg	%r1,%r0,16
98 	ngr	%r12,%r9
99 	srlg	%r0,%r0,48
100 	xgr	%r3,%r1
101 	xgr	%r4,%r0
102 	lg	%r1,160(%r13,%r15)
103 	srlg	%r13,%r5,28-3
104 	sllg	%r0,%r1,20
105 	ngr	%r13,%r9
106 	srlg	%r1,%r1,44
107 	xgr	%r3,%r0
108 	xgr	%r4,%r1
109 	lg	%r0,160(%r12,%r15)
110 	srlg	%r12,%r5,32-3
111 	sllg	%r1,%r0,24
112 	ngr	%r12,%r9
113 	srlg	%r0,%r0,40
114 	xgr	%r3,%r1
115 	xgr	%r4,%r0
116 	lg	%r1,160(%r13,%r15)
117 	srlg	%r13,%r5,36-3
118 	sllg	%r0,%r1,28
119 	ngr	%r13,%r9
120 	srlg	%r1,%r1,36
121 	xgr	%r3,%r0
122 	xgr	%r4,%r1
123 	lg	%r0,160(%r12,%r15)
124 	srlg	%r12,%r5,40-3
125 	sllg	%r1,%r0,32
126 	ngr	%r12,%r9
127 	srlg	%r0,%r0,32
128 	xgr	%r3,%r1
129 	xgr	%r4,%r0
130 	lg	%r1,160(%r13,%r15)
131 	srlg	%r13,%r5,44-3
132 	sllg	%r0,%r1,36
133 	ngr	%r13,%r9
134 	srlg	%r1,%r1,28
135 	xgr	%r3,%r0
136 	xgr	%r4,%r1
137 	lg	%r0,160(%r12,%r15)
138 	srlg	%r12,%r5,48-3
139 	sllg	%r1,%r0,40
140 	ngr	%r12,%r9
141 	srlg	%r0,%r0,24
142 	xgr	%r3,%r1
143 	xgr	%r4,%r0
144 	lg	%r1,160(%r13,%r15)
145 	srlg	%r13,%r5,52-3
146 	sllg	%r0,%r1,44
147 	ngr	%r13,%r9
148 	srlg	%r1,%r1,20
149 	xgr	%r3,%r0
150 	xgr	%r4,%r1
151 	lg	%r0,160(%r12,%r15)
152 	srlg	%r12,%r5,56-3
153 	sllg	%r1,%r0,48
154 	ngr	%r12,%r9
155 	srlg	%r0,%r0,16
156 	xgr	%r3,%r1
157 	xgr	%r4,%r0
158 	lg	%r1,160(%r13,%r15)
159 	srlg	%r13,%r5,60-3
160 	sllg	%r0,%r1,52
161 	ngr	%r13,%r9
162 	srlg	%r1,%r1,12
163 	xgr	%r3,%r0
164 	xgr	%r4,%r1
165 	lg	%r0,160(%r12,%r15)
166 	sllg	%r1,%r0,56
167 	srlg	%r0,%r0,8
168 	xgr	%r3,%r1
169 	xgr	%r4,%r0
170 
171 	lg	%r1,160(%r13,%r15)
172 	sllg	%r0,%r1,60
173 	srlg	%r1,%r1,4
174 	xgr	%r3,%r0
175 	xgr	%r4,%r1
176 
177 	br	%r14
178 .size	_mul_1x1,.-_mul_1x1
179 
180 .globl	bn_GF2m_mul_2x2
181 .type	bn_GF2m_mul_2x2,@function
182 .align	16
183 bn_GF2m_mul_2x2:
184 	stmg	%r3,%r15,3*8(%r15)
185 
186 	lghi	%r1,-160-128
187 	la	%r0,0(%r15)
188 	la	%r15,0(%r1,%r15)			# alloca
189 	stg	%r0,0(%r15)			# back chain
190 	bras	%r14,_mul_1x1			# a1·b1
191 	stmg	%r3,%r4,16(%r2)
192 
193 	lg	%r3,320(%r15)
194 	lg	%r5,336(%r15)
195 	bras	%r14,_mul_1x1			# a0·b0
196 	stmg	%r3,%r4,0(%r2)
197 
198 	lg	%r3,312(%r15)
199 	lg	%r5,328(%r15)
200 	xg	%r3,320(%r15)
201 	xg	%r5,336(%r15)
202 	bras	%r14,_mul_1x1			# (a0+a1)·(b0+b1)
203 	lmg	%r6,%r9,0(%r2)
204 
205 	xgr	%r3,%r4
206 	xgr	%r4,%r7
207 	xgr	%r3,%r6
208 	xgr	%r4,%r8
209 	xgr	%r3,%r9
210 	xgr	%r4,%r9
211 	xgr	%r3,%r4
212 	stg	%r4,16(%r2)
213 	stg	%r3,8(%r2)
214 	lmg	%r6,%r15,336(%r15)
215 	br	%r14
216 .size	bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2
217 .string	"GF(2^m) Multiplication for s390x, CRYPTOGAMS by <appro@openssl.org>"
218