|
|
|
@ -87,7 +87,7 @@ namespace RandomX {
|
|
|
|
|
; xmm12 -> temporary
|
|
|
|
|
; xmm13 -> DBL_MIN
|
|
|
|
|
; xmm14 -> absolute value mask 0x7fffffffffffffff7fffffffffffffff
|
|
|
|
|
; xmm15 -> sign mask 0x80000000000000008000000000000000
|
|
|
|
|
; xmm15 -> unused
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
@ -178,6 +178,8 @@ namespace RandomX {
|
|
|
|
|
static const uint8_t REX_XOR_RAX_R64[] = { 0x49, 0x33 };
|
|
|
|
|
static const uint8_t REX_XCHG[] = { 0x4d, 0x87 };
|
|
|
|
|
static const uint8_t REX_ANDPS_XMM12[] = { 0x41, 0x0f, 0x54, 0xe6 };
|
|
|
|
|
static const uint8_t REX_PADD[] = { 0x66, 0x44, 0x0f };
|
|
|
|
|
static const uint8_t PADD_OPCODES[] = { 0xfc, 0xfd, 0xfe, 0xd4 };
|
|
|
|
|
|
|
|
|
|
size_t JitCompilerX86::getCodeSize() {
|
|
|
|
|
return codePos - prologueSize;
|
|
|
|
@ -615,6 +617,9 @@ namespace RandomX {
|
|
|
|
|
instr.src %= 4;
|
|
|
|
|
emit(REX_ADDPD);
|
|
|
|
|
emitByte(0xc0 + instr.src + 8 * instr.dst);
|
|
|
|
|
//emit(REX_PADD);
|
|
|
|
|
//emitByte(PADD_OPCODES[instr.mod % 4]);
|
|
|
|
|
//emitByte(0xf8 + instr.dst);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void JitCompilerX86::h_FADD_M(Instruction& instr) {
|
|
|
|
@ -630,6 +635,9 @@ namespace RandomX {
|
|
|
|
|
instr.src %= 4;
|
|
|
|
|
emit(REX_SUBPD);
|
|
|
|
|
emitByte(0xc0 + instr.src + 8 * instr.dst);
|
|
|
|
|
//emit(REX_PADD);
|
|
|
|
|
//emitByte(PADD_OPCODES[instr.mod % 4]);
|
|
|
|
|
//emitByte(0xf8 + instr.dst);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void JitCompilerX86::h_FSUB_M(Instruction& instr) {
|
|
|
|
@ -640,7 +648,7 @@ namespace RandomX {
|
|
|
|
|
emitByte(0xc4 + 8 * instr.dst);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void JitCompilerX86::h_FPNEG_R(Instruction& instr) {
|
|
|
|
|
void JitCompilerX86::h_CFSUM_R(Instruction& instr) {
|
|
|
|
|
instr.dst %= 4;
|
|
|
|
|
emit(REX_XORPS);
|
|
|
|
|
emitByte(0xc7 + 8 * instr.dst);
|
|
|
|
@ -794,7 +802,7 @@ namespace RandomX {
|
|
|
|
|
INST_HANDLE(FADD_M)
|
|
|
|
|
INST_HANDLE(FSUB_R)
|
|
|
|
|
INST_HANDLE(FSUB_M)
|
|
|
|
|
INST_HANDLE(FPNEG_R)
|
|
|
|
|
INST_HANDLE(CFSUM_R)
|
|
|
|
|
INST_HANDLE(FMUL_R)
|
|
|
|
|
INST_HANDLE(FMUL_M)
|
|
|
|
|
INST_HANDLE(FDIV_R)
|
|
|
|
|