2 // Copyright (c) 1999-2006 by Digital Mars
4 // written by Walter Bright
5 // http://www.digitalmars.com
6 // License for redistribution is by either the Artistic License
7 // in artistic.txt, or the GNU General Public License in gnu.txt.
8 // See the included readme.txt for details.
10 /* NOTE: This file has been patched from the original DMD distribution to
11 work with the GDC compiler.
13 Modified by David Friedman, January 2007
22 TY impcnvResult
[TMAX
][TMAX
];
23 TY impcnvType1
[TMAX
][TMAX
];
24 TY impcnvType2
[TMAX
][TMAX
];
25 int impcnvWarn
[TMAX
][TMAX
];
27 int integral_promotion(int t
)
38 case Tuns16
: return Tint32
;
39 case Tdchar
: return Tuns32
;
47 // Set conversion tables
48 for (i
= 0; i
< TMAX
; i
++)
49 for (j
= 0; j
< TMAX
; j
++)
50 { impcnvResult
[i
][j
] = Terror
;
51 impcnvType1
[i
][j
] = Terror
;
52 impcnvType2
[i
][j
] = Terror
;
56 #define X(t1,t2, nt1,nt2, rt) \
57 impcnvResult[t1][t2] = rt; \
58 impcnvType1[t1][t2] = nt1; \
59 impcnvType2[t1][t2] = nt2;
61 /* ======================= */
64 X(Tbit
,Tbit
, Tint32
,Tint32
, Tint32
)
65 X(Tbit
,Tint8
, Tint32
,Tint32
, Tint32
)
66 X(Tbit
,Tuns8
, Tint32
,Tint32
, Tint32
)
67 X(Tbit
,Tint16
, Tint32
,Tint32
, Tint32
)
68 X(Tbit
,Tuns16
, Tint32
,Tint32
, Tint32
)
69 X(Tbit
,Tint32
, Tint32
,Tint32
, Tint32
)
70 X(Tbit
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
71 X(Tbit
,Tint64
, Tint64
,Tint64
, Tint64
)
72 X(Tbit
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
74 X(Tbit
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
75 X(Tbit
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
76 X(Tbit
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
77 X(Tbit
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
78 X(Tbit
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
79 X(Tbit
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
80 X(Tbit
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
81 X(Tbit
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
82 X(Tbit
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
85 /* ======================= */
87 X(Tbool
,Tbool
, Tbool
,Tbool
, Tbool
)
88 X(Tbool
,Tint8
, Tint32
,Tint32
, Tint32
)
89 X(Tbool
,Tuns8
, Tint32
,Tint32
, Tint32
)
90 X(Tbool
,Tint16
, Tint32
,Tint32
, Tint32
)
91 X(Tbool
,Tuns16
, Tint32
,Tint32
, Tint32
)
92 X(Tbool
,Tint32
, Tint32
,Tint32
, Tint32
)
93 X(Tbool
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
94 X(Tbool
,Tint64
, Tint64
,Tint64
, Tint64
)
95 X(Tbool
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
97 X(Tbool
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
98 X(Tbool
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
99 X(Tbool
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
100 X(Tbool
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
101 X(Tbool
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
102 X(Tbool
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
103 X(Tbool
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
104 X(Tbool
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
105 X(Tbool
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
107 /* ======================= */
109 X(Tint8
,Tint8
, Tint32
,Tint32
, Tint32
)
110 X(Tint8
,Tuns8
, Tint32
,Tint32
, Tint32
)
111 X(Tint8
,Tint16
, Tint32
,Tint32
, Tint32
)
112 X(Tint8
,Tuns16
, Tint32
,Tint32
, Tint32
)
113 X(Tint8
,Tint32
, Tint32
,Tint32
, Tint32
)
114 X(Tint8
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
115 X(Tint8
,Tint64
, Tint64
,Tint64
, Tint64
)
116 X(Tint8
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
118 X(Tint8
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
119 X(Tint8
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
120 X(Tint8
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
121 X(Tint8
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
122 X(Tint8
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
123 X(Tint8
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
124 X(Tint8
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
125 X(Tint8
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
126 X(Tint8
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
128 /* ======================= */
130 X(Tuns8
,Tuns8
, Tint32
,Tint32
, Tint32
)
131 X(Tuns8
,Tint16
, Tint32
,Tint32
, Tint32
)
132 X(Tuns8
,Tuns16
, Tint32
,Tint32
, Tint32
)
133 X(Tuns8
,Tint32
, Tint32
,Tint32
, Tint32
)
134 X(Tuns8
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
135 X(Tuns8
,Tint64
, Tint64
,Tint64
, Tint64
)
136 X(Tuns8
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
138 X(Tuns8
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
139 X(Tuns8
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
140 X(Tuns8
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
141 X(Tuns8
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
142 X(Tuns8
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
143 X(Tuns8
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
144 X(Tuns8
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
145 X(Tuns8
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
146 X(Tuns8
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
148 /* ======================= */
150 X(Tint16
,Tint16
, Tint32
,Tint32
, Tint32
)
151 X(Tint16
,Tuns16
, Tint32
,Tint32
, Tint32
)
152 X(Tint16
,Tint32
, Tint32
,Tint32
, Tint32
)
153 X(Tint16
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
154 X(Tint16
,Tint64
, Tint64
,Tint64
, Tint64
)
155 X(Tint16
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
157 X(Tint16
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
158 X(Tint16
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
159 X(Tint16
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
160 X(Tint16
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
161 X(Tint16
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
162 X(Tint16
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
163 X(Tint16
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
164 X(Tint16
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
165 X(Tint16
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
167 /* ======================= */
169 X(Tuns16
,Tuns16
, Tint32
,Tint32
, Tint32
)
170 X(Tuns16
,Tint32
, Tint32
,Tint32
, Tint32
)
171 X(Tuns16
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
172 X(Tuns16
,Tint64
, Tint64
,Tint64
, Tint64
)
173 X(Tuns16
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
175 X(Tuns16
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
176 X(Tuns16
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
177 X(Tuns16
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
178 X(Tuns16
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
179 X(Tuns16
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
180 X(Tuns16
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
181 X(Tuns16
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
182 X(Tuns16
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
183 X(Tuns16
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
185 /* ======================= */
187 X(Tint32
,Tint32
, Tint32
,Tint32
, Tint32
)
188 X(Tint32
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
189 X(Tint32
,Tint64
, Tint64
,Tint64
, Tint64
)
190 X(Tint32
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
192 X(Tint32
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
193 X(Tint32
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
194 X(Tint32
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
195 X(Tint32
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
196 X(Tint32
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
197 X(Tint32
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
198 X(Tint32
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
199 X(Tint32
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
200 X(Tint32
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
202 /* ======================= */
204 X(Tuns32
,Tuns32
, Tuns32
,Tuns32
, Tuns32
)
205 X(Tuns32
,Tint64
, Tint64
,Tint64
, Tint64
)
206 X(Tuns32
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
208 X(Tuns32
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
209 X(Tuns32
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
210 X(Tuns32
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
211 X(Tuns32
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
212 X(Tuns32
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
213 X(Tuns32
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
214 X(Tuns32
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
215 X(Tuns32
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
216 X(Tuns32
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
218 /* ======================= */
220 X(Tint64
,Tint64
, Tint64
,Tint64
, Tint64
)
221 X(Tint64
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
223 X(Tint64
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
224 X(Tint64
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
225 X(Tint64
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
226 X(Tint64
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
227 X(Tint64
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
228 X(Tint64
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
229 X(Tint64
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
230 X(Tint64
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
231 X(Tint64
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
233 /* ======================= */
235 X(Tuns64
,Tuns64
, Tuns64
,Tuns64
, Tuns64
)
237 X(Tuns64
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
238 X(Tuns64
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
239 X(Tuns64
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
240 X(Tuns64
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
241 X(Tuns64
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
242 X(Tuns64
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
243 X(Tuns64
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
244 X(Tuns64
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
245 X(Tuns64
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
247 /* ======================= */
249 X(Tfloat32
,Tfloat32
, Tfloat32
,Tfloat32
, Tfloat32
)
250 X(Tfloat32
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
251 X(Tfloat32
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
253 X(Tfloat32
,Timaginary32
, Tfloat32
,Timaginary32
, Tfloat32
)
254 X(Tfloat32
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
255 X(Tfloat32
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
257 X(Tfloat32
,Tcomplex32
, Tfloat32
,Tcomplex32
, Tcomplex32
)
258 X(Tfloat32
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
259 X(Tfloat32
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
261 /* ======================= */
263 X(Tfloat64
,Tfloat64
, Tfloat64
,Tfloat64
, Tfloat64
)
264 X(Tfloat64
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
266 X(Tfloat64
,Timaginary32
, Tfloat64
,Timaginary64
, Tfloat64
)
267 X(Tfloat64
,Timaginary64
, Tfloat64
,Timaginary64
, Tfloat64
)
268 X(Tfloat64
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
270 X(Tfloat64
,Tcomplex32
, Tfloat64
,Tcomplex64
, Tcomplex64
)
271 X(Tfloat64
,Tcomplex64
, Tfloat64
,Tcomplex64
, Tcomplex64
)
272 X(Tfloat64
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
274 /* ======================= */
276 X(Tfloat80
,Tfloat80
, Tfloat80
,Tfloat80
, Tfloat80
)
278 X(Tfloat80
,Timaginary32
, Tfloat80
,Timaginary80
, Tfloat80
)
279 X(Tfloat80
,Timaginary64
, Tfloat80
,Timaginary80
, Tfloat80
)
280 X(Tfloat80
,Timaginary80
, Tfloat80
,Timaginary80
, Tfloat80
)
282 X(Tfloat80
,Tcomplex32
, Tfloat80
,Tcomplex80
, Tcomplex80
)
283 X(Tfloat80
,Tcomplex64
, Tfloat80
,Tcomplex80
, Tcomplex80
)
284 X(Tfloat80
,Tcomplex80
, Tfloat80
,Tcomplex80
, Tcomplex80
)
286 /* ======================= */
288 X(Timaginary32
,Timaginary32
, Timaginary32
,Timaginary32
, Timaginary32
)
289 X(Timaginary32
,Timaginary64
, Timaginary64
,Timaginary64
, Timaginary64
)
290 X(Timaginary32
,Timaginary80
, Timaginary80
,Timaginary80
, Timaginary80
)
292 X(Timaginary32
,Tcomplex32
, Timaginary32
,Tcomplex32
, Tcomplex32
)
293 X(Timaginary32
,Tcomplex64
, Timaginary64
,Tcomplex64
, Tcomplex64
)
294 X(Timaginary32
,Tcomplex80
, Timaginary80
,Tcomplex80
, Tcomplex80
)
296 /* ======================= */
298 X(Timaginary64
,Timaginary64
, Timaginary64
,Timaginary64
, Timaginary64
)
299 X(Timaginary64
,Timaginary80
, Timaginary80
,Timaginary80
, Timaginary80
)
301 X(Timaginary64
,Tcomplex32
, Timaginary64
,Tcomplex64
, Tcomplex64
)
302 X(Timaginary64
,Tcomplex64
, Timaginary64
,Tcomplex64
, Tcomplex64
)
303 X(Timaginary64
,Tcomplex80
, Timaginary80
,Tcomplex80
, Tcomplex80
)
305 /* ======================= */
307 X(Timaginary80
,Timaginary80
, Timaginary80
,Timaginary80
, Timaginary80
)
309 X(Timaginary80
,Tcomplex32
, Timaginary80
,Tcomplex80
, Tcomplex80
)
310 X(Timaginary80
,Tcomplex64
, Timaginary80
,Tcomplex80
, Tcomplex80
)
311 X(Timaginary80
,Tcomplex80
, Timaginary80
,Tcomplex80
, Tcomplex80
)
313 /* ======================= */
315 X(Tcomplex32
,Tcomplex32
, Tcomplex32
,Tcomplex32
, Tcomplex32
)
316 X(Tcomplex32
,Tcomplex64
, Tcomplex64
,Tcomplex64
, Tcomplex64
)
317 X(Tcomplex32
,Tcomplex80
, Tcomplex80
,Tcomplex80
, Tcomplex80
)
319 /* ======================= */
321 X(Tcomplex64
,Tcomplex64
, Tcomplex64
,Tcomplex64
, Tcomplex64
)
322 X(Tcomplex64
,Tcomplex80
, Tcomplex80
,Tcomplex80
, Tcomplex80
)
324 /* ======================= */
326 X(Tcomplex80
,Tcomplex80
, Tcomplex80
,Tcomplex80
, Tcomplex80
)
330 #define Y(t1,t2) impcnvWarn[t1][t2] = 1;
382 for (i
= 0; i
< TMAX
; i
++)
383 for (j
= 0; j
< TMAX
; j
++)
385 if (impcnvResult
[i
][j
] == Terror
)
387 impcnvResult
[i
][j
] = impcnvResult
[j
][i
];
388 impcnvType1
[i
][j
] = impcnvType2
[j
][i
];
389 impcnvType2
[i
][j
] = impcnvType1
[j
][i
];
401 fp
= fopen("impcnvtab.c","w");
403 fprintf(fp
,"// This file is generated by impcnvgen.c\n");
404 fprintf(fp
,"#include \"mtype.h\"\n");
406 fprintf(fp
,"unsigned char Type::impcnvResult[TMAX][TMAX] =\n{\n");
407 for (i
= 0; i
< TMAX
; i
++)
409 for (j
= 0; j
< TMAX
; j
++)
411 fprintf(fp
, "%d,",impcnvResult
[i
][j
]);
417 fprintf(fp
,"unsigned char Type::impcnvType1[TMAX][TMAX] =\n{\n");
418 for (i
= 0; i
< TMAX
; i
++)
420 for (j
= 0; j
< TMAX
; j
++)
422 fprintf(fp
, "%d,",impcnvType1
[i
][j
]);
428 fprintf(fp
,"unsigned char Type::impcnvType2[TMAX][TMAX] =\n{\n");
429 for (i
= 0; i
< TMAX
; i
++)
431 for (j
= 0; j
< TMAX
; j
++)
433 fprintf(fp
, "%d,",impcnvType2
[i
][j
]);
439 fprintf(fp
,"unsigned char Type::impcnvWarn[TMAX][TMAX] =\n{\n");
440 for (i
= 0; i
< TMAX
; i
++)
442 for (j
= 0; j
< TMAX
; j
++)
444 fprintf(fp
, "%d,",impcnvWarn
[i
][j
]);