1 /***************************** alpha/ngen.c ************************************
3 Copyright (c) 1997 A. Krall, R. Grafl, M. Gschwind, M. Probst
5 See file COPYRIGHT for information on usage and disclaimer of warranties
7 Contains the codegenerator for an Alpha processor.
8 This module generates Alpha machine code for a sequence of
9 pseudo commands (ICMDs).
11 Authors: Andreas Krall EMAIL: cacao@complang.tuwien.ac.at
12 Reinhard Grafl EMAIL: cacao@complang.tuwien.ac.at
14 Last Change: 1998/08/10
16 *******************************************************************************/
19 public static void main(String [] s) {
21 float fnan = Float.NaN;
22 float fpinf = Float.POSITIVE_INFINITY;
23 float fninf = Float.NEGATIVE_INFINITY;
24 float fmax = Float.MAX_VALUE;
25 float fmin = Float.MIN_VALUE;
29 double dnan = Double.NaN;
30 double dpinf = Double.POSITIVE_INFINITY;
31 double dninf = Double.NEGATIVE_INFINITY;
32 double dmax = Double.MAX_VALUE;
33 double dmin = Double.MIN_VALUE;
37 p("---------------------------- tests NaNs and Infs -------------------");
38 p("------------------- print NaNs and Infs");
48 p("------------------- test zero division");
50 zerodiv("0 / 0 = NaNQ ", 0F, f1);
51 zerodiv("+ / 0 = +INF ", 5F, f1);
52 zerodiv("- / 0 = -INF ", -5F, f1);
54 zerodiv("0 / 0 = NaNQ ", 0D, d1);
55 zerodiv("+ / 0 = +INF ", 5D, d1);
56 zerodiv("- / 0 = -INF ", -5D, d1);
58 p("------------------- test conversions");
59 testfcvt("NaNQ", fnan, dnan);
60 testfcvt("+INF", fpinf, dpinf);
61 testfcvt("-INF", fninf, dninf);
62 testfcvt(" MAX", fmax, dmax);
63 testfcvt(" MIN", fmin, dmin);
64 testfcvt("MAXINT-1", 2147483646.0F, 2147483646.0D);
65 testfcvt("MAXINT+0", 2147483647.0F, 2147483647.0D);
66 testfcvt("MAXINT+1", 2147483648.0F, 2147483648.0D);
67 testfcvt("-MAXINT+1", -2147483647.0F, -2147483647.0D);
68 testfcvt("-MAXINT+0", -2147483648.0F, -2147483648.0D);
69 testfcvt("-MAXINT-1", -2147483649.0F, -2147483649.0D);
70 testfcvt("MAXLNG-1", 9223372036854775806.0F, 9223372036854775806.0D);
71 testfcvt("MAXLNG+0", 9223372036854775807.0F, 9223372036854775807.0D);
72 testfcvt("MAXLNG+1", 9223372036854775808.0F, 9223372036854775808.0D);
73 testfcvt("-MAXLNG+1", -9223372036854775807.0F, -9223372036854775807.0D);
74 testfcvt("-MAXLNG+0", -9223372036854775808.0F, -9223372036854775808.0D);
75 testfcvt("-MAXLNG-1", -9223372036854775809.0F, -9223372036854775809.0D);
77 p("------------------- test NaNQ op value");
78 testfops("NaNQ", "5.0", fnan, 5F, dnan, 5D);
79 testfcmp("NaNQ", "5.0", fnan, 5F, dnan, 5D);
81 p("------------------- test value op NaNQ");
82 testfops("5.0", "NaNQ", 5F, fnan, 5D, dnan);
83 testfcmp("5.0", "NaNQ", 5F, fnan, 5D, dnan);
85 p("------------------- test +INF op value");
86 testfops("+INF", "5.0", fpinf, 5F, dpinf, 5D);
87 testfcmp("+INF", "5.0", fpinf, 5F, dpinf, 5D);
89 p("------------------- test +INF op value");
90 testfops("5.0", "+INF", 5F, fpinf, 5D, dpinf);
91 testfcmp("5.0", "+INF", 5F, fpinf, 5D, dpinf);
93 p("------------------- test -INF op value");
94 testfops("-INF", "5.0", fninf, 5F, dninf, 5D);
95 testfcmp("-INF", "5.0", fninf, 5F, dninf, 5D);
97 p("------------------- test -INF op value");
98 testfops("5.0", "-INF", 5F, fninf, 5D, dninf);
99 testfcmp("5.0", "-INF", 5F, fninf, 5D, dninf);
101 p("------------------- test MAX op value");
102 testfops("MAX", "5.0", fmax, 5F, dmax, 5D);
104 p("------------------- test value op MAX");
105 testfops("5.0", "MAX", 5F, fmax, 5D, dmax);
107 p("------------------- test MIN op value");
108 testfops("MIN", "5.0", fmin, 5F, dmin, 5D);
110 p("------------------- test value op MIN");
111 testfops("5.0", "MIN", 5F, fmin, 5D, dmin);
115 public static void zerodiv(String s, float f1, float f2) {
119 public static void zerodiv(String s, double d1, double d2) {
123 public static void testfcvt(String s1, float f1, double d1) {
124 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (int) f1);
125 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (int) d1);
126 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (long) f1);
127 p("convert " + s1 + " (" + f1 + "," + d1 + ") to ", (long) d1);
130 public static void testfops(String s1, String s2, float f1, float f2,
131 double d1, double d2) {
132 p(s1 + " + " + s2 + " = ", f1 + f2);
133 p(s1 + " - " + s2 + " = ", f1 - f2);
134 p(s1 + " * " + s2 + " = ", f1 * f2);
135 p(s1 + " / " + s2 + " = ", f1 / f2);
136 p(s1 + " % " + s2 + " = ", f1 % f2);
137 p(s1 + " + " + s2 + " = ", d1 + d2);
138 p(s1 + " - " + s2 + " = ", d1 - d2);
139 p(s1 + " * " + s2 + " = ", d1 * d2);
140 p(s1 + " / " + s2 + " = ", d1 / d2);
141 p(s1 + " % " + s2 + " = ", d1 % d2);
144 public static void testfcmp(String s1, String s2, float f1, float f2,
145 double d1, double d2) {
147 if ( (f1 == f2)) p(" (" + s1 + " == " + s2 + ") = true");
148 else p(" (" + s1 + " == " + s2 + ") = false");
149 if ( (f1 != f2)) p(" (" + s1 + " != " + s2 + ") = true");
150 else p(" (" + s1 + " != " + s2 + ") = false");
151 if ( (f1 < f2)) p(" (" + s1 + " < " + s2 + ") = true");
152 else p(" (" + s1 + " < " + s2 + ") = false");
153 if ( (f1 <= f2)) p(" (" + s1 + " <= " + s2 + ") = true");
154 else p(" (" + s1 + " <= " + s2 + ") = false");
155 if ( (f1 > f2)) p(" (" + s1 + " > " + s2 + ") = true");
156 else p(" (" + s1 + " > " + s2 + ") = false");
157 if ( (f1 >= f2)) p(" (" + s1 + " >= " + s2 + ") = true");
158 else p(" (" + s1 + " >= " + s2 + ") = false");
160 if (!(f1 == f2)) p("!(" + s1 + " == " + s2 + ") = true");
161 else p("!(" + s1 + " == " + s2 + ") = false");
162 if (!(f1 != f2)) p("!(" + s1 + " != " + s2 + ") = true");
163 else p("!(" + s1 + " != " + s2 + ") = false");
164 if (!(f1 < f2)) p("!(" + s1 + " < " + s2 + ") = true");
165 else p("!(" + s1 + " < " + s2 + ") = false");
166 if (!(f1 <= f2)) p("!(" + s1 + " <= " + s2 + ") = true");
167 else p("!(" + s1 + " <= " + s2 + ") = false");
168 if (!(f1 > f2)) p("!(" + s1 + " > " + s2 + ") = true");
169 else p("!(" + s1 + " > " + s2 + ") = false");
170 if (!(f1 >= f2)) p("!(" + s1 + " >= " + s2 + ") = true");
171 else p("!(" + s1 + " >= " + s2 + ") = false");
173 if ( (d1 == d2)) p(" (" + s1 + " == " + s2 + ") = true");
174 else p(" (" + s1 + " == " + s2 + ") = false");
175 if ( (d1 != d2)) p(" (" + s1 + " != " + s2 + ") = true");
176 else p(" (" + s1 + " != " + s2 + ") = false");
177 if ( (d1 < d2)) p(" (" + s1 + " < " + s2 + ") = true");
178 else p(" (" + s1 + " < " + s2 + ") = false");
179 if ( (d1 <= d2)) p(" (" + s1 + " <= " + s2 + ") = true");
180 else p(" (" + s1 + " <= " + s2 + ") = false");
181 if ( (d1 > d2)) p(" (" + s1 + " > " + s2 + ") = true");
182 else p(" (" + s1 + " > " + s2 + ") = false");
183 if ( (d1 >= d2)) p(" (" + s1 + " >= " + s2 + ") = true");
184 else p(" (" + s1 + " >= " + s2 + ") = false");
186 if (!(d1 == d2)) p("!(" + s1 + " == " + s2 + ") = true");
187 else p("!(" + s1 + " == " + s2 + ") = false");
188 if (!(d1 != d2)) p("!(" + s1 + " != " + s2 + ") = true");
189 else p("!(" + s1 + " != " + s2 + ") = false");
190 if (!(d1 < d2)) p("!(" + s1 + " < " + s2 + ") = true");
191 else p("!(" + s1 + " < " + s2 + ") = false");
192 if (!(d1 <= d2)) p("!(" + s1 + " <= " + s2 + ") = true");
193 else p("!(" + s1 + " <= " + s2 + ") = false");
194 if (!(d1 > d2)) p("!(" + s1 + " > " + s2 + ") = true");
195 else p("!(" + s1 + " > " + s2 + ") = false");
196 if (!(d1 >= d2)) p("!(" + s1 + " >= " + s2 + ") = true");
197 else p("!(" + s1 + " >= " + s2 + ") = false");
200 // ********************* output methods ****************************
202 public static int linenum = 0;
204 public static void pnl() {
207 System.out.println();
208 for (i = 4 - Integer.toString(linenum).length(); i > 0; i--)
209 System.out.print(' ');
210 System.out.print(linenum);
211 System.out.print(". ");
215 public static void p(String a) {
216 System.out.print(a); pnl();
218 public static void p(boolean a) {
219 System.out.print(a); pnl();
221 public static void p(int a) {
222 System.out.print("int: "); System.out.print(a); pnl();
224 public static void p(long a) {
225 System.out.print("long: "); System.out.print(a); pnl();
227 public static void p(short a) {
228 System.out.print("short: "); System.out.print(a); pnl();
230 public static void p(byte a) {
231 System.out.print("byte: "); System.out.print(a); pnl();
233 public static void p(char a) {
234 System.out.print("char: "); System.out.print((int)a); pnl();
236 public static void p(float a) {
237 System.out.print("float: "); System.out.print(a); pnl();
239 public static void p(double a) {
240 System.out.print("double: "); System.out.print(a); pnl();
243 public static void p(String s, boolean i) {
244 System.out.print(s); p(i);
246 public static void p(String s, int i) {
247 System.out.print(s); p(i);
249 public static void p(String s, byte i) {
250 System.out.print(s); p(i);
252 public static void p(String s, char i) {
253 System.out.print(s); p(i);
255 public static void p(String s, short i) {
256 System.out.print(s); p(i);
258 public static void p(String s, long l) {
259 System.out.print(s); p(l);
261 public static void p(String s, float f) {
262 System.out.print(s); p(f);
264 public static void p(String s, double d) {
265 System.out.print(s); p(d);