~ubuntu-branches/ubuntu/lucid/openssl/lucid-proposed

« back to all changes in this revision

Viewing changes to crypto/bn/asm/s390x.S

  • Committer: Bazaar Package Importer
  • Author(s): Kurt Roeckx
  • Date: 2009-06-13 18:15:46 UTC
  • mto: (11.1.5 squeeze)
  • mto: This revision was merged to the branch mainline in revision 34.
  • Revision ID: james.westby@ubuntu.com-20090613181546-vbfntai3b009dl1u
Tags: upstream-0.9.8k
ImportĀ upstreamĀ versionĀ 0.9.8k

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
.ident "s390x.S, version 1.0"
 
2
// ====================================================================
 
3
// Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
 
4
// project.
 
5
//
 
6
// Rights for redistribution and usage in source and binary forms are
 
7
// granted according to the OpenSSL license. Warranty of any kind is
 
8
// disclaimed.
 
9
// ====================================================================
 
10
 
 
11
.text
 
12
 
 
13
#define zero    %r0
 
14
 
 
15
// BN_ULONG bn_mul_add_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5);
 
16
.globl  bn_mul_add_words
 
17
.type   bn_mul_add_words,@function
 
18
.align  4
 
19
bn_mul_add_words:
 
20
        lghi    zero,0          // zero = 0
 
21
        la      %r1,0(%r2)      // put rp aside
 
22
        lghi    %r2,0           // i=0;
 
23
        ltgfr   %r4,%r4
 
24
        bler    %r14            // if (len<=0) return 0;
 
25
 
 
26
        stmg    %r6,%r10,48(%r15)
 
27
        lghi    %r8,0           // carry = 0
 
28
        srag    %r10,%r4,2      // cnt=len/4
 
29
        jz      .Loop1_madd
 
30
 
 
31
.Loop4_madd:
 
32
        lg      %r7,0(%r2,%r3)  // ap[i]
 
33
        mlgr    %r6,%r5         // *=w
 
34
        algr    %r7,%r8         // +=carry
 
35
        alcgr   %r6,zero
 
36
        alg     %r7,0(%r2,%r1)  // +=rp[i]
 
37
        alcgr   %r6,zero
 
38
        stg     %r7,0(%r2,%r1)  // rp[i]=
 
39
 
 
40
        lg      %r9,8(%r2,%r3)
 
41
        mlgr    %r8,%r5
 
42
        algr    %r9,%r6
 
43
        alcgr   %r8,zero
 
44
        alg     %r9,8(%r2,%r1)
 
45
        alcgr   %r8,zero
 
46
        stg     %r9,8(%r2,%r1)
 
47
 
 
48
        lg      %r7,16(%r2,%r3)
 
49
        mlgr    %r6,%r5
 
50
        algr    %r7,%r8
 
51
        alcgr   %r6,zero
 
52
        alg     %r7,16(%r2,%r1)
 
53
        alcgr   %r6,zero
 
54
        stg     %r7,16(%r2,%r1)
 
55
 
 
56
        lg      %r9,24(%r2,%r3)
 
57
        mlgr    %r8,%r5
 
58
        algr    %r9,%r6
 
59
        alcgr   %r8,zero
 
60
        alg     %r9,24(%r2,%r1)
 
61
        alcgr   %r8,zero
 
62
        stg     %r9,24(%r2,%r1)
 
63
 
 
64
        la      %r2,32(%r2)     // i+=4
 
65
        brct    %r10,.Loop4_madd
 
66
 
 
67
        lghi    %r10,3
 
68
        nr      %r4,%r10        // cnt=len%4
 
69
        jz      .Lend_madd
 
70
 
 
71
.Loop1_madd:
 
72
        lg      %r7,0(%r2,%r3)  // ap[i]
 
73
        mlgr    %r6,%r5         // *=w
 
74
        algr    %r7,%r8         // +=carry
 
75
        alcgr   %r6,zero
 
76
        alg     %r7,0(%r2,%r1)  // +=rp[i]
 
77
        alcgr   %r6,zero
 
78
        stg     %r7,0(%r2,%r1)  // rp[i]=
 
79
 
 
80
        lgr     %r8,%r6
 
81
        la      %r2,8(%r2)      // i++
 
82
        brct    %r4,.Loop1_madd
 
83
 
 
84
.Lend_madd:
 
85
        lgr     %r2,%r8
 
86
        lmg     %r6,%r10,48(%r15)
 
87
        br      %r14
 
88
.size   bn_mul_add_words,.-bn_mul_add_words
 
89
 
 
90
// BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5);
 
91
.globl  bn_mul_words
 
92
.type   bn_mul_words,@function
 
93
.align  4
 
94
bn_mul_words:
 
95
        lghi    zero,0          // zero = 0
 
96
        la      %r1,0(%r2)      // put rp aside
 
97
        lghi    %r2,0           // i=0;
 
98
        ltgfr   %r4,%r4
 
99
        bler    %r14            // if (len<=0) return 0;
 
100
 
 
101
        stmg    %r6,%r10,48(%r15)
 
102
        lghi    %r8,0           // carry = 0
 
103
        srag    %r10,%r4,2      // cnt=len/4
 
104
        jz      .Loop1_mul
 
105
 
 
106
.Loop4_mul:
 
107
        lg      %r7,0(%r2,%r3)  // ap[i]
 
108
        mlgr    %r6,%r5         // *=w
 
109
        algr    %r7,%r8         // +=carry
 
110
        alcgr   %r6,zero
 
111
        stg     %r7,0(%r2,%r1)  // rp[i]=
 
112
 
 
113
        lg      %r9,8(%r2,%r3)
 
114
        mlgr    %r8,%r5
 
115
        algr    %r9,%r6
 
116
        alcgr   %r8,zero
 
117
        stg     %r9,8(%r2,%r1)
 
118
 
 
119
        lg      %r7,16(%r2,%r3)
 
120
        mlgr    %r6,%r5
 
121
        algr    %r7,%r8
 
122
        alcgr   %r6,zero
 
123
        stg     %r7,16(%r2,%r1)
 
124
 
 
125
        lg      %r9,24(%r2,%r3)
 
126
        mlgr    %r8,%r5
 
127
        algr    %r9,%r6
 
128
        alcgr   %r8,zero
 
129
        stg     %r9,24(%r2,%r1)
 
130
 
 
131
        la      %r2,32(%r2)     // i+=4
 
132
        brct    %r10,.Loop4_mul
 
133
 
 
134
        lghi    %r10,3
 
135
        nr      %r4,%r10        // cnt=len%4
 
136
        jz      .Lend_mul
 
137
 
 
138
.Loop1_mul:
 
139
        lg      %r7,0(%r2,%r3)  // ap[i]
 
140
        mlgr    %r6,%r5         // *=w
 
141
        algr    %r7,%r8         // +=carry
 
142
        alcgr   %r6,zero
 
143
        stg     %r7,0(%r2,%r1)  // rp[i]=
 
144
 
 
145
        lgr     %r8,%r6
 
146
        la      %r2,8(%r2)      // i++
 
147
        brct    %r4,.Loop1_mul
 
148
 
 
149
.Lend_mul:
 
150
        lgr     %r2,%r8
 
151
        lmg     %r6,%r10,48(%r15)
 
152
        br      %r14
 
153
.size   bn_mul_words,.-bn_mul_words
 
154
 
 
155
// void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4)
 
156
.globl  bn_sqr_words
 
157
.type   bn_sqr_words,@function
 
158
.align  4
 
159
bn_sqr_words:
 
160
        ltgfr   %r4,%r4
 
161
        bler    %r14
 
162
 
 
163
        stmg    %r6,%r7,48(%r15)
 
164
        srag    %r1,%r4,2       // cnt=len/4
 
165
        jz      .Loop1_sqr
 
166
 
 
167
.Loop4_sqr:
 
168
        lg      %r7,0(%r3)
 
169
        mlgr    %r6,%r7
 
170
        stg     %r7,0(%r2)
 
171
        stg     %r6,8(%r2)
 
172
 
 
173
        lg      %r7,8(%r3)
 
174
        mlgr    %r6,%r7
 
175
        stg     %r7,16(%r2)
 
176
        stg     %r6,24(%r2)
 
177
 
 
178
        lg      %r7,16(%r3)
 
179
        mlgr    %r6,%r7
 
180
        stg     %r7,32(%r2)
 
181
        stg     %r6,40(%r2)
 
182
 
 
183
        lg      %r7,24(%r3)
 
184
        mlgr    %r6,%r7
 
185
        stg     %r7,48(%r2)
 
186
        stg     %r6,56(%r2)
 
187
 
 
188
        la      %r3,32(%r3)
 
189
        la      %r2,64(%r2)
 
190
        brct    %r1,.Loop4_sqr
 
191
 
 
192
        lghi    %r1,3
 
193
        nr      %r4,%r1         // cnt=len%4
 
194
        jz      .Lend_sqr
 
195
 
 
196
.Loop1_sqr:
 
197
        lg      %r7,0(%r3)
 
198
        mlgr    %r6,%r7
 
199
        stg     %r7,0(%r2)
 
200
        stg     %r6,8(%r2)
 
201
 
 
202
        la      %r3,8(%r3)
 
203
        la      %r2,16(%r2)
 
204
        brct    %r4,.Loop1_sqr
 
205
 
 
206
.Lend_sqr:
 
207
        lmg     %r6,%r7,48(%r15)
 
208
        br      %r14
 
209
.size   bn_sqr_words,.-bn_sqr_words
 
210
 
 
211
// BN_ULONG bn_div_words(BN_ULONG h,BN_ULONG l,BN_ULONG d);
 
212
.globl  bn_div_words
 
213
.type   bn_div_words,@function
 
214
.align  4
 
215
bn_div_words:
 
216
        dlgr    %r2,%r4
 
217
        lgr     %r2,%r3
 
218
        br      %r14
 
219
.size   bn_div_words,.-bn_div_words
 
220
 
 
221
// BN_ULONG bn_add_words(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4,int r5);
 
222
.globl  bn_add_words
 
223
.type   bn_add_words,@function
 
224
.align  4
 
225
bn_add_words:
 
226
        la      %r1,0(%r2)      // put rp aside
 
227
        lghi    %r2,0           // i=0
 
228
        ltgfr   %r5,%r5
 
229
        bler    %r14            // if (len<=0) return 0;
 
230
 
 
231
        stg     %r6,48(%r15)
 
232
        lghi    %r6,3
 
233
        nr      %r6,%r5         // len%4
 
234
        sra     %r5,2           // len/4, use sra because it sets condition code
 
235
        jz      .Loop1_add      // carry is incidentally cleared if branch taken
 
236
        algr    %r2,%r2         // clear carry
 
237
 
 
238
.Loop4_add:
 
239
        lg      %r0,0(%r2,%r3)
 
240
        alcg    %r0,0(%r2,%r4)
 
241
        stg     %r0,0(%r2,%r1)
 
242
        lg      %r0,8(%r2,%r3)
 
243
        alcg    %r0,8(%r2,%r4)
 
244
        stg     %r0,8(%r2,%r1)
 
245
        lg      %r0,16(%r2,%r3)
 
246
        alcg    %r0,16(%r2,%r4)
 
247
        stg     %r0,16(%r2,%r1)
 
248
        lg      %r0,24(%r2,%r3)
 
249
        alcg    %r0,24(%r2,%r4)
 
250
        stg     %r0,24(%r2,%r1)
 
251
 
 
252
        la      %r2,32(%r2)     // i+=4
 
253
        brct    %r5,.Loop4_add
 
254
 
 
255
        la      %r6,1(%r6)      // see if len%4 is zero ...
 
256
        brct    %r6,.Loop1_add  // without touching condition code:-)
 
257
 
 
258
.Lexit_add:
 
259
        lghi    %r2,0
 
260
        alcgr   %r2,%r2
 
261
        lg      %r6,48(%r15)
 
262
        br      %r14
 
263
 
 
264
.Loop1_add:
 
265
        lg      %r0,0(%r2,%r3)
 
266
        alcg    %r0,0(%r2,%r4)
 
267
        stg     %r0,0(%r2,%r1)
 
268
 
 
269
        la      %r2,8(%r2)      // i++
 
270
        brct    %r6,.Loop1_add
 
271
 
 
272
        j       .Lexit_add
 
273
.size   bn_add_words,.-bn_add_words
 
274
 
 
275
// BN_ULONG bn_sub_words(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4,int r5);
 
276
.globl  bn_sub_words
 
277
.type   bn_sub_words,@function
 
278
.align  4
 
279
bn_sub_words:
 
280
        la      %r1,0(%r2)      // put rp aside
 
281
        lghi    %r2,0           // i=0
 
282
        ltgfr   %r5,%r5
 
283
        bler    %r14            // if (len<=0) return 0;
 
284
 
 
285
        stg     %r6,48(%r15)
 
286
        lghi    %r6,3
 
287
        nr      %r6,%r5         // len%4
 
288
        sra     %r5,2           // len/4, use sra because it sets condition code
 
289
        jnz     .Loop4_sub      // borrow is incidentally cleared if branch taken
 
290
        slgr    %r2,%r2         // clear borrow
 
291
 
 
292
.Loop1_sub:
 
293
        lg      %r0,0(%r2,%r3)
 
294
        slbg    %r0,0(%r2,%r4)
 
295
        stg     %r0,0(%r2,%r1)
 
296
 
 
297
        la      %r2,8(%r2)      // i++
 
298
        brct    %r6,.Loop1_sub
 
299
        j       .Lexit_sub
 
300
 
 
301
.Loop4_sub:
 
302
        lg      %r0,0(%r2,%r3)
 
303
        slbg    %r0,0(%r2,%r4)
 
304
        stg     %r0,0(%r2,%r1)
 
305
        lg      %r0,8(%r2,%r3)
 
306
        slbg    %r0,8(%r2,%r4)
 
307
        stg     %r0,8(%r2,%r1)
 
308
        lg      %r0,16(%r2,%r3)
 
309
        slbg    %r0,16(%r2,%r4)
 
310
        stg     %r0,16(%r2,%r1)
 
311
        lg      %r0,24(%r2,%r3)
 
312
        slbg    %r0,24(%r2,%r4)
 
313
        stg     %r0,24(%r2,%r1)
 
314
 
 
315
        la      %r2,32(%r2)     // i+=4
 
316
        brct    %r5,.Loop4_sub
 
317
 
 
318
        la      %r6,1(%r6)      // see if len%4 is zero ...
 
319
        brct    %r6,.Loop1_sub  // without touching condition code:-)
 
320
 
 
321
.Lexit_sub:
 
322
        lghi    %r2,0
 
323
        slbgr   %r2,%r2
 
324
        lcgr    %r2,%r2
 
325
        lg      %r6,48(%r15)
 
326
        br      %r14
 
327
.size   bn_sub_words,.-bn_sub_words
 
328
 
 
329
#define c1      %r1
 
330
#define c2      %r5
 
331
#define c3      %r8
 
332
 
 
333
#define mul_add_c(ai,bi,c1,c2,c3)       \
 
334
        lg      %r7,ai*8(%r3);          \
 
335
        mlg     %r6,bi*8(%r4);          \
 
336
        algr    c1,%r7;                 \
 
337
        alcgr   c2,%r6;                 \
 
338
        alcgr   c3,zero
 
339
 
 
340
// void bn_mul_comba8(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4);
 
341
.globl  bn_mul_comba8
 
342
.type   bn_mul_comba8,@function
 
343
.align  4
 
344
bn_mul_comba8:
 
345
        stmg    %r6,%r8,48(%r15)
 
346
 
 
347
        lghi    c1,0
 
348
        lghi    c2,0
 
349
        lghi    c3,0
 
350
        lghi    zero,0
 
351
 
 
352
        mul_add_c(0,0,c1,c2,c3);
 
353
        stg     c1,0*8(%r2)
 
354
        lghi    c1,0
 
355
 
 
356
        mul_add_c(0,1,c2,c3,c1);
 
357
        mul_add_c(1,0,c2,c3,c1);
 
358
        stg     c2,1*8(%r2)
 
359
        lghi    c2,0
 
360
 
 
361
        mul_add_c(2,0,c3,c1,c2);
 
362
        mul_add_c(1,1,c3,c1,c2);
 
363
        mul_add_c(0,2,c3,c1,c2);
 
364
        stg     c3,2*8(%r2)
 
365
        lghi    c3,0
 
366
 
 
367
        mul_add_c(0,3,c1,c2,c3);
 
368
        mul_add_c(1,2,c1,c2,c3);
 
369
        mul_add_c(2,1,c1,c2,c3);
 
370
        mul_add_c(3,0,c1,c2,c3);
 
371
        stg     c1,3*8(%r2)
 
372
        lghi    c1,0
 
373
 
 
374
        mul_add_c(4,0,c2,c3,c1);
 
375
        mul_add_c(3,1,c2,c3,c1);
 
376
        mul_add_c(2,2,c2,c3,c1);
 
377
        mul_add_c(1,3,c2,c3,c1);
 
378
        mul_add_c(0,4,c2,c3,c1);
 
379
        stg     c2,4*8(%r2)
 
380
        lghi    c2,0
 
381
 
 
382
        mul_add_c(0,5,c3,c1,c2);
 
383
        mul_add_c(1,4,c3,c1,c2);
 
384
        mul_add_c(2,3,c3,c1,c2);
 
385
        mul_add_c(3,2,c3,c1,c2);
 
386
        mul_add_c(4,1,c3,c1,c2);
 
387
        mul_add_c(5,0,c3,c1,c2);
 
388
        stg     c3,5*8(%r2)
 
389
        lghi    c3,0
 
390
 
 
391
        mul_add_c(6,0,c1,c2,c3);
 
392
        mul_add_c(5,1,c1,c2,c3);
 
393
        mul_add_c(4,2,c1,c2,c3);
 
394
        mul_add_c(3,3,c1,c2,c3);
 
395
        mul_add_c(2,4,c1,c2,c3);
 
396
        mul_add_c(1,5,c1,c2,c3);
 
397
        mul_add_c(0,6,c1,c2,c3);
 
398
        stg     c1,6*8(%r2)
 
399
        lghi    c1,0
 
400
 
 
401
        mul_add_c(0,7,c2,c3,c1);
 
402
        mul_add_c(1,6,c2,c3,c1);
 
403
        mul_add_c(2,5,c2,c3,c1);
 
404
        mul_add_c(3,4,c2,c3,c1);
 
405
        mul_add_c(4,3,c2,c3,c1);
 
406
        mul_add_c(5,2,c2,c3,c1);
 
407
        mul_add_c(6,1,c2,c3,c1);
 
408
        mul_add_c(7,0,c2,c3,c1);
 
409
        stg     c2,7*8(%r2)
 
410
        lghi    c2,0
 
411
 
 
412
        mul_add_c(7,1,c3,c1,c2);
 
413
        mul_add_c(6,2,c3,c1,c2);
 
414
        mul_add_c(5,3,c3,c1,c2);
 
415
        mul_add_c(4,4,c3,c1,c2);
 
416
        mul_add_c(3,5,c3,c1,c2);
 
417
        mul_add_c(2,6,c3,c1,c2);
 
418
        mul_add_c(1,7,c3,c1,c2);
 
419
        stg     c3,8*8(%r2)
 
420
        lghi    c3,0
 
421
 
 
422
        mul_add_c(2,7,c1,c2,c3);
 
423
        mul_add_c(3,6,c1,c2,c3);
 
424
        mul_add_c(4,5,c1,c2,c3);
 
425
        mul_add_c(5,4,c1,c2,c3);
 
426
        mul_add_c(6,3,c1,c2,c3);
 
427
        mul_add_c(7,2,c1,c2,c3);
 
428
        stg     c1,9*8(%r2)
 
429
        lghi    c1,0
 
430
 
 
431
        mul_add_c(7,3,c2,c3,c1);
 
432
        mul_add_c(6,4,c2,c3,c1);
 
433
        mul_add_c(5,5,c2,c3,c1);
 
434
        mul_add_c(4,6,c2,c3,c1);
 
435
        mul_add_c(3,7,c2,c3,c1);
 
436
        stg     c2,10*8(%r2)
 
437
        lghi    c2,0
 
438
 
 
439
        mul_add_c(4,7,c3,c1,c2);
 
440
        mul_add_c(5,6,c3,c1,c2);
 
441
        mul_add_c(6,5,c3,c1,c2);
 
442
        mul_add_c(7,4,c3,c1,c2);
 
443
        stg     c3,11*8(%r2)
 
444
        lghi    c3,0
 
445
 
 
446
        mul_add_c(7,5,c1,c2,c3);
 
447
        mul_add_c(6,6,c1,c2,c3);
 
448
        mul_add_c(5,7,c1,c2,c3);
 
449
        stg     c1,12*8(%r2)
 
450
        lghi    c1,0
 
451
 
 
452
 
 
453
        mul_add_c(6,7,c2,c3,c1);
 
454
        mul_add_c(7,6,c2,c3,c1);
 
455
        stg     c2,13*8(%r2)
 
456
        lghi    c2,0
 
457
 
 
458
        mul_add_c(7,7,c3,c1,c2);
 
459
        stg     c3,14*8(%r2)
 
460
        stg     c1,15*8(%r2)
 
461
 
 
462
        lmg     %r6,%r8,48(%r15)
 
463
        br      %r14
 
464
.size   bn_mul_comba8,.-bn_mul_comba8
 
465
 
 
466
// void bn_mul_comba4(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4);
 
467
.globl  bn_mul_comba4
 
468
.type   bn_mul_comba4,@function
 
469
.align  4
 
470
bn_mul_comba4:
 
471
        stmg    %r6,%r8,48(%r15)
 
472
 
 
473
        lghi    c1,0
 
474
        lghi    c2,0
 
475
        lghi    c3,0
 
476
        lghi    zero,0
 
477
 
 
478
        mul_add_c(0,0,c1,c2,c3);
 
479
        stg     c1,0*8(%r3)
 
480
        lghi    c1,0
 
481
 
 
482
        mul_add_c(0,1,c2,c3,c1);
 
483
        mul_add_c(1,0,c2,c3,c1);
 
484
        stg     c2,1*8(%r2)
 
485
        lghi    c2,0
 
486
 
 
487
        mul_add_c(2,0,c3,c1,c2);
 
488
        mul_add_c(1,1,c3,c1,c2);
 
489
        mul_add_c(0,2,c3,c1,c2);
 
490
        stg     c3,2*8(%r2)
 
491
        lghi    c3,0
 
492
 
 
493
        mul_add_c(0,3,c1,c2,c3);
 
494
        mul_add_c(1,2,c1,c2,c3);
 
495
        mul_add_c(2,1,c1,c2,c3);
 
496
        mul_add_c(3,0,c1,c2,c3);
 
497
        stg     c1,3*8(%r2)
 
498
        lghi    c1,0
 
499
 
 
500
        mul_add_c(3,1,c2,c3,c1);
 
501
        mul_add_c(2,2,c2,c3,c1);
 
502
        mul_add_c(1,3,c2,c3,c1);
 
503
        stg     c2,4*8(%r2)
 
504
        lghi    c2,0
 
505
 
 
506
        mul_add_c(2,3,c3,c1,c2);
 
507
        mul_add_c(3,2,c3,c1,c2);
 
508
        stg     c3,5*8(%r2)
 
509
        lghi    c3,0
 
510
 
 
511
        mul_add_c(3,3,c1,c2,c3);
 
512
        stg     c1,6*8(%r2)
 
513
        stg     c2,7*8(%r2)
 
514
 
 
515
        stmg    %r6,%r8,48(%r15)
 
516
        br      %r14
 
517
.size   bn_mul_comba4,.-bn_mul_comba4
 
518
 
 
519
#define sqr_add_c(ai,c1,c2,c3)          \
 
520
        lg      %r7,ai*8(%r3);          \
 
521
        mlgr    %r6,%r7;                \
 
522
        algr    c1,%r7;                 \
 
523
        alcgr   c2,%r6;                 \
 
524
        alcgr   c3,zero
 
525
 
 
526
#define sqr_add_c2(ai,aj,c1,c2,c3)      \
 
527
        lg      %r7,ai*8(%r3);          \
 
528
        mlg     %r6,aj*8(%r3);          \
 
529
        algr    c1,%r7;                 \
 
530
        alcgr   c2,%r6;                 \
 
531
        alcgr   c3,zero;                \
 
532
        algr    c1,%r7;                 \
 
533
        alcgr   c2,%r6;                 \
 
534
        alcgr   c3,zero
 
535
 
 
536
// void bn_sqr_comba8(BN_ULONG *r2,BN_ULONG *r3);
 
537
.globl  bn_sqr_comba8
 
538
.type   bn_sqr_comba8,@function
 
539
.align  4
 
540
bn_sqr_comba8:
 
541
        stmg    %r6,%r8,48(%r15)
 
542
 
 
543
        lghi    c1,0
 
544
        lghi    c2,0
 
545
        lghi    c3,0
 
546
        lghi    zero,0
 
547
 
 
548
        sqr_add_c(0,c1,c2,c3);
 
549
        stg     c1,0*8(%r2)
 
550
        lghi    c1,0
 
551
 
 
552
        sqr_add_c2(1,0,c2,c3,c1);
 
553
        stg     c2,1*8(%r2)
 
554
        lghi    c2,0
 
555
 
 
556
        sqr_add_c(1,c3,c1,c2);
 
557
        sqr_add_c2(2,0,c3,c1,c2);
 
558
        stg     c3,2*8(%r2)
 
559
        lghi    c3,0
 
560
 
 
561
        sqr_add_c2(3,0,c1,c2,c3);
 
562
        sqr_add_c2(2,1,c1,c2,c3);
 
563
        stg     c1,3*8(%r2)
 
564
        lghi    c1,0
 
565
 
 
566
        sqr_add_c(2,c2,c3,c1);
 
567
        sqr_add_c2(3,1,c2,c3,c1);
 
568
        sqr_add_c2(4,0,c2,c3,c1);
 
569
        stg     c2,4*8(%r2)
 
570
        lghi    c2,0
 
571
 
 
572
        sqr_add_c2(5,0,c3,c1,c2);
 
573
        sqr_add_c2(4,1,c3,c1,c2);
 
574
        sqr_add_c2(3,2,c3,c1,c2);
 
575
        stg     c3,5*8(%r2)
 
576
        lghi    c3,0
 
577
 
 
578
        sqr_add_c(3,c1,c2,c3);
 
579
        sqr_add_c2(4,2,c1,c2,c3);
 
580
        sqr_add_c2(5,1,c1,c2,c3);
 
581
        sqr_add_c2(6,0,c1,c2,c3);
 
582
        stg     c1,6*8(%r2)
 
583
        lghi    c1,0
 
584
 
 
585
        sqr_add_c2(7,0,c2,c3,c1);
 
586
        sqr_add_c2(6,1,c2,c3,c1);
 
587
        sqr_add_c2(5,2,c2,c3,c1);
 
588
        sqr_add_c2(4,3,c2,c3,c1);
 
589
        stg     c2,7*8(%r2)
 
590
        lghi    c2,0
 
591
 
 
592
        sqr_add_c(4,c3,c1,c2);
 
593
        sqr_add_c2(5,3,c3,c1,c2);
 
594
        sqr_add_c2(6,2,c3,c1,c2);
 
595
        sqr_add_c2(7,1,c3,c1,c2);
 
596
        stg     c3,8*8(%r2)
 
597
        lghi    c3,0
 
598
 
 
599
        sqr_add_c2(7,2,c1,c2,c3);
 
600
        sqr_add_c2(6,3,c1,c2,c3);
 
601
        sqr_add_c2(5,4,c1,c2,c3);
 
602
        stg     c1,9*8(%r2)
 
603
        lghi    c1,0
 
604
 
 
605
        sqr_add_c(5,c2,c3,c1);
 
606
        sqr_add_c2(6,4,c2,c3,c1);
 
607
        sqr_add_c2(7,3,c2,c3,c1);
 
608
        stg     c2,10*8(%r2)
 
609
        lghi    c2,0
 
610
 
 
611
        sqr_add_c2(7,4,c3,c1,c2);
 
612
        sqr_add_c2(6,5,c3,c1,c2);
 
613
        stg     c3,11*8(%r2)
 
614
        lghi    c3,0
 
615
 
 
616
        sqr_add_c(6,c1,c2,c3);
 
617
        sqr_add_c2(7,5,c1,c2,c3);
 
618
        stg     c1,12*8(%r2)
 
619
        lghi    c1,0
 
620
 
 
621
        sqr_add_c2(7,6,c2,c3,c1);
 
622
        stg     c2,13*8(%r2)
 
623
        lghi    c2,0
 
624
 
 
625
        sqr_add_c(7,c3,c1,c2);
 
626
        stg     c3,14*8(%r2)
 
627
        stg     c1,15*8(%r2)
 
628
 
 
629
        lmg     %r6,%r8,48(%r15)
 
630
        br      %r14
 
631
.size   bn_sqr_comba8,.-bn_sqr_comba8
 
632
 
 
633
// void bn_sqr_comba4(BN_ULONG *r2,BN_ULONG *r3);
 
634
.globl bn_sqr_comba4
 
635
.type   bn_sqr_comba4,@function
 
636
.align  4
 
637
bn_sqr_comba4:
 
638
        stmg    %r6,%r8,48(%r15)
 
639
 
 
640
        lghi    c1,0
 
641
        lghi    c2,0
 
642
        lghi    c3,0
 
643
        lghi    zero,0
 
644
 
 
645
        sqr_add_c(0,c1,c2,c3);
 
646
        stg     c1,0*8(%r2)
 
647
        lghi    c1,0
 
648
 
 
649
        sqr_add_c2(1,0,c2,c3,c1);
 
650
        stg     c2,1*8(%r2)
 
651
        lghi    c2,0
 
652
 
 
653
        sqr_add_c(1,c3,c1,c2);
 
654
        sqr_add_c2(2,0,c3,c1,c2);
 
655
        stg     c3,2*8(%r2)
 
656
        lghi    c3,0
 
657
 
 
658
        sqr_add_c2(3,0,c1,c2,c3);
 
659
        sqr_add_c2(2,1,c1,c2,c3);
 
660
        stg     c1,3*8(%r2)
 
661
        lghi    c1,0
 
662
 
 
663
        sqr_add_c(2,c2,c3,c1);
 
664
        sqr_add_c2(3,1,c2,c3,c1);
 
665
        stg     c2,4*8(%r2)
 
666
        lghi    c2,0
 
667
 
 
668
        sqr_add_c2(3,2,c3,c1,c2);
 
669
        stg     c3,5*8(%r2)
 
670
        lghi    c3,0
 
671
 
 
672
        sqr_add_c(3,c1,c2,c3);
 
673
        stg     c1,6*8(%r2)
 
674
        stg     c2,7*8(%r2)
 
675
 
 
676
        lmg     %r6,%r8,48(%r15)
 
677
        br      %r14
 
678
.size   bn_sqr_comba4,.-bn_sqr_comba4