@@ -736,6 +736,15 @@ class X86Assembler {
736
736
EMIT (" sub " + r2s (r32) + " , " + i2s (imm8));
737
737
}
738
738
739
+ void asm_sub_r64_r64 (X64Reg r64, X64Reg s64) {
740
+ X86Reg r32 = X86Reg (r64 & 7 ), s32 = X86Reg (s64 & 7 );
741
+ m_code.push_back (m_al, rex (1 , r64 >> 3 , 0 , s64 >> 3 ));
742
+ m_code.push_back (m_al, 0x29 );
743
+ modrm_sib_disp (m_code, m_al,
744
+ s32, &r32, nullptr , 1 , 0 , false );
745
+ EMIT (" sub " + r2s (r64) + " , " + r2s (s64));
746
+ }
747
+
739
748
void asm_sub_r32_r32 (X86Reg r32, X86Reg s32) {
740
749
m_code.push_back (m_al, 0x29 );
741
750
modrm_sib_disp (m_code, m_al,
@@ -865,6 +874,15 @@ class X86Assembler {
865
874
EMIT (" add " + m2s (base, index, scale, disp) + " , " + r2s (r32));
866
875
}
867
876
877
+ void asm_add_r64_r64 (X64Reg s64, X64Reg r64) {
878
+ X86Reg r32 = X86Reg (r64 & 7 ), s32 = X86Reg (s64 & 7 );
879
+ m_code.push_back (m_al, rex (1 , s64 >> 3 , 0 , r64 >> 3 ));
880
+ m_code.push_back (m_al, 0x01 );
881
+ modrm_sib_disp (m_code, m_al,
882
+ r32, &s32, nullptr , 1 , 0 , false );
883
+ EMIT (" add " + r2s (s64) + " , " + r2s (r64));
884
+ }
885
+
868
886
void asm_add_r32_r32 (X86Reg s32, X86Reg r32) {
869
887
m_code.push_back (m_al, 0x01 );
870
888
modrm_sib_disp (m_code, m_al,
@@ -888,13 +906,31 @@ class X86Assembler {
888
906
EMIT (" add " + r2s (r32) + " , " + i2s (imm32));
889
907
}
890
908
909
+ void asm_mul_r64 (X64Reg r64) {
910
+ X86Reg r32 = X86Reg (r64 & 7 );
911
+ m_code.push_back (m_al, rex (1 , 0 , 0 , r64 >> 3 ));
912
+ m_code.push_back (m_al, 0xF7 );
913
+ modrm_sib_disp (m_code, m_al,
914
+ X86Reg::esp, &r32, nullptr , 1 , 0 , false );
915
+ EMIT (" mul " + r2s (r64));
916
+ }
917
+
891
918
void asm_mul_r32 (X86Reg r32) {
892
919
m_code.push_back (m_al, 0xF7 );
893
920
modrm_sib_disp (m_code, m_al,
894
921
X86Reg::esp, &r32, nullptr , 1 , 0 , false );
895
922
EMIT (" mul " + r2s (r32));
896
923
}
897
924
925
+ void asm_div_r64 (X64Reg r64) {
926
+ X86Reg r32 = X86Reg (r64 & 7 );
927
+ m_code.push_back (m_al, rex (1 , 0 , 0 , r64 >> 3 ));
928
+ m_code.push_back (m_al, 0xF7 );
929
+ modrm_sib_disp (m_code, m_al,
930
+ X86Reg::esi, &r32, nullptr , 1 , 0 , false );
931
+ EMIT (" div " + r2s (r64));
932
+ }
933
+
898
934
void asm_div_r32 (X86Reg r32) {
899
935
m_code.push_back (m_al, 0xF7 );
900
936
modrm_sib_disp (m_code, m_al,
0 commit comments