summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn van Groningen2008-10-31 15:51:02 +0000
committerJohn van Groningen2008-10-31 15:51:02 +0000
commitb32c757d27581b42a9d83e229828aead444741d7 (patch)
tree90ed4d736b17d435192f285a84b74956a4a0ca59
parentfix code generation for subtract of constant larger than 32 bits on AI64 (diff)
fix compare of constant of more than 32 bits (on 64 bit platforms)
-rw-r--r--cglin.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/cglin.c b/cglin.c
index 1d01d50..97cb6e8 100644
--- a/cglin.c
+++ b/cglin.c
@@ -3405,6 +3405,31 @@ static int compare_node (INSTRUCTION_GRAPH graph,int i_test_1,int i_test_2)
mode_1=ad_1.ad_mode;
mode_2=ad_2.ad_mode;
+#ifdef G_A64
+ if (mode_1==P_IMMEDIATE && ((int)ad_1.ad_offset)!=ad_1.ad_offset){
+ int dreg;
+
+ dreg=get_dregister();
+ i_move_i_r (ad_1.ad_offset,dreg);
+ mode_1=P_REGISTER;
+ ad_1.ad_mode=mode_1;
+ ad_1.ad_register=dreg;
+ ad_1.ad_count_p=&ad_1.ad_count;
+ ad_1.ad_count=1;
+ }
+ if (mode_2==P_IMMEDIATE && ((int)ad_2.ad_offset)!=ad_2.ad_offset){
+ int dreg;
+
+ dreg=get_dregister();
+ i_move_i_r (ad_2.ad_offset,dreg);
+ mode_2=P_REGISTER;
+ ad_2.ad_mode=mode_2;
+ ad_2.ad_register=dreg;
+ ad_2.ad_count_p=&ad_2.ad_count;
+ ad_2.ad_count=1;
+ }
+#endif
+
if (mode_1==P_IMMEDIATE && ! (mode_2==P_IMMEDIATE || mode_2==P_DESCRIPTOR_NUMBER)){
LONG i;
#ifdef M68000