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

Annotation of OpenXM_contrib/pari-2.2/src/kernel/sparcv8/level0_sparcv8_super.S, Revision 1.1

1.1     ! noro        1: /* $Id: level0_sparcv8_super.S,v 1.2 2000/11/03 21:00:27 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: /* This file defines some "level 0" kernel functions for SPARC V8 */
        !            17: /* These are optimised for SuperSparc                             */
        !            18: /* The following symbols are defined in this file :               */
        !            19: /* divll bfffo (& tabshi)                                         */
        !            20: /*   But divll have to use hiremainder, so it is different when   */
        !            21: /*   hiremainder is inline or not                                 */
        !            22: /*   If libpari.so is compiled with gcc, you should compile all   */
        !            23: /*   files with gcc                                               */
        !            24:
        !            25: #if defined(sun) || defined(NeXT)
        !            26: #  ifdef __STDC__
        !            27: #  define C(entrypoint) _##entrypoint
        !            28: #  else
        !            29: #  define C(entrypoint) _/**/entrypoint
        !            30: #  endif
        !            31: #elif defined(linux)
        !            32: #  define C(entrypoint) entrypoint
        !            33: #endif
        !            34: #if defined(sun) || defined(linux)
        !            35: #  define GLOBL .global
        !            36: #elif defined(NeXT)
        !            37: #  define GLOBL .globl
        !            38: #endif
        !            39:
        !            40: #if   defined(sun) || defined(linux)
        !            41:        .seg    "data"
        !            42:        .align  4
        !            43: C(tabshi): .word       4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0
        !            44:
        !            45:        .seg "text"
        !            46: #elif defined(NeXT)
        !            47: .data
        !            48:        .align  3
        !            49: C(tabshi):
        !            50:        .long 4
        !            51:        .long 3
        !            52:        .long 2
        !            53:        .long 2
        !            54:        .long 1
        !            55:        .long 1
        !            56:        .long 1
        !            57:        .long 1
        !            58:        .long 0
        !            59:        .long 0
        !            60:        .long 0
        !            61:        .long 0
        !            62:        .long 0
        !            63:        .long 0
        !            64:        .long 0
        !            65:        .long 0
        !            66:
        !            67: .text
        !            68:        .align 2
        !            69: #endif
        !            70:        GLOBL   C(bfffo),C(divll)
        !            71:
        !            72: C(bfffo): sethi        %hi(65535),%o2
        !            73:        or      %o2,%lo(65535),%o2
        !            74:        cmp     %o0,%o2
        !            75:        bleu    1f
        !            76:        mov     28,%o1
        !            77:        mov     12,%o1
        !            78:        srl     %o0,16,%o0
        !            79: 1:     cmp     %o0,255
        !            80:        bleu    2f
        !            81:        cmp     %o0,15
        !            82:        add     %o1,-8,%o1
        !            83:        srl     %o0,8,%o0
        !            84:        cmp     %o0,15
        !            85: 2:     bleu    3f
        !            86:        sethi   %hi(C(tabshi)),%o2
        !            87:        add     %o1,-4,%o1
        !            88:        srl     %o0,4,%o0
        !            89: 3:     or      %o2,%lo(C(tabshi)),%o2
        !            90:        sll     %o0,2,%o3
        !            91:        ld      [%o3+%o2],%o0
        !            92:        retl
        !            93:        add     %o1,%o0,%o0
        !            94:
        !            95: #ifdef __GNUC__
        !            96: #define SAVE_HI(X)     mov     X,%g5
        !            97: #define LOAD_HI(X)     mov     %g5,X
        !            98: #define LOAD_Hi(X)
        !            99: #else
        !           100: #define SAVE_HI(X)     st      X,[%o4+%lo(C(hiremainder))]
        !           101: #define LOAD_HI(X)     sethi   %hi(C(hiremainder)),%o4
        !           102: #define LOAD_Hi(X)     ld      [%o4+%lo(C(hiremainder))],X
        !           103: #endif
        !           104:
        !           105: C(divll): LOAD_HI(%o2)
        !           106:        LOAD_Hi(%o2)
        !           107:        sethi   %hi(0xfff00000),%o5
        !           108:        andcc   %o5,%o2,%g0
        !           109:        bnz,a   C(divlllong)
        !           110:        subcc   %o2,%o1,%g0
        !           111:        wr      %o2,%g0,%y
        !           112:        mov     %o0,%o3
        !           113:        nop
        !           114:        nop
        !           115:        udivcc  %o0,%o1,%o0
        !           116:        bvc     1f
        !           117:        umul    %o0,%o1,%o5
        !           118:        mov     0x2f,%o0
        !           119:        call    C(pari_err),1
        !           120:        nop
        !           121: 1:     subcc   %o3,%o5,%o2
        !           122:        retl
        !           123:        SAVE_HI(%o2)
        !           124:
        !           125: #define SS0(label) \
        !           126:        addx    %o2,%o2,%o2;\
        !           127:        subcc   %o2,%o1,%o3;\
        !           128:        bcc     label;\
        !           129:        addxcc  %o0,%o0,%o0
        !           130:
        !           131: #define SS1(label) \
        !           132:        addx    %o3,%o3,%o3;\
        !           133:        subcc   %o3,%o1,%o2;\
        !           134:        bcc     label;\
        !           135:        addxcc  %o0,%o0,%o0
        !           136:
        !           137:
        !           138: C(divlllong):
        !           139:        blu     1f
        !           140:        addcc   %o1,%o1,%g0
        !           141:        mov     0x2f,%o0
        !           142:        call    C(pari_err),1
        !           143:        nop
        !           144: 1:     bcc     Lsmalldiv
        !           145:        andcc   %o1,1,%g0
        !           146:        be      Levendiv
        !           147:        srl     %o1,1,%o1
        !           148:        add     %o1,1,%o1
        !           149:        subcc   %o2,%o1,%o3
        !           150:        bcc     Lb01
        !           151:        addxcc  %o0,%o0,%o0
        !           152: La01:  SS0(Lb02)
        !           153: La02:  SS0(Lb03)
        !           154: La03:  SS0(Lb04)
        !           155: La04:  SS0(Lb05)
        !           156: La05:  SS0(Lb06)
        !           157: La06:  SS0(Lb07)
        !           158: La07:  SS0(Lb08)
        !           159: La08:  SS0(Lb09)
        !           160: La09:  SS0(Lb10)
        !           161: La10:  SS0(Lb11)
        !           162: La11:  SS0(Lb12)
        !           163: La12:  SS0(Lb13)
        !           164: La13:  SS0(Lb14)
        !           165: La14:  SS0(Lb15)
        !           166: La15:  SS0(Lb16)
        !           167: La16:  SS0(Lb17)
        !           168: La17:  SS0(Lb18)
        !           169: La18:  SS0(Lb19)
        !           170: La19:  SS0(Lb20)
        !           171: La20:  SS0(Lb21)
        !           172: La21:  SS0(Lb22)
        !           173: La22:  SS0(Lb23)
        !           174: La23:  SS0(Lb24)
        !           175: La24:  SS0(Lb25)
        !           176: La25:  SS0(Lb26)
        !           177: La26:  SS0(Lb27)
        !           178: La27:  SS0(Lb28)
        !           179: La28:  SS0(Lb29)
        !           180: La29:  SS0(Lb30)
        !           181: La30:  SS0(Lb31)
        !           182: La31:  SS0(Lb32)
        !           183: La32:  addx    %o2,%o2,%o2
        !           184:        xor     %o0,-1,%o0
        !           185:        add     %o1,%o1,%o1
        !           186:        sub     %o1,1,%o1
        !           187:        addcc   %o0,%o2,%o2
        !           188:        bcc     1f
        !           189:        subcc   %o2,%o1,%o3
        !           190:        subcc   %o3,%o1,%o2
        !           191:        bcs     2f
        !           192:        add     %o0,1,%o0
        !           193:        add     %o0,1,%o0
        !           194: 3:     retl
        !           195:        SAVE_HI(%o2)
        !           196: 1:     bcs     3b
        !           197:        nop
        !           198:        add     %o0,1,%o0
        !           199: 2:     retl
        !           200:        SAVE_HI(%o3)
        !           201:
        !           202: Lb01:  SS1(La02)
        !           203: Lb02:  SS1(La03)
        !           204: Lb03:  SS1(La04)
        !           205: Lb04:  SS1(La05)
        !           206: Lb05:  SS1(La06)
        !           207: Lb06:  SS1(La07)
        !           208: Lb07:  SS1(La08)
        !           209: Lb08:  SS1(La09)
        !           210: Lb09:  SS1(La10)
        !           211: Lb10:  SS1(La11)
        !           212: Lb11:  SS1(La12)
        !           213: Lb12:  SS1(La13)
        !           214: Lb13:  SS1(La14)
        !           215: Lb14:  SS1(La15)
        !           216: Lb15:  SS1(La16)
        !           217: Lb16:  SS1(La17)
        !           218: Lb17:  SS1(La18)
        !           219: Lb18:  SS1(La19)
        !           220: Lb19:  SS1(La20)
        !           221: Lb20:  SS1(La21)
        !           222: Lb21:  SS1(La22)
        !           223: Lb22:  SS1(La23)
        !           224: Lb23:  SS1(La24)
        !           225: Lb24:  SS1(La25)
        !           226: Lb25:  SS1(La26)
        !           227: Lb26:  SS1(La27)
        !           228: Lb27:  SS1(La28)
        !           229: Lb28:  SS1(La29)
        !           230: Lb29:  SS1(La30)
        !           231: Lb30:  SS1(La31)
        !           232: Lb31:  SS1(La32)
        !           233: Lb32:  addx    %o3,%o3,%o2
        !           234:        xor     %o0,-1,%o0
        !           235:        add     %o1,%o1,%o1
        !           236:        sub     %o1,1,%o1
        !           237:        addcc   %o0,%o2,%o2
        !           238:        bcc     1f
        !           239:        subcc   %o2,%o1,%o3
        !           240:        subcc   %o3,%o1,%o2
        !           241:        bcs     2f
        !           242:        add     %o0,1,%o0
        !           243:        add     %o0,1,%o0
        !           244: 3:     retl
        !           245:        SAVE_HI(%o2)
        !           246: 1:     bcs     3b
        !           247:        nop
        !           248:        add     %o0,1,%o0
        !           249: 2:     retl
        !           250:        SAVE_HI(%o3)
        !           251:
        !           252: Lsmalldiv:
        !           253:        addcc   %o0,%o0,%o0
        !           254: Lc00:  SS0(Ld01)
        !           255: Lc01:  SS0(Ld02)
        !           256: Lc02:  SS0(Ld03)
        !           257: Lc03:  SS0(Ld04)
        !           258: Lc04:  SS0(Ld05)
        !           259: Lc05:  SS0(Ld06)
        !           260: Lc06:  SS0(Ld07)
        !           261: Lc07:  SS0(Ld08)
        !           262: Lc08:  SS0(Ld09)
        !           263: Lc09:  SS0(Ld10)
        !           264: Lc10:  SS0(Ld11)
        !           265: Lc11:  SS0(Ld12)
        !           266: Lc12:  SS0(Ld13)
        !           267: Lc13:  SS0(Ld14)
        !           268: Lc14:  SS0(Ld15)
        !           269: Lc15:  SS0(Ld16)
        !           270: Lc16:  SS0(Ld17)
        !           271: Lc17:  SS0(Ld18)
        !           272: Lc18:  SS0(Ld19)
        !           273: Lc19:  SS0(Ld20)
        !           274: Lc20:  SS0(Ld21)
        !           275: Lc21:  SS0(Ld22)
        !           276: Lc22:  SS0(Ld23)
        !           277: Lc23:  SS0(Ld24)
        !           278: Lc24:  SS0(Ld25)
        !           279: Lc25:  SS0(Ld26)
        !           280: Lc26:  SS0(Ld27)
        !           281: Lc27:  SS0(Ld28)
        !           282: Lc28:  SS0(Ld29)
        !           283: Lc29:  SS0(Ld30)
        !           284: Lc30:  SS0(Ld31)
        !           285: Lc31:  SS0(Ld32)
        !           286: Lc32:  xor     %o0,-1,%o0
        !           287:        retl
        !           288:        SAVE_HI(%o2)
        !           289:
        !           290: Ld01:  SS1(Lc02)
        !           291: Ld02:  SS1(Lc03)
        !           292: Ld03:  SS1(Lc04)
        !           293: Ld04:  SS1(Lc05)
        !           294: Ld05:  SS1(Lc06)
        !           295: Ld06:  SS1(Lc07)
        !           296: Ld07:  SS1(Lc08)
        !           297: Ld08:  SS1(Lc09)
        !           298: Ld09:  SS1(Lc10)
        !           299: Ld10:  SS1(Lc11)
        !           300: Ld11:  SS1(Lc12)
        !           301: Ld12:  SS1(Lc13)
        !           302: Ld13:  SS1(Lc14)
        !           303: Ld14:  SS1(Lc15)
        !           304: Ld15:  SS1(Lc16)
        !           305: Ld16:  SS1(Lc17)
        !           306: Ld17:  SS1(Lc18)
        !           307: Ld18:  SS1(Lc19)
        !           308: Ld19:  SS1(Lc20)
        !           309: Ld20:  SS1(Lc21)
        !           310: Ld21:  SS1(Lc22)
        !           311: Ld22:  SS1(Lc23)
        !           312: Ld23:  SS1(Lc24)
        !           313: Ld24:  SS1(Lc25)
        !           314: Ld25:  SS1(Lc26)
        !           315: Ld26:  SS1(Lc27)
        !           316: Ld27:  SS1(Lc28)
        !           317: Ld28:  SS1(Lc29)
        !           318: Ld29:  SS1(Lc30)
        !           319: Ld30:  SS1(Lc31)
        !           320: Ld31:  SS1(Lc32)
        !           321: Ld32:  xor     %o0,-1,%o0
        !           322:        retl
        !           323:        SAVE_HI(%o3)
        !           324:
        !           325: Levendiv:
        !           326:        subcc   %o2,%o1,%o3
        !           327:        bcc     Lf01
        !           328:        addxcc  %o0,%o0,%o0
        !           329: Le01:  SS0(Lf02)
        !           330: Le02:  SS0(Lf03)
        !           331: Le03:  SS0(Lf04)
        !           332: Le04:  SS0(Lf05)
        !           333: Le05:  SS0(Lf06)
        !           334: Le06:  SS0(Lf07)
        !           335: Le07:  SS0(Lf08)
        !           336: Le08:  SS0(Lf09)
        !           337: Le09:  SS0(Lf10)
        !           338: Le10:  SS0(Lf11)
        !           339: Le11:  SS0(Lf12)
        !           340: Le12:  SS0(Lf13)
        !           341: Le13:  SS0(Lf14)
        !           342: Le14:  SS0(Lf15)
        !           343: Le15:  SS0(Lf16)
        !           344: Le16:  SS0(Lf17)
        !           345: Le17:  SS0(Lf18)
        !           346: Le18:  SS0(Lf19)
        !           347: Le19:  SS0(Lf20)
        !           348: Le20:  SS0(Lf21)
        !           349: Le21:  SS0(Lf22)
        !           350: Le22:  SS0(Lf23)
        !           351: Le23:  SS0(Lf24)
        !           352: Le24:  SS0(Lf25)
        !           353: Le25:  SS0(Lf26)
        !           354: Le26:  SS0(Lf27)
        !           355: Le27:  SS0(Lf28)
        !           356: Le28:  SS0(Lf29)
        !           357: Le29:  SS0(Lf30)
        !           358: Le30:  SS0(Lf31)
        !           359: Le31:  SS0(Lf32)
        !           360: Le32:  addx    %o2,%o2,%o2
        !           361:        xor     %o0,-1,%o0
        !           362:        retl
        !           363:        SAVE_HI(%o2)
        !           364:
        !           365: Lf01:  SS1(Le02)
        !           366: Lf02:  SS1(Le03)
        !           367: Lf03:  SS1(Le04)
        !           368: Lf04:  SS1(Le05)
        !           369: Lf05:  SS1(Le06)
        !           370: Lf06:  SS1(Le07)
        !           371: Lf07:  SS1(Le08)
        !           372: Lf08:  SS1(Le09)
        !           373: Lf09:  SS1(Le10)
        !           374: Lf10:  SS1(Le11)
        !           375: Lf11:  SS1(Le12)
        !           376: Lf12:  SS1(Le13)
        !           377: Lf13:  SS1(Le14)
        !           378: Lf14:  SS1(Le15)
        !           379: Lf15:  SS1(Le16)
        !           380: Lf16:  SS1(Le17)
        !           381: Lf17:  SS1(Le18)
        !           382: Lf18:  SS1(Le19)
        !           383: Lf19:  SS1(Le20)
        !           384: Lf20:  SS1(Le21)
        !           385: Lf21:  SS1(Le22)
        !           386: Lf22:  SS1(Le23)
        !           387: Lf23:  SS1(Le24)
        !           388: Lf24:  SS1(Le25)
        !           389: Lf25:  SS1(Le26)
        !           390: Lf26:  SS1(Le27)
        !           391: Lf27:  SS1(Le28)
        !           392: Lf28:  SS1(Le29)
        !           393: Lf29:  SS1(Le30)
        !           394: Lf30:  SS1(Le31)
        !           395: Lf31:  SS1(Le32)
        !           396: Lf32:  addx    %o3,%o3,%o3
        !           397:        xor     %o0,-1,%o0
        !           398:        retl
        !           399:        SAVE_HI(%o3)

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