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

Annotation of OpenXM_contrib/pari/src/kernel/sparcv8/level0_sparcv8_micro.S, Revision 1.1.1.1

1.1       maekawa     1: /* $Id: level0_sparcv8_micro.S,v 1.1.1.1 1999/09/16 13:47:58 karim Exp $ */
                      2:
                      3: /* This file defines some "level 0" kernel functions for SPARC V8 */
                      4: /* These are optimised for MicroSparc                             */
                      5: /* The following symbols are defined in this file :               */
                      6: /* divll bfffo (& tabshi)                                         */
                      7: /*   But divll has to use hiremainder, so it is different when    */
                      8: /*   hiremainder is inline or not                                 */
                      9: /*   If libpari.so is compiled with gcc, you should compile all   */
                     10: /*   files with gcc                                               */
                     11:
                     12: #if defined(NO_UNDERSCORE) || defined(linux)
                     13: #  define C(entrypoint) entrypoint
                     14: #elif defined(sun) || defined(NeXT)
                     15: #  ifdef __STDC__
                     16: #    define C(entrypoint) _##entrypoint
                     17: #  else
                     18: #    define C(entrypoint) _/**/entrypoint
                     19: #  endif
                     20: #endif
                     21: #if defined(sun) || defined(linux)
                     22: #  define GLOBL .global
                     23: #elif defined(NeXT)
                     24: #  define GLOBL .globl
                     25: #endif
                     26:
                     27: #if   defined(sun) || defined(linux)
                     28:        .seg    "data"
                     29:        .align  4
                     30: C(tabshi): .word       4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0
                     31:
                     32:        .seg "text"
                     33: #elif defined(NeXT)
                     34: .data
                     35:        .align  3
                     36: C(tabshi):
                     37:        .long 4
                     38:        .long 3
                     39:        .long 2
                     40:        .long 2
                     41:        .long 1
                     42:        .long 1
                     43:        .long 1
                     44:        .long 1
                     45:        .long 0
                     46:        .long 0
                     47:        .long 0
                     48:        .long 0
                     49:        .long 0
                     50:        .long 0
                     51:        .long 0
                     52:        .long 0
                     53:
                     54: .text
                     55:        .align 2
                     56: #endif
                     57:        GLOBL   C(bfffo),C(divll)
                     58:
                     59: C(bfffo): sethi        %hi(0xffff0000),%o1
                     60:        andcc   %o1,%o0,%g0
                     61:        bnz,a   1f
                     62:        clr     %o2
                     63:        sll     %o0,16,%o0
                     64:        mov     16,%o2
                     65: 1:     sethi   %hi(0xff000000),%o1
                     66:        andcc   %o1,%o0,%g0
                     67:        bnz     2f
                     68:        sethi   %hi(0xf0000000),%o1
                     69:        sll     %o0,8,%o0
                     70:        add     %o2,8,%o2
                     71: 2:     andcc   %o1,%o0,%g0
                     72:        bnz,a   3f
                     73:        srl     %o0,28,%o0
                     74:        add     %o2,4,%o2
                     75:        srl     %o0,24,%o0
                     76: 3:     set     C(tabshi),%o3
                     77:        sll     %o0,2,%o0
                     78:        ld      [%o3+%o0],%o1
                     79:        retl
                     80:        add     %o2,%o1,%o0
                     81:
                     82: #ifdef __GNUC__
                     83: C(divll):       wr      %g5,%g0,%y
                     84: #else /* ! __GNUC__ */
                     85: C(divll): sethi        %hi(C(hiremainder)),%o4
                     86:        ld      [%o4+%lo(C(hiremainder))],%o2
                     87:        wr      %o2,%g0,%y
                     88: #endif
                     89:        mov     %o0,%o3
                     90:        nop
                     91:        nop
                     92:        udivcc  %o0,%o1,%o0
                     93:        bvc     1f
                     94:        umul    %o0,%o1,%o5
                     95:        mov     0x2f,%o0
                     96:        call    C(pari_err),1
                     97:        nop
                     98: #ifdef __GNUC__
                     99: 1:     retl
                    100:        sub   %o3,%o5,%g5
                    101: #else /* ! __GNUC__ */
                    102: 1:     subcc   %o3,%o5,%o2
                    103:        retl
                    104:        st      %o2,[%o4+%lo(C(hiremainder))]
                    105: #endif

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