Karol Stasiak
f22b62e57f
Z80: Fix stack variable inlining
2019-06-23 22:31:46 +02:00
Karol Stasiak
63c43c414a
Various fixes related to the -> operator
2019-06-23 19:44:53 +02:00
Karol Stasiak
088b28989f
Division by zero warnings
2019-06-23 19:44:34 +02:00
Karol Stasiak
f46466365b
Compilation order should be decided by the import statements
2019-06-14 23:20:03 +02:00
Karol Stasiak
ba16021426
Allow using $$ instead of # in preprocessor directives
2019-06-14 15:33:17 +02:00
Karol Stasiak
ffff51dee9
6502: optimize variable pointers
2019-06-14 15:19:29 +02:00
Karol Stasiak
2a233930e8
8080: improve comparisons against constants
2019-06-14 15:19:13 +02:00
Karol Stasiak
51a6ec9d73
Preprocessor: add #use A=B and if(i,t,e)
2019-06-14 12:00:45 +02:00
Karol Stasiak
3852b2dbe9
More label file formats
2019-06-14 11:39:11 +02:00
Karol Stasiak
ecb366eafb
Add the -i option
2019-06-14 11:28:26 +02:00
Karol Stasiak
50415714fa
Detect the default include directiory when running the native executable
2019-06-13 00:16:45 +02:00
Karol Stasiak
dc13dbaa9a
Code cleanup
2019-06-12 22:55:34 +02:00
Karol Stasiak
0f179f79aa
Many big important things:
...
– Add support for undocumented 8085 instructions
– Convert undocumented 8085 instructions to 8086
– Add new CPU types and categorize CPU types correctly
– Fix macro expansion in some situations
– Improve 8080 optimizations
– Improve documentation
– Other improvements
2019-06-12 12:06:02 +02:00
Karol Stasiak
eaaa98a8e3
Add better configuration flag fillouts
2019-06-12 10:08:52 +02:00
Karol Stasiak
b15490c5bf
Fix constant printing
2019-06-12 09:54:54 +02:00
Karol Stasiak
a1b868e3df
Optimize byte division by power of two
2019-06-06 13:35:26 +02:00
Karol Stasiak
e31737ad40
Unsigned division of word by byte
2019-06-06 13:06:30 +02:00
Karol Stasiak
2583f280a8
Unsigned byte division by non-constant
2019-06-06 01:17:34 +02:00
Karol Stasiak
010b44f23e
Unsigned byte division by a constant
2019-06-05 18:36:39 +02:00
Karol Stasiak
9164e78a2d
6502: Fix comparison optimizations
2019-06-05 18:12:57 +02:00
Karol Stasiak
77b3628dde
Z80: Analyse LD A,I and LD A,R correctly in the optimizer
2019-06-05 11:33:34 +02:00
Karol Stasiak
b3bb9bb063
Intel 8085 support
2019-05-31 17:27:38 +02:00
Karol Stasiak
1cb3b672b1
Add 8080-to-8086 translation
2019-05-31 17:03:35 +02:00
Karol Stasiak
b4a6c261de
8080: support raw bytes in assembly statements
2019-05-31 14:29:54 +02:00
Karol Stasiak
0f52efbe20
Minor fix to a debug log message
2019-05-31 14:29:20 +02:00
Karol Stasiak
e06d3bf081
8080: correct Intel disassembly for DI
2019-05-31 02:09:50 +02:00
Karol Stasiak
c747d198e6
6502: Fix optimization bug
2019-05-30 22:16:46 +02:00
Karol Stasiak
9b5134c7b9
6502: preserve line numbers in more optimizations
2019-05-29 14:09:55 +02:00
Karol Stasiak
d461046566
6502: use index registers less often
2019-05-29 14:09:41 +02:00
Karol Stasiak
d23f6e4248
6502: improve optimizations using undocumented instructions
2019-05-29 14:09:21 +02:00
Karol Stasiak
43686e0c33
6502: optimize signed comparisons against certain constants
2019-05-29 14:08:42 +02:00
Karol Stasiak
138dcfa19f
8080: implement signed byte comparisons for CPU's without the overflow flag
2019-05-29 14:07:57 +02:00
Karol Stasiak
0410cbea34
Preliminary GraalVM native-image support
2019-05-11 13:50:22 +02:00
Karol Stasiak
3d6e226f55
Update copyright dates
2019-05-11 01:15:51 +02:00
Karol Stasiak
62984fce9b
8080: optimize handling 2-byte parameters
2019-05-02 13:33:45 +02:00
Karol Stasiak
4eba80b735
Fix name clashes when passing parameters to functions
2019-05-02 13:24:21 +02:00
Karol Stasiak
1862fed70f
The @struct array format; fix the @long format
2019-04-30 01:30:22 +02:00
Karol Stasiak
d9f88cdfad
Const arrays
2019-04-30 00:41:42 +02:00
Karol Stasiak
00d190c3d8
8080: Optimization improvements
2019-04-18 16:24:57 +02:00
Karol Stasiak
546c4d0f44
Unified syntax for indexing
2019-04-18 16:24:46 +02:00
Karol Stasiak
85841c6395
Few more minor optimizations
2019-04-18 02:03:00 +02:00
Karol Stasiak
af84a214bb
Z80: Optimization improvements
2019-04-17 23:11:35 +02:00
Karol Stasiak
4504556d3c
Fix stack overflow
2019-04-17 23:04:46 +02:00
Karol Stasiak
e771b37db2
Remove diagnostic message
2019-04-17 19:17:55 +02:00
Karol Stasiak
0a36d83164
nullptr
2019-04-16 16:59:16 +02:00
Karol Stasiak
9ea04db566
Use the return variable directly if applicable
2019-04-16 16:34:17 +02:00
Karol Stasiak
668982cd5c
LR35902: Use autoincrement operations
2019-04-16 12:10:31 +02:00
Karol Stasiak
629691dfb3
Fix stack variables on 8080 and LR35902
2019-04-16 12:09:14 +02:00
Karol Stasiak
d0f64f2cee
Short syntax for small functions
2019-04-15 19:56:14 +02:00
Karol Stasiak
029e84b0f0
Unions, typed pointers, indirect field access via pointers
2019-04-15 19:45:26 +02:00
Karol Stasiak
2d0aa9724b
Quick fix
2019-04-15 19:43:44 +02:00
Karol Stasiak
1ba4b57c1c
Array elements can now be types other than byte
2019-04-15 01:57:18 +02:00
Karol Stasiak
d3e62c0065
Preliminary struct support
2019-04-15 01:30:47 +02:00
Karol Stasiak
4cd1db0e0f
Allow putting pointer variables anywhere
2019-04-15 00:27:34 +02:00
Karol Stasiak
194f79f907
65816: Various fixes regarding (d,S),Y addressing mode
2019-04-15 00:21:25 +02:00
Karol Stasiak
69ccd993b2
6502: Functions shouldn't use index registers if not necessary
2019-03-18 21:54:26 +01:00
Karol Stasiak
c829c5eb37
Z80: Optimize 16-bit loads after 8-bit stores
2019-03-18 20:12:33 +01:00
Karol Stasiak
6f00cacc6d
6502: Optimize 16-bit multiplication by a constant
2019-03-18 20:01:40 +01:00
Karol Stasiak
b8547ed154
Aliases should access subfields
2019-03-18 15:14:13 +01:00
Karol Stasiak
6979cbfe39
Generate checksums for Game Boy
2019-01-11 15:17:48 +01:00
Karol Stasiak
8211b3cf49
8080: better compiler error messages
2019-01-11 15:17:01 +01:00
Karol Stasiak
f71b6a0b04
8080: parse "DEC BC" correctly
2019-01-11 15:16:28 +01:00
Karol Stasiak
56c806ffa3
Optimize the optimizer by trying less likely patterns first
2019-01-08 23:47:02 +01:00
Karol Stasiak
f23e71afa2
6502: Few more optimizations
2019-01-08 23:46:31 +01:00
Karol Stasiak
42ecc574f3
6502: Fix local variable read optimization
2019-01-08 23:46:08 +01:00
Karol Stasiak
7d596f3ed6
Minor improvements
2019-01-05 01:04:08 +01:00
Karol Stasiak
19c0668002
6502: Better passing of register parameters
2019-01-04 12:59:43 +01:00
Karol Stasiak
25ca2cd6b8
6502: detect zeropage pointers more aggressively
2019-01-04 11:55:35 +01:00
Karol Stasiak
bf0da19ab9
Track source position of else if
2019-01-04 11:54:46 +01:00
Karol Stasiak
b1374bb914
6502: Optimization fixes
2019-01-04 11:53:25 +01:00
Karol Stasiak
b400c884e0
Add memory barriers
2018-12-31 13:20:32 +01:00
Karol Stasiak
fb42e77e6e
6502: Two fixes:
...
– fix writing constants to volatile variables
– fix optimizing variables to registers yet again
2018-12-31 13:19:13 +01:00
Karol Stasiak
fc56c11b31
Hint typoed identifiers
2018-12-30 18:55:03 +01:00
Karol Stasiak
b068663729
PET: Add oldpet and origpet encodings
2018-12-30 18:54:45 +01:00
Karol Stasiak
6c8ee34a2e
Z80: Fix jump following
2018-12-30 18:53:26 +01:00
Karol Stasiak
7a1abfba24
Optimization improvements
2018-12-30 00:52:40 +01:00
Karol Stasiak
d7b2181ef5
If a variable is used wholly within a loop body and initialized conditionally, do not remove the last store to it
2018-12-29 20:07:43 +01:00
Karol Stasiak
cbe709a9cf
6502: fix optimizations using index registers
2018-12-29 20:01:17 +01:00
Karol Stasiak
fca2700787
Z80: fix assembly output
2018-12-29 20:00:40 +01:00
Karol Stasiak
b0e20ade0f
Export compiler version as preprocessor parameter
2018-12-29 20:00:06 +01:00
Karol Stasiak
80e4b6d173
Fix #use and #pragma
2018-12-29 19:59:17 +01:00
Karol Stasiak
0dc16e9af2
8080: Don't change BC/DE when not allowed to
2018-12-28 11:38:52 +01:00
Karol Stasiak
588d52ca80
Better handling of memory alignment
2018-12-28 11:26:55 +01:00
Karol Stasiak
1c55304bad
8080: Exchange BC/DE registers pairs
2018-12-28 11:25:12 +01:00
Karol Stasiak
e66e938469
6502: Fix variable inlining
2018-12-28 01:17:23 +01:00
Karol Stasiak
95e37d63f1
Remove debugging
2018-12-27 22:02:13 +01:00
Karol Stasiak
f848bf898c
6502: inline variables to registers swapping addressing modes
2018-12-27 20:49:54 +01:00
Karol Stasiak
46bf726818
Optimize for loops
2018-12-27 20:47:18 +01:00
Karol Stasiak
985663083a
6502: Fix some optimizations
2018-12-27 20:46:58 +01:00
Karol Stasiak
59afc24db6
Fix memset
2018-12-27 14:19:04 +01:00
Karol Stasiak
9ff254c72d
Allow hi() and lo() in inline assembly
2018-12-27 14:17:48 +01:00
Karol Stasiak
4d64bbafac
6502: always fold constants
2018-12-27 14:16:34 +01:00
Karol Stasiak
8cc612976e
Fix nonet subtraction warning message
2018-12-27 14:05:38 +01:00
Karol Stasiak
f12463aef0
Optimization refactoring:
...
– -Of should imply -finline
– certain optimizations should be controllable
– unused global symbols should be removed even if we're not optimizing
2018-12-27 01:18:29 +01:00
Karol Stasiak
b77f9dd5f8
Fix deduplication
2018-12-26 15:28:57 +01:00
Karol Stasiak
0bb662183c
Faster comparisons to 0 and $FFFF
2018-12-26 02:05:41 +01:00
Karol Stasiak
9669e4d87d
Cache AST typing
2018-12-26 01:26:12 +01:00
Karol Stasiak
bf5639761b
Optimize constant comparisons
2018-12-26 01:01:43 +01:00
Karol Stasiak
438d8dbe6e
Detection of the default include path.
2018-12-24 02:38:28 +01:00
Karol Stasiak
aebae97cc8
Source file name in preprocessor errors
2018-12-24 01:20:41 +01:00
Karol Stasiak
acaaa5bdfe
Implicit ranges in for loops are dumb, remove
2018-12-22 01:30:54 +01:00
Karol Stasiak
84c3406dc7
Fix for over enum
2018-12-22 01:30:39 +01:00
Karol Stasiak
02e91070aa
Accept bytes as LHS for >>>>
2018-12-21 22:36:53 +01:00
Karol Stasiak
d62901fb51
6502: Allow more complex expressions
2018-12-21 22:36:29 +01:00
Karol Stasiak
76dd4929a6
6502: Track which pointers need to be on zeropage
2018-12-21 22:36:05 +01:00
Karol Stasiak
36a0065b96
Forbid redefining builtins
2018-12-21 22:35:16 +01:00
Karol Stasiak
e43fb39781
Optimize some stdlib calls
2018-12-21 22:33:27 +01:00
Karol Stasiak
673727b973
Allow empty strings
2018-12-21 22:32:34 +01:00
Karol Stasiak
98585fcc38
8080: better handling of separate byte pairs
2018-12-19 22:29:49 +01:00
Karol Stasiak
8582f0974d
Text codec improvements
2018-12-19 22:27:15 +01:00
Karol Stasiak
60666a6467
8080: Inline assembly fixes
2018-12-19 22:26:57 +01:00
Karol Stasiak
05884f2c7b
Standard library improvements
2018-12-19 19:01:53 +01:00
Karol Stasiak
30d18fba01
6502: another optimization for comparisons
2018-12-19 18:14:40 +01:00
Karol Stasiak
1e9be50ccb
Improve error reporting
2018-12-19 18:14:11 +01:00
Karol Stasiak
960cee5124
Foreach statement; emitting subprocedures
2018-12-19 18:13:38 +01:00
Karol Stasiak
fc10746522
Alias improvements:
...
– aliases can now override other objects
– take aliases into account when ordering functions for optimizations and inlining
2018-12-19 17:33:51 +01:00
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
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
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
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