8071731: Better scaling for C1

Reviewed-by: kvn, iveresov
This commit is contained in:
Roland Westrelin 2015-03-09 09:59:53 +01:00
parent 8f84825191
commit 73bc9c4c0b

View File

@ -2208,7 +2208,15 @@ void LIRGenerator::do_UnsafePutRaw(UnsafePutRaw* x) {
if (log2_scale != 0) { if (log2_scale != 0) {
// temporary fix (platform dependent code without shift on Intel would be better) // temporary fix (platform dependent code without shift on Intel would be better)
// TODO: ARM also allows embedded shift in the address // TODO: ARM also allows embedded shift in the address
__ shift_left(index_op, log2_scale, index_op); LIR_Opr tmp = new_pointer_register();
if (TwoOperandLIRForm) {
__ move(index_op, tmp);
index_op = tmp;
}
__ shift_left(index_op, log2_scale, tmp);
if (!TwoOperandLIRForm) {
index_op = tmp;
}
} }
LIR_Address* addr = new LIR_Address(base_op, index_op, x->basic_type()); LIR_Address* addr = new LIR_Address(base_op, index_op, x->basic_type());