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 }