[BACK]Return to level0.S CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari-2.2 / src / kernel / sparcv7

Annotation of OpenXM_contrib/pari-2.2/src/kernel/sparcv7/level0.S, Revision 1.1.1.1

1.1       noro        1: /* $Id: level0.S,v 1.3 2000/11/03 21:00:26 karim Exp $
                      2:
                      3: Copyright (C) 2000  The PARI group.
                      4:
                      5: This file is part of the PARI/GP package.
                      6:
                      7: PARI/GP is free software; you can redistribute it and/or modify it under the
                      8: terms of the GNU General Public License as published by the Free Software
                      9: Foundation. It is distributed in the hope that it will be useful, but WITHOUT
                     10: ANY WARRANTY WHATSOEVER.
                     11:
                     12: Check the License for details. You should have received a copy of it, along
                     13: with the package; see the file 'COPYING'. If not, write to the Free Software
                     14: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
                     15:
                     16: #if defined(NO_UNDERSCORE) || defined(linux)
                     17: #  define C(entrypoint) entrypoint
                     18: #elif defined(sun) || defined(NeXT)
                     19: #  ifdef __STDC__
                     20: #    define C(entrypoint) _##entrypoint
                     21: #  else
                     22: #    define C(entrypoint) _/**/entrypoint
                     23: #  endif
                     24: #endif
                     25: #if defined(sun) || defined(linux)
                     26: #  define GLOBL .global
                     27: #elif defined(NeXT)
                     28: #  define GLOBL .globl
                     29: #endif
                     30:
                     31: #if   defined(sun) || defined(linux)
                     32:         .seg "text"
                     33: #elif defined(NeXT)
                     34: .text
                     35:         .align 2
                     36: #endif
                     37:         GLOBL C(addll),C(subll),C(addllx),C(subllx),C(shiftl),C(shiftlr),C(bfffo)
                     38:         GLOBL C(mulll),C(overflow),C(hiremainder),C(addmul),C(divll)
                     39:
                     40: C(addll): sethi   %hi(C(overflow)),%o3
                     41:         addcc   %o0,%o1,%o0
                     42:         addx    %g0,%g0,%o2
                     43:         retl
                     44:         st      %o2,[%o3+%lo(C(overflow))]
                     45: C(subll): sethi   %hi(C(overflow)),%o3
                     46:         subcc   %o0,%o1,%o0
                     47:         addx    %g0,%g0,%o2
                     48:         retl
                     49:         st      %o2,[%o3+%lo(C(overflow))]
                     50: C(addllx): sethi  %hi(C(overflow)),%o3
                     51:         ld      [%o3+%lo(C(overflow))],%o2
                     52:         subcc   %g0,%o2,%g0
                     53:         addxcc  %o0,%o1,%o0
                     54:         addx    %g0,%g0,%o2
                     55:         retl
                     56:         st      %o2,[%o3+%lo(C(overflow))]
                     57: C(subllx): sethi  %hi(C(overflow)),%o3
                     58:         ld      [%o3+%lo(C(overflow))],%o2
                     59:         subcc   %g0,%o2,%g0
                     60:         subxcc  %o0,%o1,%o0
                     61:         addx    %g0,%g0,%o2
                     62:         retl
                     63:         st      %o2,[%o3+%lo(C(overflow))]
                     64: C(shiftl): sethi  %hi(C(hiremainder)),%o3
                     65:         neg     %o1,%o4
                     66:         srl     %o0,%o4,%o2
                     67:         st      %o2,[%o3+%lo(C(hiremainder))]
                     68:         retl
                     69:         sll     %o0,%o1,%o0
                     70: C(shiftlr): sethi %hi(C(hiremainder)),%o3
                     71:         neg     %o1,%o4
                     72:         sll     %o0,%o4,%o2
                     73:         st      %o2,[%o3+%lo(C(hiremainder))]
                     74:         retl
                     75:         srl     %o0,%o1,%o0
                     76: C(bfffo): sethi   %hi(0xffff0000),%o1
                     77:         andcc   %o1,%o0,%g0
                     78:         bnz,a   1f
                     79:         clr     %o2
                     80:         sll     %o0,16,%o0
                     81:         mov     16,%o2
                     82: 1:      sethi   %hi(0xff000000),%o1
                     83:         andcc   %o1,%o0,%g0
                     84:         bnz     2f
                     85:         sethi   %hi(0xf0000000),%o1
                     86:         sll     %o0,8,%o0
                     87:         add     %o2,8,%o2
                     88: 2:      andcc   %o1,%o0,%g0
                     89:         bnz,a   3f
                     90:         srl     %o0,28,%o0
                     91:         add     %o2,4,%o2
                     92:         srl     %o0,24,%o0
                     93: 3:      set     C(tabshi),%o3
                     94:        sll     %o0,2,%o0
                     95:         ld      [%o3+%o0],%o1
                     96:         retl
                     97:         add     %o2,%o1,%o0
                     98: C(mulll): sethi   %hi(C(hiremainder)),%o3
                     99:         or      %o0,%o1,%o4
                    100:         mov     %o0,%y
                    101:         andncc  %o4,0xfff,%g0
                    102:         be      2f
                    103:         andcc   %g0,%g0,%o4
                    104:         mulscc  %o4,%o1,%o4
                    105:         mulscc  %o4,%o1,%o4
                    106:         mulscc  %o4,%o1,%o4
                    107:         mulscc  %o4,%o1,%o4
                    108:         mulscc  %o4,%o1,%o4
                    109:         mulscc  %o4,%o1,%o4
                    110:         mulscc  %o4,%o1,%o4
                    111:         mulscc  %o4,%o1,%o4
                    112:         mulscc  %o4,%o1,%o4
                    113:         mulscc  %o4,%o1,%o4
                    114:         mulscc  %o4,%o1,%o4
                    115:         mulscc  %o4,%o1,%o4
                    116:         mulscc  %o4,%o1,%o4
                    117:         mulscc  %o4,%o1,%o4
                    118:         mulscc  %o4,%o1,%o4
                    119:         mulscc  %o4,%o1,%o4
                    120:         mulscc  %o4,%o1,%o4
                    121:         mulscc  %o4,%o1,%o4
                    122:         mulscc  %o4,%o1,%o4
                    123:         mulscc  %o4,%o1,%o4
                    124:         mulscc  %o4,%o1,%o4
                    125:         mulscc  %o4,%o1,%o4
                    126:         mulscc  %o4,%o1,%o4
                    127:         mulscc  %o4,%o1,%o4
                    128:         mulscc  %o4,%o1,%o4
                    129:         mulscc  %o4,%o1,%o4
                    130:         mulscc  %o4,%o1,%o4
                    131:         mulscc  %o4,%o1,%o4
                    132:         mulscc  %o4,%o1,%o4
                    133:         mulscc  %o4,%o1,%o4
                    134:         mulscc  %o4,%o1,%o4
                    135:         mulscc  %o4,%o1,%o4
                    136:         mulscc  %o4,%g0,%o4
                    137:         tst     %o1
                    138:         bl,a    1f
                    139:         add     %o4,%o0,%o4
                    140: 1:      st      %o4,[%o3+%lo(C(hiremainder))]
                    141:         retl
                    142:         rd      %y,%o0
                    143: 2:      clr     [%o3+%lo(C(hiremainder))]
                    144:         mulscc  %o4,%o1,%o4
                    145:         mulscc  %o4,%o1,%o4
                    146:         mulscc  %o4,%o1,%o4
                    147:         mulscc  %o4,%o1,%o4
                    148:         mulscc  %o4,%o1,%o4
                    149:         mulscc  %o4,%o1,%o4
                    150:         mulscc  %o4,%o1,%o4
                    151:         mulscc  %o4,%o1,%o4
                    152:         mulscc  %o4,%o1,%o4
                    153:         mulscc  %o4,%o1,%o4
                    154:         mulscc  %o4,%o1,%o4
                    155:         mulscc  %o4,%o1,%o4
                    156:         mulscc  %o4,%g0,%o4
                    157:         rd      %y,%o5
                    158:         sll     %o4,12,%o4
                    159:         srl     %o5,20,%o5
                    160:         retl
                    161:         or      %o5,%o4,%o0
                    162:
                    163: C(addmul): sethi  %hi(C(hiremainder)),%o3
                    164:        ld      [%o3+%lo(C(hiremainder))],%o2
                    165:         or      %o0,%o1,%o4
                    166:         mov     %o0,%y
                    167:         andncc  %o4,0xfff,%g0
                    168:         be      2f
                    169:         andcc   %g0,%g0,%o4
                    170:         mulscc  %o4,%o1,%o4
                    171:         mulscc  %o4,%o1,%o4
                    172:         mulscc  %o4,%o1,%o4
                    173:         mulscc  %o4,%o1,%o4
                    174:         mulscc  %o4,%o1,%o4
                    175:         mulscc  %o4,%o1,%o4
                    176:         mulscc  %o4,%o1,%o4
                    177:         mulscc  %o4,%o1,%o4
                    178:         mulscc  %o4,%o1,%o4
                    179:         mulscc  %o4,%o1,%o4
                    180:         mulscc  %o4,%o1,%o4
                    181:         mulscc  %o4,%o1,%o4
                    182:         mulscc  %o4,%o1,%o4
                    183:         mulscc  %o4,%o1,%o4
                    184:         mulscc  %o4,%o1,%o4
                    185:         mulscc  %o4,%o1,%o4
                    186:         mulscc  %o4,%o1,%o4
                    187:         mulscc  %o4,%o1,%o4
                    188:         mulscc  %o4,%o1,%o4
                    189:         mulscc  %o4,%o1,%o4
                    190:         mulscc  %o4,%o1,%o4
                    191:         mulscc  %o4,%o1,%o4
                    192:         mulscc  %o4,%o1,%o4
                    193:         mulscc  %o4,%o1,%o4
                    194:         mulscc  %o4,%o1,%o4
                    195:         mulscc  %o4,%o1,%o4
                    196:         mulscc  %o4,%o1,%o4
                    197:         mulscc  %o4,%o1,%o4
                    198:         mulscc  %o4,%o1,%o4
                    199:         mulscc  %o4,%o1,%o4
                    200:         mulscc  %o4,%o1,%o4
                    201:         mulscc  %o4,%o1,%o4
                    202:         mulscc  %o4,%g0,%o4
                    203:         tst     %o1
                    204:         bl,a    1f
                    205:         add     %o4,%o0,%o4
                    206: 1:     rd      %y,%o0
                    207:         addcc   %o0,%o2,%o0
                    208:         addx    %g0,%o4,%o4
                    209:         retl
                    210:        st      %o4,[%o3+%lo(C(hiremainder))]
                    211: 2:      mulscc  %o4,%o1,%o4
                    212:         mulscc  %o4,%o1,%o4
                    213:         mulscc  %o4,%o1,%o4
                    214:         mulscc  %o4,%o1,%o4
                    215:         mulscc  %o4,%o1,%o4
                    216:         mulscc  %o4,%o1,%o4
                    217:         mulscc  %o4,%o1,%o4
                    218:         mulscc  %o4,%o1,%o4
                    219:         mulscc  %o4,%o1,%o4
                    220:         mulscc  %o4,%o1,%o4
                    221:         mulscc  %o4,%o1,%o4
                    222:         mulscc  %o4,%o1,%o4
                    223:         mulscc  %o4,%g0,%o4
                    224:         rd      %y,%o5
                    225:         sll     %o4,12,%o4
                    226:         srl     %o5,20,%o5
                    227:         or      %o5,%o4,%o0
                    228:         addcc   %o0,%o2,%o0
                    229:         addx    %g0,%g0,%o4
                    230:        retl
                    231:        st      %o4,[%o3+%lo(C(hiremainder))]
                    232:
                    233: #define        SS0(label) \
                    234:        addx    %o2,%o2,%o2;\
                    235:        subcc   %o2,%o1,%o3;\
                    236:        bcc     label;\
                    237:        addxcc  %o0,%o0,%o0
                    238:
                    239: #define        SS1(label) \
                    240:        addx    %o3,%o3,%o3;\
                    241:        subcc   %o3,%o1,%o2;\
                    242:        bcc     label;\
                    243:        addxcc  %o0,%o0,%o0
                    244:
                    245: C(divll): sethi  %hi(C(hiremainder)),%o4
                    246:        ld      [%o4+%lo(C(hiremainder))],%o2
                    247:        subcc   %o2,%o1,%g0
                    248:        blu     1f
                    249:        addcc   %o1,%o1,%g0
                    250:        mov     0x2f,%o0
                    251:        call    C(pari_err),1
                    252:        nop
                    253: 1:     bcc     Lsmalldiv
                    254:        andcc   %o1,1,%g0
                    255:        be      Levendiv
                    256:        srl     %o1,1,%o1
                    257:        add     %o1,1,%o1
                    258:        subcc   %o2,%o1,%o3
                    259:        bcc     Lb01
                    260:        addxcc  %o0,%o0,%o0
                    261: La01:  SS0(Lb02)
                    262: La02:  SS0(Lb03)
                    263: La03:  SS0(Lb04)
                    264: La04:  SS0(Lb05)
                    265: La05:  SS0(Lb06)
                    266: La06:  SS0(Lb07)
                    267: La07:  SS0(Lb08)
                    268: La08:  SS0(Lb09)
                    269: La09:  SS0(Lb10)
                    270: La10:  SS0(Lb11)
                    271: La11:  SS0(Lb12)
                    272: La12:  SS0(Lb13)
                    273: La13:  SS0(Lb14)
                    274: La14:  SS0(Lb15)
                    275: La15:  SS0(Lb16)
                    276: La16:  SS0(Lb17)
                    277: La17:  SS0(Lb18)
                    278: La18:  SS0(Lb19)
                    279: La19:  SS0(Lb20)
                    280: La20:  SS0(Lb21)
                    281: La21:  SS0(Lb22)
                    282: La22:  SS0(Lb23)
                    283: La23:  SS0(Lb24)
                    284: La24:  SS0(Lb25)
                    285: La25:  SS0(Lb26)
                    286: La26:  SS0(Lb27)
                    287: La27:  SS0(Lb28)
                    288: La28:  SS0(Lb29)
                    289: La29:  SS0(Lb30)
                    290: La30:  SS0(Lb31)
                    291: La31:  SS0(Lb32)
                    292: La32:  addx    %o2,%o2,%o2
                    293:        xor     %o0,-1,%o0
                    294:        add     %o1,%o1,%o1
                    295:        sub     %o1,1,%o1
                    296:        addcc   %o0,%o2,%o2
                    297:        bcc     1f
                    298:        subcc   %o2,%o1,%o3
                    299:        subcc   %o3,%o1,%o2
                    300:        bcs     2f
                    301:        add     %o0,1,%o0
                    302:        add     %o0,1,%o0
                    303: 3:     retl
                    304:        st      %o2,[%o4+%lo(C(hiremainder))]
                    305: 1:     bcs     3b
                    306:        nop
                    307:        add     %o0,1,%o0
                    308: 2:     retl
                    309:        st      %o3,[%o4+%lo(C(hiremainder))]
                    310:
                    311: Lb01:  SS1(La02)
                    312: Lb02:  SS1(La03)
                    313: Lb03:  SS1(La04)
                    314: Lb04:  SS1(La05)
                    315: Lb05:  SS1(La06)
                    316: Lb06:  SS1(La07)
                    317: Lb07:  SS1(La08)
                    318: Lb08:  SS1(La09)
                    319: Lb09:  SS1(La10)
                    320: Lb10:  SS1(La11)
                    321: Lb11:  SS1(La12)
                    322: Lb12:  SS1(La13)
                    323: Lb13:  SS1(La14)
                    324: Lb14:  SS1(La15)
                    325: Lb15:  SS1(La16)
                    326: Lb16:  SS1(La17)
                    327: Lb17:  SS1(La18)
                    328: Lb18:  SS1(La19)
                    329: Lb19:  SS1(La20)
                    330: Lb20:  SS1(La21)
                    331: Lb21:  SS1(La22)
                    332: Lb22:  SS1(La23)
                    333: Lb23:  SS1(La24)
                    334: Lb24:  SS1(La25)
                    335: Lb25:  SS1(La26)
                    336: Lb26:  SS1(La27)
                    337: Lb27:  SS1(La28)
                    338: Lb28:  SS1(La29)
                    339: Lb29:  SS1(La30)
                    340: Lb30:  SS1(La31)
                    341: Lb31:  SS1(La32)
                    342: Lb32:  addx    %o3,%o3,%o2
                    343:        xor     %o0,-1,%o0
                    344:        add     %o1,%o1,%o1
                    345:        sub     %o1,1,%o1
                    346:        addcc   %o0,%o2,%o2
                    347:        bcc     1f
                    348:        subcc   %o2,%o1,%o3
                    349:        subcc   %o3,%o1,%o2
                    350:        bcs     2f
                    351:        add     %o0,1,%o0
                    352:        add     %o0,1,%o0
                    353: 3:     retl
                    354:        st      %o2,[%o4+%lo(C(hiremainder))]
                    355: 1:     bcs     3b
                    356:        nop
                    357:        add     %o0,1,%o0
                    358: 2:     retl
                    359:        st      %o3,[%o4+%lo(C(hiremainder))]
                    360:
                    361: Lsmalldiv:
                    362:        addcc   %o0,%o0,%o0
                    363: Lc00:  SS0(Ld01)
                    364: Lc01:  SS0(Ld02)
                    365: Lc02:  SS0(Ld03)
                    366: Lc03:  SS0(Ld04)
                    367: Lc04:  SS0(Ld05)
                    368: Lc05:  SS0(Ld06)
                    369: Lc06:  SS0(Ld07)
                    370: Lc07:  SS0(Ld08)
                    371: Lc08:  SS0(Ld09)
                    372: Lc09:  SS0(Ld10)
                    373: Lc10:  SS0(Ld11)
                    374: Lc11:  SS0(Ld12)
                    375: Lc12:  SS0(Ld13)
                    376: Lc13:  SS0(Ld14)
                    377: Lc14:  SS0(Ld15)
                    378: Lc15:  SS0(Ld16)
                    379: Lc16:  SS0(Ld17)
                    380: Lc17:  SS0(Ld18)
                    381: Lc18:  SS0(Ld19)
                    382: Lc19:  SS0(Ld20)
                    383: Lc20:  SS0(Ld21)
                    384: Lc21:  SS0(Ld22)
                    385: Lc22:  SS0(Ld23)
                    386: Lc23:  SS0(Ld24)
                    387: Lc24:  SS0(Ld25)
                    388: Lc25:  SS0(Ld26)
                    389: Lc26:  SS0(Ld27)
                    390: Lc27:  SS0(Ld28)
                    391: Lc28:  SS0(Ld29)
                    392: Lc29:  SS0(Ld30)
                    393: Lc30:  SS0(Ld31)
                    394: Lc31:  SS0(Ld32)
                    395: Lc32:  xor     %o0,-1,%o0
                    396:        retl
                    397:        st      %o2,[%o4+%lo(C(hiremainder))]
                    398:
                    399: Ld01:  SS1(Lc02)
                    400: Ld02:  SS1(Lc03)
                    401: Ld03:  SS1(Lc04)
                    402: Ld04:  SS1(Lc05)
                    403: Ld05:  SS1(Lc06)
                    404: Ld06:  SS1(Lc07)
                    405: Ld07:  SS1(Lc08)
                    406: Ld08:  SS1(Lc09)
                    407: Ld09:  SS1(Lc10)
                    408: Ld10:  SS1(Lc11)
                    409: Ld11:  SS1(Lc12)
                    410: Ld12:  SS1(Lc13)
                    411: Ld13:  SS1(Lc14)
                    412: Ld14:  SS1(Lc15)
                    413: Ld15:  SS1(Lc16)
                    414: Ld16:  SS1(Lc17)
                    415: Ld17:  SS1(Lc18)
                    416: Ld18:  SS1(Lc19)
                    417: Ld19:  SS1(Lc20)
                    418: Ld20:  SS1(Lc21)
                    419: Ld21:  SS1(Lc22)
                    420: Ld22:  SS1(Lc23)
                    421: Ld23:  SS1(Lc24)
                    422: Ld24:  SS1(Lc25)
                    423: Ld25:  SS1(Lc26)
                    424: Ld26:  SS1(Lc27)
                    425: Ld27:  SS1(Lc28)
                    426: Ld28:  SS1(Lc29)
                    427: Ld29:  SS1(Lc30)
                    428: Ld30:  SS1(Lc31)
                    429: Ld31:  SS1(Lc32)
                    430: Ld32:  xor     %o0,-1,%o0
                    431:        retl
                    432:        st      %o3,[%o4+%lo(C(hiremainder))]
                    433:
                    434:
                    435: Levendiv:
                    436:        subcc   %o2,%o1,%o3
                    437:        bcc     Lf01
                    438:        addxcc  %o0,%o0,%o0
                    439: Le01:  SS0(Lf02)
                    440: Le02:  SS0(Lf03)
                    441: Le03:  SS0(Lf04)
                    442: Le04:  SS0(Lf05)
                    443: Le05:  SS0(Lf06)
                    444: Le06:  SS0(Lf07)
                    445: Le07:  SS0(Lf08)
                    446: Le08:  SS0(Lf09)
                    447: Le09:  SS0(Lf10)
                    448: Le10:  SS0(Lf11)
                    449: Le11:  SS0(Lf12)
                    450: Le12:  SS0(Lf13)
                    451: Le13:  SS0(Lf14)
                    452: Le14:  SS0(Lf15)
                    453: Le15:  SS0(Lf16)
                    454: Le16:  SS0(Lf17)
                    455: Le17:  SS0(Lf18)
                    456: Le18:  SS0(Lf19)
                    457: Le19:  SS0(Lf20)
                    458: Le20:  SS0(Lf21)
                    459: Le21:  SS0(Lf22)
                    460: Le22:  SS0(Lf23)
                    461: Le23:  SS0(Lf24)
                    462: Le24:  SS0(Lf25)
                    463: Le25:  SS0(Lf26)
                    464: Le26:  SS0(Lf27)
                    465: Le27:  SS0(Lf28)
                    466: Le28:  SS0(Lf29)
                    467: Le29:  SS0(Lf30)
                    468: Le30:  SS0(Lf31)
                    469: Le31:  SS0(Lf32)
                    470: Le32:  addx    %o2,%o2,%o2
                    471:        xor     %o0,-1,%o0
                    472:        retl
                    473:        st      %o2,[%o4+%lo(C(hiremainder))]
                    474:
                    475: Lf01:  SS1(Le02)
                    476: Lf02:  SS1(Le03)
                    477: Lf03:  SS1(Le04)
                    478: Lf04:  SS1(Le05)
                    479: Lf05:  SS1(Le06)
                    480: Lf06:  SS1(Le07)
                    481: Lf07:  SS1(Le08)
                    482: Lf08:  SS1(Le09)
                    483: Lf09:  SS1(Le10)
                    484: Lf10:  SS1(Le11)
                    485: Lf11:  SS1(Le12)
                    486: Lf12:  SS1(Le13)
                    487: Lf13:  SS1(Le14)
                    488: Lf14:  SS1(Le15)
                    489: Lf15:  SS1(Le16)
                    490: Lf16:  SS1(Le17)
                    491: Lf17:  SS1(Le18)
                    492: Lf18:  SS1(Le19)
                    493: Lf19:  SS1(Le20)
                    494: Lf20:  SS1(Le21)
                    495: Lf21:  SS1(Le22)
                    496: Lf22:  SS1(Le23)
                    497: Lf23:  SS1(Le24)
                    498: Lf24:  SS1(Le25)
                    499: Lf25:  SS1(Le26)
                    500: Lf26:  SS1(Le27)
                    501: Lf27:  SS1(Le28)
                    502: Lf28:  SS1(Le29)
                    503: Lf29:  SS1(Le30)
                    504: Lf30:  SS1(Le31)
                    505: Lf31:  SS1(Le32)
                    506: Lf32:  addx    %o3,%o3,%o3
                    507:        xor     %o0,-1,%o0
                    508:        retl
                    509:        st      %o3,[%o4+%lo(C(hiremainder))]
                    510:
                    511:         .seg    "data"
                    512:         .align  4
                    513: C(tabshi): .word  4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0
                    514:
                    515:        .seg    "bss"
                    516:        .align  4
                    517: C(hiremainder): .skip  4
                    518: C(overflow): .skip  4
                    519:

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