aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandreao <andreao@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-20 13:26:59 +0000
committerandreao <andreao@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-20 13:26:59 +0000
commite072efd02841406fb24d0f0fb76da4ce7ae1ae3b (patch)
tree42819d1e27ca6b30b1a7fad46c92120153f678f9
parent82b71061980ff57113a24d41d62d3f3e0a07975d (diff)
use names defined in cil-types.def when emitting cil
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/st/cli-be@149815 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/config/cil32/cil-dump.c14
-rw-r--r--gcc/config/cil32/cil-types.def33
-rw-r--r--gcc/config/cil32/emit-cil.c170
-rw-r--r--gcc/config/cil32/t-cil324
4 files changed, 77 insertions, 144 deletions
diff --git a/gcc/config/cil32/cil-dump.c b/gcc/config/cil32/cil-dump.c
index bef41f9e3a7..0807e84683a 100644
--- a/gcc/config/cil32/cil-dump.c
+++ b/gcc/config/cil32/cil-dump.c
@@ -59,7 +59,6 @@ static const char* const cil_names[] = {
#undef CIL_INSTRDEF
};
-
static const char* const cil_type_names[] = {
#define CIL_TYPEDEF(A,B) B,
#include "cil-types.def"
@@ -166,22 +165,19 @@ dump_type (const_tree type)
{
printf ("void");
}
+ else if (TREE_CODE (type) == COMPLEX_TYPE)
+ {
+ printf ("complex_type ");
+ dump_type (TREE_TYPE (type));
+ }
else
{
cil_type_t cil_type = type_to_cil (type);
switch (cil_type)
{
case CIL_VALUE_TYPE:
- if (TREE_CODE (type) == COMPLEX_TYPE)
- {
- printf ("complex_type ");
- dump_type (TREE_TYPE (type));
- }
- else
- {
printf ("value_type ");
dump_valuetype_name (TYPE_MAIN_VARIANT (type));
- }
break;
case CIL_POINTER:
if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
diff --git a/gcc/config/cil32/cil-types.def b/gcc/config/cil32/cil-types.def
index fa81e901a30..68833baf30d 100644
--- a/gcc/config/cil32/cil-types.def
+++ b/gcc/config/cil32/cil-types.def
@@ -34,6 +34,7 @@ Erven Rohou <erven.rohou@inria.fr>
CIL_TYPEDEF(CIL_symbol,printable name)
Where symbol is the enumeration name without the ``CIL_''.
+ The printable name is used in the emit-cil pass.
*/
@@ -45,10 +46,10 @@ CIL_TYPEDEF(CIL_INT32,"int32") /* Signed 32-bit integer */
CIL_TYPEDEF(CIL_INT64,"int64") /* Signed 64-bit integer */
CIL_TYPEDEF(CIL_NATIVE_INT,"native_int") /* Signed native integer */
-CIL_TYPEDEF(CIL_UNSIGNED_INT8,"uint8") /* Unsigned 8-bit integer */
-CIL_TYPEDEF(CIL_UNSIGNED_INT16,"uint16") /* Unsigned 16-bit integer */
-CIL_TYPEDEF(CIL_UNSIGNED_INT32,"uint32") /* Unsigned 32-bit integer */
-CIL_TYPEDEF(CIL_UNSIGNED_INT64,"uint64") /* Unsigned 64-bit integer */
+CIL_TYPEDEF(CIL_UNSIGNED_INT8,"unsigned int8") /* Unsigned 8-bit integer */
+CIL_TYPEDEF(CIL_UNSIGNED_INT16,"unsigned int16") /* Unsigned 16-bit integer */
+CIL_TYPEDEF(CIL_UNSIGNED_INT32,"unsigned int32") /* Unsigned 32-bit integer */
+CIL_TYPEDEF(CIL_UNSIGNED_INT64,"unsigned int64") /* Unsigned 64-bit integer */
CIL_TYPEDEF(CIL_NATIVE_UNSIGNED_INT,"native_uint") /* Unsigned native integer */
CIL_TYPEDEF(CIL_FLOAT,"float") /* On-stack floating-point type*/
@@ -60,19 +61,19 @@ CIL_TYPEDEF(CIL_POINTER,"pointer") /* Generic pointer */
CIL_TYPEDEF(CIL_VALUE_TYPE,"value_type") /* Generic value type */
/* 4-byte vector types */
-CIL_TYPEDEF(CIL_V2HI,"v2hi") /* Vector of 2 16-bit integers */
-CIL_TYPEDEF(CIL_V4QI,"v4qi") /* Vector of 4 8-bit integers */
+CIL_TYPEDEF(CIL_V2HI,"V2HI") /* Vector of 2 16-bit integers */
+CIL_TYPEDEF(CIL_V4QI,"V4QI") /* Vector of 4 8-bit integers */
/* 8-byte vector types */
-CIL_TYPEDEF(CIL_V2SI,"v2si") /* Vector of 2 32-bit integers */
-CIL_TYPEDEF(CIL_V4HI,"v4hi") /* Vector of 4 16-bit integers */
-CIL_TYPEDEF(CIL_V8QI,"v8qi") /* Vector of 8 8-bit integers */
-CIL_TYPEDEF(CIL_V2SF,"v2sf") /* Vector of 2 32-bit single precision floats */
+CIL_TYPEDEF(CIL_V2SI,"V2SI") /* Vector of 2 32-bit integers */
+CIL_TYPEDEF(CIL_V4HI,"V4HI") /* Vector of 4 16-bit integers */
+CIL_TYPEDEF(CIL_V8QI,"V8QI") /* Vector of 8 8-bit integers */
+CIL_TYPEDEF(CIL_V2SF,"V2SF") /* Vector of 2 32-bit single precision floats */
/* 16-byte vector types */
-CIL_TYPEDEF(CIL_V2DI,"v2di") /* Vector of 2 64-bit integers */
-CIL_TYPEDEF(CIL_V4SI,"v4si") /* Vector of 4 32-bit integers */
-CIL_TYPEDEF(CIL_V8HI,"v8hi") /* Vector of 8 16-bit integers */
-CIL_TYPEDEF(CIL_V16QI,"v16qi") /* Vector of 16 8-bit integers */
-CIL_TYPEDEF(CIL_V2DF,"v2df") /* Vector of 2 64-bit double precision floats */
-CIL_TYPEDEF(CIL_V4SF,"v4sf") /* Vector of 4 32-bit single precision floats */
+CIL_TYPEDEF(CIL_V2DI,"V2DI") /* Vector of 2 64-bit integers */
+CIL_TYPEDEF(CIL_V4SI,"V4SI") /* Vector of 4 32-bit integers */
+CIL_TYPEDEF(CIL_V8HI,"V8HI") /* Vector of 8 16-bit integers */
+CIL_TYPEDEF(CIL_V16QI,"V16QI") /* Vector of 16 8-bit integers */
+CIL_TYPEDEF(CIL_V2DF,"V2DF") /* Vector of 2 64-bit double precision floats */
+CIL_TYPEDEF(CIL_V4SF,"V4SF") /* Vector of 4 32-bit single precision floats */
diff --git a/gcc/config/cil32/emit-cil.c b/gcc/config/cil32/emit-cil.c
index a43c7ebefd2..b061c074c8d 100644
--- a/gcc/config/cil32/emit-cil.c
+++ b/gcc/config/cil32/emit-cil.c
@@ -88,6 +88,12 @@ static const char* const cil_names[] = {
#undef CIL_INSTRDEF
};
+static const char* const cil_type_names[] = {
+#define CIL_TYPEDEF(A,B) B,
+#include "cil-types.def"
+#undef CIL_TYPEDEF
+};
+
/******************************************************************************
* Local function prototypes *
******************************************************************************/
@@ -497,87 +503,63 @@ dump_vector_type (FILE *file, tree node)
if (simd_type == MONO_SIMD)
{
/* Mono.Simd types */
- fprintf (file, "valuetype [Mono.Simd]Mono.Simd.Vector");
-
+ const char* suffix;
switch (cil_type)
{
- case CIL_V2HI: fprintf (file, "2s"); break;
- case CIL_V4QI: fprintf (file, "4sb"); break;
- case CIL_V2SI: fprintf (file, "2i"); break;
- case CIL_V4HI: fprintf (file, "4s"); break;
- case CIL_V8QI: fprintf (file, "8sb"); break;
- case CIL_V2SF: fprintf (file, "2f"); break;
- case CIL_V2DI: fprintf (file, "2l"); break;
- case CIL_V4SI: fprintf (file, "4i"); break;
- case CIL_V8HI: fprintf (file, "8s"); break;
- case CIL_V16QI:fprintf (file, "16sb");break;
- case CIL_V2DF: fprintf (file, "2d"); break;
- case CIL_V4SF: fprintf (file, "4f"); break;
- default:
- gcc_unreachable ();
- break;
- }
- }
- else
- {
- /* Gcc.Simd types */
- fprintf (file, "valuetype [gcc4net]gcc4net.");
-
- switch (cil_type)
- {
- case CIL_V2HI: fprintf (file, "V2HI"); break;
- case CIL_V4QI: fprintf (file, "V4QI"); break;
- case CIL_V2SI: fprintf (file, "V2SI"); break;
- case CIL_V4HI: fprintf (file, "V4HI"); break;
- case CIL_V8QI: fprintf (file, "V8QI"); break;
- case CIL_V2SF: fprintf (file, "V2SF"); break;
- case CIL_V2DI: fprintf (file, "V2DI"); break;
- case CIL_V4SI: fprintf (file, "V4SI"); break;
- case CIL_V8HI: fprintf (file, "V8HI"); break;
- case CIL_V16QI:fprintf (file, "V16QI");break;
- case CIL_V2DF: fprintf (file, "V2DF"); break;
- case CIL_V4SF: fprintf (file, "V4SF"); break;
- break;
-
+ case CIL_V2HI: suffix = "2s"; break;
+ case CIL_V4QI: suffix = "4sb"; break;
+ case CIL_V2SI: suffix = "2i"; break;
+ case CIL_V4HI: suffix = "4s"; break;
+ case CIL_V8QI: suffix = "8sb"; break;
+ case CIL_V2SF: suffix = "2f"; break;
+ case CIL_V2DI: suffix = "2l"; break;
+ case CIL_V4SI: suffix = "4i"; break;
+ case CIL_V8HI: suffix = "8s"; break;
+ case CIL_V16QI:suffix = "16sb";break;
+ case CIL_V2DF: suffix = "2d"; break;
+ case CIL_V4SF: suffix = "4f"; break;
default:
gcc_unreachable ();
break;
}
+ fprintf (file, "valuetype [Mono.Simd]Mono.Simd.Vector%s", suffix);
}
+ else /* Gcc.Simd types */
+ fprintf (file, "valuetype [gcc4net]gcc4net.%s", cil_type_names [cil_type]);
}
static void
dump_complex_type (FILE *file, tree node)
{
tree elem_type;
+ const char* suffix;
gcc_assert (TREE_CODE (node) == COMPLEX_TYPE);
elem_type = TYPE_MAIN_VARIANT (TREE_TYPE (node));
- fprintf (file, "valuetype [gcc4net]gcc4net.complex_");
switch (scalar_to_cil (elem_type))
{
- case CIL_INT8: fprintf (file, "char"); break;
- case CIL_INT16: fprintf (file, "short"); break;
- case CIL_INT32: fprintf (file, "int"); break;
- case CIL_INT64: fprintf (file, "long"); break;
+ case CIL_INT8: suffix = "char"; break;
+ case CIL_INT16: suffix = "short"; break;
+ case CIL_INT32: suffix = "int"; break;
+ case CIL_INT64: suffix = "long"; break;
- case CIL_UNSIGNED_INT8: fprintf (file, "uchar"); break;
- case CIL_UNSIGNED_INT16: fprintf (file, "ushort"); break;
- case CIL_UNSIGNED_INT32: fprintf (file, "uint"); break;
- case CIL_UNSIGNED_INT64: fprintf (file, "ulong"); break;
+ case CIL_UNSIGNED_INT8: suffix = "uchar"; break;
+ case CIL_UNSIGNED_INT16: suffix = "ushort"; break;
+ case CIL_UNSIGNED_INT32: suffix = "uint"; break;
+ case CIL_UNSIGNED_INT64: suffix = "ulong"; break;
- case CIL_FLOAT32: fprintf (file, "float"); break;
- case CIL_FLOAT64: fprintf (file, "double"); break;
+ case CIL_FLOAT32: suffix = "float"; break;
+ case CIL_FLOAT64: suffix = "double"; break;
case CIL_FLOAT:
{
unsigned HOST_WIDE_INT size = tree_low_cst (TYPE_SIZE (elem_type), 1);
gcc_assert (size == 32 || size == 64);
- if (size == 32) fprintf (file, "float");
- else fprintf (file, "double");
+ if (size == 32) suffix = "float";
+ else suffix = "double";
}
break;
@@ -585,6 +567,7 @@ dump_complex_type (FILE *file, tree node)
gcc_unreachable ();
break;
}
+ fprintf (file, "valuetype [gcc4net]gcc4net.complex_%s", suffix);
}
static void
@@ -803,19 +786,6 @@ dump_type (FILE *file, tree type, bool ref, bool qualif)
dump_valuetype_name (file, TYPE_MAIN_VARIANT (type));
break;
- case CIL_INT8: fprintf (file, "int8"); break;
- case CIL_INT16: fprintf (file, "int16"); break;
- case CIL_INT32: fprintf (file, "int32"); break;
- case CIL_INT64: fprintf (file, "int64"); break;
-
- case CIL_UNSIGNED_INT8: fprintf (file, "unsigned int8"); break;
- case CIL_UNSIGNED_INT16: fprintf (file, "unsigned int16"); break;
- case CIL_UNSIGNED_INT32: fprintf (file, "unsigned int32"); break;
- case CIL_UNSIGNED_INT64: fprintf (file, "unsigned int64"); break;
-
- case CIL_FLOAT32: fprintf (file, "float32"); break;
- case CIL_FLOAT64: fprintf (file, "float64"); break;
-
case CIL_FLOAT:
{
unsigned HOST_WIDE_INT size = tree_low_cst (TYPE_SIZE (type), 1);
@@ -839,7 +809,7 @@ dump_type (FILE *file, tree type, bool ref, bool qualif)
break;
default:
- gcc_unreachable ();
+ fprintf (file, cil_type_names [cil_type]);
break;
}
@@ -934,69 +904,33 @@ dump_string_decl (FILE *file, tree t)
static bool
dump_type_promoted_type_def (FILE *file, tree node)
{
+ cil_type_t cil_type;
+
bool result = false;
- unsigned HOST_WIDE_INT size;
if (node == NULL_TREE || node == error_mark_node)
return false;
- switch (TREE_CODE (node))
+ cil_type = type_to_cil (node);
+
+ if (cil_type == CIL_VALUE_TYPE)
+ dump_type (file, node, true, false);
+ else if (cil_int_or_smaller_p(cil_type))
+ fprintf (file, "class [mscorlib]System.UInt32");
+ else if (cil_long_p(cil_type))
+ fprintf (file, "class [mscorlib]System.UInt64");
+ else if (cil_float_p(cil_type))
+ fprintf (file, "class [mscorlib]System.Double");
+ else if (cil_pointer_p(cil_type))
{
- /* Incomplete and variable-length arrays are pointers and
- they must be dealt with as such. */
- case ARRAY_TYPE:
- if (!TYPE_DOMAIN (node) || ARRAY_TYPE_VARLENGTH (node))
- goto pointer;
-
- case RECORD_TYPE:
- case UNION_TYPE:
- case QUAL_UNION_TYPE:
- node = TYPE_MAIN_VARIANT (node);
-
- /* Reference the type if told to do so */
- mark_referenced_type (node);
-
- /* Print the name of the structure. */
- fprintf (file, "valuetype ");
- dump_valuetype_name (file, node);
- break;
-
- case COMPLEX_TYPE:
- dump_complex_type (file, node);
- break;
-
- case ENUMERAL_TYPE:
- case INTEGER_TYPE:
- case BOOLEAN_TYPE:
- size = tree_low_cst (TYPE_SIZE (node), 1);
-
- if (size <= 32)
- fprintf (file, "class [mscorlib]System.UInt32");
- else if (size <= 64)
- fprintf (file, "class [mscorlib]System.UInt64");
- else
- {
- internal_error ("Unsupported integer size"
- HOST_WIDE_INT_PRINT_UNSIGNED"\n", size);
- }
- break;
-
- case REAL_TYPE:
- fprintf (file, "class [mscorlib]System.Double");
- break;
-
- pointer:
- case POINTER_TYPE:
/* cil32 is a 32bit machine, in case we support 64bit model
* changes are needed
*/
fprintf (file, "class [mscorlib]System.UInt32");
result = true;
- break;
-
- default:
- gcc_unreachable ();
}
+ else
+ gcc_unreachable ();
return result;
}
diff --git a/gcc/config/cil32/t-cil32 b/gcc/config/cil32/t-cil32
index 06c64e600c2..b07c6d4d2a5 100644
--- a/gcc/config/cil32/t-cil32
+++ b/gcc/config/cil32/t-cil32
@@ -70,7 +70,8 @@ cil-dump.o: $(srcdir)/config/cil32/cil-dump.c \
$(srcdir)/config/cil32/cil-refs.h \
$(srcdir)/config/cil32/cil-types.h \
$(srcdir)/config/cil32/cil-stack.h \
- $(srcdir)/config/cil32/cil-types.def $(srcdir)/config/cil32/cil-instr.def \
+ $(srcdir)/config/cil32/cil-instr.def \
+ $(srcdir)/config/cil32/cil-types.def \
$(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) langhooks.h $(TREE_H)
$(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $< $(OUTPUT_OPTION)
@@ -118,6 +119,7 @@ emit-cil.o : $(srcdir)/config/cil32/emit-cil.c \
$(srcdir)/config/cil32/emit-cil.h \
$(srcdir)/config/cil32/emit-hints.h \
$(srcdir)/config/cil32/cil-instr.def \
+ $(srcdir)/config/cil32/cil-types.def \
$(srcdir)/config/cil32/cil-refs.h \
$(srcdir)/config/cil32/cil-stack.h \
$(srcdir)/config/cil32/cil-stmt.h \