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>