summaryrefslogtreecommitdiff
path: root/cglin.c
diff options
context:
space:
mode:
Diffstat (limited to 'cglin.c')
-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;