aboutsummaryrefslogtreecommitdiff
path: root/gcc/f/com.c
diff options
context:
space:
mode:
authorBud Davis <bdavis9659@comcast.net>2003-03-22 13:01:08 +0000
committerToon Moene <toon@gcc.gnu.org>2003-03-22 13:01:08 +0000
commit6dd0f30b36df25e1e9b01f1253e08ae2d341b080 (patch)
tree8a407bae36a52fb2123c2e1a020e6fee6d41df06 /gcc/f/com.c
parentdcde977582f92d6e8e6b0df8862504be064dd3ec (diff)
downloadgcc-6dd0f30b36df25e1e9b01f1253e08ae2d341b080.zip
gcc-6dd0f30b36df25e1e9b01f1253e08ae2d341b080.tar.gz
gcc-6dd0f30b36df25e1e9b01f1253e08ae2d341b080.tar.bz2
com.c (ffecom_constantunion_with_type): New function.
2003-03-22 Bud Davis <bdavis9659@comcast.net> * com.c (ffecom_constantunion_with_type): New function. * com.h (ffecom_constantunion_with_type): Declare. * stc.c (ffestc_R810): Check for kind type. * ste.c (ffeste_R810): Use ffecom_constantunion_with_type to discern SELECT CASE variables. From-SVN: r64709
Diffstat (limited to 'gcc/f/com.c')
-rw-r--r--gcc/f/com.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/gcc/f/com.c b/gcc/f/com.c
index 0895485..b850774 100644
--- a/gcc/f/com.c
+++ b/gcc/f/com.c
@@ -10591,6 +10591,78 @@ ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt,
return item;
}
+/* Transform constant-union to tree, with the type known. */
+
+tree
+ffecom_constantunion_with_type (ffebldConstantUnion *cu,
+ tree tree_type, ffebldConst ct)
+{
+ tree item;
+
+ int val;
+
+ switch (ct)
+ {
+#if FFETARGET_okINTEGER1
+ case FFEBLD_constINTEGER1:
+ val = ffebld_cu_val_integer1 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okINTEGER2
+ case FFEBLD_constINTEGER2:
+ val = ffebld_cu_val_integer2 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okINTEGER3
+ case FFEBLD_constINTEGER3:
+ val = ffebld_cu_val_integer3 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okINTEGER4
+ case FFEBLD_constINTEGER4:
+ val = ffebld_cu_val_integer4 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL1
+ case FFEBLD_constLOGICAL1:
+ val = ffebld_cu_val_logical1 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL2
+ case FFEBLD_constLOGICAL2:
+ val = ffebld_cu_val_logical2 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL3
+ case FFEBLD_constLOGICAL3:
+ val = ffebld_cu_val_logical3 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+#if FFETARGET_okLOGICAL4
+ case FFEBLD_constLOGICAL4:
+ val = ffebld_cu_val_logical4 (*cu);
+ item = build_int_2 (val, (val < 0) ? -1 : 0);
+ break;
+#endif
+ default:
+ assert ("constant type not supported"==NULL);
+ return error_mark_node;
+ break;
+ }
+
+ TREE_TYPE (item) = tree_type;
+
+ TREE_CONSTANT (item) = 1;
+
+ return item;
+}
/* Transform expression into constant tree.
If the expression can be transformed into a tree that is constant,