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

Annotation of OpenXM_contrib/pari-2.2/src/kernel/sparcv9/asmsparcv9.h, Revision 1.1.1.1

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

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