summaryrefslogtreecommitdiff
path: root/cgcalc.c
diff options
context:
space:
mode:
authorJohn van Groningen2004-07-12 14:26:40 +0000
committerJohn van Groningen2004-07-12 14:26:40 +0000
commit5fd3638b200ddd7c901449347ae3b003bb31683b (patch)
treef7ea535d8601c15d5e3ba52290226f4bab849200 /cgcalc.c
parentuse transition vector for calling functions with ccall "F" (diff)
add absR, negI, unsigned compare, divU, remU and faster not
instructions for IA32 add loop optimization code (speeds up jmp to a cmp and branch instruction), not yet enabled
Diffstat (limited to 'cgcalc.c')
-rw-r--r--cgcalc.c60
1 files changed, 57 insertions, 3 deletions
diff --git a/cgcalc.c b/cgcalc.c
index 771457b..73b0504 100644
--- a/cgcalc.c
+++ b/cgcalc.c
@@ -571,7 +571,7 @@ static void calculate_dyadic_non_commutative_data_operator (INSTRUCTION_GRAPH gr
return;
}
-static void calculate_mod_operator (INSTRUCTION_GRAPH graph)
+static void calculate_rem_operator (INSTRUCTION_GRAPH graph)
{
register INSTRUCTION_GRAPH graph_1,graph_2;
int i_aregs,i_dregs;
@@ -2264,8 +2264,10 @@ void calculate_graph_register_uses (INSTRUCTION_GRAPH graph)
calculate_dyadic_commutative_data_operator (graph);
return;
case GCMP_EQ:
- case GCMP_LT:
case GCMP_GT:
+ case GCMP_GTU:
+ case GCMP_LT:
+ case GCMP_LTU:
calculate_compare_operator (graph);
return;
case GSUB:
@@ -2273,10 +2275,16 @@ void calculate_graph_register_uses (INSTRUCTION_GRAPH graph)
calculate_dyadic_non_commutative_operator (graph);
return;
case GDIV:
+#ifdef I486
+ case GDIVU:
+#endif
calculate_dyadic_non_commutative_data_operator (graph);
return;
case GMOD:
- calculate_mod_operator (graph);
+#ifdef I486
+ case GREMU:
+#endif
+ calculate_rem_operator (graph);
return;
case GLSL:
case GLSR:
@@ -2299,6 +2307,10 @@ void calculate_graph_register_uses (INSTRUCTION_GRAPH graph)
calculate_eor_operator (graph);
return;
case GCNOT:
+#ifdef I486
+ case GNEG:
+ case GNOT:
+#endif
calculate_cnot_operator (graph);
return;
case GMOVEMI:
@@ -2330,6 +2342,9 @@ void calculate_graph_register_uses (INSTRUCTION_GRAPH graph)
case GFEXP:
case GFSQRT:
case GFNEG:
+#ifdef I486
+ case GFABS:
+#endif
calculate_monadic_float_operator (graph);
return;
case GFLOAD_ID:
@@ -2468,8 +2483,13 @@ void count_graph (INSTRUCTION_GRAPH graph)
case GAND:
case GCMP_EQ:
case GCMP_GT:
+ case GCMP_GTU:
case GCMP_LT:
+ case GCMP_LTU:
case GDIV:
+#ifdef I486
+ case GDIVU:
+#endif
case GFADD:
case GFCMP_EQ:
case GFCMP_GT:
@@ -2482,6 +2502,9 @@ void count_graph (INSTRUCTION_GRAPH graph)
case GLSL:
case GLSR:
case GMOD:
+#ifdef I486
+ case GREMU:
+#endif
case GMUL:
case GMUL_O:
case GOR:
@@ -2515,6 +2538,11 @@ void count_graph (INSTRUCTION_GRAPH graph)
case GFEXP:
case GFSQRT:
case GFNEG:
+#ifdef I486
+ case GFABS:
+ case GNEG:
+ case GNOT:
+#endif
case GBEFORE0:
case GTEST_O:
if (++graph->node_count==1)
@@ -2620,8 +2648,13 @@ void mark_graph_2 (register INSTRUCTION_GRAPH graph)
case GAND:
case GCMP_EQ:
case GCMP_GT:
+ case GCMP_GTU:
case GCMP_LT:
+ case GCMP_LTU:
case GDIV:
+#ifdef I486
+ case GDIVU:
+#endif
case GFADD:
case GFCMP_EQ:
case GFCMP_GT:
@@ -2634,6 +2667,9 @@ void mark_graph_2 (register INSTRUCTION_GRAPH graph)
case GLSL:
case GLSR:
case GMOD:
+#ifdef I486
+ case GREMU:
+#endif
case GMUL:
case GMUL_O:
case GOR:
@@ -2668,6 +2704,11 @@ void mark_graph_2 (register INSTRUCTION_GRAPH graph)
case GFEXP:
case GFSQRT:
case GFNEG:
+#ifdef I486
+ case GFABS:
+ case GNEG:
+ case GNOT:
+#endif
case GBEFORE0:
case GTEST_O:
if (graph->node_mark<2){
@@ -2787,8 +2828,13 @@ void mark_graph_1 (register INSTRUCTION_GRAPH graph)
case GAND:
case GCMP_EQ:
case GCMP_GT:
+ case GCMP_GTU:
case GCMP_LT:
+ case GCMP_LTU:
case GDIV:
+#ifdef I486
+ case GDIVU:
+#endif
case GFADD:
case GFCMP_EQ:
case GFCMP_GT:
@@ -2801,6 +2847,9 @@ void mark_graph_1 (register INSTRUCTION_GRAPH graph)
case GLSL:
case GLSR:
case GMOD:
+#ifdef I486
+ case GREMU:
+#endif
case GMUL:
case GMUL_O:
case GOR:
@@ -2833,6 +2882,11 @@ void mark_graph_1 (register INSTRUCTION_GRAPH graph)
case GFEXP:
case GFSQRT:
case GFNEG:
+#ifdef I486
+ case GFABS:
+ case GNEG:
+ case GNOT:
+#endif
case GBEFORE0:
case GTEST_O:
if (!graph->node_mark){