[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     ! 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>