aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandreao <andreao@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-16 16:09:38 +0000
committerandreao <andreao@138bc75d-0d04-0410-961f-82ee72b054a4>2009-07-16 16:09:38 +0000
commit747d15bd053719f4ecaed0779d31c5542e5366d6 (patch)
treeee2fe32ce15e743a88fff9f6b719ef264b900e1d
parent6a6542d59a55b3ceca663614099caf6015ff5c0d (diff)
emit_cil.c: simplify dump_type (use type_to_cil)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/st/cli-be@149711 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/config/cil32/cil-dump.c2
-rw-r--r--gcc/config/cil32/emit-cil.c136
2 files changed, 58 insertions, 80 deletions
diff --git a/gcc/config/cil32/cil-dump.c b/gcc/config/cil32/cil-dump.c
index 0873fb108f8..bef41f9e3a7 100644
--- a/gcc/config/cil32/cil-dump.c
+++ b/gcc/config/cil32/cil-dump.c
@@ -168,7 +168,7 @@ dump_type (const_tree type)
}
else
{
- cil_type_t cil_type = scalar_to_cil (type);
+ cil_type_t cil_type = type_to_cil (type);
switch (cil_type)
{
case CIL_VALUE_TYPE:
diff --git a/gcc/config/cil32/emit-cil.c b/gcc/config/cil32/emit-cil.c
index 06dc20039d6..793a56fe515 100644
--- a/gcc/config/cil32/emit-cil.c
+++ b/gcc/config/cil32/emit-cil.c
@@ -562,7 +562,7 @@ dump_complex_type (FILE *file, tree node)
case CIL_INT16: fprintf (file, "short"); break;
case CIL_INT32: fprintf (file, "int"); break;
case CIL_INT64: fprintf (file, "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;
@@ -758,7 +758,7 @@ emit_valuetype_decl (FILE *file, tree t)
static void
dump_type (FILE *file, tree type, bool ref, bool qualif)
{
- unsigned HOST_WIDE_INT size;
+ cil_type_t cil_type;
if (type == NULL_TREE || type == error_mark_node)
return;
@@ -768,92 +768,70 @@ dump_type (FILE *file, tree type, bool ref, bool qualif)
fprintf (file, "valuetype [mscorlib]System.ArgIterator");
return;
}
-
- switch (TREE_CODE (type))
+ else if (TREE_CODE (type) == VOID_TYPE)
{
- /* Incomplete and variable-length arrays are pointers and
- they must be dealt with as such. */
- case ARRAY_TYPE:
- if (!TYPE_DOMAIN (type) || ARRAY_TYPE_VARLENGTH (type))
- goto pointer;
-
- case ENUMERAL_TYPE:
- case RECORD_TYPE:
- case UNION_TYPE:
- case QUAL_UNION_TYPE:
- /* Reference the type if told to do so */
- if (ref)
- mark_referenced_type (TYPE_MAIN_VARIANT (type));
-
- /* Print the name of the structure. */
- fprintf (file, "valuetype ");
- dump_valuetype_name (file, TYPE_MAIN_VARIANT (type));
- break;
-
- case VOID_TYPE:
fprintf (file, "void");
- break;
+ return;
+ }
- case INTEGER_TYPE:
- fprintf (file, "%s", TYPE_UNSIGNED (type) ? "unsigned " : "");
- size = tree_low_cst (TYPE_SIZE (type), 1);
+ cil_type = type_to_cil (type);
- switch (size)
+ if (cil_vector_p (cil_type))
+ dump_vector_type (file, type);
+ else if (TREE_CODE (type) == COMPLEX_TYPE)
+ dump_complex_type (file, type);
+ else
+ switch (cil_type)
+ {
+ case CIL_VALUE_TYPE:
+ /* Reference the type if told to do so */
+ if (ref)
+ mark_referenced_type (TYPE_MAIN_VARIANT (type));
+
+ /* Print the name of the structure. */
+ fprintf (file, "valuetype ");
+ 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:
{
- case 8: fprintf (file, "int8"); break;
- case 16: fprintf (file, "int16"); break;
- case 32: fprintf (file, "int32"); break;
- case 64: fprintf (file, "int64"); break;
- default:
- internal_error ("Unsupported integer size "
- HOST_WIDE_INT_PRINT_UNSIGNED"\n", size);
- }
- break;
-
- case REAL_TYPE:
- size = tree_low_cst (TYPE_SIZE (type), 1);
+ unsigned HOST_WIDE_INT size = tree_low_cst (TYPE_SIZE (type), 1);
- gcc_assert (size == 32 || size == 64);
- fprintf (file, "float" HOST_WIDE_INT_PRINT_UNSIGNED, size);
- break;
-
- case BOOLEAN_TYPE:
- fprintf (file, "int8");
- break;
-
-pointer:
- case POINTER_TYPE:
- if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
- {
- fprintf (file, "method ");
- dump_fun_type (file, TREE_TYPE (type), NULL, " * ", ref);
+ gcc_assert (size == 32 || size == 64);
+ fprintf (file, "float" HOST_WIDE_INT_PRINT_UNSIGNED, size);
}
- else
- {
- dump_type (file, TREE_TYPE (type), ref, qualif);
- fprintf (file, " *");
- }
- break;
-
- case FUNCTION_TYPE:
-/* FIXME?
- dump_fun_type (file, node, NULL, NULL, ref); */
- gcc_unreachable ();
- break;
+ break;
- case VECTOR_TYPE:
- dump_vector_type (file, type);
- break;
-
- case COMPLEX_TYPE:
- dump_complex_type (file, type);
- break;
-
- case REFERENCE_TYPE:
+ case CIL_POINTER:
+ if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE)
+ {
+ fprintf (file, "method ");
+ dump_fun_type (file, TREE_TYPE (type), NULL, " * ", ref);
+ }
+ else
+ {
+ dump_type (file, TREE_TYPE (type), ref, qualif);
+ fprintf (file, " *");
+ }
+ break;
- default:
- gcc_unreachable ();
- }
+ default:
+ gcc_unreachable ();
+ break;
+ }
if (qualif)
{