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