Index: src/assembler_ia32.cpp |
diff --git a/src/assembler_ia32.cpp b/src/assembler_ia32.cpp |
index f14c21600c7706a7adde246ad6eb1ad2a0e087c9..edfbc3ebf44e17e0033c8850bb1a3665bfd49ca5 100644 |
--- a/src/assembler_ia32.cpp |
+++ b/src/assembler_ia32.cpp |
@@ -272,14 +272,30 @@ void AssemblerX8632::lea(Type Ty, GPRRegister dst, const Address &src) { |
EmitOperand(dst, src); |
} |
-void AssemblerX8632::cmov(CondX86::BrCond cond, GPRRegister dst, |
+void AssemblerX8632::cmov(Type Ty, CondX86::BrCond cond, GPRRegister dst, |
GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
+ if (Ty == IceType_i16) |
+ EmitOperandSizeOverride(); |
+ else |
+ assert(Ty == IceType_i32); |
EmitUint8(0x0F); |
EmitUint8(0x40 + cond); |
EmitRegisterOperand(dst, src); |
} |
+void AssemblerX8632::cmov(Type Ty, CondX86::BrCond cond, GPRRegister dst, |
+ const Address &src) { |
+ AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
+ if (Ty == IceType_i16) |
+ EmitOperandSizeOverride(); |
+ else |
+ assert(Ty == IceType_i32); |
+ EmitUint8(0x0F); |
+ EmitUint8(0x40 + cond); |
+ EmitOperand(dst, src); |
+} |
+ |
void AssemblerX8632::rep_movsb() { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
EmitUint8(0xF3); |