1 cananian 1.1.2.1 // Eval.java, created Wed Sep  9 21:57:19 1998 by cananian
  2 cananian 1.1.2.1 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
  3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details.
  4 cananian 1.1.2.1 package harpoon.IR.Quads;
  5 cananian 1.1.2.1 
  6 cananian 1.1.2.1 /**
  7 cananian 1.1.2.1  * <code>Eval</code>
  8 cananian 1.1.2.1  * 
  9 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
 10 cananian 1.2      * @version $Id: Eval.java,v 1.2 2002/02/25 21:05:12 cananian Exp $
 11 cananian 1.1.2.1  */
 12 cananian 1.1.2.1 class Eval  {
 13 cananian 1.1.2.1 
 14 cananian 1.1.2.1     /** Reference comparison. */
 15 cananian 1.1.2.1     static boolean acmpeq(Object a, Object b) {
 16 cananian 1.1.2.1         return (a == b);
 17 cananian 1.1.2.1     }
 18 cananian 1.1.2.1     /** Convert double to float. */
 19 cananian 1.1.2.1     static float d2f(double d) {
 20 cananian 1.1.2.1         return (float) d;
 21 cananian 1.1.2.1     }
 22 cananian 1.1.2.1     /** Convert double to integer. */
 23 cananian 1.1.2.1     static int d2i(double d) {
 24 cananian 1.1.2.1         return (int) d;
 25 cananian 1.1.2.1     }
 26 cananian 1.1.2.1     /** Convert double to long. */
 27 cananian 1.1.2.1     static long d2l(double d) {
 28 cananian 1.1.2.1         return (long) d;
 29 cananian 1.1.2.1     }
 30 cananian 1.1.2.1     /** Add two doubles. */
 31 cananian 1.1.2.1     static double dadd(double a, double b) {
 32 cananian 1.1.2.1         return a + b;
 33 cananian 1.1.2.1     }
 34 cananian 1.1.2.1     /** Compare two doubles for equality */
 35 cananian 1.1.2.1     static boolean dcmpeq(double a, double b) {
 36 cananian 1.1.2.1         return (a==b);
 37 cananian 1.1.2.1     }
 38 cananian 1.1.2.1     /** Compare two doubles for greater-than-or-equal-to. */
 39 cananian 1.1.2.1     static boolean dcmpge(double a, double b) {
 40 cananian 1.1.2.1         return (a>=b);
 41 cananian 1.1.2.1     }
 42 cananian 1.1.2.1     /** Compare two doubles for greater-than. */
 43 cananian 1.1.2.1     static boolean dcmpgt(double a, double b) {
 44 cananian 1.1.2.1         return (a>b);
 45 cananian 1.1.2.1     }
 46 cananian 1.1.2.1     /** @deprecated */
 47 cananian 1.1.2.1     static int dcmpg(double a, double b) {
 48 cananian 1.1.2.1         if (a < b)
 49 cananian 1.1.2.1             return -1;
 50 cananian 1.1.2.1         if (a == b)
 51 cananian 1.1.2.1             return 0;
 52 cananian 1.1.2.1         return 1;
 53 cananian 1.1.2.1     }
 54 cananian 1.1.2.1     /** @deprecated */
 55 cananian 1.1.2.1     static int dcmpl(double a, double b) {
 56 cananian 1.1.2.1         if (a > b)
 57 cananian 1.1.2.1             return 1;
 58 cananian 1.1.2.1         if (a == b)
 59 cananian 1.1.2.1             return 0;
 60 cananian 1.1.2.1         return -1;
 61 cananian 1.1.2.1     }
 62 cananian 1.1.2.1     /** Divide two doubles. */
 63 cananian 1.1.2.1     static double ddiv(double a, double b) {
 64 cananian 1.1.2.1         return a / b;
 65 cananian 1.1.2.1     }
 66 cananian 1.1.2.1     /** Multiply two doubles. */
 67 cananian 1.1.2.1     static double dmul(double a, double b) {
 68 cananian 1.1.2.1         return a * b;
 69 cananian 1.1.2.1     }
 70 cananian 1.1.2.1     /** Negate a double. */
 71 cananian 1.1.2.1     static double dneg(double a) {
 72 cananian 1.1.2.1         return -a;
 73 cananian 1.1.2.1     }
 74 cananian 1.1.2.1     /** Remainder two doubles. */
 75 cananian 1.1.2.1     static double drem(double a, double b) {
 76 cananian 1.1.2.1         return a % b;
 77 cananian 1.1.2.1     }
 78 cananian 1.1.2.1     /** Subtract two doubles. */
 79 cananian 1.1.2.1     static double dsub(double a, double b) {
 80 cananian 1.1.2.1         return a - b;
 81 cananian 1.1.2.1     }
 82 cananian 1.1.2.1     /** Convert a float to a double. */
 83 cananian 1.1.2.1     static double f2d(float f) {
 84 cananian 1.1.2.1         return (double) f;
 85 cananian 1.1.2.1     }
 86 cananian 1.1.2.1     /** Convert a float to an integer. */
 87 cananian 1.1.2.1     static int f2i(float f) {
 88 cananian 1.1.2.1         return (int) f;
 89 cananian 1.1.2.1     }
 90 cananian 1.1.2.1     /** Convert a float to a long. */
 91 cananian 1.1.2.1     static long f2l(float f) {
 92 cananian 1.1.2.1         return (long) f;
 93 cananian 1.1.2.1     }
 94 cananian 1.1.2.1     /** Add two floats. */
 95 cananian 1.1.2.1     static float fadd(float a, float b) {
 96 cananian 1.1.2.1         return a + b;
 97 cananian 1.1.2.1     }
 98 cananian 1.1.2.1     /** Compare two floats for equality. */
 99 cananian 1.1.2.1     static boolean fcmpeq(float a, float b) {
100 cananian 1.1.2.1         return (a==b);
101 cananian 1.1.2.1     }
102 cananian 1.1.2.1     /** Compare two floats for greater-than-or-equal-to. */
103 cananian 1.1.2.1     static boolean fcmpge(float a, float b) {
104 cananian 1.1.2.1         return (a>=b);
105 cananian 1.1.2.1     }
106 cananian 1.1.2.1     /** Compare two floats for greater-than. */
107 cananian 1.1.2.1     static boolean fcmpgt(float a, float b) {
108 cananian 1.1.2.1         return (a>b);
109 cananian 1.1.2.1     }
110 cananian 1.1.2.1     /** @deprecated */
111 cananian 1.1.2.1     static int fcmpg(float a, float b) {
112 cananian 1.1.2.1         if (a < b)
113 cananian 1.1.2.1             return -1;
114 cananian 1.1.2.1         if (a == b)
115 cananian 1.1.2.1             return 0;
116 cananian 1.1.2.1         return 1;
117 cananian 1.1.2.1     }
118 cananian 1.1.2.1     /** @deprecated */
119 cananian 1.1.2.1     static int fcmpl(float a, float b) {
120 cananian 1.1.2.1         if (a > b)
121 cananian 1.1.2.1             return 1;
122 cananian 1.1.2.1         if (a == b)
123 cananian 1.1.2.1             return 0;
124 cananian 1.1.2.1         return -1;
125 cananian 1.1.2.1     }
126 cananian 1.1.2.1     /** Divide two floats. */
127 cananian 1.1.2.1     static float fdiv(float a, float b) {
128 cananian 1.1.2.1         return a / b;
129 cananian 1.1.2.1     }
130 cananian 1.1.2.1     /** Multiply two floats. */
131 cananian 1.1.2.1     static float fmul(float a, float b) {
132 cananian 1.1.2.1         return a * b;
133 cananian 1.1.2.1     }
134 cananian 1.1.2.1     /** Negate a float. */
135 cananian 1.1.2.1     static float fneg(float a) {
136 cananian 1.1.2.1         return -a;
137 cananian 1.1.2.1     }
138 cananian 1.1.2.1     /** Remainder a float. */
139 cananian 1.1.2.1     static float frem(float a, float b) {
140 cananian 1.1.2.1         return a % b;
141 cananian 1.1.2.1     }
142 cananian 1.1.2.1     /** Subtract two floats. */
143 cananian 1.1.2.1     static float fsub(float a, float b) {
144 cananian 1.1.2.1         return a - b;
145 cananian 1.1.2.1     }
146 cananian 1.1.2.1     /** Convert an integer to a (8-bit) byte. */
147 cananian 1.1.2.1     static int i2b(int i) {
148 cananian 1.1.2.1         return (byte) i;
149 cananian 1.1.2.1     }
150 cananian 1.1.2.1     /** Convert an integer to a (16-bit) character. */
151 cananian 1.1.2.1     static int i2c(int i) {
152 cananian 1.1.2.1         return (char) i;
153 cananian 1.1.2.1     }
154 cananian 1.1.2.1     /** Convert an integer to a double. */
155 cananian 1.1.2.1     static double i2d(int i) {
156 cananian 1.1.2.1         return (double) i;
157 cananian 1.1.2.1     }
158 cananian 1.1.2.1     /** Convert an integer to a float. */
159 cananian 1.1.2.1     static float i2f(int i) {
160 cananian 1.1.2.1         return (float) i;
161 cananian 1.1.2.1     }
162 cananian 1.1.2.1     /** Convert an integer to a long. */
163 cananian 1.1.2.1     static long i2l(int i) {
164 cananian 1.1.2.1         return (long) i;
165 cananian 1.1.2.1     }
166 cananian 1.1.2.1     /** Convert an integer to a short. */
167 cananian 1.1.2.1     static int i2s(int i) {
168 cananian 1.1.2.1         return (short) i;
169 cananian 1.1.2.1     }
170 cananian 1.1.2.1     /** Add two integers. */
171 cananian 1.1.2.1     static int iadd(int a, int b) {
172 cananian 1.1.2.1         return a + b;
173 cananian 1.1.2.1     }
174 cananian 1.1.2.1     /** Bitwise-and two integers. */
175 cananian 1.1.2.1     static int iand(int a, int b) {
176 cananian 1.1.2.1         return a & b;
177 cananian 1.1.2.1     }
178 cananian 1.1.2.1     /** Compare two integers for equality. */
179 cananian 1.1.2.1     static boolean icmpeq(int a, int b) {
180 cananian 1.1.2.1         return (a == b);
181 cananian 1.1.2.1     }
182 cananian 1.1.2.2     /** Compare two integers for greater-than-or-equal-to
183 cananian 1.1.2.2      * @deprecated */
184 cananian 1.1.2.1     static boolean icmpge(int a, int b) {
185 cananian 1.1.2.1         return (a >= b);
186 cananian 1.1.2.1     }
187 cananian 1.1.2.1     /** Compare two integers for greater-than. */
188 cananian 1.1.2.1     static boolean icmpgt(int a, int b) {
189 cananian 1.1.2.1         return (a > b);
190 cananian 1.1.2.1     }
191 cananian 1.1.2.1     /** Divide two integers. */
192 cananian 1.1.2.1     static int idiv(int a, int b) {
193 cananian 1.1.2.1         return a / b;
194 cananian 1.1.2.1     }
195 cananian 1.1.2.1     /** Multiply two integers. */
196 cananian 1.1.2.1     static int imul(int a, int b) {
197 cananian 1.1.2.1         return a * b;
198 cananian 1.1.2.1     }
199 cananian 1.1.2.1     /** Negate two integers. */
200 cananian 1.1.2.1     static int ineg(int a) {
201 cananian 1.1.2.1         return -a;
202 cananian 1.1.2.1     }
203 cananian 1.1.2.1     /** Bitwise-or two integers. */
204 cananian 1.1.2.1     static int ior(int a, int b) {
205 cananian 1.1.2.1         return a | b;
206 cananian 1.1.2.1     }
207 cananian 1.1.2.1     /** Remainder two integers. */
208 cananian 1.1.2.1     static int irem(int a, int b) {
209 cananian 1.1.2.1         return a % b;
210 cananian 1.1.2.1     }
211 cananian 1.1.2.1     /** Integer shift left. */
212 cananian 1.1.2.1     static int ishl(int a, int b) {
213 cananian 1.1.2.1         return a << b;
214 cananian 1.1.2.1     }
215 cananian 1.1.2.1     /** Signed integer shift right. */
216 cananian 1.1.2.1     static int ishr(int a, int b) {
217 cananian 1.1.2.1         return a >> b;
218 cananian 1.1.2.1     }
219 cananian 1.1.2.1     /** Integer subtract. */
220 cananian 1.1.2.1     static int isub(int a, int b) {
221 cananian 1.1.2.1         return a - b;
222 cananian 1.1.2.1     }
223 cananian 1.1.2.1     /** Unsigned integer shift right. */
224 cananian 1.1.2.1     static int iushr(int a, int b) {
225 cananian 1.1.2.1         return a >>> b;
226 cananian 1.1.2.1     }
227 cananian 1.1.2.1     /** Bitwise-xor two integers. */
228 cananian 1.1.2.1     static int ixor(int a, int b) {
229 cananian 1.1.2.1         return a ^ b;
230 cananian 1.1.2.1     }
231 cananian 1.1.2.1     /** Convert a long to a double. */
232 cananian 1.1.2.1     static double l2d(long l) {
233 cananian 1.1.2.1         return (double) l;
234 cananian 1.1.2.1     }
235 cananian 1.1.2.1     /** Convert a long to a float. */
236 cananian 1.1.2.1     static float l2f(long l) {
237 cananian 1.1.2.1         return (float) l;
238 cananian 1.1.2.1     }
239 cananian 1.1.2.1     /** Convert a long to an integer. */
240 cananian 1.1.2.1     static int l2i(long l) {
241 cananian 1.1.2.1         return (int) l;
242 cananian 1.1.2.1     }
243 cananian 1.1.2.1     /** Add two longs. */
244 cananian 1.1.2.1     static long ladd(long a, long b) {
245 cananian 1.1.2.1         return a + b;
246 cananian 1.1.2.1     }
247 cananian 1.1.2.1     /** Bitwise-and two longs. */
248 cananian 1.1.2.1     static long land(long a, long b) {
249 cananian 1.1.2.1         return a & b;
250 cananian 1.1.2.1     }
251 cananian 1.1.2.1     /** Compare two longs for equality. */
252 cananian 1.1.2.1     static boolean lcmpeq(long a, long b) {
253 cananian 1.1.2.1         return (a == b);
254 cananian 1.1.2.1     }
255 cananian 1.1.2.2     /** Compare two longs for greater-than-or-equal-to.
256 cananian 1.1.2.2      * @deprecated */
257 cananian 1.1.2.1     static boolean lcmpge(long a, long b) {
258 cananian 1.1.2.1         return (a >= b);
259 cananian 1.1.2.1     }
260 cananian 1.1.2.1     /** Compare two longs for greater-than. */
261 cananian 1.1.2.1     static boolean lcmpgt(long a, long b) {
262 cananian 1.1.2.1         return (a > b);
263 cananian 1.1.2.1     }
264 cananian 1.1.2.1     /** Divide two longs. */
265 cananian 1.1.2.1     static long ldiv(long a, long b) {
266 cananian 1.1.2.1         return a / b;
267 cananian 1.1.2.1     }
268 cananian 1.1.2.1     /** Multiply two longs. */
269 cananian 1.1.2.1     static long lmul(long a, long b) {
270 cananian 1.1.2.1         return a * b;
271 cananian 1.1.2.1     }
272 cananian 1.1.2.1     /** Negate a long. */
273 cananian 1.1.2.1     static long lneg(long a) {
274 cananian 1.1.2.1         return -a;
275 cananian 1.1.2.1     }
276 cananian 1.1.2.1     /** Bitwise-or two longs. */
277 cananian 1.1.2.1     static long lor(long a, long b) {
278 cananian 1.1.2.1         return a | b;
279 cananian 1.1.2.1     }
280 cananian 1.1.2.1     /** Remainder two longs. */
281 cananian 1.1.2.1     static long lrem(long a, long b) {
282 cananian 1.1.2.1         return a % b;
283 cananian 1.1.2.1     }
284 cananian 1.1.2.1     /** Long shift left. */
285 cananian 1.1.2.1     static long lshl(long a, int b) {
286 cananian 1.1.2.1         return a << b;
287 cananian 1.1.2.1     }
288 cananian 1.1.2.1     /** Signed long shift right. */
289 cananian 1.1.2.1     static long lshr(long a, int b) {
290 cananian 1.1.2.1         return a >> b;
291 cananian 1.1.2.1     }
292 cananian 1.1.2.1     /** Subtract two longs. */
293 cananian 1.1.2.1     static long lsub(long a, long b) {
294 cananian 1.1.2.1         return a - b;
295 cananian 1.1.2.1     }
296 cananian 1.1.2.1     /** Unsigned long shift right. */
297 cananian 1.1.2.1     static long lushr(long a, int b) {
298 cananian 1.1.2.1         return a >>> b;
299 cananian 1.1.2.1     }
300 cananian 1.1.2.1     /** Bitwise-XOR two longs. */
301 cananian 1.1.2.1     static long lxor(long a, long b) {
302 cananian 1.1.2.1         return a ^ b;
303 cananian 1.1.2.1     }
304 cananian 1.2     }