[BACK]Return to sqr_diagonal.asm CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / sparc64

Annotation of OpenXM_contrib/gmp/mpn/sparc64/sqr_diagonal.asm, Revision 1.1.1.1

1.1       ohara       1: dnl  SPARC v9 64-bit mpn_sqr_diagonal.
                      2:
                      3: dnl  Copyright 2001, 2002 Free Software Foundation, Inc.
                      4:
                      5: dnl  This file is part of the GNU MP Library.
                      6:
                      7: dnl  The GNU MP Library is free software; you can redistribute it and/or modify
                      8: dnl  it under the terms of the GNU Lesser General Public License as published
                      9: dnl  by the Free Software Foundation; either version 2.1 of the License, or (at
                     10: dnl  your option) any later version.
                     11:
                     12: dnl  The GNU MP Library is distributed in the hope that it will be useful, but
                     13: dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     14: dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
                     15: dnl  License for more details.
                     16:
                     17: dnl  You should have received a copy of the GNU Lesser General Public License
                     18: dnl  along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
                     19: dnl  the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
                     20: dnl  MA 02111-1307, USA.
                     21:
                     22: include(`../config.m4')
                     23:
                     24: C This was generated by the Sun C compiler.  It runs at 22 cycles/limb on the
                     25: C UltraSPARC-1/2, three cycles slower than theoretically possible for optimal
                     26: C code using the same algorithm.  For 1-3 limbs, a special loop was generated,
                     27: C which causes performance problems in particular for 2 and 3 limbs.
                     28: C Ultimately, this should be replaced by hand-written code in the same software
                     29: C pipeline style as e.g., addmul_1.asm.
                     30:
                     31: ASM_START()
                     32:        REGISTER(%g2,#scratch)
                     33:        REGISTER(%g3,#scratch)
                     34: PROLOGUE(mpn_sqr_diagonal)
                     35:        save    %sp, -240, %sp
                     36:
                     37:        sethi   %hi(0x1ffc00), %o0
                     38:        sethi   %hi(0x3ffc00), %o1
                     39:        add     %o0, 1023, %o7
                     40:        cmp     %i2, 4
                     41:        add     %o1, 1023, %o4
                     42:        or      %g0, %i1, %g1
                     43:        or      %g0, %i0, %o0
                     44:        bl,pn   %xcc, .Lsmall
                     45:        or      %g0, 0, %g2
                     46:
                     47:        ldx     [%i1], %o1
                     48:        add     %i1, 24, %g1
                     49:        or      %g0, 3, %g2
                     50:        srlx    %o1, 42, %g3
                     51:        stx     %g3, [%sp+2279]
                     52:        and     %o1, %o7, %o2
                     53:        stx     %o2, [%sp+2263]
                     54:        srlx    %o1, 21, %o1
                     55:        ldd     [%sp+2279], %f0
                     56:        and     %o1, %o7, %o1
                     57:        stx     %o1, [%sp+2271]
                     58:        ldx     [%i1+8], %o2
                     59:        fxtod   %f0, %f12
                     60:        srlx    %o2, 21, %o1
                     61:        and     %o2, %o7, %g3
                     62:        ldd     [%sp+2263], %f2
                     63:        fmuld   %f12, %f12, %f10
                     64:        srlx    %o2, 42, %o2
                     65:        ldd     [%sp+2271], %f0
                     66:        and     %o1, %o7, %o1
                     67:        fxtod   %f2, %f8
                     68:        stx     %o2, [%sp+2279]
                     69:        stx     %o1, [%sp+2271]
                     70:        fxtod   %f0, %f0
                     71:        stx     %g3, [%sp+2263]
                     72:        fdtox   %f10, %f14
                     73:        fmuld   %f12, %f8, %f6
                     74:        ldx     [%i1+16], %o2
                     75:        std     %f14, [%sp+2255]
                     76:        fmuld   %f0, %f0, %f2
                     77:        fmuld   %f8, %f8, %f10
                     78:        srlx    %o2, 42, %o1
                     79:        faddd   %f6, %f6, %f6
                     80:        fmuld   %f12, %f0, %f12
                     81:        fmuld   %f0, %f8, %f8
                     82:        ldd     [%sp+2279], %f0
                     83:        ldd     [%sp+2263], %f4
                     84:        fdtox   %f10, %f10
                     85:        std     %f10, [%sp+2239]
                     86:        faddd   %f2, %f6, %f6
                     87:        ldd     [%sp+2271], %f2
                     88:        fdtox   %f12, %f12
                     89:        std     %f12, [%sp+2247]
                     90:        fdtox   %f8, %f8
                     91:        std     %f8, [%sp+2231]
                     92:        fdtox   %f6, %f6
                     93:        std     %f6, [%sp+2223]
                     94:
                     95: .Loop: srlx    %o2, 21, %g3
                     96:        stx     %o1, [%sp+2279]
                     97:        add     %g2, 1, %g2
                     98:        and     %g3, %o7, %o1
                     99:        ldx     [%sp+2255], %g4
                    100:        cmp     %g2, %i2
                    101:        stx     %o1, [%sp+2271]
                    102:        add     %g1, 8, %g1
                    103:        add     %o0, 16, %o0
                    104:        ldx     [%sp+2239], %o1
                    105:        fxtod   %f0, %f10
                    106:        fxtod   %f4, %f14
                    107:        ldx     [%sp+2231], %i0
                    108:        ldx     [%sp+2223], %g5
                    109:        ldx     [%sp+2247], %g3
                    110:        and     %o2, %o7, %o2
                    111:        fxtod   %f2, %f8
                    112:        fmuld   %f10, %f10, %f0
                    113:        stx     %o2, [%sp+2263]
                    114:        fmuld   %f10, %f14, %f6
                    115:        ldx     [%g1-8], %o2
                    116:        fmuld   %f10, %f8, %f12
                    117:        fdtox   %f0, %f2
                    118:        ldd     [%sp+2279], %f0
                    119:        fmuld   %f8, %f8, %f4
                    120:        faddd   %f6, %f6, %f6
                    121:        fmuld   %f14, %f14, %f10
                    122:        std     %f2, [%sp+2255]
                    123:        sllx    %g4, 20, %g4
                    124:        ldd     [%sp+2271], %f2
                    125:        fmuld   %f8, %f14, %f8
                    126:        sllx    %i0, 22, %i1
                    127:        fdtox   %f12, %f12
                    128:        std     %f12, [%sp+2247]
                    129:        sllx    %g5, 42, %i0
                    130:        add     %o1, %i1, %o1
                    131:        faddd   %f4, %f6, %f6
                    132:        ldd     [%sp+2263], %f4
                    133:        add     %o1, %i0, %o1
                    134:        add     %g3, %g4, %g3
                    135:        fdtox   %f10, %f10
                    136:        std     %f10, [%sp+2239]
                    137:        srlx    %o1, 42, %g4
                    138:        and     %g5, %o4, %i0
                    139:        fdtox   %f8, %f8
                    140:        std     %f8, [%sp+2231]
                    141:        srlx    %g5, 22, %g5
                    142:        sub     %g4, %i0, %g4
                    143:        fdtox   %f6, %f6
                    144:        std     %f6, [%sp+2223]
                    145:        srlx    %g4, 63, %g4
                    146:        add     %g3, %g5, %g3
                    147:        add     %g3, %g4, %g3
                    148:        stx     %o1, [%o0-16]
                    149:        srlx    %o2, 42, %o1
                    150:        bl,pt   %xcc, .Loop
                    151:        stx     %g3, [%o0-8]
                    152:
                    153:        stx     %o1, [%sp+2279]
                    154:        srlx    %o2, 21, %o1
                    155:        fxtod   %f0, %f16
                    156:        ldx     [%sp+2223], %g3
                    157:        fxtod   %f4, %f6
                    158:        and     %o2, %o7, %o3
                    159:        stx     %o3, [%sp+2263]
                    160:        fxtod   %f2, %f4
                    161:        and     %o1, %o7, %o1
                    162:        ldx     [%sp+2231], %o2
                    163:        sllx    %g3, 42, %g4
                    164:        fmuld   %f16, %f16, %f14
                    165:        stx     %o1, [%sp+2271]
                    166:        fmuld   %f16, %f6, %f8
                    167:        add     %o0, 48, %o0
                    168:        ldx     [%sp+2239], %o1
                    169:        sllx    %o2, 22, %o2
                    170:        fmuld   %f4, %f4, %f10
                    171:        ldx     [%sp+2255], %o3
                    172:        fdtox   %f14, %f14
                    173:        fmuld   %f4, %f6, %f2
                    174:        std     %f14, [%sp+2255]
                    175:        faddd   %f8, %f8, %f12
                    176:        add     %o1, %o2, %o2
                    177:        fmuld   %f16, %f4, %f4
                    178:        ldd     [%sp+2279], %f0
                    179:        sllx    %o3, 20, %g5
                    180:        add     %o2, %g4, %o2
                    181:        fmuld   %f6, %f6, %f6
                    182:        srlx    %o2, 42, %o3
                    183:        and     %g3, %o4, %g4
                    184:        srlx    %g3, 22, %g3
                    185:        faddd   %f10, %f12, %f16
                    186:        ldd     [%sp+2271], %f12
                    187:        ldd     [%sp+2263], %f8
                    188:        fxtod   %f0, %f0
                    189:        sub     %o3, %g4, %o3
                    190:        ldx     [%sp+2247], %o1
                    191:        srlx    %o3, 63, %o3
                    192:        fdtox   %f2, %f10
                    193:        fxtod   %f8, %f8
                    194:        std     %f10, [%sp+2231]
                    195:        fdtox   %f6, %f6
                    196:        std     %f6, [%sp+2239]
                    197:        add     %o1, %g5, %o1
                    198:        fmuld   %f0, %f0, %f2
                    199:        fdtox   %f16, %f16
                    200:        std     %f16, [%sp+2223]
                    201:        add     %o1, %g3, %o1
                    202:        fdtox   %f4, %f4
                    203:        std     %f4, [%sp+2247]
                    204:        fmuld   %f0, %f8, %f10
                    205:        fxtod   %f12, %f12
                    206:        add     %o1, %o3, %o1
                    207:        stx     %o2, [%o0-48]
                    208:        fmuld   %f8, %f8, %f6
                    209:        stx     %o1, [%o0-40]
                    210:        fdtox   %f2, %f2
                    211:        ldx     [%sp+2231], %o2
                    212:        faddd   %f10, %f10, %f10
                    213:        ldx     [%sp+2223], %g3
                    214:        fmuld   %f12, %f12, %f4
                    215:        fdtox   %f6, %f6
                    216:        ldx     [%sp+2239], %o1
                    217:        sllx    %o2, 22, %o2
                    218:        fmuld   %f12, %f8, %f8
                    219:        sllx    %g3, 42, %g5
                    220:        ldx     [%sp+2255], %o3
                    221:        fmuld   %f0, %f12, %f0
                    222:        add     %o1, %o2, %o2
                    223:        faddd   %f4, %f10, %f4
                    224:        ldx     [%sp+2247], %o1
                    225:        add     %o2, %g5, %o2
                    226:        and     %g3, %o4, %g4
                    227:        fdtox   %f8, %f8
                    228:        sllx    %o3, 20, %g5
                    229:        std     %f8, [%sp+2231]
                    230:        fdtox   %f0, %f0
                    231:        srlx    %o2, 42, %o3
                    232:        add     %o1, %g5, %o1
                    233:        fdtox   %f4, %f4
                    234:        srlx    %g3, 22, %g3
                    235:        sub     %o3, %g4, %o3
                    236:        std     %f6, [%sp+2239]
                    237:        std     %f4, [%sp+2223]
                    238:        srlx    %o3, 63, %o3
                    239:        add     %o1, %g3, %o1
                    240:        std     %f2, [%sp+2255]
                    241:        add     %o1, %o3, %o1
                    242:        std     %f0, [%sp+2247]
                    243:        stx     %o2, [%o0-32]
                    244:        stx     %o1, [%o0-24]
                    245:        ldx     [%sp+2231], %o2
                    246:        ldx     [%sp+2223], %o3
                    247:        ldx     [%sp+2239], %o1
                    248:        sllx    %o2, 22, %o2
                    249:        sllx    %o3, 42, %g5
                    250:        ldx     [%sp+2255], %g4
                    251:        and     %o3, %o4, %g3
                    252:        add     %o1, %o2, %o2
                    253:        ldx     [%sp+2247], %o1
                    254:        add     %o2, %g5, %o2
                    255:        stx     %o2, [%o0-16]
                    256:        sllx    %g4, 20, %g4
                    257:        srlx    %o2, 42, %o2
                    258:        add     %o1, %g4, %o1
                    259:        srlx    %o3, 22, %o3
                    260:        sub     %o2, %g3, %o2
                    261:        srlx    %o2, 63, %o2
                    262:        add     %o1, %o3, %o1
                    263:        add     %o1, %o2, %o1
                    264:        stx     %o1, [%o0-8]
                    265:        ret
                    266:        restore %g0, %g0, %g0
                    267: .Lsmall:
                    268:        ldx     [%g1], %o2
                    269: .Loop0:
                    270:        and     %o2, %o7, %o1
                    271:        stx     %o1, [%sp+2263]
                    272:        add     %g2, 1, %g2
                    273:        srlx    %o2, 21, %o1
                    274:        add     %g1, 8, %g1
                    275:        srlx    %o2, 42, %o2
                    276:        stx     %o2, [%sp+2279]
                    277:        and     %o1, %o7, %o1
                    278:        ldd     [%sp+2263], %f0
                    279:        cmp     %g2, %i2
                    280:        stx     %o1, [%sp+2271]
                    281:        fxtod   %f0, %f6
                    282:        ldd     [%sp+2279], %f0
                    283:        ldd     [%sp+2271], %f4
                    284:        fxtod   %f0, %f2
                    285:        fmuld   %f6, %f6, %f0
                    286:        fxtod   %f4, %f10
                    287:        fmuld   %f2, %f6, %f4
                    288:        fdtox   %f0, %f0
                    289:        std     %f0, [%sp+2239]
                    290:        fmuld   %f10, %f6, %f8
                    291:        fmuld   %f10, %f10, %f0
                    292:        faddd   %f4, %f4, %f6
                    293:        fmuld   %f2, %f2, %f4
                    294:        fdtox   %f8, %f8
                    295:        std     %f8, [%sp+2231]
                    296:        fmuld   %f2, %f10, %f2
                    297:        faddd   %f0, %f6, %f0
                    298:        fdtox   %f4, %f4
                    299:        std     %f4, [%sp+2255]
                    300:        fdtox   %f2, %f2
                    301:        std     %f2, [%sp+2247]
                    302:        fdtox   %f0, %f0
                    303:        std     %f0, [%sp+2223]
                    304:        ldx     [%sp+2239], %o1
                    305:        ldx     [%sp+2255], %g4
                    306:        ldx     [%sp+2231], %o2
                    307:        sllx    %g4, 20, %g4
                    308:        ldx     [%sp+2223], %o3
                    309:        sllx    %o2, 22, %o2
                    310:        sllx    %o3, 42, %g5
                    311:        add     %o1, %o2, %o2
                    312:        ldx     [%sp+2247], %o1
                    313:        add     %o2, %g5, %o2
                    314:        stx     %o2, [%o0]
                    315:        and     %o3, %o4, %g3
                    316:        srlx    %o2, 42, %o2
                    317:        add     %o1, %g4, %o1
                    318:        srlx    %o3, 22, %o3
                    319:        sub     %o2, %g3, %o2
                    320:        srlx    %o2, 63, %o2
                    321:        add     %o1, %o3, %o1
                    322:        add     %o1, %o2, %o1
                    323:        stx     %o1, [%o0+8]
                    324:        add     %o0, 16, %o0
                    325:        bl,a,pt %xcc, .Loop0
                    326:        ldx     [%g1], %o2
                    327:        ret
                    328:        restore %g0, %g0, %g0
                    329: EPILOGUE(mpn_sqr_diagonal)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>