diff gcc/d/dmd/impcnvgen.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/d/dmd/impcnvgen.c	Thu Feb 13 11:34:05 2020 +0900
@@ -0,0 +1,598 @@
+
+/* Compiler implementation of the D programming language
+ * Copyright (C) 1999-2019 by The D Language Foundation, All Rights Reserved
+ * written by Walter Bright
+ * http://www.digitalmars.com
+ * Distributed under the Boost Software License, Version 1.0.
+ * http://www.boost.org/LICENSE_1_0.txt
+ * https://github.com/D-Programming-Language/dmd/blob/master/src/impcnvgen.c
+ */
+
+#include "root/dsystem.h"
+
+#include "mtype.h"
+
+TY impcnvResultTab[TMAX][TMAX];
+TY impcnvType1Tab[TMAX][TMAX];
+TY impcnvType2Tab[TMAX][TMAX];
+int impcnvWarnTab[TMAX][TMAX];
+
+int integral_promotion(int t)
+{
+    switch (t)
+    {
+        case Tchar:
+        case Twchar:
+        case Tbool:
+        case Tint8:
+        case Tuns8:
+        case Tint16:
+        case Tuns16:    return Tint32;
+        case Tdchar:    return Tuns32;
+        default:        return t;
+    }
+}
+
+void init()
+{   int i, j;
+
+    // Set conversion tables
+    for (i = 0; i < TMAX; i++)
+        for (j = 0; j < TMAX; j++)
+        {   impcnvResultTab[i][j] = Terror;
+            impcnvType1Tab[i][j] = Terror;
+            impcnvType2Tab[i][j] = Terror;
+            impcnvWarnTab[i][j] = 0;
+        }
+
+#define X(t1,t2, nt1,nt2, rt)           \
+        impcnvResultTab[t1][t2] = rt;      \
+        impcnvType1Tab[t1][t2] = nt1;      \
+        impcnvType2Tab[t1][t2] = nt2;
+
+
+    /* ======================= */
+
+    X(Tbool,Tbool,   Tbool,Tbool,    Tbool)
+    X(Tbool,Tint8,   Tint32,Tint32,  Tint32)
+    X(Tbool,Tuns8,   Tint32,Tint32,  Tint32)
+    X(Tbool,Tint16,  Tint32,Tint32,  Tint32)
+    X(Tbool,Tuns16,  Tint32,Tint32,  Tint32)
+    X(Tbool,Tint32,  Tint32,Tint32,  Tint32)
+    X(Tbool,Tuns32,  Tuns32,Tuns32,  Tuns32)
+    X(Tbool,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tbool,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tbool,Tint128, Tint128,Tint128, Tint128)
+    X(Tbool,Tuns128, Tuns128,Tuns128, Tuns128)
+
+    X(Tbool,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tbool,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tbool,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tbool,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tbool,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tbool,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tbool,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tbool,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tbool,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tint8,Tint8,   Tint32,Tint32,  Tint32)
+    X(Tint8,Tuns8,   Tint32,Tint32,  Tint32)
+    X(Tint8,Tint16,  Tint32,Tint32,  Tint32)
+    X(Tint8,Tuns16,  Tint32,Tint32,  Tint32)
+    X(Tint8,Tint32,  Tint32,Tint32,  Tint32)
+    X(Tint8,Tuns32,  Tuns32,Tuns32,  Tuns32)
+    X(Tint8,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tint8,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tint8,Tint128, Tint128,Tint128, Tint128)
+    X(Tint8,Tuns128, Tuns128,Tuns128, Tuns128)
+
+    X(Tint8,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tint8,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tint8,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tint8,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tint8,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tint8,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tint8,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tint8,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tint8,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tuns8,Tuns8,   Tint32,Tint32,  Tint32)
+    X(Tuns8,Tint16,  Tint32,Tint32,  Tint32)
+    X(Tuns8,Tuns16,  Tint32,Tint32,  Tint32)
+    X(Tuns8,Tint32,  Tint32,Tint32,  Tint32)
+    X(Tuns8,Tuns32,  Tuns32,Tuns32,  Tuns32)
+    X(Tuns8,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tuns8,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tuns8,Tint128,  Tint128,Tint128,  Tint128)
+    X(Tuns8,Tuns128,  Tuns128,Tuns128,  Tuns128)
+
+    X(Tuns8,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tuns8,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tuns8,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tuns8,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tuns8,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tuns8,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tuns8,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tuns8,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tuns8,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tint16,Tint16,  Tint32,Tint32,  Tint32)
+    X(Tint16,Tuns16,  Tint32,Tint32,  Tint32)
+    X(Tint16,Tint32,  Tint32,Tint32,  Tint32)
+    X(Tint16,Tuns32,  Tuns32,Tuns32,  Tuns32)
+    X(Tint16,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tint16,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tint16,Tint128,  Tint128,Tint128,  Tint128)
+    X(Tint16,Tuns128,  Tuns128,Tuns128,  Tuns128)
+
+    X(Tint16,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tint16,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tint16,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tint16,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tint16,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tint16,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tint16,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tint16,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tint16,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tuns16,Tuns16,  Tint32,Tint32,  Tint32)
+    X(Tuns16,Tint32,  Tint32,Tint32,  Tint32)
+    X(Tuns16,Tuns32,  Tuns32,Tuns32,  Tuns32)
+    X(Tuns16,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tuns16,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tuns16,Tint128, Tint128,Tint128,  Tint128)
+    X(Tuns16,Tuns128, Tuns128,Tuns128,  Tuns128)
+
+    X(Tuns16,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tuns16,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tuns16,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tuns16,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tuns16,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tuns16,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tuns16,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tuns16,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tuns16,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tint32,Tint32,  Tint32,Tint32,  Tint32)
+    X(Tint32,Tuns32,  Tuns32,Tuns32,  Tuns32)
+    X(Tint32,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tint32,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tint32,Tint128, Tint128,Tint128,  Tint128)
+    X(Tint32,Tuns128, Tuns128,Tuns128,  Tuns128)
+
+    X(Tint32,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tint32,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tint32,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tint32,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tint32,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tint32,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tint32,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tint32,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tint32,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tuns32,Tuns32,  Tuns32,Tuns32,  Tuns32)
+    X(Tuns32,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tuns32,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tuns32,Tint128,  Tint128,Tint128,  Tint128)
+    X(Tuns32,Tuns128,  Tuns128,Tuns128,  Tuns128)
+
+    X(Tuns32,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tuns32,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tuns32,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tuns32,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tuns32,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tuns32,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tuns32,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tuns32,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tuns32,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tint64,Tint64,  Tint64,Tint64,  Tint64)
+    X(Tint64,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tint64,Tint128,  Tint128,Tint128,  Tint128)
+    X(Tint64,Tuns128,  Tuns128,Tuns128,  Tuns128)
+
+    X(Tint64,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tint64,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tint64,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tint64,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tint64,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tint64,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tint64,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tint64,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tint64,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tuns64,Tuns64,  Tuns64,Tuns64,  Tuns64)
+    X(Tuns64,Tint128,  Tint128,Tint128,  Tint128)
+    X(Tuns64,Tuns128,  Tuns128,Tuns128,  Tuns128)
+
+    X(Tuns64,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tuns64,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tuns64,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tuns64,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tuns64,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tuns64,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tuns64,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tuns64,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tuns64,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tint128,Tint128,  Tint128,Tint128,  Tint128)
+    X(Tint128,Tuns128,  Tuns128,Tuns128,  Tuns128)
+
+    X(Tint128,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tint128,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tint128,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tint128,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tint128,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tint128,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tint128,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tint128,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tint128,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tuns128,Tuns128,  Tuns128,Tuns128,  Tuns128)
+
+    X(Tuns128,Tfloat32,     Tfloat32,Tfloat32,     Tfloat32)
+    X(Tuns128,Tfloat64,     Tfloat64,Tfloat64,     Tfloat64)
+    X(Tuns128,Tfloat80,     Tfloat80,Tfloat80,     Tfloat80)
+    X(Tuns128,Timaginary32, Tfloat32,Timaginary32, Tfloat32)
+    X(Tuns128,Timaginary64, Tfloat64,Timaginary64, Tfloat64)
+    X(Tuns128,Timaginary80, Tfloat80,Timaginary80, Tfloat80)
+    X(Tuns128,Tcomplex32,   Tfloat32,Tcomplex32,   Tcomplex32)
+    X(Tuns128,Tcomplex64,   Tfloat64,Tcomplex64,   Tcomplex64)
+    X(Tuns128,Tcomplex80,   Tfloat80,Tcomplex80,   Tcomplex80)
+
+    /* ======================= */
+
+    X(Tfloat32,Tfloat32,  Tfloat32,Tfloat32, Tfloat32)
+    X(Tfloat32,Tfloat64,  Tfloat64,Tfloat64, Tfloat64)
+    X(Tfloat32,Tfloat80,  Tfloat80,Tfloat80, Tfloat80)
+
+    X(Tfloat32,Timaginary32,  Tfloat32,Timaginary32, Tfloat32)
+    X(Tfloat32,Timaginary64,  Tfloat64,Timaginary64, Tfloat64)
+    X(Tfloat32,Timaginary80,  Tfloat80,Timaginary80, Tfloat80)
+
+    X(Tfloat32,Tcomplex32,  Tfloat32,Tcomplex32, Tcomplex32)
+    X(Tfloat32,Tcomplex64,  Tfloat64,Tcomplex64, Tcomplex64)
+    X(Tfloat32,Tcomplex80,  Tfloat80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Tfloat64,Tfloat64,  Tfloat64,Tfloat64, Tfloat64)
+    X(Tfloat64,Tfloat80,  Tfloat80,Tfloat80, Tfloat80)
+
+    X(Tfloat64,Timaginary32,  Tfloat64,Timaginary64, Tfloat64)
+    X(Tfloat64,Timaginary64,  Tfloat64,Timaginary64, Tfloat64)
+    X(Tfloat64,Timaginary80,  Tfloat80,Timaginary80, Tfloat80)
+
+    X(Tfloat64,Tcomplex32,  Tfloat64,Tcomplex64, Tcomplex64)
+    X(Tfloat64,Tcomplex64,  Tfloat64,Tcomplex64, Tcomplex64)
+    X(Tfloat64,Tcomplex80,  Tfloat80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Tfloat80,Tfloat80,  Tfloat80,Tfloat80, Tfloat80)
+
+    X(Tfloat80,Timaginary32,  Tfloat80,Timaginary80, Tfloat80)
+    X(Tfloat80,Timaginary64,  Tfloat80,Timaginary80, Tfloat80)
+    X(Tfloat80,Timaginary80,  Tfloat80,Timaginary80, Tfloat80)
+
+    X(Tfloat80,Tcomplex32,  Tfloat80,Tcomplex80, Tcomplex80)
+    X(Tfloat80,Tcomplex64,  Tfloat80,Tcomplex80, Tcomplex80)
+    X(Tfloat80,Tcomplex80,  Tfloat80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Timaginary32,Timaginary32,  Timaginary32,Timaginary32, Timaginary32)
+    X(Timaginary32,Timaginary64,  Timaginary64,Timaginary64, Timaginary64)
+    X(Timaginary32,Timaginary80,  Timaginary80,Timaginary80, Timaginary80)
+
+    X(Timaginary32,Tcomplex32,  Timaginary32,Tcomplex32, Tcomplex32)
+    X(Timaginary32,Tcomplex64,  Timaginary64,Tcomplex64, Tcomplex64)
+    X(Timaginary32,Tcomplex80,  Timaginary80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Timaginary64,Timaginary64,  Timaginary64,Timaginary64, Timaginary64)
+    X(Timaginary64,Timaginary80,  Timaginary80,Timaginary80, Timaginary80)
+
+    X(Timaginary64,Tcomplex32,  Timaginary64,Tcomplex64, Tcomplex64)
+    X(Timaginary64,Tcomplex64,  Timaginary64,Tcomplex64, Tcomplex64)
+    X(Timaginary64,Tcomplex80,  Timaginary80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Timaginary80,Timaginary80,  Timaginary80,Timaginary80, Timaginary80)
+
+    X(Timaginary80,Tcomplex32,  Timaginary80,Tcomplex80, Tcomplex80)
+    X(Timaginary80,Tcomplex64,  Timaginary80,Tcomplex80, Tcomplex80)
+    X(Timaginary80,Tcomplex80,  Timaginary80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Tcomplex32,Tcomplex32,  Tcomplex32,Tcomplex32, Tcomplex32)
+    X(Tcomplex32,Tcomplex64,  Tcomplex64,Tcomplex64, Tcomplex64)
+    X(Tcomplex32,Tcomplex80,  Tcomplex80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Tcomplex64,Tcomplex64,  Tcomplex64,Tcomplex64, Tcomplex64)
+    X(Tcomplex64,Tcomplex80,  Tcomplex80,Tcomplex80, Tcomplex80)
+
+    /* ======================= */
+
+    X(Tcomplex80,Tcomplex80,  Tcomplex80,Tcomplex80, Tcomplex80)
+
+#undef X
+
+#define Y(t1,t2)        impcnvWarnTab[t1][t2] = 1;
+
+    Y(Tuns8, Tint8)
+    Y(Tint16, Tint8)
+    Y(Tuns16, Tint8)
+    Y(Tint32, Tint8)
+    Y(Tuns32, Tint8)
+    Y(Tint64, Tint8)
+    Y(Tuns64, Tint8)
+    Y(Tint128, Tint8)
+    Y(Tuns128, Tint8)
+
+    Y(Tint8, Tuns8)
+    Y(Tint16, Tuns8)
+    Y(Tuns16, Tuns8)
+    Y(Tint32, Tuns8)
+    Y(Tuns32, Tuns8)
+    Y(Tint64, Tuns8)
+    Y(Tuns64, Tuns8)
+    Y(Tint128, Tuns8)
+    Y(Tuns128, Tuns8)
+
+    Y(Tint8, Tchar)
+    Y(Tint16, Tchar)
+    Y(Tuns16, Tchar)
+    Y(Tint32, Tchar)
+    Y(Tuns32, Tchar)
+    Y(Tint64, Tchar)
+    Y(Tuns64, Tchar)
+    Y(Tint128, Tchar)
+    Y(Tuns128, Tchar)
+
+    Y(Tuns16, Tint16)
+    Y(Tint32, Tint16)
+    Y(Tuns32, Tint16)
+    Y(Tint64, Tint16)
+    Y(Tuns64, Tint16)
+    Y(Tint128, Tint16)
+    Y(Tuns128, Tint16)
+
+    Y(Tint16, Tuns16)
+    Y(Tint32, Tuns16)
+    Y(Tuns32, Tuns16)
+    Y(Tint64, Tuns16)
+    Y(Tuns64, Tuns16)
+    Y(Tint128, Tuns16)
+    Y(Tuns128, Tuns16)
+
+    Y(Tint16, Twchar)
+    Y(Tint32, Twchar)
+    Y(Tuns32, Twchar)
+    Y(Tint64, Twchar)
+    Y(Tuns64, Twchar)
+    Y(Tint128, Twchar)
+    Y(Tuns128, Twchar)
+
+//    Y(Tuns32, Tint32)
+    Y(Tint64, Tint32)
+    Y(Tuns64, Tint32)
+    Y(Tint128, Tint32)
+    Y(Tuns128, Tint32)
+
+//    Y(Tint32, Tuns32)
+    Y(Tint64, Tuns32)
+    Y(Tuns64, Tuns32)
+    Y(Tint128, Tuns32)
+    Y(Tuns128, Tuns32)
+
+    Y(Tint64, Tdchar)
+    Y(Tuns64, Tdchar)
+    Y(Tint128, Tdchar)
+    Y(Tuns128, Tdchar)
+
+//    Y(Tint64, Tuns64)
+//    Y(Tuns64, Tint64)
+    Y(Tint128, Tint64)
+    Y(Tuns128, Tint64)
+    Y(Tint128, Tuns64)
+    Y(Tuns128, Tuns64)
+
+//    Y(Tint128, Tuns128)
+//    Y(Tuns128, Tint128)
+
+    for (i = 0; i < TMAX; i++)
+        for (j = 0; j < TMAX; j++)
+        {
+            if (impcnvResultTab[i][j] == Terror)
+            {
+                impcnvResultTab[i][j] = impcnvResultTab[j][i];
+                impcnvType1Tab[i][j] = impcnvType2Tab[j][i];
+                impcnvType2Tab[i][j] = impcnvType1Tab[j][i];
+            }
+        }
+}
+
+int main()
+{
+    int i;
+    int j;
+
+    init();
+
+    {
+        FILE *fp = fopen("impcnvtab.c","wb");
+
+        fprintf(fp,"// This file is generated by impcnvgen.c\n");
+        fprintf(fp,"#include \"mtype.h\"\n");
+
+        fprintf(fp,"unsigned char impcnvResult[TMAX][TMAX] =\n{\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",");
+            fprintf(fp, "{");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d",impcnvResultTab[i][j]);
+            }
+            fprintf(fp, "}\n");
+        }
+        fprintf(fp,"};\n");
+
+        fprintf(fp,"unsigned char impcnvType1[TMAX][TMAX] =\n{\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",");
+            fprintf(fp, "{");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d",impcnvType1Tab[i][j]);
+            }
+            fprintf(fp, "}\n");
+        }
+        fprintf(fp,"};\n");
+
+        fprintf(fp,"unsigned char impcnvType2[TMAX][TMAX] =\n{\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",");
+            fprintf(fp, "{");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d",impcnvType2Tab[i][j]);
+            }
+            fprintf(fp, "}\n");
+        }
+        fprintf(fp,"};\n");
+
+        fprintf(fp,"unsigned char impcnvWarn[TMAX][TMAX] =\n{\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",");
+            fprintf(fp, "{");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d",impcnvWarnTab[i][j]);
+            }
+            fprintf(fp, "}\n");
+        }
+        fprintf(fp,"};\n");
+
+        fclose(fp);
+    }
+
+    {
+        FILE *fp = fopen("impcnvtab.d", "wb");
+
+        fprintf(fp, "// This file is generated by impcnvgen.c\n");
+        fprintf(fp, "module ddmd.impcnvtab;\n");
+        fprintf(fp, "\n");
+        fprintf(fp, "import ddmd.mtype;\n");
+        fprintf(fp, "\n");
+
+        fprintf(fp, "extern (C++) __gshared ubyte[TMAX][TMAX] impcnvResult =\n[\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",\n");
+            fprintf(fp, "    [");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d", impcnvResultTab[i][j]);
+            }
+            fprintf(fp, "]");
+        }
+        fprintf(fp, "\n];\n");
+
+        fprintf(fp, "extern (C++) __gshared ubyte[TMAX][TMAX] impcnvType1 =\n[\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",\n");
+            fprintf(fp, "    [");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d", impcnvType1Tab[i][j]);
+            }
+            fprintf(fp, "]");
+        }
+        fprintf(fp, "\n];\n");
+
+        fprintf(fp, "extern (C++) __gshared ubyte[TMAX][TMAX] impcnvType2 =\n[\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",\n");
+            fprintf(fp, "    [");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d",impcnvType2Tab[i][j]);
+            }
+            fprintf(fp, "]");
+        }
+        fprintf(fp,"\n];\n");
+
+        fprintf(fp,"extern (C++) __gshared ubyte[TMAX][TMAX] impcnvWarn =\n[\n");
+        for (i = 0; i < TMAX; i++)
+        {
+            if (i)
+                fprintf(fp, ",\n");
+            fprintf(fp, "    [");
+            for (j = 0; j < TMAX; j++)
+            {
+                if (j)
+                    fprintf(fp, ",");
+                fprintf(fp, "%d", impcnvWarnTab[i][j]);
+            }
+            fprintf(fp, "]");
+        }
+        fprintf(fp, "\n];\n");
+
+        fclose(fp);
+    }
+
+    return EXIT_SUCCESS;
+}