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
183bn_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