parent
a71c897d56
commit
3dfe4f96fa
|
@ -513,6 +513,18 @@ public:
|
|||
}
|
||||
break;
|
||||
|
||||
case shop_mul_s64:
|
||||
movsxd(rax, regalloc.MapRegister(op.rs1));
|
||||
if (op.rs2.is_reg())
|
||||
movsxd(rcx, regalloc.MapRegister(op.rs2));
|
||||
else
|
||||
mov(rcx, (s64)(s32)op.rs2._imm);
|
||||
mul(rcx);
|
||||
mov(regalloc.MapRegister(op.rd), eax);
|
||||
shr(rax, 32);
|
||||
mov(regalloc.MapRegister(op.rd2), eax);
|
||||
break;
|
||||
|
||||
case shop_pref:
|
||||
if (op.rs1.is_imm())
|
||||
{
|
||||
|
|
|
@ -432,28 +432,6 @@ protected:
|
|||
mov(mapRegister(op.rd2), edx);
|
||||
}
|
||||
break;
|
||||
case shop_mul_s64:
|
||||
mov(eax, mapRegister(op.rs1));
|
||||
if (op.rs2.is_reg())
|
||||
mov(edx, mapRegister(op.rs2));
|
||||
else
|
||||
mov(edx, (s64)(s32)op.rs2._imm);
|
||||
if (ArchX64)
|
||||
{
|
||||
#ifndef XBYAK32
|
||||
mul(rdx);
|
||||
mov(mapRegister(op.rd), eax);
|
||||
shr(rax, 32);
|
||||
mov(mapRegister(op.rd2), eax);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
imul(edx);
|
||||
mov(mapRegister(op.rd), eax);
|
||||
mov(mapRegister(op.rd2), edx);
|
||||
}
|
||||
break;
|
||||
|
||||
case shop_ext_s8:
|
||||
mov(eax, mapRegister(op.rs1));
|
||||
|
|
|
@ -400,6 +400,17 @@ void X86Compiler::genOpcode(RuntimeBlockInfo* block, bool optimise, shil_opcode&
|
|||
}
|
||||
break;
|
||||
|
||||
case shop_mul_s64:
|
||||
mov(eax, mapRegister(op.rs1));
|
||||
if (op.rs2.is_reg())
|
||||
mov(edx, mapRegister(op.rs2));
|
||||
else
|
||||
mov(edx, (s64)(s32)op.rs2._imm);
|
||||
imul(edx);
|
||||
mov(mapRegister(op.rd), eax);
|
||||
mov(mapRegister(op.rd2), edx);
|
||||
break;
|
||||
|
||||
case shop_frswap:
|
||||
mov(eax, (uintptr_t)op.rs1.reg_ptr());
|
||||
mov(ecx, (uintptr_t)op.rd.reg_ptr());
|
||||
|
|
Loading…
Reference in New Issue