Commit Graph

250 Commits

Author SHA1 Message Date
Dmitry Stogov
5e4503b624 Fix JMP optimization for MERGE/N and last basic block 2022-08-31 00:01:15 +03:00
Dmitry Stogov
32198c00b7 Reimplement JMP optimization 2022-08-30 23:15:20 +03:00
Dmitry Stogov
5afa116d34 Get rid of MREF macros 2022-08-30 16:15:30 +03:00
Dmitry Stogov
80192093e5 Swap operands of FP comparison to produce the better code 2022-08-30 15:52:55 +03:00
Dmitry Stogov
e4be1de649 Allow LOAD/STORE fusion for ADD_OV/SUB_OV 2022-08-30 12:23:20 +03:00
Dmitry Stogov
0596de2291 Fuse LOAD into IMULL/3 2022-08-30 11:26:38 +03:00
Dmitry Stogov
e87e71b092 cleanup 2022-08-30 10:23:56 +03:00
Dmitry Stogov
11c03dbfb3 Fix call stack alignment and fastcall support 2022-08-30 00:42:06 +03:00
Dmitry Stogov
fd8539e17d Eliminate TEST after ADD/SUB/AND/OR/XOR 2022-08-29 22:22:30 +03:00
Dmitry Stogov
c69d970ca2 Add missing "else" 2022-08-26 11:50:28 +03:00
Dmitry Stogov
e023a18749 Test part of the register to avoid test with mask 2022-08-26 11:48:13 +03:00
Dmitry Stogov
57f9e6ed8f Optimize AND into TEST 2022-08-26 11:07:35 +03:00
Dmitry Stogov
23d7b3b4ac Simplift integer comarison code genertor 2022-08-25 23:42:15 +03:00
Dmitry Stogov
1d4b00ddb0 Load fusion for BITCAST 2022-08-25 23:18:00 +03:00
Dmitry Stogov
f8cf71318e Load fusion into type conversion instructions 2022-08-25 23:06:45 +03:00
Dmitry Stogov
56956cbe0f Load fusion for IF_INT 2022-08-25 22:18:15 +03:00
Dmitry Stogov
1f657fd4d7 Load fusion for MUL/DIV/MOD 2022-08-25 21:47:07 +03:00
Dmitry Stogov
dbb382224d Remove useless code 2022-08-25 21:14:56 +03:00
Dmitry Stogov
47083e0f9f Improve LOAD fusion 2022-08-25 18:16:17 +03:00
Dmitry Stogov
aa28e865da Fuse load into binary ops 2022-08-24 23:26:08 +03:00
Dmitry Stogov
65e1619de8 Fuse address calculation into LOAD/STORE 2022-08-24 16:11:04 +03:00
Dmitry Stogov
7513098293 Don't generate code for dead loads 2022-08-23 12:35:10 +03:00
Dmitry Stogov
b0cba142a9 Merge ir_uses_fixed_reg() into ir_get_def_flags() and ir_get_use_flags() 2022-08-12 21:17:19 +03:00
Dmitry Stogov
ca109d3fc9 Use single live interval to handle all scratch registers clobbered by CALL 2022-08-11 19:56:59 +03:00
Dmitry Stogov
36a5bdaf43 Improve support for fixed prologue/epilogue 2022-08-11 13:32:44 +03:00
Dmitry Stogov
1820972a21 Use PHP memory manager 2022-08-10 17:41:14 +03:00
Dmitry Stogov
901e1de968 Fix incorrect code selection pattern 2022-08-09 21:54:34 +03:00
Dmitry Stogov
66458b4dee Add spill code 2022-08-08 23:17:33 +03:00
Dmitry Stogov
36561d86ce Support for negative zero
Support for unused CALL result
2022-08-04 00:22:19 +03:00
Dmitry Stogov
88b8731c16 Fix incorrect condition codes 2022-08-02 13:04:03 +03:00
Dmitry Stogov
6c78558bfe Fuse address calculation into FP load/store 2022-07-26 21:04:26 +03:00
Dmitry Stogov
1e5ce07406 Fix int32_t overflow 2022-07-26 20:29:06 +03:00
Dmitry Stogov
ac8b3bac28 Allow GUARDs with constant conditions 2022-07-22 09:45:52 +03:00
Dmitry Stogov
1089699f2c Only unsigned MOD may be converted into AND 2022-07-21 20:45:19 +03:00
Dmitry Stogov
e235a33679 Fix negaive DIV/MOD 2022-07-21 20:39:36 +03:00
Dmitry Stogov
6800af4013 Support for IJMP with constant operand 2022-07-21 20:25:19 +03:00
Dmitry Stogov
efbc6d6b84 Fix address calculation fusion 2022-07-20 22:30:25 +03:00
Dmitry Stogov
3c4135576a Add TRAP instruction 2022-07-20 17:59:44 +03:00
Dmitry Stogov
42df10b3ae Fuse address calculation into store 2022-07-20 17:19:46 +03:00
Dmitry Stogov
4004a9d222 Support for overflow detection 2022-07-20 11:25:53 +03:00
Dmitry Stogov
e1ae79102a Fuse address calulation with the following binary op 2022-07-19 17:53:17 +03:00
Dmitry Stogov
6b92f02a9c AArch64: Fuse address calculation into LDR/STR instructions 2022-06-28 12:24:50 +03:00
Dmitry Stogov
b6605500f0 Improve AArch64 support 2022-06-28 01:43:59 +03:00
Dmitry Stogov
907c22261d Turn IR_TLS into "load" 2022-06-28 00:03:06 +03:00
Dmitry Stogov
fe333adfa1 Add ability to force fix/restore some predefied registers 2022-06-23 22:39:00 +03:00
Dmitry Stogov
c9fa87e6c4 Support for fastcall caling convention.
(this should be reimplemented through function prototypes)
2022-06-23 13:14:30 +03:00
Dmitry Stogov
56c8b372a8 Replace ir_insn.emit_const by ir_insn.const_flags 2022-06-23 11:25:47 +03:00
Dmitry Stogov
2148f05392 Initial support for fascall calling convention (incomplete) 2022-06-22 23:59:56 +03:00
Dmitry Stogov
ef3ffff81b Fix CALL/1 copying. Fallback to CALL+RETURN when we can't generate code for TAILCALL. 2022-06-22 17:57:31 +03:00
Dmitry Stogov
a165c43196 Initial support for thread local storage + optimization of some related code selection patterns 2022-06-22 16:02:43 +03:00
Dmitry Stogov
9b25587eb6 Compound assignment instruction fusion 2022-06-21 17:33:57 +03:00
Dmitry Stogov
cb64f578eb Avoid memory allocation for empty arguments list 2022-06-21 13:04:33 +03:00
Dmitry Stogov
00e92483bc Fix compilation warnings 2022-06-21 11:41:59 +03:00
Dmitry Stogov
5ef1e97261 Better support for unreachable basic blocks 2022-06-20 16:34:44 +03:00
Dmitry Stogov
f8a23e9fe4 Don't protect/unprotect external code buffer 2022-06-17 13:22:26 +03:00
Dmitry Stogov
411dd20331 Support for code fragments with multiple entries 2022-06-16 23:49:27 +03:00
Dmitry Stogov
5fb115ab11 Remove LOOP_EXIT 2022-06-15 17:27:31 +03:00
Dmitry Stogov
706850f578 Prevent mov reg to itself 2022-06-15 14:37:16 +03:00
Dmitry Stogov
d877e35909 Fuse load+cmp 2022-06-15 13:15:19 +03:00
Dmitry Stogov
b5a3b2fe90 Load fusion and cmp+guard fusion 2022-06-15 12:27:36 +03:00
Dmitry Stogov
be0ecd0eb8 Fix LOAD/STORE with constant addresses 2022-06-14 22:38:35 +03:00
Dmitry Stogov
0a93d2e41b Fix incorrect type usage 2022-06-14 20:51:39 +03:00
Dmitry Stogov
f841fb6c34 Initial support for guards 2022-06-14 16:27:33 +03:00
Dmitry Stogov
af4558e439 Allow emitting native code into preallocated buffer 2022-06-10 11:30:19 +03:00
Dmitry Stogov
5cafe50d36 Initial support for PHP 2022-06-10 00:16:29 +03:00
Dmitry Stogov
63ec9b4864 iRemove useless (always true) condition 2022-06-07 14:45:57 +03:00
Dmitry Stogov
fbedabc5d8 cleanup 2022-06-07 10:17:41 +03:00
Dmitry Stogov
1108acf9b8 cleanup 2022-06-06 23:12:45 +03:00
Dmitry Stogov
ad052c59ab cleanup 2022-06-06 22:36:11 +03:00
Dmitry Stogov
17797a4a84 cleanup 2022-06-06 18:10:41 +03:00
Dmitry Stogov
f6b81b14e9 Aarch64 back-end 2022-06-06 15:27:25 +03:00
Dmitry Stogov
054a70012e Aarch64 back-end (incomplete) 2022-06-03 12:47:02 +03:00
Dmitry Stogov
30e11861dd Aarch64 back-end (incomplete) 2022-06-03 00:38:49 +03:00
Dmitry Stogov
fb998c9058 Aarch64 back-end (incomplete) 2022-06-02 18:34:47 +03:00
Dmitry Stogov
ab8019e0cd Aarch64 back-end (incomplete) 2022-06-02 15:12:56 +03:00
Dmitry Stogov
bb842b489c Aarch64 backend support & unification 2022-06-01 18:16:32 +03:00
Dmitry Stogov
91bddc09ed Cleanup & unification 2022-06-01 00:34:45 +03:00
Dmitry Stogov
00c300fc9f Start Aarch64 back-end 2022-05-31 11:22:31 +03:00
Dmitry Stogov
a45d40277c Replace xmm(dst-IR_REG_XMM0) by xmm(dst-IR_REG_FP_FIRST) 2022-05-31 10:44:10 +03:00
Dmitry Stogov
ad8248af31 Cleanup 2022-05-31 00:23:04 +03:00
Dmitry Stogov
41f3e43cf7 cleanup 2022-05-27 13:18:04 +03:00
Dmitry Stogov
3e1816a71f Fix register allocation for ABS_INT 2022-05-27 00:11:31 +03:00
Dmitry Stogov
77f7d7e2af SWITCH elated fixes 2022-05-26 20:58:07 +03:00
Dmitry Stogov
4a39bda507 Fix double passing in 32-bit x86 2022-05-26 18:26:37 +03:00
Dmitry Stogov
4974c301bc Fix code generation for preserved registers and dessa moves 2022-05-26 18:08:39 +03:00
Dmitry Stogov
f5bbdeea27 Fix buffer overflow 2022-05-26 17:19:43 +03:00
Dmitry Stogov
62d7fa7147 Fix string argument passing 2022-05-26 16:34:01 +03:00
Dmitry Stogov
0eef46493e Improve code generation 2022-05-26 16:01:29 +03:00
Dmitry Stogov
8aac74dfb7 Improve code generation 2022-05-26 15:52:42 +03:00
Dmitry Stogov
2917dbbd59 Fix register clobbering 2022-05-26 15:26:04 +03:00
Dmitry Stogov
4862d69609 Improve code generation by load fusing 2022-05-26 14:43:19 +03:00
Dmitry Stogov
4598bd5b12 Better 32/64-bit assertions 2022-05-26 13:37:15 +03:00
Dmitry Stogov
e9fe55faa0 Fix param spill-slot assignment in 32-bit back-end 2022-05-26 13:09:20 +03:00
Dmitry Stogov
e28a3c801e Fix retutn FP numbers for 32-bit x86 back-end 2022-05-26 11:58:51 +03:00
Dmitry Stogov
7e782a291a Extend disassembler to support .rodata section and IP relative data labels 2022-05-26 01:17:02 +03:00
Dmitry Stogov
ead2b69fc6 x86_32 backend (incomplete) 2022-05-25 22:00:18 +03:00
Dmitry Stogov
235c1f2d65 Fix stack parameter loading for x86_32 2022-05-25 15:53:21 +03:00
Dmitry Stogov
341e3b8083 Initial support for x86_32 backend (incomplete) 2022-05-25 14:58:39 +03:00
Dmitry Stogov
9215162833 Ger rid of ir_ctx.bb_num and double neaning of ir_ctx.prev_insn_len 2022-05-25 11:58:35 +03:00
Dmitry Stogov
6f7f7b1268 Implement code generation for type conversion instructions
Register constraints might need to be tweeked.
2022-05-20 13:07:41 +03:00