summaryrefslogtreecommitdiff
path: root/cgaas.c
diff options
context:
space:
mode:
authorJohn van Groningen2013-06-25 09:43:27 +0000
committerJohn van Groningen2013-06-25 09:43:27 +0000
commitce42e34c713d1fc756454ad44d28952319208124 (patch)
tree802cf2126c04e83dd99723f34b368e6fa42e1320 /cgaas.c
parentadd pic_flag for 64 bit linux (diff)
use lea when generating position independent code for move descriptor indirect
Diffstat (limited to 'cgaas.c')
-rw-r--r--cgaas.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/cgaas.c b/cgaas.c
index 1195812..3de682e 100644
--- a/cgaas.c
+++ b/cgaas.c
@@ -749,7 +749,7 @@ static void as_move_d_r (LABEL *label,int arity,int reg1)
reg1_n=reg_num (reg1);
store_c (0x48 | ((reg1_n & 8)>>1));
- store_c (0x8d);
+ store_c (0x8d); /* lea */
store_c (5 | ((reg1_n & 7)<<3));
#ifdef ELF_RELA
store_l (0);
@@ -1484,18 +1484,19 @@ static void as_move_instruction (struct instruction *instruction)
instruction->instruction_parameters[1].parameter_data.reg.r);
return;
case P_DESCRIPTOR_NUMBER:
-#if 0
- as_move_d_r (instruction->instruction_parameters[0].parameter_data.l,
- instruction->instruction_parameters[0].parameter_offset,REGISTER_O0);
- as_r_id (0211,REGISTER_O0,
- instruction->instruction_parameters[1].parameter_offset,
- instruction->instruction_parameters[1].parameter_data.reg.r);
-#else
+#ifdef LINUX
+ if (pic_flag){
+ as_move_d_r (instruction->instruction_parameters[0].parameter_data.l,
+ instruction->instruction_parameters[0].parameter_offset,REGISTER_O0);
+ as_r_id (0211,REGISTER_O0,
+ instruction->instruction_parameters[1].parameter_offset,
+ instruction->instruction_parameters[1].parameter_data.reg.r);
+ } else
+#endif
as_d_id (0307,0,instruction->instruction_parameters[0].parameter_data.l,
instruction->instruction_parameters[0].parameter_offset,
instruction->instruction_parameters[1].parameter_offset,
instruction->instruction_parameters[1].parameter_data.reg.r);
-#endif
return;
case P_IMMEDIATE:
if ((int)instruction->instruction_parameters[0].parameter_data.imm!=instruction->instruction_parameters[0].parameter_data.imm){