diff options
author | Takashi Kokubun <[email protected]> | 2022-12-20 23:38:00 -0800 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2023-03-05 22:11:20 -0800 |
commit | dfa19a16586b0760d1644170a5096ec6bf4831fd (patch) | |
tree | 8592c7ac3a748081638308169a953f389c0279db /lib/mjit/x86_assembler.rb | |
parent | 145c937f3f9600166de7c4c3aceb724d8218cfeb (diff) |
Properly return a value from the stack as well
Diffstat (limited to 'lib/mjit/x86_assembler.rb')
-rw-r--r-- | lib/mjit/x86_assembler.rb | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/mjit/x86_assembler.rb b/lib/mjit/x86_assembler.rb index bc447e7808..d9d9730299 100644 --- a/lib/mjit/x86_assembler.rb +++ b/lib/mjit/x86_assembler.rb @@ -73,7 +73,16 @@ module RubyVM::MJIT mod_rm: mod_rm(mod: 0b01, reg: reg_code(src_reg), rm: reg_code(dst_reg)), # Mod 01: [reg]+disp8 disp: dst_offset, ) - # MOV r64, r/m64 + # MOV r64, r/m64 (Mod 00) + in [Symbol => dst_reg, [Symbol => src_reg]] if r_reg?(dst_reg) && r_reg?(src_reg) + # REX.W + 8B /r + # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r) + insn( + prefix: REX_W, + opcode: 0x8b, + mod_rm: mod_rm(mod: 0b00, reg: reg_code(dst_reg), rm: reg_code(src_reg)), # Mod 00: [reg] + ) + # MOV r64, r/m64 (Mod 01) in [Symbol => dst_reg, [Symbol => src_reg, Integer => src_offset]] if r_reg?(dst_reg) && r_reg?(src_reg) && src_offset <= 0xff # REX.W + 8B /r # RM: Operand 1: ModRM:reg (w), Operand 2: ModRM:r/m (r) |