1
0
mirror of https://github.com/KarolS/millfork.git synced 2024-07-02 18:29:50 +00:00
Commit Graph

576 Commits

Author SHA1 Message Date
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
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
49ee0fd3a2 MInor test suite improvements 2018-12-19 17:28:15 +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
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