Chromium Code Reviews| Index: src/ia32/macro-assembler-ia32.cc |
| diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc |
| index 4e421176c0705b267772261e7df2efb8588085ab..074992d7f217e853362352e2a08fddd34008e33a 100644 |
| --- a/src/ia32/macro-assembler-ia32.cc |
| +++ b/src/ia32/macro-assembler-ia32.cc |
| @@ -728,6 +728,50 @@ void MacroAssembler::PairShl_cl(Register dst, Register src) { |
| bind(&done); |
| } |
| +void MacroAssembler::PairShr(Register dst, Register src, uint8_t shift) { |
|
titzer
2016/03/07 19:25:35
{dst} and {src} are misnamed. They should be {hi}
ahaas
2016/03/08 07:58:42
Done.
|
| + if (shift >= 32) { |
| + mov(src, dst); |
| + shr(src, shift - 32); |
| + xor_(dst, dst); |
| + } else { |
| + shrd(dst, src, shift); |
| + shr(dst, shift); |
| + } |
| +} |
| + |
| +void MacroAssembler::PairShr_cl(Register dst, Register src) { |
| + shrd_cl(dst, src); |
| + shr_cl(dst); |
| + Label done; |
| + test(ecx, Immediate(0x20)); |
| + j(equal, &done, Label::kNear); |
| + mov(src, dst); |
| + xor_(dst, dst); |
| + bind(&done); |
| +} |
| + |
| +void MacroAssembler::PairSar(Register dst, Register src, uint8_t shift) { |
| + if (shift >= 32) { |
| + mov(src, dst); |
| + sar(src, shift - 32); |
| + sar(dst, 31); |
| + } else { |
| + shrd(dst, src, shift); |
| + sar(dst, shift); |
| + } |
| +} |
| + |
| +void MacroAssembler::PairSar_cl(Register dst, Register src) { |
| + shrd_cl(dst, src); |
| + sar_cl(dst); |
| + Label done; |
| + test(ecx, Immediate(0x20)); |
| + j(equal, &done, Label::kNear); |
| + mov(src, dst); |
| + sar(dst, 31); |
| + bind(&done); |
| +} |
| + |
| bool MacroAssembler::IsUnsafeImmediate(const Immediate& x) { |
| static const int kMaxImmediateBits = 17; |
| if (!RelocInfo::IsNone(x.rmode_)) return false; |