Karol Stasiak
8c1492b211
A statement preprocessor with some basic node-level optimizations
2018-07-21 23:59:16 +02:00
Karol Stasiak
07c049c168
6502: Fix the optimization of inlining a variable to the accumulator
2018-07-21 23:53:30 +02:00
Karol Stasiak
c4c1bf00f2
Enumeration types. Stricter type checks.
2018-07-20 22:46:53 +02:00
Karol Stasiak
ff93775cbe
Z80: Inline byte variables into registers
2018-07-17 21:08:56 +02:00
Karol Stasiak
55e9fd5174
Z80: Optimization improvements and fixes
2018-07-17 13:08:58 +02:00
Karol Stasiak
80aef5c412
Z80: detect read/changed registers more accurately
2018-07-17 13:08:25 +02:00
Karol Stasiak
190b398711
Z80: Faster +=2 and similar
2018-07-17 13:07:47 +02:00
Karol Stasiak
5f14484503
More Z80 optimizations. Finally almost as fast as C.
2018-07-16 23:10:55 +02:00
Karol Stasiak
21b086046c
Always require a full optimization context when optimizing
2018-07-16 23:09:55 +02:00
Karol Stasiak
f4ecc2512c
Refactoring the inlining calculators
2018-07-16 23:05:16 +02:00
Karol Stasiak
28e11873dc
Add empty parameter store removal optimization
2018-07-16 23:03:52 +02:00
Karol Stasiak
ab57090790
Improve optimization in tests for 6502
2018-07-16 23:03:12 +02:00
Karol Stasiak
5a8fe547bf
Fix macros and few other things when compiling for Z80
2018-07-16 23:02:34 +02:00
Karol Stasiak
39dfe13a3f
Emit LD (m),BC and similar instructions
2018-07-16 23:01:04 +02:00
Karol Stasiak
704ae17d30
Fix environment namecheck for Z80
2018-07-16 23:00:26 +02:00
Karol Stasiak
caec1bdc1b
Improvements for constants
2018-07-16 23:00:05 +02:00
Karol Stasiak
0efd9ada3e
Few optimization improvements for 6502
2018-07-16 22:59:08 +02:00
Karol Stasiak
b2fa129482
Improve tracking of changed and read registers on Z80
2018-07-16 22:57:20 +02:00
Karol Stasiak
2c0256c1c1
Tons of Z80 improvements:
...
– long assignments
– word and long comparisons
– byte multiplication
– correct sign extension
– fixed flow analysis for LD A,(IX,0) and similar
– unused variable store elimination
– unused code elimination
– unused label elimination
– poinless stack stashing elimination
– function inlining
– other flow analysis improvements
– other bugfixes
– other stuff
– more tests
2018-07-16 00:13:35 +02:00
Karol Stasiak
ca4ae4ce2e
Fix optimization of ADC on 6502
2018-07-16 00:07:22 +02:00
Karol Stasiak
215d8d92b4
Preprocessor. Z80 improvements. Library improvements.
2018-07-12 19:39:25 +02:00
Karol Stasiak
35f3638a4f
Added alias support
2018-07-12 01:23:38 +02:00
Karol Stasiak
2c8de8b6a5
Text encoding improvements
2018-07-07 00:58:44 +02:00
Karol Stasiak
265f729b24
Fix Z80-based platforms
2018-07-07 00:13:46 +02:00
Karol Stasiak
a00ba49820
Multiple improvements and fixes:
...
– reorganized code for future support of larger zeropage register sets
– added stack-allocated variables for Z80
– added many stack-related optimizations for 6502 and Z80
– fixed flow analysis and optimization bugs for Z80
– flow analysis for stack-allocated variables on Z80
– added more optimizations for 6502 and Z80
– fixed IX/IY-indexed operations on Z80
– code cleanup
2018-07-06 22:45:59 +02:00
Karol Stasiak
55b42645be
Don't print an extra newline on ZX Spectrum
2018-07-06 22:38:19 +02:00
Karol Stasiak
40c98567a0
Make the parser much faster
2018-07-06 01:05:24 +02:00
Karol Stasiak
dffc6e71d9
Optimize operations on known register values
2018-07-05 00:58:07 +02:00
Karol Stasiak
670741392c
Fix tests
2018-07-05 00:57:43 +02:00
Karol Stasiak
c3504a63b3
ZX Spectrum improvements
2018-07-05 00:50:13 +02:00
Karol Stasiak
fe85757e00
Initial and very incomplete support for Z80 assembly
2018-07-05 00:49:51 +02:00
Karol Stasiak
24ae52e3cc
Really early and very incomplete ZX Spectrum support
2018-07-03 22:37:18 +02:00
Karol Stasiak
00be0b552e
Use target file name as disk label
2018-07-03 22:36:15 +02:00
Karol Stasiak
3390fe552e
Allocate all variables in single pass on Z80
2018-07-03 22:34:45 +02:00
Karol Stasiak
4acc040813
More tests for Z80
2018-07-03 01:52:29 +02:00
Karol Stasiak
0da4637036
Fix and extend Z80 word/long operations
2018-07-03 01:47:31 +02:00
Karol Stasiak
57bde60ced
Fix Z80 shifting
2018-07-03 01:46:57 +02:00
Karol Stasiak
e5ee32f7d6
Fix Z80 reverse flow analysis for CP
2018-07-03 01:45:58 +02:00
Karol Stasiak
be04c9b195
Fix emitting constant decimal expressions
2018-07-03 01:45:20 +02:00
Karol Stasiak
da023daadc
Z80 doesn't have a zeropage
2018-07-02 22:34:29 +02:00
Karol Stasiak
02a408e1be
Fix array iteration on Z80
2018-07-02 22:33:43 +02:00
Karol Stasiak
a394ab631f
Faster array iteration for Z80
2018-07-02 14:59:21 +02:00
Karol Stasiak
619bf8116a
Optimization fixes and improvements for Z80
2018-07-02 14:58:45 +02:00
Karol Stasiak
9512e8e7ae
Really early and very incomplete PC-88 support
2018-07-02 00:31:47 +02:00
Karol Stasiak
62e94d96f7
Added unsigned byte comparisons for Z80
2018-07-02 00:18:33 +02:00
Karol Stasiak
4d00cb4db9
Added Z80 emulator for testing
2018-07-01 22:28:27 +02:00
Karol Stasiak
dc3425f64e
Preliminary and partial machine code output for Z80
2018-07-01 22:28:09 +02:00
Karol Stasiak
893515b649
8- and 16-bit shifting for Z80
2018-07-01 22:27:12 +02:00
Karol Stasiak
f7f22767e4
Various minor Z80-related fixes
2018-07-01 22:26:30 +02:00
Karol Stasiak
35caae6d8b
Unify syntax of command-line switches
2018-07-01 19:19:30 +02:00
Karol Stasiak
f51e42cc1d
Fixed all the legal stuff
2018-06-25 22:42:12 +02:00
Karol Stasiak
2500f842e9
Interprocedural optimization plus some minor fixes:
...
– fixed handling LDX/LDY/LDZ when inlining variables into registers
– fixed CLA/CLX/CLY instruction generation
– refactored optimization definitions
2018-06-25 21:29:04 +02:00
Karol Stasiak
57740cc6b4
Optimizations for shifting
2018-06-25 01:13:01 +02:00
Karol Stasiak
83e055a1d1
Allow for "file" array specifier inside another array
2018-06-24 00:30:57 +02:00
Karol Stasiak
86ce4c75ad
Take into account that the sole byte parameter is passed via the accumulator in more locations
2018-06-23 23:47:18 +02:00
Karol Stasiak
456c674a0c
Track equality of S and X. Add relevant optimizations.
2018-06-23 23:24:32 +02:00
Karol Stasiak
bc21e5befc
If a function has one small parameter, pass it via the accumulator
2018-06-23 23:14:53 +02:00
Karol Stasiak
816bfb5f06
Optimization improvements:
...
– better zeropage register flow tracking
– reverse flow analysis speed improvement
– optimize TXA/TAX after LAX
– don't stash A onto stack over externally linear code blocks
2018-06-19 14:23:24 +02:00
Karol Stasiak
992ea7090e
Comparison fixes and improvements
2018-06-19 00:08:04 +02:00
Karol Stasiak
13b06bd505
Fix zeropage allocation
2018-06-18 22:40:14 +02:00
Karol Stasiak
9b7d58cf65
Optimizing addition by replacing it with bit ops (NMOS) or increments (CMOS)
2018-06-18 19:48:47 +02:00
Karol Stasiak
7510b44412
Optimization improvements:
...
– reloading from zeropage is faster than stashing the result into another register
– more jumping optimizations
2018-06-18 19:12:36 +02:00
Karol Stasiak
daf8461c07
Allocating arbitrary variables in the zeropage and using zeropage addressing when appropriate
2018-06-18 17:59:47 +02:00
Karol Stasiak
ca14e417dd
Loop compilation/optimization fixes/improvements
2018-06-18 17:54:45 +02:00
Karol Stasiak
24a3943501
Array filters (@word, @word_be)
2018-06-18 02:52:14 +02:00
Karol Stasiak
0f453e2d2c
Start of the Z80 backend
2018-06-17 02:01:35 +02:00
Karol Stasiak
780bfa3428
Fix for i,$FF,downto,0
2018-06-12 23:35:26 +02:00
Karol Stasiak
5ee550af3b
Fix double load optimization
2018-06-12 23:34:41 +02:00
Karol Stasiak
7fc8678eec
Better logging when shortening jumps
2018-06-12 23:34:16 +02:00
Karol Stasiak
5281b5f527
Refactoring for the upcoming Z80 support
2018-06-12 22:46:20 +02:00
Karol Stasiak
70818cc3d2
Fixing invalid short jumps
2018-06-11 00:04:24 +02:00
Karol Stasiak
a16f662031
Optimization fixes
2018-06-10 23:44:45 +02:00
Karol Stasiak
278cbcec63
Fixed return dispatch returns on LUnix. Added non-relocated address constants.
2018-06-10 01:56:04 +02:00
Karol Stasiak
8a417768b8
Removed a really invalid optimization
2018-06-10 01:48:42 +02:00
Karol Stasiak
8931ced6fc
Preliminary LUnix support
2018-06-09 00:18:21 +02:00
Karol Stasiak
5dc1bba8ed
Multiple improvements:
...
- fixed some invalid LDX(zp),Y instructions
- better error reporting
- removing unused extern functions
- a new testcase
2018-06-09 00:08:17 +02:00
Karol Stasiak
10860f6c5f
Fixed flag checks during optimisation
2018-06-04 16:49:45 +02:00
Karol Stasiak
c71af26989
Documentation updates
2018-06-04 16:24:18 +02:00
Karol Stasiak
0919a98e4b
Fix for i,const,downto,0 loops
2018-06-04 09:44:54 +02:00
Karol Stasiak
0c50c4562a
Optimize more pointless loads from the same memory/register
2018-06-04 09:44:24 +02:00
Karol Stasiak
beef56cdab
Fillout the call graph for variable overlap calculations
2018-06-04 09:43:51 +02:00
Karol Stasiak
b6e61f16ec
Optimizations of adding one
2018-06-01 09:51:59 +02:00
Karol Stasiak
1d468e1313
Index changing optimization fix
2018-06-01 09:51:30 +02:00
Karol Stasiak
a671ac1d06
Optimization improvements and fixes
2018-05-14 02:20:36 +02:00
Karol Stasiak
fae7bb31c9
Flow analysis fixes
2018-05-14 02:19:39 +02:00
Karol Stasiak
8cc3399239
Comparison fix
2018-05-14 02:18:46 +02:00
Karol Stasiak
28e53272b9
Removal of pointless constant type; variable-to-register inlining fix
2018-05-14 02:18:33 +02:00
Karol Stasiak
2f1faa12c2
A 24-bit integer type
2018-05-14 02:16:46 +02:00
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