Irmen de Jong
6cac707fd1
code cleanups
2026-10-13 22:40:19 +02:00
Irmen de Jong
9c9552174e
m68k: stackful coroutines fixed with per-task stacks, new %option noframe
2026-10-08 01:59:50 +02:00
Irmen de Jong
13828ea932
fix defer stack-save ordering for multi-value returns
2026-10-04 07:55:51 +02:00
Irmen de Jong
38db571f20
implemented -o / --output to specify specific output file
2026-10-02 22:33:43 +02:00
Irmen de Jong
e74c34a5ab
fix builtins rejecting a cx16 virtual register as their result register
2026-10-01 02:54:53 +02:00
Irmen de Jong
cff7732189
fix unsound index-reload peephole and extend it to two indexed accesses
2026-09-28 00:48:00 +02:00
Irmen de Jong
5222562493
move sqr range check into prog8_math.square instead of inlining it at each call site
2026-09-27 11:49:49 +02:00
Irmen de Jong
c8cda7947a
6502 optimization for uword * ubyte
2026-09-26 05:15:41 +02:00
Irmen de Jong
b8c975704a
6502 byte shift optimization for const multiplications
2026-09-26 03:25:25 +02:00
Irmen de Jong
2ef0ddd42c
6502 word shift optimization for const multiplications
2026-09-26 02:45:57 +02:00
Irmen de Jong
9a83b7455a
possible 6502 codegen optimization opportunities
2026-09-25 23:58:59 +02:00
Irmen de Jong
9fce07565c
some romable tests, fix romable callfar crash and update stale VM label address test
2026-09-25 22:40:36 +02:00
Irmen de Jong
b1a9ba929d
remove ARRAY_POINTER and make pointer arrays target-independent
2026-09-25 01:18:32 +02:00
Irmen de Jong
4cbf93da85
fix Status flag extraction clobbers a register return value
2026-09-24 01:00:49 +02:00
Irmen de Jong
976b64185d
fix struct size truncation to 256 bytes on targets that allow larger structs (m68k)
2026-09-24 00:22:23 +02:00
Irmen de Jong
69525ae67f
6502 codegen: emit _size symbol for struct and union memory size
2026-09-23 23:14:11 +02:00
Irmen de Jong
4eaba62f1e
6502 codegen: inline clamp() on word/uword when having compile-time constant bounds
2026-09-23 22:54:57 +02:00
Irmen de Jong
f086918e6f
add union types: structs where every field is at offset 0, thus saving memory
2026-09-23 00:07:44 +02:00
Irmen de Jong
2d070aaec4
Fix 6502 pointer-field augmented assignment clobbering scratch pointer
...
Fixes #245
2026-09-21 22:51:11 +02:00
Irmen de Jong
ba76fbfe85
fix code generation for "return <void function call>"
2026-09-17 22:39:53 +02:00
Irmen de Jong
5685a1f229
6502: tighter for loop code for word and long loop vars
2026-09-13 04:29:59 +02:00
Irmen de Jong
dbba6a94fa
Merge branch 'v12maintenance'
...
# Conflicts:
# codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/AssignmentAsmGen.kt
# compiler/src/prog8/compiler/astprocessing/AstIdentifiersChecker.kt
# compiler/test/ast/TestVariousCompilerAst.kt
# compiler/test/codegeneration/TestExecution6502.kt
# examples/test.p8
# gradle.properties
2026-09-10 21:45:47 +02:00
Irmen de Jong
e017c541bb
proper error message when using a builtin function name as block name. Also for some keywords if the parser allows. Fixes #236
2026-09-10 19:20:02 +02:00
Irmen de Jong
af06fdfffc
fix more 6502-only struct pointer-field bugs; add indexed in-place support
...
fixes #237
2026-09-10 19:20:02 +02:00
Irmen de Jong
e811ecdbde
fix 6502 struct pointer-field array indexing
2026-09-09 23:47:09 +02:00
Irmen de Jong
ce2b298d6f
code cleanups
2026-09-08 22:36:54 +02:00
Irmen de Jong
7dc05688bf
Add peephole optimization to fold array[variable+const] index offsets
...
Adds three new passes to the 6502 assembly optimizer:
- optimizeFoldIndexOffset (byte/bool arrays)
- optimizeFoldIndexOffsetSplitWord (split word arrays)
- optimizeFoldIndexOffsetNonSplitWord (@nosplit word arrays)
fixes github issue #234
2026-09-03 21:36:29 +02:00
Irmen de Jong
aac7d409dc
split AssignmentAsmGen into 3 helper objects to reduce massive file size
2026-09-03 03:39:29 +02:00
Irmen de Jong
9a461628f2
Merge branch 'v12maintenance'
2026-09-02 19:14:57 +02:00
Irmen de Jong
b702ea50da
no longer mangle inline asm that uses pipe operator (in other spots that is used as an instruction separator...)
2026-09-02 02:02:53 +02:00
Irmen de Jong
30266c1b92
Merge branch 'v12maintenance'
...
# Conflicts:
# gradle.properties
2026-09-01 22:22:39 +02:00
Irmen de Jong
05ba1237dc
fix %asm line grouping that tripped the asm optimizer to think stuff was one line where it wasn't
2026-09-01 22:04:33 +02:00
Irmen de Jong
1ba08ec6ec
make -dumpvars work on all compilation targets
2026-09-01 03:51:13 +02:00
Irmen de Jong
9bf8318b1c
Support arrays of struct instances
...
- Parser: parse `StructType[N] var` via elementToArray() for
STRUCT_INSTANCE (Prog8ANTLR.g4, Antlr2KotlinVisitor)
- Desugar: struct-instance bases via addressOfStructInstance(),
whole-struct `a[i]=a[j]` -> sys.memcopy, inferred `[[...]]`
and explicit `Struct : [...]` (without ^^) for value arrays;
reject `^^Struct : [...]` in instance arrays
- 6502: computeStructArrayElementAddress() with 16-bit
index*structSize scaling (AssignmentAsmGen, AsmGen)
- IR/VM/m68k/new6502: STRUCTDEFS round-trip, loaders, gens
- AstChecker/IdentifiersChecker: reject struct fields that are
arrays of structs; fix isArray guards
- Docs: structpointers.rst/variables.rst, todo.rst, examples/test.p8
- Tests: TestArraysOfStructs (pointer vs value init, IR round-trip,
16-bit strides)
2026-08-30 18:24:14 +02:00
Irmen de Jong
94822b8662
Add arrays of struct instances (StructType[N] vars)
...
Parser: accept `Type[N] name` between type and identifier
(Prog8ANTLR.g4, Antlr2KotlinVisitor) via elementToArray()
for STRUCT_INSTANCE; CodeDesugarer: handle struct-instance
bases, addressOfStructInstance(), whole-struct memcopy
(points[a]=points[b]), and fix variable-index 16-bit scaling
in 6502 AssignmentAsmGen.computeStructArrayElementAddress();
IR: preserve STRUCTDEFS round-trip, VM loader support;
m68k/new6502/intermediate backends; docs + todo updated.
Limitations: not as struct fields (AstChecker/
AstIdentifiersChecker error) nor as sub params.
2026-08-30 14:14:49 +02:00
Irmen de Jong
deae2e6422
Unify variable and memory slab relocation with vars address configuration
2026-08-29 01:17:44 +02:00
Irmen de Jong
8647b136bd
6502: fix constant byte store via pointer+const offset storing garbage
...
fixes regression from commit 102992911
2026-08-25 23:59:41 +02:00
Irmen de Jong
c08def79ae
Merge branch 'master' into new-codegens
2026-08-23 21:04:23 +02:00
Irmen de Jong
296295011e
Fix 6502 indexed pointer array store correctness bugs / missing code gen implementations
2026-08-23 20:54:32 +02:00
Irmen de Jong
4199ab4200
fix broken unit test dependency on vasm
2026-08-23 16:07:27 +02:00
Irmen de Jong
5857382242
add %bssaddress and %slabsaddress directives to directly control the addresses of those segments
2026-08-23 14:16:06 +02:00
Irmen de Jong
dfda43e747
more 6502 optimizations
2026-08-23 10:18:05 +02:00
Irmen de Jong
1029929111
6502 optimizations
2026-08-23 04:15:47 +02:00
Irmen de Jong
0d0d707976
Merge branch 'master' into new-codegens
...
# Conflicts:
# simpleAst/src/prog8/code/ast/AstExpressions.kt
2026-08-23 00:25:27 +02:00
Irmen de Jong
4912c96f78
various codegen bug fixes
2026-08-23 00:12:12 +02:00
Irmen de Jong
d17c978892
Merge branch 'master' into new-codegens
...
# Conflicts:
# compiler/test/TestCompilerOnExamples.kt
# examples/c64/cube3d.p8
# examples/cube3d-gfx.p8
# examples/cx16/cobramk3-gfx.p8
# examples/cx16/cube3d.p8
2026-08-22 19:12:06 +02:00
Irmen de Jong
45cb50ebb1
fix crash on typecast of array element to long as operand of shift/add
2026-08-22 19:05:14 +02:00
Irmen de Jong
234468690e
resolve aliased/qualified struct types via StructTypeResolver with proper errors, infer for-loop node type in the list declaration's scope so imported module lists work, and fix 6502 codegen crash comparing against &struct.field
2026-08-21 23:00:00 +02:00
Irmen de Jong
4b320013cf
Merge branch 'master' into new-codegens
...
# Conflicts:
# codeGenCpu6502/src/prog8/codegen/cpu6502/assignment/PointerAssignmentsGen.kt
# compiler/test/TestPointers.kt
# docs/source/todo.rst
# examples/test.p8
2026-08-21 19:14:29 +02:00
Irmen de Jong
f3de26bf6c
for-loop support for list/node iteration, and reverse str/array iteration using step -1
2026-08-21 07:28:39 +02:00