Index: src/x64/assembler-x64.cc |
=================================================================== |
--- src/x64/assembler-x64.cc (revision 2261) |
+++ src/x64/assembler-x64.cc (working copy) |
@@ -504,18 +504,34 @@ |
void Assembler::immediate_arithmetic_op_8(byte subcode, |
- const Operand& dst, |
- Immediate src) { |
+ const Operand& dst, |
+ Immediate src) { |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |
emit_optional_rex_32(dst); |
- ASSERT(is_int8(src.value_)); |
+ ASSERT(is_int8(src.value_) || is_uint8(src.value_)); |
emit(0x80); |
emit_operand(subcode, dst); |
emit(src.value_); |
} |
+void Assembler::immediate_arithmetic_op_8(byte subcode, |
+ Register dst, |
+ Immediate src) { |
+ EnsureSpace ensure_space(this); |
+ last_pc_ = pc_; |
+ if (dst.code() > 3) { |
+ // Use 64-bit mode byte registers. |
+ emit_rex_64(dst); |
+ } |
+ ASSERT(is_int8(src.value_) || is_uint8(src.value_)); |
+ emit(0x80); |
+ emit_modrm(subcode, dst); |
+ emit(src.value_); |
+} |
+ |
+ |
void Assembler::shift(Register dst, Immediate shift_amount, int subcode) { |
EnsureSpace ensure_space(this); |
last_pc_ = pc_; |