Karol Stasiak
8d8859b55f
Be more helpful for C users
2019-07-17 20:49:36 +02:00
Karol Stasiak
11825c43e1
Check if all segment exist right after parsing
2019-07-17 20:48:31 +02:00
Karol Stasiak
1d024eae76
Add LITTLE_ENDIAN and BIG_ENDIAN features
2019-07-15 14:15:38 +02:00
Karol Stasiak
e0cd000b99
Documentation tweaks
2019-07-15 14:15:05 +02:00
Karol Stasiak
f3dcfc78ba
Dijkstra wept
2019-07-15 02:06:23 +02:00
Karol Stasiak
98f35937e3
Improve text encodings on Atari
2019-07-12 13:29:59 +02:00
Karol Stasiak
6d499f3623
Arrays with elements larger than one byte
2019-07-10 16:51:12 +02:00
Karol Stasiak
a29b2a994b
Improve passing of register parameters to assembly functions
2019-07-09 22:40:14 +02:00
Karol Stasiak
c5135423f8
Fix: don't swap BC and DE if jumping outside the function
2019-07-09 22:39:57 +02:00
Karol Stasiak
7766ba932b
Fix variable coercing
2019-07-09 22:39:20 +02:00
Karol Stasiak
62f79388bd
Slowly move towards removing the farword
alias
2019-07-09 22:03:53 +02:00
Karol Stasiak
4ab45aba2e
8080: Fix certain bulk array operations
2019-07-09 21:59:02 +02:00
Karol Stasiak
8a5672c2dc
Allow declaring multiple variables in one line
2019-07-08 19:24:11 +02:00
Karol Stasiak
769f410767
Fix detection of local duplicate names
2019-07-08 19:10:21 +02:00
Karol Stasiak
56c1ab008d
6502: optimize special cases of bulk memory modifications
2019-07-08 19:02:42 +02:00
Karol Stasiak
d64d0b5f96
6502: Fix expressions like p[i] <<= 1
2019-07-08 18:51:49 +02:00
Karol Stasiak
767f0da703
Placeholder for future expansion
2019-07-08 09:26:51 +02:00
Karol Stasiak
1e4b5acfba
Fix some edge cases with large variables
2019-06-29 16:22:27 +02:00
Karol Stasiak
8af2cb6da2
6502: Make zeropage registers more detectable by the optimizer
2019-06-29 00:08:12 +02:00
Karol Stasiak
bcb2e362b2
Restrict subroutine extraction to make exponential runtime less likely
2019-06-29 00:07:32 +02:00
Karol Stasiak
3e0dad4cb0
Few more optimizations
2019-06-28 23:19:58 +02:00
Karol Stasiak
e1b2b7f2c9
Let's hope this doesn't break anything
2019-06-28 21:45:12 +02:00
Karol Stasiak
13c23c1bd1
Java 11 compatibility
2019-06-28 17:54:08 +02:00
Karol Stasiak
0af9bc4696
Better error reporting in arithmetic tests
2019-06-28 17:53:42 +02:00
Karol Stasiak
39b07a8bae
Fix init_rw_memory on Atari 2600
2019-06-28 16:44:41 +02:00
Karol Stasiak
674f8d1983
Allow initializing writable variables on cartridge targets
2019-06-28 16:28:49 +02:00
Karol Stasiak
3d68d4f990
mapValues is lazy what the fuck
2019-06-28 16:24:49 +02:00
Karol Stasiak
4d59edbe51
6502: Better error messages
2019-06-28 16:23:24 +02:00
Karol Stasiak
7d051eb5e0
Don't modify macro invocations
2019-06-27 00:50:21 +02:00
Karol Stasiak
efe69eb5a9
Fix performance regressions and some bugs
2019-06-27 00:18:05 +02:00
Karol Stasiak
261486b3cd
Don't enable -fsubroutine-extraction when using -Os or -Of
2019-06-26 19:07:25 +02:00
Karol Stasiak
14d6cf4d5c
Fix stack overflow
2019-06-26 19:06:45 +02:00
Karol Stasiak
51599c9615
Allow defining free zeropage bytes instead of pointers
2019-06-26 18:33:59 +02:00
Karol Stasiak
c580ba33ea
Fix nested #ifs
2019-06-26 18:31:45 +02:00
Karol Stasiak
c9a65d5971
Added #define directive
2019-06-26 13:43:15 +02:00
Karol Stasiak
22cdd1c768
Z80: Fix stack variable optimizations when addresses of stack variables are taken (2)
2019-06-26 10:46:59 +02:00
Karol Stasiak
afa871abcf
Z80: Fix stack variable optimizations when addresses of stack variables are taken
2019-06-26 02:11:53 +02:00
Karol Stasiak
a3b21c4810
8080: Use pointers instead of indexing when traversing an array in a loop
2019-06-26 01:56:32 +02:00
Karol Stasiak
8304650b3e
6502: Fix summing for-loops
2019-06-26 01:47:43 +02:00
Karol Stasiak
6cf746045f
8080/Z80: More optimizations
2019-06-26 01:47:03 +02:00
Karol Stasiak
507791bcaf
Fix stack overflow
2019-06-26 01:46:31 +02:00
Karol Stasiak
f90d6afc43
8080: Fixed inlining of byte-sized variables into registers
2019-06-26 01:45:34 +02:00
Karol Stasiak
2282e56845
6502: Faster summing for-loops
2019-06-25 18:23:31 +02:00
Karol Stasiak
260cfd50c4
Fix putword optimization
2019-06-25 18:19:57 +02:00
Karol Stasiak
e394fe15c3
Add struct literals
2019-06-25 00:45:49 +02:00
Karol Stasiak
978d97cd7d
Fix unused object detection
2019-06-25 00:26:52 +02:00
Karol Stasiak
d8defaad82
Fix and document for-each loops
2019-06-24 23:51:17 +02:00
Karol Stasiak
25c440f17d
Add local arrays
2019-06-24 22:32:29 +02:00
Karol Stasiak
663e38c264
Optimizations:
...
– optimize multiplication and division by constants
– optimize multiplication, division and shifts for size
2019-06-24 15:20:39 +02:00
Karol Stasiak
8ea3957023
8080: optimize loads to HL
2019-06-24 15:18:44 +02:00
Karol Stasiak
15475b6886
Don't require -Os for code deduplication
2019-06-24 15:17:35 +02:00
Karol Stasiak
23b4b110a6
8080: optimize more pointless loads
2019-06-24 15:17:05 +02:00
Karol Stasiak
4dd470141a
6502: zero-extend the division result
2019-06-24 15:16:14 +02:00
Karol Stasiak
4654698891
8080: tail call optimization
2019-06-24 00:47:07 +02:00
Karol Stasiak
869211658a
Division optimizations
2019-06-24 00:13:16 +02:00
Karol Stasiak
fbe20a240b
8080: Fix division
2019-06-24 00:13:02 +02:00
Karol Stasiak
0205520bf9
Allow taking addresses of stack variables
2019-06-23 22:53:42 +02:00
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
4ec2fc2f62
Make tests toggleable by platform
2019-06-12 02:58:33 +02:00
Karol Stasiak
3b3fb24284
8086: partially fix memory leak in unit tests
2019-06-12 02:56:44 +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
0ded460840
8080: Test subroutine extraction
2018-12-27 14:18:30 +01:00