First stage of dynamic recompiler rewrite.
Basic IR generation calls C implementation of all instructions. Backend generation implemented for x86, x86-64, ARM and ARM64.
This commit is contained in:
parent
e6dce0920b
commit
03fe25d818
46 changed files with 4134 additions and 17767 deletions
34
src/codegen_ir.c
Normal file
34
src/codegen_ir.c
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
#include "ibm.h"
|
||||
#include "codegen.h"
|
||||
#include "codegen_backend.h"
|
||||
#include "codegen_ir.h"
|
||||
|
||||
static ir_data_t ir_block;
|
||||
|
||||
ir_data_t *codegen_ir_init()
|
||||
{
|
||||
ir_block.wr_pos = 0;
|
||||
//pclog("codegen_ir_init\n");
|
||||
|
||||
return &ir_block;
|
||||
}
|
||||
|
||||
void codegen_ir_compile(ir_data_t *ir, codeblock_t *block)
|
||||
{
|
||||
int c;
|
||||
|
||||
codegen_backend_prologue(block);
|
||||
|
||||
for (c = 0; c < ir->wr_pos; c++)
|
||||
{
|
||||
uop_t *uop = &ir->uops[c];
|
||||
|
||||
//pclog("uOP %i : %08x\n", c, uop->type);
|
||||
|
||||
uop_handlers[uop->type & UOP_MASK](block, uop);
|
||||
}
|
||||
|
||||
codegen_backend_epilogue(block);
|
||||
|
||||
// fatal("IR compilation complete\n");
|
||||
}
|
||||
Loading…
Reference in a new issue