summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn van Groningen2008-10-03 14:17:06 +0000
committerJohn van Groningen2008-10-03 14:17:06 +0000
commit2cacfde26f360f1b22725189af631594ee6571ba (patch)
treec676156140a130234e07730840c6426d6ae9d442
parentuse optimized jmp_ap_upd only on IA32 (diff)
fix code generation for subtract of constant larger than 32 bits on AI64
-rw-r--r--cglin.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/cglin.c b/cglin.c
index 194ed0a..1d01d50 100644
--- a/cglin.c
+++ b/cglin.c
@@ -3743,6 +3743,20 @@ static void linearize_dyadic_non_commutative_operator (int i_instruction_code,IN
in_alterable_data_register (&ad_2);
else
in_alterable_address_register (&ad_2);
+
+#ifdef G_A64
+ if (ad_1.ad_mode==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);
+ ad_1.ad_mode=P_REGISTER;
+ ad_1.ad_register=dreg;
+ ad_1.ad_count_p=&ad_1.ad_count;
+ ad_1.ad_count=1;
+ }
+#endif
+
instruction_ad_r (i_instruction_code,&ad_1,ad_2.ad_register);
--*ad_2.ad_count_p;