Karol Stasiak
0b90addc9a
Remove debugging code
2018-12-19 01:30:20 +01:00
Karol Stasiak
1de6f8b75c
Do not emit unused runtime objects
2018-12-19 01:16:04 +01:00
Karol Stasiak
cfac41bc3b
Perhaps true
should be 1?
2018-12-19 01:14:53 +01:00
Karol Stasiak
39a9cde375
Enums cant have more than 256 items
2018-12-19 01:14:02 +01:00
Karol Stasiak
1b8a7c9bb3
8080: Don't stash known constants on stack
2018-12-19 01:13:37 +01:00
Karol Stasiak
735d6c4169
6502: Use colons in assembly labels
2018-12-19 01:12:55 +01:00
Karol Stasiak
453011fb6b
6502: Smarter inlining of variables into A
2018-12-19 01:12:14 +01:00
Karol Stasiak
bcd17f1a78
6502: more bit-twiddling optimizations
2018-12-19 01:11:40 +01:00
Karol Stasiak
08f9426ccb
Multiplication fixes and improvements
2018-12-19 01:10:39 +01:00
Karol Stasiak
2454f223c8
Return dispatch over enums
2018-12-19 01:04:56 +01:00
Karol Stasiak
cfb099568e
Z80: track the IY stack frame
2018-12-19 00:59:28 +01:00
Karol Stasiak
7616c246ee
Fix Apple 2 text codec
2018-12-17 17:15:34 +01:00
Karol Stasiak
dfd9dd4c6a
Don't remove things referred to only by aliases
2018-12-17 17:03:01 +01:00
Karol Stasiak
235700c44c
Multiline value support in platform definition files
2018-12-17 10:41:28 +01:00
Karol Stasiak
8fcf628c8f
Better tracking of the original source
2018-12-17 00:35:32 +01:00
Karol Stasiak
4fb786522d
Fixed not compiling code
2018-12-16 22:59:58 +01:00
Karol Stasiak
acf9db80d3
Reenable mistakenly disabled tests
2018-12-16 22:56:02 +01:00
Karol Stasiak
eb29e78f56
More warnings
2018-12-16 21:07:27 +01:00
Karol Stasiak
78afe3d5f5
Preliminary support for volatile variables
2018-12-16 21:07:04 +01:00
Karol Stasiak
5a99dc7293
65816: various improvements
2018-12-16 19:34:33 +01:00
Karol Stasiak
cd8697552c
Add sizeof operator
2018-12-16 15:43:17 +01:00
Karol Stasiak
badd7ef1d8
Compiler performance improvements
2018-12-16 14:38:57 +01:00
Karol Stasiak
0e5d79f222
6502 Minor comparison optimisation
2018-12-15 00:01:34 +01:00
Karol Stasiak
4f8e4838e8
6502: Fix comparison optimization
2018-12-15 00:01:12 +01:00
Karol Stasiak
f32d72b51f
Multiplication u16×u8
2018-12-14 22:50:20 +01:00
Karol Stasiak
a73e1eae1e
Preprocesor should use current options
2018-12-14 22:49:26 +01:00
Karol Stasiak
65f5c552b4
6502: optimization improvements
2018-12-14 22:09:22 +01:00
Karol Stasiak
c28b71add5
6502: Stack-related things:
...
– software variable stack
– fixes for handling stack variables
2018-12-14 22:01:52 +01:00
Karol Stasiak
db1ce07ed6
8080: Fix comparisons
2018-12-14 21:07:14 +01:00
Karol Stasiak
eb6b7d7769
Fix and improve nonet operations
2018-12-14 15:43:12 +01:00
Karol Stasiak
406d69c74a
Add original line numbers to generated assembly
2018-12-14 15:42:31 +01:00
Karol Stasiak
a985c4f753
More various optimization fixes and improvements
2018-12-14 00:10:30 +01:00
Karol Stasiak
dbe8e39e4a
various optimization fixes and improvements
2018-12-13 23:18:56 +01:00
Karol Stasiak
c1ce4a9283
8080: fixed shifting by 0
2018-12-13 23:12:46 +01:00
Karol Stasiak
bdd41350a7
6502: Optimize constant comparisons
2018-10-12 00:13:49 +02:00
Karol Stasiak
ab267c88ac
Assume tabs are 4 spaces
2018-10-12 00:01:48 +02:00
Karol Stasiak
6b33cc49a8
Fix bad code deduplication
2018-10-12 00:01:19 +02:00
Karol Stasiak
30c979cc39
Fix badly handled stack overflow
2018-10-12 00:00:41 +02:00
Karol Stasiak
df71435c78
Fix for...downto loops
2018-10-11 23:59:50 +02:00
Karol Stasiak
6b43f73f57
Don't deduplicate non-elidable code
2018-10-04 23:23:04 +02:00
Karol Stasiak
ed38b00031
8080: Faster strlen; more multiplication optimizations
2018-10-04 23:22:26 +02:00
Karol Stasiak
fe1bf68295
Add align keyword
2018-10-04 21:34:53 +02:00
Karol Stasiak
3736b5ae56
6502: Use zeropage addressing mode when accessing fixed zeropage locations
2018-09-29 01:16:22 +02:00
Karol Stasiak
cbe6d03e60
8080: Optimized multiplication
2018-09-28 23:45:26 +02:00
Karol Stasiak
f37696df5a
Added #infoeval preprocessor directive
2018-09-28 22:49:28 +02:00
Karol Stasiak
c9c3ebc8a4
6502: Fix shifting
2018-09-28 22:39:16 +02:00
Karol Stasiak
b41f9bebc1
6502: Shifting improvements and fixes
2018-08-16 22:03:27 +02:00
Karol Stasiak
74dbca1f53
Fix typo in test
2018-08-16 22:01:45 +02:00
Karol Stasiak
462041e8f4
Don't align the main function
2018-08-09 12:42:29 +02:00
Karol Stasiak
376c3283b8
Improvements to trigonometric functions
2018-08-08 23:52:47 +02:00
Karol Stasiak
466f6e4fea
Z80: Various optimizations, mostly from z80heaven
2018-08-08 23:52:32 +02:00
Karol Stasiak
34b7107d27
Allow casting to wider types
2018-08-08 23:14:09 +02:00
Karol Stasiak
9581891d66
Following jumps. Generating conditional returns/calls.
2018-08-08 23:12:20 +02:00
Karol Stasiak
2d0f3a5a12
Fix tests
2018-08-08 18:48:11 +02:00
Karol Stasiak
0cb91c0f68
Z80: Better inlining of variables into register pairs
2018-08-08 17:52:08 +02:00
Karol Stasiak
019547aae8
Z80: Faster array indexing
2018-08-08 17:50:27 +02:00
Karol Stasiak
8b09941cef
Z80: Jump shortening
2018-08-08 13:45:38 +02:00
Karol Stasiak
5c65af17d4
Z80: More optimizations
2018-08-08 13:45:26 +02:00
Karol Stasiak
fc3ace20c4
Fix subbyte constants in Intel syntax
2018-08-08 13:45:02 +02:00
Karol Stasiak
2b279ac5e8
Give the preprocessor access to compilation options
2018-08-08 13:44:30 +02:00
Karol Stasiak
2af8304512
Deduplicate more complex code. Better deduplication.
2018-08-08 01:53:47 +02:00
Karol Stasiak
b01c440cf0
6502: Improve memset
2018-08-08 01:38:49 +02:00
Karol Stasiak
46ce602a3e
Allow for function alignment
2018-08-07 23:55:08 +02:00
Karol Stasiak
46df8a6f21
6502: Check if memset is over actual pointers
2018-08-07 22:15:50 +02:00
Karol Stasiak
02d6b5b71c
6502: Crank up the optimizations
2018-08-07 21:37:25 +02:00
Karol Stasiak
8dd8415432
6502: Track values of zeropage registers
2018-08-07 21:36:53 +02:00
Karol Stasiak
64744f7559
Fix initialized array allocation
2018-08-07 19:50:02 +02:00
Karol Stasiak
8dfb223a8c
Fast memset for Z80 and 6502
2018-08-07 17:37:09 +02:00
Karol Stasiak
7750c4ec45
Optimize constants of form (B+A)-B
2018-08-07 17:36:14 +02:00
Karol Stasiak
f937355c54
6502: Fix word addition if zpreg is larger than 2
2018-08-07 17:35:40 +02:00
Karol Stasiak
3e7bbaf5fc
Z80: optimize loads to registers pairs
2018-08-07 17:35:02 +02:00
Karol Stasiak
a8f6bc4c0e
Z80: Correctly analyze flow through LDIR and LDDR
2018-08-07 17:34:31 +02:00
Karol Stasiak
c846a19eef
Preliminary support for object alignment
2018-08-07 17:32:20 +02:00
Karol Stasiak
60d2cc1959
Actually enable code decuplication
2018-08-07 17:28:59 +02:00
Karol Stasiak
ff16854a11
Code deduplication
2018-08-06 19:29:09 +02:00
Karol Stasiak
f045f7f4c2
Z80: Analyze flow through RES and SET correctly
2018-08-06 19:20:07 +02:00
Karol Stasiak
86ce1d42f3
6502: More optimizations.
2018-08-06 19:19:13 +02:00
Karol Stasiak
87c5d698bc
6502: Don't optimize away things like a[f()]^=0
2018-08-06 19:17:57 +02:00
Karol Stasiak
a2eb6fe353
Z80: fix subtraction.
2018-08-06 19:17:08 +02:00
Karol Stasiak
7cf78ca2bd
Use one statement preprocessor per function.
2018-08-06 19:16:42 +02:00
Karol Stasiak
bf47473162
Allow setting the size of the zeropage register from the command line.
2018-08-06 19:15:41 +02:00
Karol Stasiak
48b183828b
Z80: LDH instruction for LR35902
2018-08-03 16:43:31 +02:00
Karol Stasiak
f4a2c96512
Fix comparisons
2018-08-03 16:21:02 +02:00
Karol Stasiak
fab1cafec3
Z80: Intel syntax support
2018-08-03 13:23:37 +02:00
Karol Stasiak
e393a3de9c
Z80: More optimizations
2018-08-03 13:21:04 +02:00
Karol Stasiak
388ceb8b3a
6502: software BCD, increase default zpreg to 4
2018-08-03 13:06:23 +02:00
Karol Stasiak
30aa62ceaf
Z80: Fix 16-bit operations
2018-08-03 13:02:18 +02:00
Karol Stasiak
779cc6ab5c
Extract asDecimal. Improve constants.
2018-08-03 12:59:44 +02:00
Karol Stasiak
0a01dd30e1
6502: Fix zeropage register if larger than 2 bytes
2018-08-03 11:11:03 +02:00
Karol Stasiak
e952d89849
Z80: Intel syntax for output.
2018-08-01 21:16:20 +02:00
Karol Stasiak
d4beba11a1
Z80: >>' operator
2018-08-01 18:49:37 +02:00
Karol Stasiak
9b5b39181a
Z80: Decimal subtraction on 8080, fixes for adding longs returned from functions
2018-08-01 15:33:07 +02:00
Karol Stasiak
6b02c5178a
Z80: More arithmetic optimizations
2018-08-01 15:32:11 +02:00
Karol Stasiak
0326c7a73b
Z80: Fix stack-related optimizations
2018-08-01 15:31:42 +02:00
Karol Stasiak
bc1dc0e500
6502: allow functions with large return values on the right hand side of modifying operators
2018-08-01 15:28:47 +02:00
Karol Stasiak
69f233e378
Z80: Interrupt handlers. Allow using IY as base pointer.
2018-08-01 12:50:05 +02:00
Karol Stasiak
99df25bde2
Fix macro expansion
2018-08-01 12:43:17 +02:00
Karol Stasiak
ffbed1ba26
Allow processed/formatted array contents inside other array literals
2018-08-01 10:34:49 +02:00
Karol Stasiak
bebb8c45a5
Z80: More optimizations
2018-08-01 10:22:34 +02:00
Karol Stasiak
e914ad6d7b
Move label generation into a separate class
2018-07-31 18:16:36 +02:00
Karol Stasiak
2046f94b55
Z80: Compile 8-bit values directly into registers other than A
2018-07-31 01:00:17 +02:00
Karol Stasiak
7e6f2dd4ea
Z80: CALL <number> shouldn't prevent inlining
2018-07-31 00:59:24 +02:00
Karol Stasiak
53f550d266
Z80: Fix line size calculations
2018-07-31 00:52:01 +02:00
Karol Stasiak
2bac42c187
Optimizations for LR35902 and 8080
2018-07-30 23:51:41 +02:00
Karol Stasiak
6d7643b817
6502: Better descriptions of benchmarked tests
2018-07-30 23:50:44 +02:00
Karol Stasiak
453ce93952
Z80: RLA and RL A are two very different instructions
2018-07-30 23:49:25 +02:00
Karol Stasiak
2ef79d6894
Minor improvements for Intel 8080 and ZX Spectrum
2018-07-30 18:55:20 +02:00
Karol Stasiak
998902acf6
Refactor: error logging
2018-07-30 18:53:08 +02:00
Karol Stasiak
cb92b09942
Improvements related to large types:
...
– returning types larger than 2
– fastcall for 1 parameter of size 3 or 4 on Z80
– more integer types (up to int128)
– marked farword as a deprecated alias of int24
2018-07-30 14:33:16 +02:00
Karol Stasiak
070ae395ee
Text literals in expressions, escape sequences, and more
2018-07-28 00:58:20 +02:00
Karol Stasiak
514e819ddf
Fix several things:
...
– statement preprocessor
– unused label removal
– >>>> operator on 6502
– constant byte comparison on 6502
2018-07-28 00:56:25 +02:00
Karol Stasiak
67f3034afb
Enable 8080 and LR35902 for users
2018-07-27 19:12:54 +02:00
Karol Stasiak
3c019b06c1
Tests for LR35902
2018-07-27 19:12:28 +02:00
Karol Stasiak
5c25e653bf
Many things:
...
– better support for LR35902
– stack variables for 8080 and LR35902
– bugfixes
– minor optimizations
2018-07-27 19:11:59 +02:00
Karol Stasiak
600e49cf49
Make some tests work on LR35902
2018-07-27 19:10:15 +02:00
Karol Stasiak
1948c38e04
Separate optimization presets for Z80, LR35902 and 8080
2018-07-27 19:09:38 +02:00
Karol Stasiak
b7f173fb71
Don't print debug stuff
2018-07-27 19:07:50 +02:00
Karol Stasiak
7ea2fe6a4e
Almost full LR35902 opcode space coverage
2018-07-27 19:07:12 +02:00
Karol Stasiak
2ca30315ca
Preparations for work on LR35902 support
2018-07-24 23:44:00 +02:00
Karol Stasiak
c5b45947dc
Preliminary support for Intel 8080
2018-07-24 23:14:41 +02:00
Karol Stasiak
749defd05a
Decimal subtraction fixes
2018-07-24 23:14:09 +02:00
Karol Stasiak
1e822239d0
Z80: Fix SET n,(IX+d) and related instructions
2018-07-24 20:45:30 +02:00
Karol Stasiak
b724ba9c6a
Z80: Full assembly support
2018-07-24 17:40:06 +02:00
Karol Stasiak
80efa95ba7
6502: Various optimization fixes and improvements
2018-07-24 16:17:27 +02:00
Karol Stasiak
e280aca08b
Z80: Emit RES and SET instructions
2018-07-24 16:16:49 +02:00
Karol Stasiak
43c044c80c
Z80: Various optimizations for stack variables
2018-07-24 14:31:23 +02:00
Karol Stasiak
9bcaffaa30
Z80: Faster calling convention
2018-07-24 01:43:59 +02:00
Karol Stasiak
c9cbd267c5
6502: Fix stack variables in more complex situations
2018-07-24 01:38:10 +02:00
Karol Stasiak
4be1e46308
6502: Faster page-aligned loops
2018-07-23 16:20:49 +02:00
Karol Stasiak
a34acbf6ce
Z80: Operators *'=, <<' and <<'=
2018-07-23 15:47:03 +02:00
Karol Stasiak
85243c96a7
Z80: The >>>> operator
2018-07-23 13:49:59 +02:00
Karol Stasiak
a39064cf76
Z80: Return dispatch
2018-07-23 13:41:51 +02:00
Karol Stasiak
a7e1a24be6
Show filename and context for compile errors
2018-07-23 13:11:53 +02:00
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