143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.ident "s390x.S, version 1.1" 2221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// ==================================================================== 3221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 4221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// project. 5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// 6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// Rights for redistribution and usage in source and binary forms are 7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// granted according to the OpenSSL license. Warranty of any kind is 8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// disclaimed. 9221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// ==================================================================== 10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 11221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.text 12221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 13221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define zero %r0 14221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 15221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// BN_ULONG bn_mul_add_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5); 16221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_mul_add_words 17221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_mul_add_words,@function 18221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 19221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_mul_add_words: 20221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi zero,0 // zero = 0 21221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r1,0(%r2) // put rp aside 22221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r2,0 // i=0; 23221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ltgfr %r4,%r4 24221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bler %r14 // if (len<=0) return 0; 25221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 26221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r10,48(%r15) 2743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom lghi %r10,3 28221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r8,0 // carry = 0 2943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom nr %r10,%r4 // len%4 3043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom sra %r4,2 // cnt=len/4 3143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom jz .Loop1_madd // carry is incidentally cleared if branch taken 3243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom algr zero,zero // clear carry 33221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 34221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop4_madd: 35221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,0(%r2,%r3) // ap[i] 36221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r5 // *=w 3743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r7,%r8 // +=carry 38221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr %r6,zero 39221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alg %r7,0(%r2,%r1) // +=rp[i] 40221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,0(%r2,%r1) // rp[i]= 41221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r9,8(%r2,%r3) 43221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r8,%r5 4443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r9,%r6 45221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr %r8,zero 46221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alg %r9,8(%r2,%r1) 47221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r9,8(%r2,%r1) 48221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 49221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,16(%r2,%r3) 50221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r5 5143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r7,%r8 52221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr %r6,zero 53221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alg %r7,16(%r2,%r1) 54221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,16(%r2,%r1) 55221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 56221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r9,24(%r2,%r3) 57221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r8,%r5 5843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r9,%r6 59221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr %r8,zero 60221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alg %r9,24(%r2,%r1) 61221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r9,24(%r2,%r1) 62221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 63221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,32(%r2) // i+=4 6443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom brct %r4,.Loop4_madd 65221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 6643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom la %r10,1(%r10) // see if len%4 is zero ... 6743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom brct %r10,.Loop1_madd // without touching condition code:-) 6843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 6943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Lend_madd: 7043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r8,zero // collect carry bit 7143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom lgr %r2,%r8 7243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom lmg %r6,%r10,48(%r15) 7343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom br %r14 74221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop1_madd: 76221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,0(%r2,%r3) // ap[i] 77221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r5 // *=w 7843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r7,%r8 // +=carry 79221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr %r6,zero 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alg %r7,0(%r2,%r1) // +=rp[i] 81221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,0(%r2,%r1) // rp[i]= 82221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 83221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lgr %r8,%r6 84221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,8(%r2) // i++ 8543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom brct %r10,.Loop1_madd 86221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 8743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom j .Lend_madd 88221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_mul_add_words,.-bn_mul_add_words 89221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// BN_ULONG bn_mul_words(BN_ULONG *r2,BN_ULONG *r3,int r4,BN_ULONG r5); 91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_mul_words 92221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_mul_words,@function 93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 94221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_mul_words: 95221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi zero,0 // zero = 0 96221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r1,0(%r2) // put rp aside 97221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r2,0 // i=0; 98221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ltgfr %r4,%r4 99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bler %r14 // if (len<=0) return 0; 100221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 101221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r10,48(%r15) 10243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom lghi %r10,3 103221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r8,0 // carry = 0 10443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom nr %r10,%r4 // len%4 10543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom sra %r4,2 // cnt=len/4 10643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom jz .Loop1_mul // carry is incidentally cleared if branch taken 10743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom algr zero,zero // clear carry 108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 109221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop4_mul: 110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,0(%r2,%r3) // ap[i] 111221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r5 // *=w 11243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r7,%r8 // +=carry 113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,0(%r2,%r1) // rp[i]= 114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r9,8(%r2,%r3) 116221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r8,%r5 11743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r9,%r6 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r9,8(%r2,%r1) 119221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 120221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,16(%r2,%r3) 121221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r5 12243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r7,%r8 123221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,16(%r2,%r1) 124221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 125221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r9,24(%r2,%r3) 126221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r8,%r5 12743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r9,%r6 128221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r9,24(%r2,%r1) 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,32(%r2) // i+=4 13143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom brct %r4,.Loop4_mul 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 13343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom la %r10,1(%r10) // see if len%4 is zero ... 134976a034585c7e8ff9dda5ebe032f399b78887f70Brian Carlstrom brct %r10,.Loop1_mul // without touching condition code:-) 13543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 13643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Lend_mul: 13743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r8,zero // collect carry bit 13843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom lgr %r2,%r8 13943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom lmg %r6,%r10,48(%r15) 14043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom br %r14 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop1_mul: 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,0(%r2,%r3) // ap[i] 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r5 // *=w 14543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom alcgr %r7,%r8 // +=carry 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,0(%r2,%r1) // rp[i]= 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lgr %r8,%r6 149221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,8(%r2) // i++ 15043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom brct %r10,.Loop1_mul 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 15243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom j .Lend_mul 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_mul_words,.-bn_mul_words 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// void bn_sqr_words(BN_ULONG *r2,BN_ULONG *r2,int r4) 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_sqr_words 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_sqr_words,@function 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_sqr_words: 160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ltgfr %r4,%r4 161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bler %r14 162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r7,48(%r15) 164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom srag %r1,%r4,2 // cnt=len/4 165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Loop1_sqr 166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop4_sqr: 168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,0(%r3) 169221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r7 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,0(%r2) 171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r6,8(%r2) 172221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,8(%r3) 174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r7 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,16(%r2) 176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r6,24(%r2) 177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,16(%r3) 179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r7 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,32(%r2) 181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r6,40(%r2) 182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,24(%r3) 184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r7 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,48(%r2) 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r6,56(%r2) 187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r3,32(%r3) 189221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,64(%r2) 190221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r1,.Loop4_sqr 191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r1,3 193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nr %r4,%r1 // cnt=len%4 194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Lend_sqr 195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop1_sqr: 197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,0(%r3) 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r7 199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r7,0(%r2) 200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r6,8(%r2) 201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r3,8(%r3) 203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,16(%r2) 204221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r4,.Loop1_sqr 205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lend_sqr: 207221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lmg %r6,%r7,48(%r15) 208221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_sqr_words,.-bn_sqr_words 210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 211221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// BN_ULONG bn_div_words(BN_ULONG h,BN_ULONG l,BN_ULONG d); 212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_div_words 213221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_div_words,@function 214221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 215221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_div_words: 216221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dlgr %r2,%r4 217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lgr %r2,%r3 218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_div_words,.-bn_div_words 220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// BN_ULONG bn_add_words(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4,int r5); 222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_add_words 223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_add_words,@function 224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_add_words: 226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r1,0(%r2) // put rp aside 227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r2,0 // i=0 228221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ltgfr %r5,%r5 229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bler %r14 // if (len<=0) return 0; 230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r6,48(%r15) 232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r6,3 233221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nr %r6,%r5 // len%4 234221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sra %r5,2 // len/4, use sra because it sets condition code 235221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jz .Loop1_add // carry is incidentally cleared if branch taken 236221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom algr %r2,%r2 // clear carry 237221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 238221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop4_add: 239221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,0(%r2,%r3) 240221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcg %r0,0(%r2,%r4) 241221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,0(%r2,%r1) 242221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,8(%r2,%r3) 243221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcg %r0,8(%r2,%r4) 244221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,8(%r2,%r1) 245221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,16(%r2,%r3) 246221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcg %r0,16(%r2,%r4) 247221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,16(%r2,%r1) 248221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,24(%r2,%r3) 249221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcg %r0,24(%r2,%r4) 250221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,24(%r2,%r1) 251221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 252221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,32(%r2) // i+=4 253221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r5,.Loop4_add 254221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 255221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r6,1(%r6) // see if len%4 is zero ... 256221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r6,.Loop1_add // without touching condition code:-) 257221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 258221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lexit_add: 259221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r2,0 260221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr %r2,%r2 261221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r6,48(%r15) 262221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 263221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 264221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop1_add: 265221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,0(%r2,%r3) 266221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcg %r0,0(%r2,%r4) 267221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,0(%r2,%r1) 268221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 269221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,8(%r2) // i++ 270221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r6,.Loop1_add 271221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 272221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom j .Lexit_add 273221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_add_words,.-bn_add_words 274221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 275221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// BN_ULONG bn_sub_words(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4,int r5); 276221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_sub_words 277221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_sub_words,@function 278221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 279221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_sub_words: 280221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r1,0(%r2) // put rp aside 281221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r2,0 // i=0 282221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ltgfr %r5,%r5 283221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom bler %r14 // if (len<=0) return 0; 284221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 285221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r6,48(%r15) 286221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r6,3 287221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom nr %r6,%r5 // len%4 288221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sra %r5,2 // len/4, use sra because it sets condition code 289221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom jnz .Loop4_sub // borrow is incidentally cleared if branch taken 290221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom slgr %r2,%r2 // clear borrow 291221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 292221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop1_sub: 293221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,0(%r2,%r3) 294221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom slbg %r0,0(%r2,%r4) 295221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,0(%r2,%r1) 296221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 297221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,8(%r2) // i++ 298221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r6,.Loop1_sub 299221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom j .Lexit_sub 300221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 301221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Loop4_sub: 302221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,0(%r2,%r3) 303221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom slbg %r0,0(%r2,%r4) 304221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,0(%r2,%r1) 305221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,8(%r2,%r3) 306221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom slbg %r0,8(%r2,%r4) 307221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,8(%r2,%r1) 308221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,16(%r2,%r3) 309221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom slbg %r0,16(%r2,%r4) 310221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,16(%r2,%r1) 311221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r0,24(%r2,%r3) 312221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom slbg %r0,24(%r2,%r4) 313221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg %r0,24(%r2,%r1) 314221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 315221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r2,32(%r2) // i+=4 316221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r5,.Loop4_sub 317221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 318221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom la %r6,1(%r6) // see if len%4 is zero ... 319221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom brct %r6,.Loop1_sub // without touching condition code:-) 320221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 321221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.Lexit_sub: 322221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi %r2,0 323221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom slbgr %r2,%r2 324221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lcgr %r2,%r2 325221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r6,48(%r15) 326221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 327221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_sub_words,.-bn_sub_words 328221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 329221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define c1 %r1 330221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define c2 %r5 331221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define c3 %r8 332221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 333221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define mul_add_c(ai,bi,c1,c2,c3) \ 334221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,ai*8(%r3); \ 335221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlg %r6,bi*8(%r4); \ 336221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom algr c1,%r7; \ 337221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c2,%r6; \ 338221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c3,zero 339221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 340221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// void bn_mul_comba8(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4); 341221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_mul_comba8 342221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_mul_comba8,@function 343221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 344221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_mul_comba8: 345221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r8,48(%r15) 346221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 347221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 348221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 349221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 350221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi zero,0 351221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 352221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,0,c1,c2,c3); 353221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,0*8(%r2) 354221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 355221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 356221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,1,c2,c3,c1); 357221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,0,c2,c3,c1); 358221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,1*8(%r2) 359221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 360221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 361221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,0,c3,c1,c2); 362221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,1,c3,c1,c2); 363221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,2,c3,c1,c2); 364221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,2*8(%r2) 365221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 366221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 367221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,3,c1,c2,c3); 368221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,2,c1,c2,c3); 369221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,1,c1,c2,c3); 370221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,0,c1,c2,c3); 371221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,3*8(%r2) 372221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 373221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 374221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,0,c2,c3,c1); 375221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,1,c2,c3,c1); 376221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,2,c2,c3,c1); 377221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,3,c2,c3,c1); 378221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,4,c2,c3,c1); 379221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,4*8(%r2) 380221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 381221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 382221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,5,c3,c1,c2); 383221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,4,c3,c1,c2); 384221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,3,c3,c1,c2); 385221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,2,c3,c1,c2); 386221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,1,c3,c1,c2); 387221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,0,c3,c1,c2); 388221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,5*8(%r2) 389221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 390221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 391221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,0,c1,c2,c3); 392221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,1,c1,c2,c3); 393221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,2,c1,c2,c3); 394221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,3,c1,c2,c3); 395221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,4,c1,c2,c3); 396221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,5,c1,c2,c3); 397221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,6,c1,c2,c3); 398221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,6*8(%r2) 399221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 400221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 401221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,7,c2,c3,c1); 402221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,6,c2,c3,c1); 403221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,5,c2,c3,c1); 404221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,4,c2,c3,c1); 405221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,3,c2,c3,c1); 406221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,2,c2,c3,c1); 407221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,1,c2,c3,c1); 408221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,0,c2,c3,c1); 409221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,7*8(%r2) 410221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 411221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 412221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,1,c3,c1,c2); 413221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,2,c3,c1,c2); 414221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,3,c3,c1,c2); 415221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,4,c3,c1,c2); 416221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,5,c3,c1,c2); 417221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,6,c3,c1,c2); 418221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,7,c3,c1,c2); 419221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,8*8(%r2) 420221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 421221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 422221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,7,c1,c2,c3); 423221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,6,c1,c2,c3); 424221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,5,c1,c2,c3); 425221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,4,c1,c2,c3); 426221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,3,c1,c2,c3); 427221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,2,c1,c2,c3); 428221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,9*8(%r2) 429221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 430221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 431221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,3,c2,c3,c1); 432221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,4,c2,c3,c1); 433221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,5,c2,c3,c1); 434221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,6,c2,c3,c1); 435221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,7,c2,c3,c1); 436221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,10*8(%r2) 437221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 438221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 439221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(4,7,c3,c1,c2); 440221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,6,c3,c1,c2); 441221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,5,c3,c1,c2); 442221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,4,c3,c1,c2); 443221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,11*8(%r2) 444221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 445221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 446221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,5,c1,c2,c3); 447221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,6,c1,c2,c3); 448221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(5,7,c1,c2,c3); 449221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,12*8(%r2) 450221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 451221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 452221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 453221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(6,7,c2,c3,c1); 454221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,6,c2,c3,c1); 455221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,13*8(%r2) 456221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 457221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 458221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(7,7,c3,c1,c2); 459221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,14*8(%r2) 460221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,15*8(%r2) 461221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 462221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lmg %r6,%r8,48(%r15) 463221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 464221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_mul_comba8,.-bn_mul_comba8 465221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 466221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// void bn_mul_comba4(BN_ULONG *r2,BN_ULONG *r3,BN_ULONG *r4); 467221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_mul_comba4 468221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_mul_comba4,@function 469221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 470221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_mul_comba4: 471221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r8,48(%r15) 472221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 473221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 474221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 475221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 476221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi zero,0 477221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 478221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,0,c1,c2,c3); 479221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,0*8(%r3) 480221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 481221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 482221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,1,c2,c3,c1); 483221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,0,c2,c3,c1); 484221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,1*8(%r2) 485221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 486221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 487221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,0,c3,c1,c2); 488221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,1,c3,c1,c2); 489221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,2,c3,c1,c2); 490221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,2*8(%r2) 491221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 492221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 493221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(0,3,c1,c2,c3); 494221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,2,c1,c2,c3); 495221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,1,c1,c2,c3); 496221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,0,c1,c2,c3); 497221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,3*8(%r2) 498221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 499221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 500221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,1,c2,c3,c1); 501221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,2,c2,c3,c1); 502221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(1,3,c2,c3,c1); 503221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,4*8(%r2) 504221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 505221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 506221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(2,3,c3,c1,c2); 507221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,2,c3,c1,c2); 508221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,5*8(%r2) 509221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 510221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 511221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mul_add_c(3,3,c1,c2,c3); 512221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,6*8(%r2) 513221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,7*8(%r2) 514221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 515221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r8,48(%r15) 516221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 517221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_mul_comba4,.-bn_mul_comba4 518221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 519221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define sqr_add_c(ai,c1,c2,c3) \ 520221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,ai*8(%r3); \ 521221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlgr %r6,%r7; \ 522221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom algr c1,%r7; \ 523221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c2,%r6; \ 524221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c3,zero 525221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 526221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#define sqr_add_c2(ai,aj,c1,c2,c3) \ 527221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lg %r7,ai*8(%r3); \ 528221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom mlg %r6,aj*8(%r3); \ 529221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom algr c1,%r7; \ 530221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c2,%r6; \ 531221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c3,zero; \ 532221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom algr c1,%r7; \ 533221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c2,%r6; \ 534221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom alcgr c3,zero 535221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 536221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// void bn_sqr_comba8(BN_ULONG *r2,BN_ULONG *r3); 537221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_sqr_comba8 538221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_sqr_comba8,@function 539221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 540221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_sqr_comba8: 541221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r8,48(%r15) 542221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 543221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 544221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 545221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 546221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi zero,0 547221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 548221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(0,c1,c2,c3); 549221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,0*8(%r2) 550221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 551221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 552221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(1,0,c2,c3,c1); 553221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,1*8(%r2) 554221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 555221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 556221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(1,c3,c1,c2); 557221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(2,0,c3,c1,c2); 558221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,2*8(%r2) 559221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 560221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 561221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(3,0,c1,c2,c3); 562221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(2,1,c1,c2,c3); 563221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,3*8(%r2) 564221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 565221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 566221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(2,c2,c3,c1); 567221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(3,1,c2,c3,c1); 568221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(4,0,c2,c3,c1); 569221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,4*8(%r2) 570221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 571221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 572221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(5,0,c3,c1,c2); 573221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(4,1,c3,c1,c2); 574221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(3,2,c3,c1,c2); 575221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,5*8(%r2) 576221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 577221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 578221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(3,c1,c2,c3); 579221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(4,2,c1,c2,c3); 580221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(5,1,c1,c2,c3); 581221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(6,0,c1,c2,c3); 582221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,6*8(%r2) 583221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 584221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 585221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(7,0,c2,c3,c1); 586221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(6,1,c2,c3,c1); 587221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(5,2,c2,c3,c1); 588221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(4,3,c2,c3,c1); 589221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,7*8(%r2) 590221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 591221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 592221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(4,c3,c1,c2); 593221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(5,3,c3,c1,c2); 594221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(6,2,c3,c1,c2); 595221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(7,1,c3,c1,c2); 596221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,8*8(%r2) 597221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 598221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 599221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(7,2,c1,c2,c3); 600221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(6,3,c1,c2,c3); 601221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(5,4,c1,c2,c3); 602221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,9*8(%r2) 603221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 604221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 605221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(5,c2,c3,c1); 606221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(6,4,c2,c3,c1); 607221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(7,3,c2,c3,c1); 608221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,10*8(%r2) 609221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 610221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 611221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(7,4,c3,c1,c2); 612221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(6,5,c3,c1,c2); 613221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,11*8(%r2) 614221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 615221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 616221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(6,c1,c2,c3); 617221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(7,5,c1,c2,c3); 618221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,12*8(%r2) 619221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 620221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 621221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(7,6,c2,c3,c1); 622221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,13*8(%r2) 623221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 624221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 625221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(7,c3,c1,c2); 626221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,14*8(%r2) 627221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,15*8(%r2) 628221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 629221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lmg %r6,%r8,48(%r15) 630221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 631221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_sqr_comba8,.-bn_sqr_comba8 632221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 633221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom// void bn_sqr_comba4(BN_ULONG *r2,BN_ULONG *r3); 634221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.globl bn_sqr_comba4 635221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.type bn_sqr_comba4,@function 636221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 4 637221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrombn_sqr_comba4: 638221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stmg %r6,%r8,48(%r15) 639221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 640221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 641221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 642221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 643221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi zero,0 644221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 645221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(0,c1,c2,c3); 646221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,0*8(%r2) 647221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 648221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 649221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(1,0,c2,c3,c1); 650221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,1*8(%r2) 651221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 652221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 653221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(1,c3,c1,c2); 654221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(2,0,c3,c1,c2); 655221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,2*8(%r2) 656221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 657221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 658221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(3,0,c1,c2,c3); 659221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(2,1,c1,c2,c3); 660221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,3*8(%r2) 661221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c1,0 662221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 663221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(2,c2,c3,c1); 664221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(3,1,c2,c3,c1); 665221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,4*8(%r2) 666221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c2,0 667221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 668221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c2(3,2,c3,c1,c2); 669221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c3,5*8(%r2) 670221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lghi c3,0 671221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 672221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom sqr_add_c(3,c1,c2,c3); 673221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c1,6*8(%r2) 674221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom stg c2,7*8(%r2) 675221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 676221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom lmg %r6,%r8,48(%r15) 677221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom br %r14 678221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.size bn_sqr_comba4,.-bn_sqr_comba4 679