Index: syzygy/assm/assembler_base_impl.h |
diff --git a/syzygy/assm/assembler_base_impl.h b/syzygy/assm/assembler_base_impl.h |
index 8fc1004c07a3f4b28ebba743ed063acbf16e910e..3530ff63e9a2688e59cfd3c3c65daab1ae8c2a30 100644 |
--- a/syzygy/assm/assembler_base_impl.h |
+++ b/syzygy/assm/assembler_base_impl.h |
@@ -905,6 +905,22 @@ void AssemblerBase<ReferenceType>::mov_fs(const Register32& dst, |
} |
template <class ReferenceType> |
+void AssemblerBase<ReferenceType>::mov_fs(const Register32& dst, |
+ const Immediate& src) { |
+ InstructionBuffer instr(this); |
+ instr.EmitOpCodeByte(kFsSegmentPrefix); |
+ |
+ if (dst.id() == kRegisterEax) { |
+ // Special encoding for indirect displacement only to EAX. |
+ instr.EmitOpCodeByte(0xA1); |
+ } else { |
+ instr.EmitOpCodeByte(0x8B); |
+ instr.EmitOpCodeByte(0x1D); |
+ } |
+ instr.Emit32BitImmediate(src); |
+} |
+ |
+template <class ReferenceType> |
void AssemblerBase<ReferenceType>::mov_fs(const Operand& dst, |
const Register32& src) { |
InstructionBuffer instr(this); |
@@ -1164,6 +1180,13 @@ void AssemblerBase<ReferenceType>::add(const Operand& dst, |
} |
template <class ReferenceType> |
+void AssemblerBase<ReferenceType>::inc(const Operand& dst) { |
+ InstructionBuffer instr(this); |
+ instr.EmitOpCodeByte(0xFE); |
+ instr.EmitOperand(0, dst); |
+} |
+ |
+template <class ReferenceType> |
void AssemblerBase<ReferenceType>::sub(const Register8& dst, |
const Register8& src) { |
InstructionBuffer instr(this); |