2202 #endif |
2202 #endif |
2203 |
2203 |
2204 if (log2_scale != 0) { |
2204 if (log2_scale != 0) { |
2205 // temporary fix (platform dependent code without shift on Intel would be better) |
2205 // temporary fix (platform dependent code without shift on Intel would be better) |
2206 // TODO: ARM also allows embedded shift in the address |
2206 // TODO: ARM also allows embedded shift in the address |
2207 __ shift_left(index_op, log2_scale, index_op); |
2207 LIR_Opr tmp = new_pointer_register(); |
|
2208 if (TwoOperandLIRForm) { |
|
2209 __ move(index_op, tmp); |
|
2210 index_op = tmp; |
|
2211 } |
|
2212 __ shift_left(index_op, log2_scale, tmp); |
|
2213 if (!TwoOperandLIRForm) { |
|
2214 index_op = tmp; |
|
2215 } |
2208 } |
2216 } |
2209 |
2217 |
2210 LIR_Address* addr = new LIR_Address(base_op, index_op, x->basic_type()); |
2218 LIR_Address* addr = new LIR_Address(base_op, index_op, x->basic_type()); |
2211 __ move(value.result(), addr); |
2219 __ move(value.result(), addr); |
2212 } |
2220 } |