From e6d0315b74c4c35cada203d0d54f8093ea2e71d3 Mon Sep 17 00:00:00 2001 From: "yangguo@chromium.org" Date: Wed, 6 Feb 2013 11:54:27 +0000 Subject: [PATCH] Small improvement in x64 assembler Review URL: https://chromiumcodereview.appspot.com/12177012 Patch from Zheng Z. Liu . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13605 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/x64/assembler-x64.cc | 9 ++++----- src/x64/macro-assembler-x64.cc | 19 +++++-------------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc index c5d1849..0ac0862 100644 --- a/src/x64/assembler-x64.cc +++ b/src/x64/assembler-x64.cc @@ -1505,13 +1505,12 @@ void Assembler::movq(Register dst, void* value, RelocInfo::Mode rmode) { void Assembler::movq(Register dst, int64_t value, RelocInfo::Mode rmode) { // Non-relocatable values might not need a 64-bit representation. if (RelocInfo::IsNone(rmode)) { - // Sadly, there is no zero or sign extending move for 8-bit immediates. - if (is_int32(value)) { - movq(dst, Immediate(static_cast(value))); - return; - } else if (is_uint32(value)) { + if (is_uint32(value)) { movl(dst, Immediate(static_cast(value))); return; + } else if (is_int32(value)) { + movq(dst, Immediate(static_cast(value))); + return; } // Value cannot be represented by 32 bits, so do a full 64 bit immediate // value. diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc index bdedb18..f6561e1 100644 --- a/src/x64/macro-assembler-x64.cc +++ b/src/x64/macro-assembler-x64.cc @@ -2911,23 +2911,14 @@ void MacroAssembler::ClampDoubleToUint8(XMMRegister input_reg, } -static double kUint32Bias = - static_cast(static_cast(0xFFFFFFFF)) + 1; - - void MacroAssembler::LoadUint32(XMMRegister dst, Register src, XMMRegister scratch) { - Label done; - cmpl(src, Immediate(0)); - movq(kScratchRegister, - reinterpret_cast(&kUint32Bias), - RelocInfo::NONE64); - movsd(scratch, Operand(kScratchRegister, 0)); - cvtlsi2sd(dst, src); - j(not_sign, &done, Label::kNear); - addsd(dst, scratch); - bind(&done); + if (FLAG_debug_code) { + cmpq(src, Immediate(0xffffffff)); + Assert(below_equal, "input GPR is expected to have upper32 cleared"); + } + cvtqsi2sd(dst, src); } -- 2.7.4