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