# Jit --- Convert Ir Into X64 (X86_64) ## Limitations ### No Segmentation Registers ### No X87 Support ### No access to the upper 8 bits of the lower 16 bits of registers AX, BX, CX, DX ## Required Implicit Registers Instructions that implicitly modify a register now require the register as an argument # Operation Each instruction is written with varardic c functions with `TYPE`, `DATA` syntax ## TYPE ### General Registers Width ### General Register Addresses Width ### General Register Scale ### General Register Id ### General Register Memory Offset ### XMM Registers ### MM Registers ### Immediate Value ### Relative Address ### Label ## DATA ## Object Definitions ```c kpl_x64_lable(label) kpl_x64_inst(INSTRUCTION, [TYPE, VALUE]..., END) kpl_x64_inst_pfx(PREFIX, INSTRUCTION, [TYPE, VALUE]..., END) ``` # Ir Matching Use tree with sub trees to match Ir operations to JIT functions 1. Match Name 2. Match Args until None or End 3. Run JIT Fn ## Object Definitions ```c typedef struct _kpl_ir_match { int32_t tree_weight; union { kpl_ir_name ir_name; kpl_type_header type_header; } match; union { struct _kpl_ir_match *children; void *jit_fn; // TODO } next; struct _kpl_ir_match *tree_left *tree_right; } kpl_ir_match; ```