Index: src/ia32/macro-assembler-ia32.cc |
diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc |
index 12daec8285c79fea84149f25660fb1f593978118..6442584bb89f840a726cccc45ce25d148c85d470 100644 |
--- a/src/ia32/macro-assembler-ia32.cc |
+++ b/src/ia32/macro-assembler-ia32.cc |
@@ -682,7 +682,6 @@ void MacroAssembler::DebugBreak() { |
call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT); |
} |
- |
void MacroAssembler::Cvtsi2sd(XMMRegister dst, const Operand& src) { |
xorps(dst, dst); |
cvtsi2sd(dst, src); |
@@ -707,6 +706,27 @@ void MacroAssembler::Cvtui2ss(XMMRegister dst, Register src, Register tmp) { |
bind(&jmp_return); |
} |
+void MacroAssembler::PairShl(Register dst, Register src, uint8_t shift) { |
+ if (shift >= 32) { |
+ mov(dst, src); |
+ shl(dst, shift - 32); |
+ xor_(src, src); |
+ } else { |
+ shld(dst, src, shift); |
+ shl(src, shift); |
+ } |
+} |
+ |
+void MacroAssembler::PairShl_cl(Register dst, Register src) { |
+ shld_cl(dst, src); |
+ shl_cl(src); |
+ Label done; |
+ test(ecx, Immediate(0x20)); |
+ j(equal, &done, Label::kNear); |
+ mov(dst, src); |
+ xor_(src, src); |
+ bind(&done); |
+} |
bool MacroAssembler::IsUnsafeImmediate(const Immediate& x) { |
static const int kMaxImmediateBits = 17; |