Reviewers: William Hesse, Message: Small review.
Description: X64: Remove restriction on using r12 as index register. Please review this at http://codereview.chromium.org/126045 Affected files: M src/x64/assembler-x64-inl.h M src/x64/assembler-x64.cc Index: src/x64/assembler-x64-inl.h diff --git a/src/x64/assembler-x64-inl.h b/src/x64/assembler-x64-inl.h index 397b02341c25d03adc181385ebc18c5fcf09d0fe..0b94a4082bfc77cec2aae358de2ea29a8caa887d 100644 --- a/src/x64/assembler-x64-inl.h +++ b/src/x64/assembler-x64-inl.h @@ -260,7 +260,8 @@ void Operand::set_modrm(int mod, Register rm) { void Operand::set_sib(ScaleFactor scale, Register index, Register base) { ASSERT(len_ == 1); ASSERT(is_uint2(scale)); - // Use SIB with no index register only for base rsp or r12. + // Use SIB with no index register only for base rsp or r12. Otherwise we + // would skip the SIB byte entirely. ASSERT(!index.is(rsp) || base.is(rsp) || base.is(r12)); buf_[1] = scale << 6 | (index.code() & 0x7) << 3 | (base.code() & 0x7); rex_ |= (index.code() >> 3) << 1 | base.code() >> 3; Index: src/x64/assembler-x64.cc diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc index 46259f43ec274221e9d3d6ae96bff6d0b3a7b833..07e9e45e69fb30804a53a111fbef8ed92c7ffce5 100644 --- a/src/x64/assembler-x64.cc +++ b/src/x64/assembler-x64.cc @@ -96,12 +96,12 @@ Operand::Operand(Register base, Register index, ScaleFactor scale, int32_t disp): rex_(0) { - ASSERT(!index.is(rsp) && !index.is(r12)); + ASSERT(!index.is(rsp)); len_ = 1; set_sib(scale, index, base); if (disp == 0 && !base.is(rbp) && !base.is(r13)) { - // The call to set_modrm doesn't overwrite the REX.B bit possibly set - // by set_sib. + // This call to set_modrm doesn't overwrite the REX.B (or REX.X) bits + // possibly set by set_sib. set_modrm(0, rsp); } else if (is_int8(disp)) { set_modrm(1, rsp); --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
