Added recompiled versions of FIST and FISTP.
This commit is contained in:
parent
589f50e479
commit
87191dde55
29 changed files with 829 additions and 57 deletions
|
|
@ -26,6 +26,7 @@ void *codegen_mem_load_double;
|
|||
void *codegen_mem_store_byte;
|
||||
void *codegen_mem_store_word;
|
||||
void *codegen_mem_store_long;
|
||||
void *codegen_mem_store_quad;
|
||||
void *codegen_mem_store_single;
|
||||
void *codegen_mem_store_double;
|
||||
|
||||
|
|
@ -192,7 +193,7 @@ static void build_store_routine(codeblock_t *block, int size, int is_float)
|
|||
host_x86_MOV32_BASE_INDEX_REG(block, REG_RSI, REG_RDI, REG_ECX);
|
||||
else if (size == 4 && is_float)
|
||||
host_x86_MOVD_BASE_INDEX_XREG(block, REG_RSI, REG_RDI, REG_XMM_TEMP);
|
||||
else if (size == 8 && is_float)
|
||||
else if (size == 8)
|
||||
host_x86_MOVQ_BASE_INDEX_XREG(block, REG_RSI, REG_RDI, REG_XMM_TEMP);
|
||||
else
|
||||
fatal("build_store_routine: size=%i\n", size);
|
||||
|
|
@ -208,7 +209,7 @@ static void build_store_routine(codeblock_t *block, int size, int is_float)
|
|||
host_x86_SUB64_REG_IMM(block, REG_RSP, 0x20);
|
||||
if (size == 4 && is_float)
|
||||
host_x86_MOVD_REG_XREG(block, REG_EDX, REG_XMM_TEMP); //data
|
||||
else if (size == 8 && is_float)
|
||||
else if (size == 8)
|
||||
host_x86_MOVQ_REG_XREG(block, REG_RDX, REG_XMM_TEMP); //data
|
||||
else
|
||||
host_x86_MOV32_REG_REG(block, REG_EDX, REG_ECX); //data
|
||||
|
|
@ -256,6 +257,8 @@ static void build_loadstore_routines(codeblock_t *block)
|
|||
build_store_routine(block, 2, 0);
|
||||
codegen_mem_store_long = &codeblock[block_current].data[block_pos];
|
||||
build_store_routine(block, 4, 0);
|
||||
codegen_mem_store_quad = &codeblock[block_current].data[block_pos];
|
||||
build_store_routine(block, 8, 0);
|
||||
codegen_mem_store_single = &codeblock[block_current].data[block_pos];
|
||||
build_store_routine(block, 4, 1);
|
||||
codegen_mem_store_double = &codeblock[block_current].data[block_pos];
|
||||
|
|
@ -300,6 +303,16 @@ void codegen_backend_init()
|
|||
block_pos = 0;
|
||||
build_loadstore_routines(&codeblock[block_current]);
|
||||
// fatal("Here\n");
|
||||
|
||||
asm(
|
||||
"stmxcsr %0\n"
|
||||
: "=m" (cpu_state.old_fp_control)
|
||||
);
|
||||
}
|
||||
|
||||
void codegen_set_rounding_mode(int mode)
|
||||
{
|
||||
cpu_state.new_fp_control = (cpu_state.old_fp_control & ~0x6000) | (mode << 13);
|
||||
}
|
||||
|
||||
static inline void call(codeblock_t *block, uintptr_t func)
|
||||
|
|
|
|||
Loading…
Reference in a new issue