From 0a774c9c1870ccbec049f8d34b79da1396e31f74 Mon Sep 17 00:00:00 2001 From: "whesse@chromium.org" Date: Fri, 3 Jul 2009 13:30:15 +0000 Subject: [PATCH] X64: Use low bits of registers in emit_sse_operand. Enable --stop-at flag. Review URL: http://codereview.chromium.org/155052 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@2356 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/x64/assembler-x64.cc | 4 ++-- src/x64/assembler-x64.h | 11 +++++++++++ src/x64/codegen-x64.cc | 3 +-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc index 3ca55bc..2ccfd15 100644 --- a/src/x64/assembler-x64.cc +++ b/src/x64/assembler-x64.cc @@ -2022,11 +2022,11 @@ void Assembler::emit_sse_operand(XMMRegister reg, const Operand& adr) { void Assembler::emit_sse_operand(XMMRegister dst, XMMRegister src) { - emit(0xC0 | (dst.code() << 3) | src.code()); + emit(0xC0 | (dst.low_bits() << 3) | src.low_bits()); } void Assembler::emit_sse_operand(XMMRegister dst, Register src) { - emit(0xC0 | (dst.code() << 3) | src.code()); + emit(0xC0 | (dst.low_bits() << 3) | src.low_bits()); } diff --git a/src/x64/assembler-x64.h b/src/x64/assembler-x64.h index e25a18b..d99401b 100644 --- a/src/x64/assembler-x64.h +++ b/src/x64/assembler-x64.h @@ -160,6 +160,17 @@ struct XMMRegister { return code_; } + // Return the high bit of the register code as a 0 or 1. Used often + // when constructing the REX prefix byte. + int high_bit() const { + return code_ >> 3; + } + // Return the 3 low bits of the register code. Used when encoding registers + // in modR/M, SIB, and opcode bytes. + int low_bits() const { + return code_ & 0x7; + } + int code_; }; diff --git a/src/x64/codegen-x64.cc b/src/x64/codegen-x64.cc index b226375..3748651 100644 --- a/src/x64/codegen-x64.cc +++ b/src/x64/codegen-x64.cc @@ -154,8 +154,7 @@ void CodeGenerator::GenCode(FunctionLiteral* function) { #ifdef DEBUG if (strlen(FLAG_stop_at) > 0 && - // fun->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { - false) { + function->name()->IsEqualTo(CStrVector(FLAG_stop_at))) { frame_->SpillAll(); __ int3(); } -- 2.7.4