[BACK]Return to asmsparcv9.h CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / src / kernel / sparcv9

Annotation of OpenXM_contrib/pari/src/kernel/sparcv9/asmsparcv9.h, Revision 1.1

1.1     ! maekawa     1: /* $Id: asmsparcv9.h,v 1.1.1.1 1999/09/16 13:47:58 karim Exp $ */
        !             2: #ifndef __ASMSPARCV9_H__
        !             3: #define __ASMSPARCV9_H__
        !             4:
        !             5: register unsigned long hiremainder asm("%g5");
        !             6: register unsigned long overflow asm("%g6");
        !             7:
        !             8: #define addll(a,b) \
        !             9: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !            10:    asm ( "addcc %2,%3,%0; \
        !            11:           addc  %%g0,%%g0,%1" \
        !            12:         : "=r" (__value), "=r" (overflow) \
        !            13:         : "r" (__arg1), "r" (__arg2) \
        !            14:          : "%g6","cc"); \
        !            15: __value; })
        !            16:
        !            17: #define subll(a,b) \
        !            18: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !            19:    asm ( "subcc %2,%3,%0; \
        !            20:           addc  %%g0,%%g0,%1" \
        !            21:         : "=r" (__value), "=r" (overflow) \
        !            22:         : "r" (__arg1), "r" (__arg2) \
        !            23:          : "%g6","cc"); \
        !            24: __value; })
        !            25:
        !            26: #define addllx(a,b) \
        !            27: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !            28:    asm ( "subcc %%g0,%%g6,%%g0; \
        !            29:           addccc %2,%3,%0; \
        !            30:           addc  %%g0,%%g0,%1" \
        !            31:         : "=r" (__value), "=r" (overflow) \
        !            32:         : "r" (__arg1), "r" (__arg2) \
        !            33:          : "%g6","cc"); \
        !            34: __value; })
        !            35:
        !            36: #define subllx(a,b) \
        !            37: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !            38:    asm ( "subcc %%g0,%%g6,%%g0; \
        !            39:           subccc %2,%3,%0; \
        !            40:           addc  %%g0,%%g0,%1" \
        !            41:         : "=r" (__value), "=r" (overflow) \
        !            42:         : "r" (__arg1), "r" (__arg2) \
        !            43:          : "%g6","cc"); \
        !            44: __value; })
        !            45:
        !            46: #define shiftl(a,b) \
        !            47: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !            48:    asm ( "neg %3,%%o4; \
        !            49:           srl %2,%%o4,%1; \
        !            50:           sll %2,%3,%0" \
        !            51:         : "=r" (__value), "=r" (hiremainder) \
        !            52:         : "r" (__arg1), "r" (__arg2) \
        !            53:          : "%o4","%g5"); \
        !            54: __value; })
        !            55:
        !            56: #define shiftl2(a,b,c) \
        !            57: ({ unsigned long __value, __arg1 = (a), __arg2 = (b), __arg3 = (c); \
        !            58:    asm ( "srl %2,%4,%1; \
        !            59:           sll %2,%3,%0" \
        !            60:         : "=r" (__value), "=r" (hiremainder) \
        !            61:         : "r" (__arg1), "r" (__arg2), "r" (__arg3) \
        !            62:          : "%g5"); \
        !            63: __value; })
        !            64:
        !            65: #define shiftlr(a,b) \
        !            66: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !            67:    asm ( "neg %3,%%o4; \
        !            68:           sll %2,%%o4,%1; \
        !            69:           srl %2,%3,%0" \
        !            70:         : "=r" (__value), "=r" (hiremainder) \
        !            71:         : "r" (__arg1), "r" (__arg2) \
        !            72:          : "%o4","%g5"); \
        !            73: __value; })
        !            74:
        !            75: #define shiftlr1(a) \
        !            76: ({ unsigned long __value, __arg1 = (a); \
        !            77:    asm ( "sll %2,31,%1; \
        !            78:           srl %2,1,%0" \
        !            79:         : "=r" (__value), "=r" (hiremainder) \
        !            80:         : "r" (__arg1) \
        !            81:          : "%g5"); \
        !            82: __value; })
        !            83:
        !            84: #define shiftlr2(a,b,c) \
        !            85: ({ unsigned long __value, __arg1 = (a), __arg2 = (b), __arg3 = (c); \
        !            86:    asm ( "sll %2,%4,%1; \
        !            87:           srl %2,%3,%0" \
        !            88:         : "=r" (__value), "=r" (hiremainder) \
        !            89:         : "r" (__arg1), "r" (__arg2), "r" (__arg3) \
        !            90:          : "%g5"); \
        !            91: __value; })
        !            92:
        !            93: #define mulll(a,b) \
        !            94: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !            95:    asm ( "umul %2,%3,%0; \
        !            96:           srlx %0,32,%1" \
        !            97:         : "=r" (__value), "=r" (hiremainder) \
        !            98:         : "r" (__arg1), "r" (__arg2) \
        !            99:          : "%g5");     \
        !           100: __value;})
        !           101:
        !           102: #define addmul(a,b) \
        !           103: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !           104:    asm ( "umul %2,%3,%0; \
        !           105:           add  %0,%%g5,%0; \
        !           106:           srlx %0,32,%1" \
        !           107:         : "=r" (__value), "=r" (hiremainder) \
        !           108:         : "r" (__arg1), "r" (__arg2) \
        !           109:          : "%g5");     \
        !           110: __value;})
        !           111:
        !           112: #define divll(a,b) \
        !           113: ({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
        !           114:    asm( "wr      %%g5,%%g0,%%y;\
        !           115:          mov     %2,%%o4;\
        !           116:         udivcc  %2,%3,%0;\
        !           117:          bvc     1f;\
        !           118:          umul    %0,%3,%%o5;\
        !           119:          mov     47,%%o0;\
        !           120:          call    err,1;\
        !           121:          nop         ;\
        !           122: 1:      sub     %%o4,%%o5,%1"\
        !           123:        : "=r" (__value), "=r" (hiremainder) \
        !           124:        : "r" (__arg1), "r" (__arg2) \
        !           125:         : "%o4","%o5","%g5","cc");     \
        !           126: __value;})
        !           127:
        !           128: #endif

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