1 /* $Id: pariport.h 6593 2005-02-13 15:12:55Z kb $ 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 /*******************************************************************/ 17 /* */ 18 /* DECLARATIONS SPECIFIC TO THE PORTABLE VERSION */ 19 /* */ 20 /*******************************************************************/ 21 22 /*******************************************************************/ 23 /* */ 24 /* OPERATIONS BY VALUE */ 25 /* f is a pointer to the function called. */ 26 /* result is gaffect-ed to last parameter */ 27 /* */ 28 /*******************************************************************/ 29 #define TRgopgz(f, x, y, fstr) STMT_START {\ 30 GEN __x = (x), __y = (y);\ 31 long prec = precision(__y);\ 32 pari_sp __av = avma;\ 33 if (!prec) err(infprecer, fstr);\ 34 gaffect(f(__x), __y); avma=__av; } STMT_END 35 #define gopgz(f, x, y) STMT_START {\ 36 GEN __x = (x), __y = (y);\ 37 pari_sp __av = avma;\ 38 gaffect(f(__x), __y); avma=__av; } STMT_END 39 #define gopggz(f, x, y, z) STMT_START {\ 40 GEN __x = (x), __y = (y), __z = (z);\ 41 pari_sp __av = avma;\ 42 gaffect(f(__x,__y), __z); avma=__av; } STMT_END 43 #define gopgsz(f, x, s, z) STMT_START {\ 44 GEN __x = (x), __z = (z);\ 45 long __s = (s);\ 46 pari_sp __av = avma;\ 47 gaffect(f(__x,__s), __z); avma=__av; } STMT_END 48 #define gopsgz(f, s, y, z) STMT_START {\ 49 GEN __y = (y), __z = (z);\ 50 long __s = (s);\ 51 pari_sp __av = avma;\ 52 gaffect(f(__s,__y), __z); avma=__av; } STMT_END 53 #define gopssz(f, x, y, z) STMT_START {\ 54 GEN __z = (z);\ 55 long __x = (x), __y = (y);\ 56 pari_sp __av = avma;\ 57 gaffect(f(__x,__y), __z); avma=__av; } STMT_END 58 59 /* mp.c */ 60 61 #define equaliu(x,y) (equalui((y),(x))) 62 #define equalis(x,y) (equalsi((y),(x))) 63 #define cmpiu(x,y) (-cmpui((y),(x))) 64 #define cmpis(x,y) (-cmpsi((y),(x))) 65 #define cmprs(x,y) (-cmpsr((y),(x))) 66 #define cmpri(x,y) (-cmpir((y),(x))) 67 #define subis(x,y) (addsi(-(y),(x))) 68 #define subrs(x,y) (addsr(-(y),(x))) 69 70 #define truedivii(a,b) (truedvmdii((a),(b),NULL)) 71 #define truedivis(a,b) (truedvmdis((a),(b),NULL)) 72 #define divii(a,b) (dvmdii((a),(b),NULL)) 73 #define remii(a,b) (dvmdii((a),(b),ONLY_REM)) 74 75 #define mpshift(x,s) ((typ(x)==t_INT)?shifti((x),(s)):shiftr((x),(s))) 76 #define mptruncz(x,y) gopgz(mptrunc,(x),(y)) 77 #define mpfloorz(x,y) gopgz(mpfloor,(x),(y)) 78 #define mpaddz(x,y,z) gopggz(mpadd,(x),(y),(z)) 79 #define addsiz(s,y,z) gopsgz(addsi,(s),(y),(z)) 80 #define addsrz(s,y,z) gopsgz(addsr,(s),(y),(z)) 81 #define addiiz(x,y,z) gopggz(addii,(x),(y),(z)) 82 #define addirz(x,y,z) gopggz(addir,(x),(y),(z)) 83 #define addriz(x,y,z) gopggz(addir,(y),(x),(z)) 84 #define addrrz(x,y,z) gopggz(addrr,(x),(y),(z)) 85 #define mpsubz(x,y,z) gopggz(mpsub,(x),(y),(z)) 86 #define subss(x,y) (addss(-(y),(x))) 87 #define subssz(x,y,z) (addssz((x),-(y),(z))) 88 #define subsiz(s,y,z) gopsgz(subsi,(s),(y),(z)) 89 #define subsrz(s,y,z) gopsgz(subsr,(s),(y),(z)) 90 #define subisz(y,s,z) gopsgz(addsi,-(s),(y),(z)) 91 #define subrsz(y,s,z) gopsgz(addsr,-(s),(y),(z)) 92 #define subiiz(x,y,z) gopggz(subii,(x),(y),(z)) 93 #define subirz(x,y,z) gopggz(subir,(x),(y),(z)) 94 #define subriz(x,y,z) gopggz(subri,(x),(y),(z)) 95 #define subrrz(x,y,z) gopggz(subrr,(x),(y),(z)) 96 #define mpmulz(x,y,z) gopggz(mpmul,(x),(y),(z)) 97 #define mulsiz(s,y,z) gopsgz(mulsi,(s),(y),(z)) 98 #define mulsrz(s,y,z) gopsgz(mulsr,(s),(y),)(z) 99 #define muliiz(x,y,z) gopggz(mulii,(x),(y),(z)) 100 #define mulirz(x,y,z) gopggz(mulir,(x),(y),(z)) 101 #define mulriz(x,y,z) gopggz(mulir,(y),(x),(z)) 102 #define mulrrz(x,y,z) gopggz(mulrr,(x),(y),(z)) 103 #define mpdvmdz(x,y,z,t) (dvmdiiz((x),(y),(z),(t)) 104 #define addssz(s,y,z) gopssz(addss,(s),(y),(z)) 105 #define modssz(s,y,z) gopssz(modss,(s),(y),(z)) 106 #define mulssz(s,y,z) gopssz(mulss,(s),(y),(z)) 107 #define modsiz(s,y,z) gopsgz(modsi,(s),(y),(z)) 108 #define modisz(y,s,z) gopgsz(modis,(y),(s),(z)) 109 #define remsiz(s,y,z) gopsgz(remsi,(s),(y),(z)) 110 #define remisz(y,s,z) gopgsz(remis,(y),(s),(z)) 111 #define remssz(s,y,z) gopssz(remss,(s),(y),(z)) 112 #define diviiz(x,y,z) gopggz(divii,(x),(y),(z)) 113 #define divirz(x,y,z) gopggz(divir,(x),(y),(z)) 114 #define divisz(x,y,z) gopgsz(divis,(x),(y),(z)) 115 #define divriz(x,y,z) gopggz(divri,(x),(y),(z)) 116 #define divsrz(s,y,z) gopsgz(divsr,(s),(y),(z)) 117 #define divrsz(y,s,z) gopgsz(divrs,(y),(s),(z)) 118