File: [local] / OpenXM_contrib / pari / src / kernel / sparcv9 / Attic / asmsparcv9.h (download)
Revision 1.1.1.1 (vendor branch), Sun Jan 9 17:35:33 2000 UTC (24 years, 8 months ago) by maekawa
Branch: PARI_GP
CVS Tags: maekawa-ipv6, VERSION_2_0_17_BETA, RELEASE_20000124, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, RELEASE_1_1_3, RELEASE_1_1_2 Changes since 1.1: +0 -0
lines
Import PARI/GP 2.0.17 beta.
|
/* $Id: asmsparcv9.h,v 1.1.1.1 1999/09/16 13:47:58 karim Exp $ */
#ifndef __ASMSPARCV9_H__
#define __ASMSPARCV9_H__
register unsigned long hiremainder asm("%g5");
register unsigned long overflow asm("%g6");
#define addll(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "addcc %2,%3,%0; \
addc %%g0,%%g0,%1" \
: "=r" (__value), "=r" (overflow) \
: "r" (__arg1), "r" (__arg2) \
: "%g6","cc"); \
__value; })
#define subll(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "subcc %2,%3,%0; \
addc %%g0,%%g0,%1" \
: "=r" (__value), "=r" (overflow) \
: "r" (__arg1), "r" (__arg2) \
: "%g6","cc"); \
__value; })
#define addllx(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "subcc %%g0,%%g6,%%g0; \
addccc %2,%3,%0; \
addc %%g0,%%g0,%1" \
: "=r" (__value), "=r" (overflow) \
: "r" (__arg1), "r" (__arg2) \
: "%g6","cc"); \
__value; })
#define subllx(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "subcc %%g0,%%g6,%%g0; \
subccc %2,%3,%0; \
addc %%g0,%%g0,%1" \
: "=r" (__value), "=r" (overflow) \
: "r" (__arg1), "r" (__arg2) \
: "%g6","cc"); \
__value; })
#define shiftl(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "neg %3,%%o4; \
srl %2,%%o4,%1; \
sll %2,%3,%0" \
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1), "r" (__arg2) \
: "%o4","%g5"); \
__value; })
#define shiftl2(a,b,c) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b), __arg3 = (c); \
asm ( "srl %2,%4,%1; \
sll %2,%3,%0" \
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1), "r" (__arg2), "r" (__arg3) \
: "%g5"); \
__value; })
#define shiftlr(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "neg %3,%%o4; \
sll %2,%%o4,%1; \
srl %2,%3,%0" \
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1), "r" (__arg2) \
: "%o4","%g5"); \
__value; })
#define shiftlr1(a) \
({ unsigned long __value, __arg1 = (a); \
asm ( "sll %2,31,%1; \
srl %2,1,%0" \
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1) \
: "%g5"); \
__value; })
#define shiftlr2(a,b,c) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b), __arg3 = (c); \
asm ( "sll %2,%4,%1; \
srl %2,%3,%0" \
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1), "r" (__arg2), "r" (__arg3) \
: "%g5"); \
__value; })
#define mulll(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "umul %2,%3,%0; \
srlx %0,32,%1" \
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1), "r" (__arg2) \
: "%g5"); \
__value;})
#define addmul(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm ( "umul %2,%3,%0; \
add %0,%%g5,%0; \
srlx %0,32,%1" \
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1), "r" (__arg2) \
: "%g5"); \
__value;})
#define divll(a,b) \
({ unsigned long __value, __arg1 = (a), __arg2 = (b); \
asm( "wr %%g5,%%g0,%%y;\
mov %2,%%o4;\
udivcc %2,%3,%0;\
bvc 1f;\
umul %0,%3,%%o5;\
mov 47,%%o0;\
call err,1;\
nop ;\
1: sub %%o4,%%o5,%1"\
: "=r" (__value), "=r" (hiremainder) \
: "r" (__arg1), "r" (__arg2) \
: "%o4","%o5","%g5","cc"); \
__value;})
#endif