[BACK]Return to level0_sparcv8_micro.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_micro.S, Revision 1.1.1.1

1.1       noro        1: /* $Id: level0_sparcv8_micro.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 MicroSparc                             */
                     18: /* The following symbols are defined in this file :               */
                     19: /* divll bfffo (& tabshi)                                         */
                     20: /*   But divll has 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(NO_UNDERSCORE) || defined(linux)
                     26: #  define C(entrypoint) entrypoint
                     27: #elif defined(sun) || defined(NeXT)
                     28: #  ifdef __STDC__
                     29: #    define C(entrypoint) _##entrypoint
                     30: #  else
                     31: #    define C(entrypoint) _/**/entrypoint
                     32: #  endif
                     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(0xffff0000),%o1
                     73:        andcc   %o1,%o0,%g0
                     74:        bnz,a   1f
                     75:        clr     %o2
                     76:        sll     %o0,16,%o0
                     77:        mov     16,%o2
                     78: 1:     sethi   %hi(0xff000000),%o1
                     79:        andcc   %o1,%o0,%g0
                     80:        bnz     2f
                     81:        sethi   %hi(0xf0000000),%o1
                     82:        sll     %o0,8,%o0
                     83:        add     %o2,8,%o2
                     84: 2:     andcc   %o1,%o0,%g0
                     85:        bnz,a   3f
                     86:        srl     %o0,28,%o0
                     87:        add     %o2,4,%o2
                     88:        srl     %o0,24,%o0
                     89: 3:     set     C(tabshi),%o3
                     90:        sll     %o0,2,%o0
                     91:        ld      [%o3+%o0],%o1
                     92:        retl
                     93:        add     %o2,%o1,%o0
                     94:
                     95: #ifdef __GNUC__
                     96: C(divll):       wr      %g5,%g0,%y
                     97: #else /* ! __GNUC__ */
                     98: C(divll): sethi        %hi(C(hiremainder)),%o4
                     99:        ld      [%o4+%lo(C(hiremainder))],%o2
                    100:        wr      %o2,%g0,%y
                    101: #endif
                    102:        mov     %o0,%o3
                    103:        nop
                    104:        nop
                    105:        udivcc  %o0,%o1,%o0
                    106:        bvc     1f
                    107:        umul    %o0,%o1,%o5
                    108:        mov     0x2f,%o0
                    109:        call    C(pari_err),1
                    110:        nop
                    111: #ifdef __GNUC__
                    112: 1:     retl
                    113:        sub   %o3,%o5,%g5
                    114: #else /* ! __GNUC__ */
                    115: 1:     subcc   %o3,%o5,%o2
                    116:        retl
                    117:        st      %o2,[%o4+%lo(C(hiremainder))]
                    118: #endif

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