Index: src/x87/macro-assembler-x87.cc |
diff --git a/src/x87/macro-assembler-x87.cc b/src/x87/macro-assembler-x87.cc |
index 0c459ebfd420f5208d8b4b7c05ef6a26d831a4c3..6277ada6f03349a769c029509f02f77d7f64c5b7 100644 |
--- a/src/x87/macro-assembler-x87.cc |
+++ b/src/x87/macro-assembler-x87.cc |
@@ -597,6 +597,27 @@ void MacroAssembler::DebugBreak() { |
call(ces.GetCode(), RelocInfo::DEBUGGER_STATEMENT); |
} |
+void MacroAssembler::PairShl(Register dst, Register src, uint8_t shift) { |
ahaas
2016/03/08 07:23:40
On ia32 I will rename the parameters to "high" and
|
+ 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; |