Commit graph

117 commits

Author SHA1 Message Date
Fabian 3026e985fa Jit BT 2020-12-31 19:14:30 -06:00
Fabian fc43119406 Optimise returns and indirect jumps/calls into same page 2020-12-31 19:14:30 -06:00
Fabian ee542c5f84 Optimise lazy flag handling
- remove last_add_result and last_op2 from arithmetic instructions
- optimise getcf
2020-12-31 19:14:30 -06:00
Fabian 46671b5354 Jit inc16/dec16 2020-12-31 19:14:30 -06:00
Fabian ce0f34eff2 Jit cmp8/test8 2020-12-31 19:14:30 -06:00
Fabian 4723249259 Jit more cmp16/test16 2020-12-31 19:14:30 -06:00
Fabian 741d6005d2 Simplify 2020-12-31 19:14:30 -06:00
Fabian 3a41694efb Jit cmp16/test16 2020-12-31 19:14:30 -06:00
Fabian fe89acfc80 Jit xchg r, r/m 2020-12-31 19:14:30 -06:00
Fabian 8427a30d89 Simplify 2020-12-31 19:14:30 -06:00
Fabian 860833e80f Custom inc32 & dec32 2020-12-31 19:14:30 -06:00
Fabian 9da94d5438 Move wasm ops to WasmBuilder 2020-12-31 19:14:30 -06:00
Fabian 97205c67a2 Rename to wasm_builder 2020-12-31 19:14:30 -06:00
Fabian 23988f50f6 Restore xlat in jit mode 2020-12-31 19:14:30 -06:00
Fabian 3a473aad79 Remove prefix handling from jit and exceptions 2020-12-31 19:14:30 -06:00
Fabian 62010e64e8 Make string instructions partially custom 2020-12-31 19:14:30 -06:00
Fabian a73988a817 Make loop, loopz, loopnz and jcxz custom generated 2020-12-31 19:14:30 -06:00
Fabian 232d3763d9 Make maskmov* custom 2020-12-31 19:14:30 -06:00
Fabian 15a27746f6 Split fldenv, frstor, fsave and fstenv into 16 and 32 bit variants 2020-12-31 19:14:30 -06:00
Fabian ccd6244cfd Split D9 and DD instructions by operand size 2020-12-31 19:14:30 -06:00
Fabian 764879bad1 s/reg32s/reg32 2020-12-31 19:14:29 -06:00
Fabian 4bfd024366 Simplify gen_safe_read_write by removing fallback function 2020-12-31 19:14:29 -06:00
Fabian 5515c32e8d Correct codegen for some undefined fpu instructions 2020-12-31 19:14:29 -06:00
Fabian 48940e426a Fix fldm80/fstenv/fldenv: These instructions were generating and unconditional exit from jitted code but not updating eip. Changed to use the fallback mechanism for handling pagefaults 2020-12-31 19:14:29 -06:00
Fabian 5e73b6f21b Remove invalid assertion on sfence/mfence/lfence (low bits of modrm byte are ignored) 2020-12-31 19:14:29 -06:00
Fabian 1c474eabdb Fix mov [mem], sreg in 32-bit mode (should be 16-bit write) 2020-12-31 19:14:29 -06:00
Fabian c207400922 Fix Rust warnings 2020-12-31 19:14:29 -06:00
Fabian c97600f5cb Also prepare gen_safe_read{64,128} for later optimisations 2020-12-31 19:14:29 -06:00
Fabian c5cd93678e Pass local to gen_safe_read, add single function for modrm_resolve and gen_safe_read (preparation for later optimisations) 2020-12-31 19:14:29 -06:00
Fabian aad8072aa7 Optimise push reg 2020-12-31 19:14:28 -06:00
Fabian f620aceb5d Use LocalOrImmediate for other arithmetic instructions 2020-12-31 19:14:28 -06:00
Fabian 43fcdf9fc2 Introduce LocalOrImmediate for more efficient parameter passing to cmp/test instructions 2020-12-31 19:14:28 -06:00
Fabian 1fa0430cb5 Remove unused macro rules 2020-12-31 19:14:28 -06:00
Fabian 1de8fe1888 Fix unnecessary push to stack 2020-12-31 19:14:28 -06:00
Fabian 78ef12be68 Custom implementations for several sse instructions
- mov dword/qword [mem], xmm
- mov xmm, dword/qword [mem]
- some arithmetic
2020-12-31 19:14:28 -06:00
Fabian e99da40215 Make std/cld custom (FC/FD), remove unused unguarded_register and no_register properties from x86 table 2020-12-31 19:14:28 -06:00
Fabian d98e1b2f70 Generate code (instead of call) for 32-bit arithmetic operations 2020-12-31 19:14:28 -06:00
Fabian 5da6cde13f Custom codegen for cbw/cwde/cwd/cdq/pushf/sahf (98/99/9C/9E) 2020-12-31 19:14:28 -06:00
Fabian 701d59e0dd Custom codegen for absolute cli (FA) 2020-12-31 19:14:28 -06:00
Fabian ff64866e25 Custom codegen for absolute cmpxchg (0FB1) 2020-12-31 19:14:28 -06:00
Fabian b5a72061fb Custom codegen for absolute jmp/call (FF_2/FF_4) 2020-12-31 19:14:28 -06:00
Fabian fb7e4d376a Custom codegen for lfence (0FAE_5) 2020-12-31 19:14:28 -06:00
Fabian b240a8fde9 Custom codegen for push sreg (06/0E/16/1E/0FA0/0FA8) 2020-12-31 19:14:28 -06:00
Fabian a9dac09ceb Custom codegen for xchg (91-98) 2020-12-31 19:14:28 -06:00
Fabian 091b2324d9 Custom codegen for 8C 2020-12-31 19:14:28 -06:00
Fabian 93ffd50969 Custom codegen for more sse move aliases (660F29/660F6F/F30F7F) 2020-08-30 19:37:15 -05:00
Fabian 75e5c2a56f Codegen for 8-bit shifts (D0/D2) 2020-08-30 19:37:15 -05:00
Fabian 815e5d338e Codegen more fpu instructions and run their tests (D9_6, DA_5) 2020-08-30 19:37:15 -05:00
Fabian fdd1dc377d Custom codegen for xadd (0FC1) 2020-08-30 19:37:15 -05:00
Fabian 874818866a Codegen for mul32 + custom mul/imul (F7_[45]) 2020-08-30 19:37:15 -05:00