From ce42e34c713d1fc756454ad44d28952319208124 Mon Sep 17 00:00:00 2001 From: John van Groningen Date: Tue, 25 Jun 2013 09:43:27 +0000 Subject: use lea when generating position independent code for move descriptor indirect --- cgaas.c | 19 ++++++++++--------- 1 file 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){ -- cgit v1.2.3