Index: src/IceAssemblerX86BaseImpl.h |
diff --git a/src/IceAssemblerX86BaseImpl.h b/src/IceAssemblerX86BaseImpl.h |
index ad5d13abaa1be39dd1dca19bb2eabfbe0f840323..f449dae9f665fd165feb968d96c080508009a5b6 100644 |
--- a/src/IceAssemblerX86BaseImpl.h |
+++ b/src/IceAssemblerX86BaseImpl.h |
@@ -3371,7 +3371,10 @@ template <class Machine> |
void AssemblerX86Base<Machine>::emitGenericShift( |
int rm, Type Ty, typename Traits::GPRRegister reg, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
- assert(imm.is_int8()); |
+ // We don't assert that imm fits into 8 bits; instead, it gets masked below. |
+ // Note that we don't mask it further (e.g. to 5 bits) because we want the |
+ // same processor behavior regardless of whether it's an immediate (masked to |
+ // 8 bits) or in register cl (essentially ecx masked to 8 bits). |
if (Ty == IceType_i16) |
emitOperandSizeOverride(); |
emitRexB(Ty, reg); |