Karol Stasiak
80018a55b4
Allow different output formats for different segments
2020-03-31 19:01:29 +02:00
Karol Stasiak
ceef57ed18
Change encodeOneChar
to encodeDigit
2020-03-31 18:48:11 +02:00
Karol Stasiak
742fc50ccc
Don't used str2word
as scrstr2word
when the string terminator matches, but digits don't
2020-03-31 17:58:46 +02:00
Karol Stasiak
63ff28e94e
Changes to macros and parameter list syntax:
...
* non-asm macros can now take `const` and `call` parameters
* register parameters to asm functions and macros can be given names if annotated explicitly
2020-03-30 19:23:48 +02:00
Karol Stasiak
5cdc599b1d
Avoid overflow errors when estimating memset sizes
2020-03-29 01:45:31 +01:00
Karol Stasiak
5dd3e91c2d
6502: correctly optimize code before BIT instructions
2020-03-29 01:45:02 +01:00
Karol Stasiak
dfe33c9b7a
6502: Pointers should have priority when allocating to the zeropage
2020-03-26 18:52:46 +01:00
Karol Stasiak
78070c115f
Some tests that would have prevented few latest commits
2020-03-26 01:47:26 +01:00
Karol Stasiak
59882cf765
6502: Fix zp allocation
2020-03-26 01:38:54 +01:00
Karol Stasiak
2a3c9f04be
Fix >32bit constants
2020-03-26 01:36:41 +01:00
Karol Stasiak
5215400cb2
Fix lookup
2020-03-26 01:36:15 +01:00
Karol Stasiak
9bc4bb949e
Correctly compile assembly functions using all three registers as separate parameters
2020-03-26 01:35:44 +01:00
Karol Stasiak
842393106e
Remove debugging statements
2020-03-26 01:29:26 +01:00
Karol Stasiak
3187ed155e
Add signed16 and unsigned16 types
2020-03-25 23:53:26 +01:00
Karol Stasiak
b8e5e71c19
Improve performance of typing expressions
2020-03-25 23:51:53 +01:00
Karol Stasiak
e3d5ce4e81
Fix const functions of the form if c {return x} return y
2020-03-25 23:51:04 +01:00
Karol Stasiak
475496c137
Improvements to constant evaluation
2020-03-25 23:50:06 +01:00
Karol Stasiak
d478f3504f
Const-pure functions
2020-03-19 23:53:16 +01:00
Karol Stasiak
5acf92d4e8
Fix test
2020-03-19 21:25:08 +01:00
Karol Stasiak
769f31717d
6502: Detect pointer variables that have to be in the zeropage more accurately
2020-03-19 20:00:28 +01:00
Karol Stasiak
85030d3147
Added constant-only functions min, max, if. Improved handling of constant-only functions.
2020-03-19 19:43:24 +01:00
Karol Stasiak
9cd1e47a37
6502: Fix optimization bug
2020-03-19 18:58:49 +01:00
Karol Stasiak
17e660a2f6
Report lines with invalid short branches
2020-03-17 21:46:43 +01:00
Karol Stasiak
2eb8ef53ca
Put almost all warnings behind internal flags
2020-03-17 21:08:43 +01:00
Karol Stasiak
7939b0f2c1
Optimize commutative in-place modifications using arrays and pointers
2020-03-17 12:20:55 +01:00
Karol Stasiak
128dabba3f
Reorganize optimizations a bit
2020-03-17 12:20:16 +01:00
Karol Stasiak
a527eea0fc
Add more binary operators for constants in assembly
2020-03-17 02:03:44 +01:00
Karol Stasiak
748aa0cf19
Assembly statements should track their source location
2020-03-17 01:59:40 +01:00
Karol Stasiak
ec8f2e6a1c
Add warnings for calling from one segment to another overlapping one ( #42 ) and -Wnone
flag
2020-03-16 00:03:01 +01:00
Karol Stasiak
83b85ef0fc
Support breakpoints in the label file ( #44 )
2020-03-16 00:01:04 +01:00
Karol Stasiak
f57ecc9800
Improve and optimize memset (see #47 )
2020-03-15 01:06:09 +01:00
Karol Stasiak
9f128d3c35
Remove debugging code
2020-03-15 01:04:21 +01:00
Karol Stasiak
24870ae62e
Detect obviously overflowing constants
2020-03-15 01:01:08 +01:00
Karol Stasiak
21ffbfc466
Extra optimization pass over non-inlined functions (implements #43 )
2020-02-27 01:33:34 +01:00
Karol Stasiak
6e65cd1902
Better error messages when failing to parse array definitions ( fixes #45 )
2020-02-12 01:07:14 +01:00
Karol Stasiak
259d871786
Improve syntax error reporting in tests
2020-02-12 01:06:31 +01:00
Karol Stasiak
63d4bf2317
6502 Fix an optimization bug with the carry flag ( fixes #46 )
2020-02-11 01:10:49 +01:00
Karol Stasiak
8b6e89f9a4
Various improvements for macros ( fixes #39 and pertains to #40 )
2020-02-02 23:25:06 +01:00
Karol Stasiak
5c40d581c0
6502: Fix optimization bug ( fixes #41 ) and add more optimizations involving ARR
2020-01-24 02:19:04 +01:00
Karol Stasiak
d6fd1e8b77
6809: Improve booleans
2020-01-24 02:16:19 +01:00
Karol Stasiak
f247516187
6502: Fix fatal failure when considering undocumented optimizations ( fixes #38 )
2020-01-18 22:06:50 +01:00
Karol Stasiak
6774c283ae
6502: Add KIL instruction ( fixes #37 )
2020-01-18 00:09:06 +01:00
Karol Stasiak
7672ba008d
6502: Add missing instructions SHX and LAS
2020-01-18 00:08:02 +01:00
Karol Stasiak
09359235c7
Add immediate addressing mode for short branches and BRK to support some ugly tricks
2020-01-18 00:07:26 +01:00
Karol Stasiak
b3fba658dd
Use zeropage indexed adressing when possible
2020-01-18 00:06:20 +01:00
Karol Stasiak
921a59bdad
More tests
2020-01-17 23:29:39 +01:00
Karol Stasiak
49bf0d2777
6502: Correctly inlie variables that happen to be returned ( fixes #32 )
2020-01-11 22:20:02 +01:00
Karol Stasiak
0333b339ca
Allow omitting length in file
array initalizers ( fixes #35 )
2020-01-10 18:37:49 +01:00
Karol Stasiak
df1d5421be
Do not allocate variables on top of fixed-address vairables and arrays ( fixes #26 )
2020-01-03 23:09:20 +01:00
Karol Stasiak
6e36166af2
Never remove or inline volatile variables ( fixes #27 )
2020-01-03 21:28:10 +01:00
Karol Stasiak
b9cdd0ffff
Fix for output directory creation ( #21 )
2020-01-03 16:13:54 +01:00
Karol Stasiak
b421dbba4f
Create output directories if needed; implements #21
2020-01-03 15:01:55 +01:00
Karol Stasiak
e69b7084bc
Allow complex word-sized LHS for most compound operators, implementing #24
2020-01-03 14:52:35 +01:00
Karol Stasiak
69c82d90a8
6502: Allow assigning between two statically allocated pointers; fixes #25
2019-12-30 14:28:37 +01:00
Karol Stasiak
709d3d0fcd
6502: Correctly assign true view pointies; fixes #28
2019-12-30 14:25:46 +01:00
Karol Stasiak
b2dd4eadd4
Start work on supporting member arrays
2019-12-30 11:50:18 +01:00
Karol Stasiak
f8fc001971
6809: Enable and fix more tests
2019-12-15 23:48:22 +01:00
Karol Stasiak
f39fd67a89
6809: Implement more things
2019-12-15 23:48:02 +01:00
Karol Stasiak
6cd639a23a
6809: Fix LBRA
2019-12-15 23:47:01 +01:00
Karol Stasiak
769453418c
8080: Optimization bugfix
2019-12-01 03:38:19 +01:00
Karol Stasiak
7be5b14a7d
Optimize loads of the same value that was just checked to be in a register
2019-12-01 03:11:30 +01:00
Karol Stasiak
3b7ceb3900
Make subroutine extraction usable
2019-12-01 02:39:05 +01:00
Karol Stasiak
4e04725f93
Fix stack overflow
2019-12-01 01:51:17 +01:00
Karol Stasiak
59784ad5f1
HuC6280: Full assembly support
2019-11-24 01:30:30 +01:00
Karol Stasiak
7f6a2beb6d
Fix compilation problems when targeting a specific 65C02 subarch ( fixes #20 )
2019-11-13 22:36:19 +01:00
Karol Stasiak
7b040c280b
(part 2) 6502: Do not optimize away register restoration in interrupt routines ( fixes #19 )
2019-11-13 19:08:50 +01:00
Karol Stasiak
b10d8d7eeb
6502: Do not optimize away register restoration in interrupt routines ( fixes #19 )
2019-11-13 19:04:37 +01:00
Karol Stasiak
e2b7b28b63
8080: Optimize function parameters to registers
2019-11-13 18:39:51 +01:00
Karol Stasiak
3b78206c35
Fix errors about invalid function flags
2019-11-13 18:39:27 +01:00
Karol Stasiak
113befeb36
8080: Add one minor optimization
2019-11-12 13:50:12 +01:00
Karol Stasiak
d634e24e92
More granular differentiation of various 65C02 variants; HuC6280 improvements
2019-11-04 14:28:36 +01:00
Karol Stasiak
088688122e
#6 Improve semicolon comment parsing
2019-11-04 14:26:01 +01:00
Karol Stasiak
b48783ee4f
Add a testcase for future optimization
2019-11-04 11:20:56 +01:00
Karol Stasiak
f10ec698ef
Change string terminators for petscr and atasciiscr (related to #17 )
2019-11-04 02:38:07 +01:00
Karol Stasiak
d906d8aab4
Allow comments after #endif
and #else
2019-11-04 02:29:44 +01:00
Karol Stasiak
4abfab41df
Fix escape sequences
2019-11-04 02:28:31 +01:00
Karol Stasiak
798c49fd34
Add strz_from_screencode
, strz_to_screencode
, ENCCONV_SUPPORTED
2019-11-04 02:28:12 +01:00
Karol Stasiak
3a0bc0f15e
Add unsigned types
2019-11-03 23:33:41 +01:00
Karol Stasiak
68fcf8f2d7
Undo the sizeof change for now
2019-11-03 23:17:44 +01:00
Karol Stasiak
38e4dd14a6
Fix tests
2019-11-03 22:59:10 +01:00
Karol Stasiak
802cd7d86a
Conversions from bool to byte
2019-11-03 22:26:41 +01:00
Karol Stasiak
590db9ade0
Change type of sizeof to word. Improve type checker.
2019-11-03 22:26:19 +01:00
Karol Stasiak
ec52963b46
Fix literals
2019-11-03 22:25:08 +01:00
Karol Stasiak
ffe79a214d
Add nullchar_src
, NULLCHAR_SCR
and NULLCHAR_SAME
(relates to #17 )
2019-10-31 12:20:42 +01:00
Karol Stasiak
12df1ef6e4
Make less compilation errors fatal, improve error reporting (relates to #16 )
2019-10-31 12:14:52 +01:00
Karol Stasiak
7092f2a5de
Properly handle all integer literal sizes
2019-10-31 12:13:02 +01:00
Karol Stasiak
4214f1f6f5
Tests for recent parser improvements
2019-10-31 12:12:10 +01:00
Karol Stasiak
33405ffcd6
Better handling for invalid statements inside segment blocks
2019-10-31 12:11:05 +01:00
Karol Stasiak
e3b3c36924
Parse function and variable flags correctly
2019-10-31 12:10:18 +01:00
Karol Stasiak
258b17beb0
Allow unary minus ( fixes #18 )
2019-10-31 12:09:20 +01:00
Karol Stasiak
1ddee6155d
Allow for comments at the end of the file ( fixes #15 )
2019-10-31 12:08:45 +01:00
Karol Stasiak
6fddf1cf0d
Improve documentation
2019-10-24 15:09:11 +02:00
Karol Stasiak
4191eec7f8
Add -Xd and -Xr command line options
2019-10-24 00:48:32 +02:00
Karol Stasiak
7fe32ca564
Z80: Improve optimizations
2019-10-24 00:48:16 +02:00
Karol Stasiak
72f8806c54
6502: Word addition optimizations
2019-10-23 12:56:48 +02:00
Karol Stasiak
010647682a
Fix the sieve benchmark
2019-10-23 11:52:42 +02:00
Karol Stasiak
9beac45e99
Define Constant.WordZero
2019-10-23 11:03:55 +02:00
Karol Stasiak
6db5e09723
Optimize for-to loops
2019-10-22 23:38:07 +02:00
Karol Stasiak
e1107b164f
Remove debugging messages
2019-10-22 18:21:47 +02:00
Karol Stasiak
3873736424
Optimize pointer indexing
2019-10-22 18:19:55 +02:00
Karol Stasiak
b7300616d1
6502: Faster accesses to small arrays
2019-10-22 16:35:17 +02:00
Karol Stasiak
d36b83421c
6502: Fix an optimization bug
2019-10-22 16:34:39 +02:00
Karol Stasiak
5ad6da2be4
6502: Optimize hi(nonet(...))
2019-10-22 16:34:13 +02:00
Karol Stasiak
ec96f16482
Improve and fix 16-bit comparisons
2019-10-22 13:54:30 +02:00
Karol Stasiak
ff46129c4e
#11 Fix allocation of variables in functions with trampolines
2019-10-22 01:39:11 +02:00
Karol Stasiak
f65651f2c0
#6 Improve error messages related to semicolons
2019-10-22 01:06:51 +02:00
Karol Stasiak
09294307fd
#8 Standardise the behaviour of for
loops.
2019-10-22 00:41:34 +02:00
Karol Stasiak
2d50e4fa73
Make the -o
option optional
2019-10-22 00:14:38 +02:00
Karol Stasiak
9e8b889533
#10 Fix removal of unused global structs and preserve reads in assignments from volatiles to unuseds.
2019-10-22 00:05:44 +02:00
Karol Stasiak
f5b6d9999c
#9 Support astral characters in UTF-8
2019-10-18 11:01:31 +02:00
Karol Stasiak
3a6790e47a
Add UTF-8 and UTF-16 encodings #9
2019-10-17 23:23:57 +02:00
Karol Stasiak
4fc0b98561
6809: Support break and continue
2019-10-16 22:43:16 +02:00
Karol Stasiak
1ec816496d
Allow adding fixed deltas to some outputs; #7 Fix Lynx output
2019-10-16 22:42:58 +02:00
Karol Stasiak
927c39585c
Fix non-compiling code
...
An incremental compiler can be both a blessing and a curse
2019-10-15 00:51:16 +02:00
Karol Stasiak
e9990dc9c1
Allow semicolons in certain positions. Partially implements #6
2019-10-08 18:45:11 +02:00
Karol Stasiak
e19ac75350
6809: Some optimizations
2019-10-08 15:11:22 +02:00
Karol Stasiak
f08caa0b7a
6809: Various improvements
2019-10-08 01:43:09 +02:00
Karol Stasiak
c61d044226
Document keywords and handle them better
2019-10-08 01:33:55 +02:00
Karol Stasiak
f251292dd0
6502: Few minor boolean conversion optimizations
2019-10-01 00:50:21 +02:00
Karol Stasiak
1185b1c0bb
Better removal of unused functions
2019-10-01 00:46:41 +02:00
Karol Stasiak
d1058b6223
ZX Spectrum Next CPU support
2019-10-01 00:46:15 +02:00
Karol Stasiak
f7dd78e4c0
Byte comparison optimizations
2019-10-01 00:45:14 +02:00
Karol Stasiak
5837c6fd7d
Add custom segment layout support
2019-09-25 01:17:52 +02:00
Karol Stasiak
2a21dd8e2e
Add debugging of constness
2019-09-25 01:17:23 +02:00
Karol Stasiak
2ff86889db
Fix sign extension in arithmetic promotions again.
2019-09-24 17:37:06 +02:00
Karol Stasiak
35bf4ba790
Fix returning constant bools
2019-09-24 00:24:17 +02:00
Karol Stasiak
680e94c3b7
Add zx80, zx81 and iso15 encodings
2019-09-20 19:41:53 +02:00
Karol Stasiak
d38405f467
Fix signed constants and word-sbyte subtraction
2019-09-20 18:33:41 +02:00
Karol Stasiak
b74974dbdd
Various tweaks for Lynx
2019-09-20 01:43:58 +02:00
Karol Stasiak
1d825a0c99
Fix parsing of zp_bytes
2019-09-18 01:03:13 +02:00
Karol Stasiak
c45cf7d51d
Add KOI-7 N2 and MSX-BR encodings. Some encoding enhancements.
2019-09-18 00:09:37 +02:00
Karol Stasiak
b1e5176aff
Allow larger nontrivial constants
2019-09-16 22:48:46 +02:00
Karol Stasiak
457472080f
6502: Improve inlining of functions with lots of parameters.
2019-09-16 21:32:57 +02:00
Karol Stasiak
fa7844e0b8
6502: Optimize ROL/ROR before AND
2019-09-16 21:31:53 +02:00
Karol Stasiak
635870585e
Add unsigned 16-bit division
2019-09-15 19:47:19 +02:00
Karol Stasiak
a4f91eda03
6502: Fix arithmetic promotion bugs for function return values
2019-09-14 16:01:02 +02:00
Karol Stasiak
1d445ecdd1
Support sizeof on arrays. Preliminary Commander X16 support.
2019-09-14 03:37:24 +02:00
Karol Stasiak
6c4dc81c1b
Add the -R
option
2019-09-14 02:40:03 +02:00
Karol Stasiak
3ce2249399
Add 16-bit multiplication
2019-09-04 21:17:06 +02:00
Karol Stasiak
e449b67a4a
Added encconv module.
2019-09-04 01:14:14 +02:00
Karol Stasiak
f3b5fe715c
Fix alias resolution during unused code elimination
2019-09-04 01:00:16 +02:00
Karol Stasiak
32df01be76
Allocators should allocate even the last byte in the segment
2019-09-02 23:23:51 +02:00
Karol Stasiak
0be52821d9
Add the {nullchar} escape sequence
2019-09-02 23:23:23 +02:00
Karol Stasiak
1f8ece007b
Add constants for segment bounds
2019-09-02 23:22:07 +02:00
Karol Stasiak
2159fc345f
Allow defining custom segment fill
2019-08-16 17:53:03 +02:00
Karol Stasiak
d91b35468e
Support non-decimal numbers in -D
2019-08-16 17:52:07 +02:00
Karol Stasiak
bcf403d269
Fix evaluation of constant expressions in assembly
2019-08-16 17:21:51 +02:00
Karol Stasiak
6b4236530d
Change fatal error message.
2019-08-16 01:11:03 +02:00
Karol Stasiak
785eb0780b
Fix cartridge targets
2019-08-16 01:09:03 +02:00
Karol Stasiak
1d530d896a
6809: Make some progress
2019-08-16 00:51:28 +02:00
Karol Stasiak
960d16fa18
Add nullchar constant, NULLCHAR feature, and vectrex encoding
2019-08-16 00:46:11 +02:00
Karol Stasiak
6b34ddf7f9
Some random stuff
2019-08-05 11:43:51 +02:00
Karol Stasiak
98553d56c0
Don't remove some important type casts
2019-08-04 17:16:01 +02:00
Karol Stasiak
127cd1b901
6502: Fix word multiplication by 0
2019-08-04 13:42:00 +02:00
Karol Stasiak
1a87929ad3
Fix TCO
2019-08-04 13:40:49 +02:00
Karol Stasiak
dfda9f9283
8080: Fix optimizations near ifs
2019-08-04 12:37:54 +02:00
Karol Stasiak
34254314a6
6502: Fix word division and byte multiplication
2019-08-04 00:05:35 +02:00
Karol Stasiak
f51f233571
Fix removing unused local variables
2019-08-03 20:46:01 +02:00
Karol Stasiak
dcbf54872b
Fix various compiler crashes
2019-08-03 20:34:02 +02:00
Karol Stasiak
778d04ce21
6502: Fix sign extension when type casting
2019-08-03 20:33:49 +02:00
Karol Stasiak
d760683ea5
6502: Add tests for byte shifting
2019-08-03 20:33:15 +02:00
Karol Stasiak
515da587d8
6502: Fix stack overflow
2019-08-03 20:32:45 +02:00
Karol Stasiak
48220f739d
8080: Fix byte division and simplify byte multiplication
2019-08-03 20:32:26 +02:00
Karol Stasiak
9d78385cba
6502: Fix byte shifting
2019-08-03 20:31:27 +02:00
Karol Stasiak
10c76dcc9c
Z80: Fix optimizations around multiplication
2019-08-03 16:42:40 +02:00
Karol Stasiak
9962a8344a
6502: Fix booleans
2019-08-02 00:17:24 +02:00
Karol Stasiak
bb63a73f15
Improve interprocedural optimizations
2019-08-01 19:11:35 +02:00
Karol Stasiak
35fbdcdbb1
6502: Fix compilation of some index expressions
2019-08-01 19:11:09 +02:00
Karol Stasiak
51da5ab2c0
6502: optimize bitops on words
2019-08-01 13:27:03 +02:00
Karol Stasiak
7ded8376d8
Better removal of unused local variables
2019-07-31 23:46:08 +02:00
Karol Stasiak
a1eef66e5c
In case of overflows, dump stack
2019-07-31 23:36:22 +02:00
Karol Stasiak
31cbb3d42d
Fix optimized struct assignments (again)
2019-07-31 23:36:08 +02:00
Karol Stasiak
5c5bfa3f00
6502: Allow comparing words on stack
2019-07-31 22:32:41 +02:00
Karol Stasiak
a3a168b90b
Fix optimized struct assignments
2019-07-31 22:30:33 +02:00
Karol Stasiak
fe25978d14
6502: fix broken jump optimization
2019-07-31 22:30:04 +02:00
Karol Stasiak
0f9bb4fb56
Detect stack overflow during Z80 tests
2019-07-31 22:29:50 +02:00
Karol Stasiak
05c017e375
New encodings for MSX
2019-07-31 00:20:18 +02:00
Karol Stasiak
22b4776139
Enable pointers to functions with a word parameter (using trampolines on 6502)
2019-07-30 22:49:32 +02:00
Karol Stasiak
613ddcf9a4
Refactoring
2019-07-30 22:25:05 +02:00
Karol Stasiak
e2c8dad7a5
Fix
2019-07-30 15:36:18 +02:00
Karol Stasiak
251c6c5562
Assembly output should contain decoded text literals
2019-07-30 15:31:00 +02:00
Karol Stasiak
d3b72f5b42
Add petjp and petscrjp encodings. Allow lowercase letters in string literals on Apple II.
2019-07-30 15:10:29 +02:00
Karol Stasiak
943a56a30f
6502: Fix some cases of word additions; optimize bitmasking
2019-07-30 14:47:52 +02:00
Karol Stasiak
40b2e393da
Another fix for PETSCII
2019-07-30 14:35:22 +02:00
Karol Stasiak
5c3637e2ea
6502: Optimize some word operations
2019-07-30 01:40:13 +02:00
Karol Stasiak
b68e4b67c8
Better support for big-endian systems
2019-07-29 22:51:08 +02:00
Karol Stasiak
dd4cb17a80
_.length and _.lastindex for arrays
2019-07-29 22:50:26 +02:00
Karol Stasiak
5fb6efbd61
Change PETSCII encoding to match CC65 and readkey
2019-07-29 02:07:30 +02:00
Karol Stasiak
cb0718b433
6809: First bits of the code generator
2019-07-29 00:55:24 +02:00
Karol Stasiak
b2afddf05b
More output operators
2019-07-28 17:49:20 +02:00
Karol Stasiak
8922beda00
Allow text literals in more positions
2019-07-27 01:38:06 +02:00
Karol Stasiak
35ba36ce11
Function pointers – initial version
2019-07-27 00:58:10 +02:00
Karol Stasiak
be9d27e2ee
Use standard logging during deduplication
2019-07-27 00:39:07 +02:00
Karol Stasiak
3aac33b54f
Add the bool type. Few boolean-related bugfixes.
2019-07-26 19:02:32 +02:00
Karol Stasiak
c8ca48a6b0
Better documentation for in-place modification operators
2019-07-26 18:56:24 +02:00
Karol Stasiak
96850d295d
Disallow calls to main when using software stack
2019-07-26 14:56:44 +02:00
Karol Stasiak
8d4e7b9326
Assignments of large objects accessed through pointers
2019-07-26 14:49:06 +02:00
Karol Stasiak
adc93aeb74
Z80: Fix optimizations near stack variables
2019-07-26 14:15:35 +02:00
Karol Stasiak
4b25ce2d8c
Pointers to fields of array elements
2019-07-24 00:14:27 +02:00
Karol Stasiak
b873030b29
6502: More optimizations
2019-07-23 23:17:03 +02:00