Irmen de Jong
c14f6cfc2b
more optimal if expression code
2024-10-22 23:49:24 +02:00
Irmen de Jong
a6159702da
defers are now only registered/called when flow of control actually reached the defer statement
...
a defer statement sets its corresponding bit in a bitmask that is shifted in the defer handler routine to see what defer blocks to call.
2024-10-21 00:55:51 +02:00
Irmen de Jong
9851d14fb9
added if expression: ubyte a = if b>0 44 else 55
...
it doesn't generate the best code yet, like regular ifs do.
2024-10-19 15:34:04 +02:00
Irmen de Jong
a40d120f2a
more defer sanity checks
2024-10-18 22:32:49 +02:00
Irmen de Jong
fcdd9414d9
fix defer interfering with return value, fix prefix expression error when operand is functioncall that doesn't return a value.
2024-10-18 21:43:09 +02:00
Irmen de Jong
2a52241f1c
defer is now done *after* calculating a return value
2024-10-18 20:56:27 +02:00
Irmen de Jong
ce7d094adb
Zig-like "defer" to clean up stuff when leaving the scope of the current routine.
2024-10-18 01:30:20 +02:00
Irmen de Jong
a0cf1889a3
omit more redundant 0-initializations ("stz's")
2024-10-17 22:51:39 +02:00
Irmen de Jong
38ef394e15
IR codegen: global vars with numeric initialization value are now also put into the VARIABLESWITHINIT section rather than requiring explicit code instructions to initialize them in INITGLOBALS.
...
Note that something similar, such as putting those variables inline in the program initialized with their value and all, cannot be done for the 6502 codegen: the program needs a mechanism to reset ALL variables when it runs a second time.
2024-10-16 22:15:51 +02:00
Irmen de Jong
abbf7c7cb0
compiler name change: prog8c (was p8compile)
...
fat jar file also changed: prog8c-X.Y-all.jar (was: prog8compiler-X.Y-all.jar)
2024-10-16 18:36:19 +02:00
Irmen de Jong
ca5f7ae32f
global (block-level) variables that get initialized with an array index expression now get a constant value as well if possible. This reduces the number of instructions in the init globals code block
2024-10-16 02:14:19 +02:00
Irmen de Jong
cbc4b75e50
IR now contains "bool" as a type instead of already erasing it into "ubyte". (boolean literals still are simply just 1 and 0 values)
2024-10-16 01:03:35 +02:00
Irmen de Jong
65ddcf91d0
remove unused syscalls
2024-10-15 18:24:55 +02:00
Irmen de Jong
5280e1b449
err msgs
2024-10-13 21:33:13 +02:00
Irmen de Jong
e9edffa9f0
remove support for array-to-array assignments (other than initialization of variable declaration)
...
Just use an explicit sys.memcopy(src, dest, sizeof(dest)) or assign array members individually.
2024-10-13 20:02:43 +02:00
Irmen de Jong
aef211e5f3
stricter array literal element type handling (number,bool,address-of).
...
More consistent implicit address-of handling if array literals contain by-ref identifiers (such as subroutine names)
2024-10-13 17:46:41 +02:00
Irmen de Jong
66829203d8
New [x]*42 syntax to create array literals with repeated values (like "abc"*10 already exists for strings)
...
Should be used in place of array initializer expressions that contain only a single numeric value to initialize the whole array with. That isn't supported anymore.
2024-10-13 05:16:08 +02:00
Irmen de Jong
7a0eaf3148
Remove array initialization by single value.
...
New compiler and kotlin version.
2024-10-13 04:31:56 +02:00
Irmen de Jong
fb23452383
optimize monogfx.fill()
2024-10-12 17:18:00 +02:00
Irmen de Jong
8d9bc2f5ff
fixing all sorts of things about assigning arrays to arrays
2024-10-12 12:33:46 +02:00
Irmen de Jong
7e38d26c33
added several color fade functions to the palette module (cx16)
2024-10-09 21:48:04 +02:00
Irmen de Jong
5731b79554
don't allow problematic string and array assignments anymore, improve error messages.
...
In certain cases you will need to use string.copy() explicitly to overwrite strings with new strings.
2024-10-09 00:51:05 +02:00
Irmen de Jong
eaa22a9d13
added callfar2() builtin function that allows to set A,X,Y and Carry arguments.
2024-10-08 21:36:04 +02:00
Irmen de Jong
7c69d38588
scan all asmsubs to see if another subroutine is referenced. Fixes #153
2024-10-07 20:39:49 +02:00
Irmen de Jong
a088ee56b0
function inlining can no longer get into an infinite loop. Fixes #154
2024-10-07 19:58:04 +02:00
Irmen de Jong
ae669af904
add sys.sizeof_byte, _word, _float constants
...
because Antlr doesn't allow the grammar to contain a sizeof(typename) rule to override the sizeof(identifier) rule
2024-10-07 19:17:37 +02:00
Irmen de Jong
d1ddf05e38
check that block address leaves room for program startup logic
2024-10-03 22:30:06 +02:00
Irmen de Jong
51279a98b3
attempt to fix forloop range datatype issues
2024-10-03 21:12:31 +02:00
Irmen de Jong
bf33a4f82d
small refactor to prepare for better range dt adjustment
2024-10-02 23:28:33 +02:00
Irmen de Jong
fff0d741c3
improved parsing of "not in" operator, and [] array signature (allow space)
2024-10-02 19:06:20 +02:00
Irmen de Jong
e83d0ee820
fix crash in msb() when assigning to word again. Fix wrong register in lsb() and msb() in certain situations.
2024-10-02 02:40:16 +02:00
Irmen de Jong
09f3eecf56
changed cx16/rotating-stars example to starszoom instead.
2024-10-02 01:36:54 +02:00
Irmen de Jong
ea3871d0c4
comment about builtin function call ast node type
2024-10-01 02:14:31 +02:00
Irmen de Jong
3cf39e072e
fix C64 floating point sign issue
2024-09-30 21:56:34 +02:00
Irmen de Jong
413b86cc4a
more helpful error messages
2024-09-30 00:27:29 +02:00
Irmen de Jong
a6107fcfdf
taking the address of a romsub is now the constant value of said romsub's declared address
2024-09-29 23:53:39 +02:00
Irmen de Jong
a064ade1e0
better codegen for call() function
2024-09-29 23:18:51 +02:00
Irmen de Jong
df35aa7942
added (experimental) compression library
2024-09-29 18:59:53 +02:00
Irmen de Jong
cd49c5f88d
cx16: set rom bank to 0 at startup (for faster kernal API calls)
...
cx16: callfar() with constant address generates shorter asm
2024-09-28 20:58:29 +02:00
Irmen de Jong
1541ad2160
fix variable init order mistake in program startup
...
reset multiply bit at end of verafx.muls
2024-09-28 19:17:45 +02:00
Irmen de Jong
c78b7b1a24
added verafx.mult16()
2024-09-28 01:00:28 +02:00
Irmen de Jong
3f630ab1b0
RAW output now also properly initializes variables
2024-09-27 18:46:03 +02:00
Irmen de Jong
04cb684fd4
tweak program start initialization and fix cleanup at exit for atari and pet compiler targets
2024-09-27 02:14:54 +02:00
Irmen de Jong
d3e4481112
fix asm optimizer bug where it erroneously discarded rts
with a label
2024-09-22 21:41:41 +02:00
Irmen de Jong
e29ff1c848
fix name redefinition check for multi-declarations
2024-09-20 19:55:32 +02:00
Irmen de Jong
46b94c17d6
comment
2024-09-20 17:33:00 +02:00
Irmen de Jong
2954f5f04d
Add clear_screen and set_screen_mode to gfx_lores. Fix boolean draw vs color param in some monogfx routines. Elaborate some docs.
2024-09-17 22:19:47 +02:00
Irmen de Jong
cac4c1eb1e
improve callgraph unused subroutine check for routines called from inline asm
2024-09-16 21:49:30 +02:00
Irmen de Jong
0b1f30d98c
no more span overdraws in graphics disc routines
2024-09-15 15:38:33 +02:00
Irmen de Jong
c7b1e8d772
fixed a variable scopedname issue where it took the fully scoped name instead of just the local name
...
this made 64tass not strip out that code if it was unused
2024-09-14 23:17:26 +02:00
Irmen de Jong
0d3ad80659
retain type of consts better to avoid precision loss
...
this also fixed a difference in const calculation where the result could differ if you were using optimzations or not.
2024-09-14 21:06:21 +02:00
Irmen de Jong
dca31b2ca3
added gfx_lores module for cx16 for optimized graphics routines for lores 256c screen mode
...
currently contains a new line() routine
2024-09-14 15:30:39 +02:00
Irmen de Jong
cf551d2cc7
tweak containment check even more
2024-09-13 00:02:26 +02:00
Irmen de Jong
255c5bfaca
improve containment check for few values
2024-09-11 03:24:30 +02:00
Irmen de Jong
01c6754928
get rid of problematic common-subexpression optimization
2024-09-11 01:10:42 +02:00
Irmen de Jong
8eaf884f69
improve codegen for for loops downto 0,1 when start value is not const
2024-09-10 23:54:44 +02:00
Irmen de Jong
699a2bb7ab
improved codegen for for loops downto 0
2024-09-10 21:33:57 +02:00
Irmen de Jong
4e98fb75d6
support assigning multiple return flags from asmsub in 6502 codegen
2024-09-09 22:56:40 +02:00
Irmen de Jong
7aec627f6b
add optimization if x==0 or x==1 -> if x<2
2024-09-08 22:39:48 +02:00
Irmen de Jong
59a2fec176
fix IR containment check
2024-09-08 21:49:13 +02:00
Irmen de Jong
f7feaf158d
added cx16.mouse_present() routine to check for presence of mouse
2024-09-06 18:21:13 +02:00
Irmen de Jong
2396f707c6
fix bug in codegen for certain array lookups using word typed index value (i.e. via a pointer variable)
2024-09-06 18:11:41 +02:00
Irmen de Jong
d4d8e1b1ba
comment about implementation in life example
2024-09-06 16:39:44 +02:00
Irmen de Jong
0eac04c220
added cx16/life.p8 example (Conway's game of life)
2024-09-06 15:21:29 +02:00
Irmen de Jong
29dd758302
Fix compiler crash in for loops with just 1 iteration
2024-09-05 21:26:46 +02:00
Irmen de Jong
e2fcac322f
optimizing gfx2.fill()
2024-08-25 13:51:01 +02:00
Irmen de Jong
e439720c9d
optimized string compares
2024-08-24 14:53:18 +02:00
Irmen de Jong
b566ea5c3f
added string.rfind()
2024-08-22 23:22:31 +02:00
Irmen de Jong
b70ce0015c
fix missing opportunities to use TSB instruction
2024-07-24 22:51:49 +02:00
Irmen de Jong
c67f877857
Codegen: use BIT instruction for memory location bit 7 and 6 tests (use N and V flags)
2024-07-24 19:26:54 +02:00
Irmen de Jong
4c98070b3c
optimize shifts by 1 by inlining it better
2024-07-21 22:08:41 +02:00
Irmen de Jong
3681d6ee1c
optimize division by powers of 2 better (into bit shifts)
2024-07-21 21:34:38 +02:00
Irmen de Jong
0af17cdc33
todo's for division optimizations
2024-07-21 20:32:03 +02:00
Irmen de Jong
2aae1f5e30
stricter checks for negative array indexing
2024-07-20 22:37:03 +02:00
Irmen de Jong
d18f2a7bfd
improved codegen for some pointer+index expressions
2024-07-18 23:41:34 +02:00
Irmen de Jong
9046fe8d3a
ringbuffer and pointer optimization todo
2024-07-16 22:59:31 +02:00
Irmen de Jong
78c7ee247a
generate 65c02 TSB/TRB instructions in certain cases
2024-07-16 00:36:00 +02:00
Irmen de Jong
484677b4b1
Get rid of any() and all() builtin functions.
...
Replaced by regular subroutines in the anyall module.
2024-07-06 18:49:03 +02:00
Irmen de Jong
25f25a8767
Get rid of sort() and reverse() builtin functions.
...
Sort() had too many gotchas and reverse() is kinda redundant you can loop in decreasing order through an array too.
2024-07-06 17:07:58 +02:00
Irmen de Jong
0c053e4a2c
IR: don't confuse symbol names starting with 'r', with register names
...
Added start of buffer.p8 (experimental)
2024-07-04 01:39:25 +02:00
Irmen de Jong
7a9dd1ac9b
optimize trivial 65c02 stack instructions
2024-06-29 15:42:40 +02:00
Irmen de Jong
1c97c22eff
optimize simple word and byte addition/subtraction better
2024-06-29 14:33:42 +02:00
Irmen de Jong
3d799ae7fe
todo
2024-06-01 15:03:01 +02:00
Irmen de Jong
d2e010c439
added cx16.scnsiz (extapi call), describe profiler.py script
2024-05-31 21:48:29 +02:00
Irmen de Jong
fd1e6796ef
correct branch instruction, fixes #137
2024-05-24 20:54:40 +02:00
Irmen de Jong
3ea0f0cbaa
remove 16 bit f_tell variant.
2024-05-22 21:47:02 +02:00
Irmen de Jong
f3e3311598
added diskio.f_tell() and f_tell32() on the cx16 target
2024-05-21 23:14:25 +02:00
Irmen de Jong
0dc50a93a4
added @nozp variable flag
2024-05-21 21:53:58 +02:00
Irmen de Jong
fda8e61be4
give better error when using @split wrong
2024-05-20 21:51:07 +02:00
Irmen de Jong
c719e274d5
java version tweaks
2024-05-18 20:25:44 +02:00
Irmen de Jong
62afd3342e
void syntax check, fixes #135
2024-05-18 17:15:31 +02:00
Irmen de Jong
7915dda35f
update libraries
2024-05-12 03:02:54 +02:00
Irmen de Jong
a7247f5b8b
fix boolean expression optimization bug
2024-04-12 21:56:25 +02:00
Irmen de Jong
5d7ddebcad
fix bool to uword cast in 6502 codegen
2024-04-11 00:34:53 +02:00
Irmen de Jong
53df0eb707
cleanups
2024-04-10 22:04:03 +02:00
Irmen de Jong
f4b50368ba
fix grammar: if_xx with else part
2024-04-09 22:35:30 +02:00
Irmen de Jong
db80417bd7
fix a problem with const fold optimization in if expressions, and IR compilation of that
2024-04-09 22:09:29 +02:00
Irmen de Jong
2aae46d632
added -dumpsymbols option to print a dump of all the variables and subroutine signatures
2024-04-09 19:19:13 +02:00
Irmen de Jong
19ebc6d6b3
better error message for ambiguous multi-var initialization in vardecl
2024-04-08 22:36:00 +02:00
Irmen de Jong
6ed9899dc7
smarter desugaring of ubyte x,y
2024-04-07 23:36:46 +02:00