Chromium Code Reviews| Index: src/x64/assembler-x64.cc |
| diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc |
| index 8f8ed7b93f5d0444d42ce3e3646ea40c78e5f4a1..9625401b6fe343e73c048b0422b13e0c07555514 100644 |
| --- a/src/x64/assembler-x64.cc |
| +++ b/src/x64/assembler-x64.cc |
| @@ -1979,7 +1979,7 @@ void Assembler::shrd(Register dst, Register src) { |
| emit_modrm(src, dst); |
| } |
| -void Assembler::xchgb(Register reg, const Operand& op) { |
| +void Assembler::xchgb(Register reg, const Operand& op, bool is_signed) { |
| EnsureSpace ensure_space(this); |
| if (!reg.is_byte_register()) { |
| // Register is not one of al, bl, cl, dl. Its encoding needs REX. |
| @@ -1989,14 +1989,24 @@ void Assembler::xchgb(Register reg, const Operand& op) { |
| } |
| emit(0x86); |
| emit_operand(reg, op); |
| + if (is_signed) { |
|
binji
2017/01/17 21:45:50
This is the wrong place to put this code; the asse
aseemgarg
2017/01/21 08:40:37
Removed. Moved the move part upstream in code-gene
|
| + movsxbl(reg, reg); |
| + } else { |
| + movzxbl(reg, reg); |
| + } |
| } |
| -void Assembler::xchgw(Register reg, const Operand& op) { |
| +void Assembler::xchgw(Register reg, const Operand& op, bool is_signed) { |
| EnsureSpace ensure_space(this); |
| emit(0x66); |
| emit_optional_rex_32(reg, op); |
| emit(0x87); |
| emit_operand(reg, op); |
| + if (is_signed) { |
| + movsxwl(reg, reg); |
| + } else { |
| + movzxwl(reg, reg); |
| + } |
| } |
| void Assembler::emit_xchg(Register dst, Register src, int size) { |