1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-12-25 21:29:25 +00:00
Commit Graph

367 Commits

Author SHA1 Message Date
Karol Stasiak
60b9378554 More aggressive constant simplification 2018-04-15 02:21:51 +02:00
Karol Stasiak
a2171aeef0 Trace output fix 2018-04-15 02:21:28 +02:00
Karol Stasiak
58f85bb46e Optimization improvements 2018-04-15 02:07:44 +02:00
Karol Stasiak
cdfbbf61b8 Fixed allocating allocating local variables twice 2018-04-15 01:29:47 +02:00
Karol Stasiak
76a30acf9a Preliminary BBC Micro support 2018-04-02 23:40:40 +02:00
Karol Stasiak
146e598636 Optimizing CMP/CPX/CPY/CPZ #0 2018-04-02 21:57:53 +02:00
Karol Stasiak
0ddf2f31c8 Inserting raw byte sequences in assembly 2018-04-02 21:40:54 +02:00
Karol Stasiak
d6995091cf Character literals 2018-04-02 21:06:18 +02:00
Karol Stasiak
95375378ed More text codecs 2018-04-02 19:47:11 +02:00
Karol Stasiak
1fcbf9fd5b More uses for the DCP instruction 2018-03-28 18:56:11 +02:00
Karol Stasiak
343d339da3 Don't remove loads that are required for flags 2018-03-28 18:55:49 +02:00
Karol Stasiak
d785d43ae7 Many optimization improvements and bugfixes
- fixed VariableToRegisterOptimization removing variables during superoptimization
- fixed PointlessMathFromFlow giving results that do not fit a byte
- fixed PointlessLoadBeforeReturn moving reads from before to after memory modification
- achieved and exceeded CC65 performance when doing 16-bit Eratosthenes sieve
2018-03-28 12:37:38 +02:00
Karol Stasiak
cb3d848d0a Prevent all functions with return dispatch from being inlined 2018-03-27 00:38:40 +02:00
Karol Stasiak
0231e4c4fd Added ATASCII text codec 2018-03-26 00:01:29 +02:00
Karol Stasiak
e32887b6b7 Added array initialization syntax with for 2018-03-25 23:14:16 +02:00
Karol Stasiak
08544159d4 Don't emit branching instructions with broken offsets 2018-03-25 16:18:19 +02:00
Karol Stasiak
0355495aff Fixed format of array contents in assembly output 2018-03-24 17:11:10 +01:00
Karol Stasiak
c9c0c16e98 Allowed more kinds of constants within variable and array initializers 2018-03-19 21:58:51 +01:00
Karol Stasiak
7ac86b97b5 Cosmetic fixes for messages 2018-03-18 23:54:48 +01:00
Karol Stasiak
046597e9a0 Do not allocate removed variables; also, some weird bugfix 2018-03-18 23:54:32 +01:00
Karol Stasiak
9ff888c0d9 Fixed zero-extending for bytes; improved adding bytes to constant words 2018-03-18 23:54:02 +01:00
Karol Stasiak
986252db5b Added some more optimizations 2018-03-18 23:52:40 +01:00
Karol Stasiak
6fa82a5a58 Added ZeropagePseugoregister to default compilation flags 2018-03-18 23:51:25 +01:00
Karol Stasiak
5f2ecb8258 Code cleanup 2018-03-17 18:12:31 +01:00
Karol Stasiak
4f46b21867 Tiny fix 2018-03-17 18:01:44 +01:00
Karol Stasiak
fa34402749 Segment syntax test 2018-03-17 13:49:37 +01:00
Karol Stasiak
fbd9fddf44 Few optimization improvements and fixes 2018-03-16 19:03:50 +01:00
Karol Stasiak
4d927a8949 Loop unrolling improvements 2018-03-16 14:13:24 +01:00
Karol Stasiak
45e284bdb1 Fixed treatment of -Of and -Ob commandline options 2018-03-16 14:12:38 +01:00
Karol Stasiak
e0c3a566b7 Long comparisons; word vs unsigned byte comparison optimization 2018-03-16 13:19:54 +01:00
Karol Stasiak
2548822b8b Interrupt handler optimization fixes 2018-03-16 11:42:42 +01:00
Karol Stasiak
516d7eae26 Removal of the <<<< operator; nonet operation improvements
Use `nonet(a << b)` instead of `a <<<< b`
2018-03-16 00:34:24 +01:00
Karol Stasiak
8a347e5058 Preliminary segment support; C16/+4 fixes 2018-03-15 23:09:19 +01:00
Karol Stasiak
9e8a125487 Various optimization improvements and bugfixes 2018-03-14 18:50:58 +01:00
Karol Stasiak
38f3923d4d Shifting by variable amount 2018-03-11 23:02:34 +01:00
Karol Stasiak
89b23ee425 Expanding macros from within assembly 2018-03-10 21:52:28 +01:00
Karol Stasiak
739461bfa9 Word addition and bit ops; better handling of side effects 2018-03-10 21:48:04 +01:00
Karol Stasiak
59cf1e06b4 nonet() operator 2018-03-10 00:08:13 +01:00
Karol Stasiak
e95d403752 Flow analyser bugfixes 2018-03-10 00:07:40 +01:00
Karol Stasiak
bc077d3ada Inline assembly parsing improvements 2018-03-10 00:06:50 +01:00
Karol Stasiak
bf851af2e4 LAX optimization bugfix 2018-03-09 17:33:56 +01:00
Karol Stasiak
871143cc21 Flow analysis bugfixes 2018-03-09 17:33:39 +01:00
Karol Stasiak
a414feedec Fixed object allocation fixes, assembly output improvements 2018-03-09 16:31:49 +01:00
Karol Stasiak
807a9df8ac Fixed org option 2018-03-09 00:07:05 +01:00
Karol Stasiak
34b827df38 Small optimization bugfix 2018-03-07 16:22:28 +01:00
Karol Stasiak
1d865302ca Indexing fixes; 16-bit indexing 2018-03-07 12:36:21 +01:00
Karol Stasiak
11337f4975 Optimizing predictable reads from local variables 2018-03-06 23:43:09 +01:00
Karol Stasiak
d4d9dafbbe Inlining improvements 2018-03-06 23:28:03 +01:00
Karol Stasiak
af812fe348 else if 2018-03-06 16:46:50 +01:00
Karol Stasiak
791f910cc4 Optimize away impossible odd/even equalities 2018-03-06 16:44:57 +01:00
Karol Stasiak
9e66a0d252 Optimization performance improvements 2018-03-06 15:49:28 +01:00
Karol Stasiak
53245eb1e2 Single threaded mode 2018-03-06 01:01:22 +01:00
Karol Stasiak
1909fd7154 Initialize constant registers outside loops 2018-03-06 00:22:39 +01:00
Karol Stasiak
addfde48ec Better addition of words on stack on 65816 2018-03-06 00:21:43 +01:00
Karol Stasiak
9634ea9516 Don't emit warnings if an unused variable was assigned a simple expression 2018-03-06 00:20:50 +01:00
Karol Stasiak
92dd5d6913 Flow analysis improvements 2018-03-05 19:14:42 +01:00
Karol Stasiak
0f6bf6e63e HuC6280's SAX and SAY depend on A 2018-03-05 19:13:44 +01:00
Karol Stasiak
3cd6540f13 Slightly faster variable to register optimization 2018-03-05 19:13:20 +01:00
Karol Stasiak
56e4b1fb70 Fixed miscompiled loops 2018-03-05 18:21:20 +01:00
Karol Stasiak
05e147b880 Removal of detailed flow analysis; it was slow and not worth it 2018-03-05 12:41:43 +01:00
Karol Stasiak
15dbaad6d1 Use zero page locations as as pseudo-registers; 8-bit multiplication and 16-bit shifts 2018-03-05 12:05:37 +01:00
Karol Stasiak
656dbef184 Optimize pulling a known constant from the stack in more cases 2018-03-05 11:32:31 +01:00
Karol Stasiak
38efdcc979 Allow inlinging variables to registers if there is a non-conflicting SEP/REP instruction 2018-03-05 11:31:02 +01:00
Karol Stasiak
606011ea38 New target: C64 with SuperCPU in native mode 2018-03-03 21:41:49 +01:00
Karol Stasiak
839c52204f 65816 native mode optimization improvements 2018-03-03 21:36:26 +01:00
Karol Stasiak
50ddd52786 Added break and continue statements 2018-03-03 21:34:12 +01:00
Karol Stasiak
ccb6e35a29 Fixed PHD/PHB-related optimizations 2018-03-03 15:06:49 +01:00
Karol Stasiak
2024c33ef2 Fixed suboptimal selection of variables for register inlining 2018-03-03 15:04:39 +01:00
Karol Stasiak
77797af564 65816 and 65CE02 optimization improvements 2018-03-03 14:33:07 +01:00
Karol Stasiak
33ee5115e0 Better stack- and interrupt handling for 65816 and 65CE02 2018-03-03 14:32:11 +01:00
Karol Stasiak
35f06d5486 Optimizer shouldn't remove LDA's before TSR and TRB 2018-03-03 14:31:06 +01:00
Karol Stasiak
6ed5d51260 Preliminary support for 65816, 65CE02 and HuC6280 2018-03-03 01:21:57 +01:00
Karol Stasiak
b3e96a0c6e Using (zp,X) addressing mode when appropriate 2018-03-01 15:58:28 +01:00
Karol Stasiak
50b93db337 Constant pointer optimization 2018-03-01 15:57:54 +01:00
Karol Stasiak
f8bd496b6b Important bugfixes; removing empty stores to larger variables 2018-03-01 15:57:18 +01:00
Karol Stasiak
3dc526bcb7 hi()/lo() builtins; identity table for using index registers as operands 2018-02-28 01:13:05 +01:00
Karol Stasiak
f31086e686 Inlining improvements and bugfixes 2018-02-28 01:11:14 +01:00
Karol Stasiak
828cef58dd Small optimization fix 2018-02-28 01:09:22 +01:00
Karol Stasiak
3d056a7eee Optimization improvements 2018-02-27 12:02:15 +01:00
Karol Stasiak
f9835ebf7e Removed invalid optimization, added bit shifting optimization 2018-02-27 12:01:53 +01:00
Karol Stasiak
ee18fecedf Optimize variables only written once 2018-02-27 01:20:42 +01:00
Karol Stasiak
747925f8fd Added new -O1 optimization preset 2018-02-26 17:57:16 +01:00
Karol Stasiak
a2b6a392a5 Lazy flow analysis 2018-02-26 17:12:12 +01:00
Karol Stasiak
b9eb59ad51 Replace pointless LAX and ANC with their legal equivalents 2018-02-26 16:45:01 +01:00
Karol Stasiak
0f354d2f14 Fix for a bug in the variable-to-register optimization 2018-02-26 16:44:28 +01:00
Karol Stasiak
3c3ac9d70e Simple loop unrolling; --blast-processing command line option 2018-02-26 12:22:10 +01:00
Karol Stasiak
6f9ee33514 Added -Of and -Os command line options 2018-02-26 02:41:18 +01:00
Karol Stasiak
7b480ea876 Even more optimizations 2018-02-26 01:07:23 +01:00
Karol Stasiak
03c400a356 More diagnostic messages after compilation 2018-02-26 01:06:09 +01:00
Karol Stasiak
7cd13332a3 More optimizations using illegal opcodes 2018-02-25 00:46:21 +01:00
Karol Stasiak
6dd4a0c5ce Smarter reverse flow analyser 2018-02-25 00:45:46 +01:00
Karol Stasiak
fa56d31cb4 Fixes for pointee incrementing and decimal addition 2018-02-25 00:45:25 +01:00
Karol Stasiak
8d482ca8bf .ini parsing fix 2018-02-25 00:43:31 +01:00
Karol Stasiak
ca6534c3a7 Fix for common index subexpression elimination optimization 2018-02-22 13:36:56 +01:00
Karol Stasiak
9f54a4d111 Macros should also accept indexed expressions as actual params 2018-02-22 13:36:19 +01:00
Karol Stasiak
d6f38ba87b More optimizations 2018-02-14 22:50:34 +01:00
Karol Stasiak
54e7139e84 Refactoring 2018-02-11 18:55:21 +01:00
Karol Stasiak
2665f18c77 Macro expansion fix, improved constant folding 2018-02-03 17:49:29 +01:00
Karol Stasiak
0ca1be0c00 Tons of things:
– changed `inline` to `macro`
– added support for parameters for macros written in Millfork
– added `inline`, `noinline`, `register` hints
– added <<<< operator
– pointer dereference expressions are now supported more widely
– C64 library fixes
– added `-O1` command line option as an alias for `-O`
2018-02-01 22:39:38 +01:00
Karol Stasiak
c599db0068 Inline assembly improvements 2018-02-01 00:22:53 +01:00
Karol Stasiak
9410b8f9e3 Interrupt handler optimization 2018-01-31 22:27:11 +01:00
Karol Stasiak
341466b198 Decimal multiplication, decimal right shift fixes 2018-01-31 22:26:20 +01:00
Karol Stasiak
c26d36f974 Added return dispatch statements. 2018-01-30 17:38:32 +01:00
Karol Stasiak
ac51bcaf6c Optimizing pointless sign extensions 2018-01-30 17:37:37 +01:00
Karol Stasiak
49d126ffa0 RLE decoding test 2018-01-29 12:08:44 +01:00
Karol Stasiak
7bbf655e6f Optimization bugfixes 2018-01-29 12:08:21 +01:00
Karol Stasiak
17920cee26 Zeropage variable optimizations 2018-01-29 11:55:15 +01:00
Karol Stasiak
c5d4665c92 Inlining variables into accumulator; flag behaviour preservation when inlining variables 2018-01-21 21:54:37 +01:00
Karol Stasiak
7c4570766a More loop-related optimizations 2018-01-21 21:06:28 +01:00
Karol Stasiak
5d6be83499 Fix tests running in headless JVMs 2018-01-20 22:43:12 +01:00
Karol Stasiak
4e80236a65 For-to loop fixes 2018-01-20 22:32:57 +01:00
Karol Stasiak
430051635d Tail-call optimization shouldn't move discard pseudoinstructions 2018-01-20 22:03:19 +01:00
Karol Stasiak
7e04312462 More optimizations 2018-01-20 20:00:51 +01:00
Karol Stasiak
91acbfae2f Using short jumps whenever possible 2018-01-20 18:51:49 +01:00
Karol Stasiak
8d818f7624 Early name check improvements 2018-01-20 02:12:12 +01:00
Karol Stasiak
ba9e1b6475 Type casting 2018-01-20 01:54:10 +01:00
Karol Stasiak
013bcd63f1 Early name check improvements 2018-01-20 01:53:58 +01:00
Karol Stasiak
372d341763 Replacing Ml* with Mf* everywhere 2018-01-20 01:32:06 +01:00
Karol Stasiak
c520bbb698 Comparison improvements 2018-01-20 01:30:46 +01:00
Karol Stasiak
c5e01d5117 A variable with fixed address shouldn't have an initial value 2018-01-20 01:30:28 +01:00
Karol Stasiak
0b334ba570 Index register changing optimization improvement 2018-01-20 01:30:06 +01:00
Karol Stasiak
cb5f025ea9 Early name check 2018-01-20 00:57:37 +01:00
Karol Stasiak
f8f1af287f Tracing index register changes during superoptimization 2018-01-19 00:12:28 +01:00
Karol Stasiak
57e11c8741 Fixing Loading branches optimization 2018-01-19 00:11:55 +01:00
Karol Stasiak
4c0d184c47 Constant evaluation fixes 2018-01-18 22:38:17 +01:00
Karol Stasiak
64f72c8a1c Optimization fixes (inlining to registers, function inlining, bit operations, DCP opcode) 2018-01-18 22:37:57 +01:00
Karol Stasiak
d696704af9 More bit-packing and transfer optimizations 2018-01-08 12:00:46 +01:00
Karol Stasiak
4676b0d48e Variable to register optimization fixes 2018-01-08 12:00:05 +01:00
Karol Stasiak
33716f3881 Runtime bounds checking 2018-01-08 01:18:14 +01:00
Karol Stasiak
502faa3694 panic() 2018-01-08 01:17:48 +01:00
Karol Stasiak
309f12cf82 Don't optimize away PLP 2018-01-08 01:04:04 +01:00
Karol Stasiak
14a5a58134 Generate warnings on some too complex separate bytes expressions 2018-01-08 01:03:08 +01:00
Karol Stasiak
0c66dac3ae Optimizations for bit packing and common subexpressions 2018-01-07 23:32:10 +01:00
Karol Stasiak
9ea3823bfd Compilation fixes
Separated bytes compilation fixes (although only preliminary, it's still a pretty broken feature)
Better compilation of complex expressions (don't spill to the stack so often)
2018-01-07 23:30:43 +01:00
Karol Stasiak
2bc27fba75 Separated bytes parsing fix and "for" statement parsing fix 2018-01-07 23:28:26 +01:00
Karol Stasiak
8b086f6c2f More optimisations 2018-01-06 00:21:28 +01:00
Karol Stasiak
92999ec490 Better allocator 2018-01-04 22:58:00 +01:00
Karol Stasiak
76122a2dd7 Some more documentation 2018-01-04 01:15:04 +01:00
Karol Stasiak
1f020e2ced An instruction used for its opcode should not be elidable 2018-01-04 01:08:47 +01:00
Karol Stasiak
504cb56ee7 Multiple arguments for some relative operators 2018-01-01 22:37:23 +01:00
Karol Stasiak
3e0d1d4978 References to variables in assembly should always refer to their addresses 2018-01-01 22:13:05 +01:00
Karol Stasiak
566631fc5e Decimal shifts 2017-12-27 22:26:30 +01:00
Karol Stasiak
9193a4f035 String literal improvements 2017-12-27 22:26:13 +01:00
Karol Stasiak
138ff8b82d Reserve flow analyser shouldn't mark parameters passed in registers as unimportant 2017-12-27 22:25:39 +01:00
Karol Stasiak
a7372ec7ca Inline multiple variables into index registers, taking into account their lifetimes 2017-12-24 00:09:52 +01:00
Karol Stasiak
917210b4cf Explicitly addressed variables should have "*.addr" 2017-12-24 00:09:22 +01:00
Karol Stasiak
c57c0c2fdb Support for comparing on-stack words + zeropage optimizations 2017-12-24 00:08:49 +01:00
Karol Stasiak
2945cd0003 Important optimization bugfixes + empty memory store removal 2017-12-24 00:07:53 +01:00
Karol Stasiak
e28ff16717 More optimizations, including optimizations with jump counting 2017-12-20 12:00:24 +01:00
Karol Stasiak
f5f4c033f3 Test benchmark tweak 2017-12-20 09:54:51 +01:00
Karol Stasiak
d9e0ad168a Don't emit labels for inlined functions 2017-12-20 09:54:32 +01:00
Karol Stasiak
5c2832f4f3 Automatic function inlining; test suite changes 2017-12-20 02:50:52 +01:00
Karol Stasiak
e78bd0e41a LSR should be correctly analysed in flow 2017-12-20 02:49:27 +01:00
Karol Stasiak
e0f9544733 Don't compile the same functions twice 2017-12-20 01:07:38 +01:00
Karol Stasiak
4d8de94c8a Compile functions in topological order, in preparation for inlining optimization 2017-12-19 22:09:57 +01:00
Karol Stasiak
86ef4fcaf4 Allow for preinitialized global variables 2017-12-19 18:58:33 +01:00
Karol Stasiak
115f040fe2 Fixed invalid BNE optimization 2017-12-19 18:57:13 +01:00
Karol Stasiak
1dd8c3d855 Faster +=1 for large variables 2017-12-18 17:51:48 +01:00
Karol Stasiak
081e3bc55c Flow analyser should correctly analyse INC A and DEC A 2017-12-18 10:09:25 +01:00
Karol Stasiak
2779671300 ISC also reads A – fixed bug that appeared due to optimization 2017-12-18 10:08:57 +01:00
Karol Stasiak
ae1bc96da7 A for-loop index variable is also a used variable 2017-12-18 01:00:17 +01:00
Karol Stasiak
a62f16d0a9 The module loader should know what extensions the modules have... 2017-12-18 00:59:47 +01:00
Karol Stasiak
47e6b41384 Decimal and binary addition in the same expression should work correctly 2017-12-16 17:55:08 +01:00
Karol Stasiak
810ac4f00e Bugfixes for undocumented optimizations and a better test suite for them 2017-12-13 16:21:19 +01:00
Karol Stasiak
d95d74104f Removal of some unused old code 2017-12-07 00:55:44 +01:00
Karol Stasiak
d134afa213 Proper version number in --version 2017-12-07 00:29:10 +01:00
Karol Stasiak
48e26a0538 Initial code upload 2017-12-07 00:23:30 +01:00