Irmen de Jong
687d86d36e
added amiga1200 target (68020 + FPU)
2026-09-06 18:25:15 +02:00
Irmen de Jong
e074fe614f
avoid extremely long array data source lines, and redundant label comments
2026-09-06 16:18:31 +02:00
Irmen de Jong
bbfb09e467
IR: uniform traversal
2026-09-05 00:06:30 +02:00
Irmen de Jong
58f544fe14
Implement counted-loop IR (IRLoopChunk)
...
Replace the early lowering of constant repeat/for loops into p8_regfile
counter sequences with a first-class IRLoopChunk that carries the trip
count and body. This removes the fragile REGFILE-DEPENDENT m68k dbra
peephole and gives each backend explicit control.
2026-09-04 00:01:00 +02:00
Irmen de Jong
b0f1f655c3
codeGenIntermediate: fold struct-array field access to single LOADX/STOREX
...
Replace arr[idx].field (arr:Struct[Sz], idx variable) from
EXT+MUL #Sz + ADDR + ADD #fieldOff + LOADI/STOREI (5 ops) to
single indexed op: LOADX/STOREX arr+fieldOff,S=Sz and
STOREZX for zero. Reuses existing ,S=N + +off encoding.
2026-09-02 01:35:30 +02:00
Irmen de Jong
59c41ad129
ir: add scaled indexing (S=) to LOADX/STOREX/STOREZX
...
Remove byte-offset pre-scaling from IR generation and encode
element index + explicit scale in the IR. Effective address is
base + index*scale + disp (disp = symbolOffset).
2026-09-02 00:34:23 +02:00
Irmen de Jong
1ba08ec6ec
make -dumpvars work on all compilation targets
2026-09-01 03:51:13 +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
c8d29e6dc9
ir: more IR peephole optimizations
2026-08-29 00:29:50 +02:00
Irmen de Jong
a7b14c2931
ir: more optimized inplace array assignments
2026-08-28 23:38:54 +02:00
Irmen de Jong
a14a8f4e62
ir: deduplicate index canonicalization and strengthen regression tests
2026-08-28 23:00:51 +02:00
Irmen de Jong
cf50372515
ir: canonicalize LOADX/STOREX/STOREZX index width and remove guessed-type workaround
2026-08-28 22:23:55 +02:00
Irmen de Jong
250ddda11b
ir,m68k: add LOADP_INC/STOREP_INC for pointer post-inc (a0)+
2026-08-27 02:57:54 +02:00
Irmen de Jong
bde52cc134
ir: fix byte->long/pointer extension for 32-bit targets (single-type EXTL)
2026-08-26 23:55:17 +02:00
Irmen de Jong
8e739febf0
ir: m68k status-flag fusion - skip redundant CMPI #0 on ops that set Z
2026-08-26 23:41:36 +02:00
Irmen de Jong
3fcb4b4262
ir: canonicalize LOADX index width,
2026-08-26 23:18:06 +02:00
Irmen de Jong
02a118ec0e
deref assignment targets: use target pointer width for address temps and IR casts
2026-08-24 23:38:45 +02:00
Irmen de Jong
561f31329d
support pointer assignment targets like (expr as ^^Struct).field = v and func().field = v (grammar + CodeDesugarer poke desugar, IR pointer-cast widening, tests/docs)
2026-08-24 23:00:23 +02:00
Irmen de Jong
ae55109a18
m68k: peepholes
2026-08-23 03:24:20 +02:00
Irmen de Jong
2ce7a63c1e
IR: resolve loadx index-width type conflicts in usedRegisters; add conversion-collapse peephole
2026-08-23 02:41:12 +02:00
Irmen de Jong
198cf4d722
IR: fix for loop iteration overflow for 256 iters
2026-08-20 23:20:42 +02:00
Irmen de Jong
df659d285b
optimize imports
2026-08-18 01:28:35 +02:00
Irmen de Jong
34f0bea4e8
fix pointer unit tests, consolidate pointer type selection for target
2026-08-17 03:30:17 +02:00
Irmen de Jong
4fdd12929a
vm: switched to m68k like 32 bits registers
2026-08-16 21:14:15 +02:00
Irmen de Jong
cc4f27d121
vm: making VM 32 bit
...
work in progress: see vm32.md there are failing tests still
2026-08-16 19:49:28 +02:00
Irmen de Jong
65b6280618
fix string compares on 32 bits targets
2026-08-16 15:55:30 +02:00
Irmen de Jong
69def73f3f
m68k: allow assigning string constant to long/pointer variable (to get its address)
2026-08-16 06:18:33 +02:00
Irmen de Jong
a68cdd13a6
IR: added EXTL and EXTLS opcodes to help with pointer math
2026-08-15 22:58:15 +02:00
Irmen de Jong
fcc93b385d
IR: implement array in place / and %
2026-08-13 23:13:53 +02:00
Irmen de Jong
4c6d9b8f5f
even more IR peephole optimizations
2026-08-13 23:01:41 +02:00
Irmen de Jong
6a3ee52bd5
more IR peephole optimizations
2026-08-13 22:50:50 +02:00
Irmen de Jong
a7f60a571d
m68k: fix byte/word index value type mismatch
2026-08-11 20:58:13 +02:00
Irmen de Jong
208205faea
step 4 to allow for loop 'step' to be variable not only const: various correctness
2026-08-11 06:17:34 +02:00
Irmen de Jong
a5a535806b
step 2 to allow for loop 'step' to be variable not only const: step type casting done earlier
2026-08-11 04:20:00 +02:00
Irmen de Jong
d582c1edf6
step 1 to allow for loop 'step' to be variable not only const
2026-08-11 04:07:56 +02:00
Irmen de Jong
e70a1ed403
fix STOREZX.BYTE register type determination on m68k targets
...
STOREZX uses reg1 as the index register (not the value register),
so it should return indexRegType (WORD on 32-bit targets) regardless
of the instruction type. The code handled this for FLOAT/WORD/LONG
but missed the BYTE type case, causing register type conflicts
when indexing arrays with uword variables on m68k targets.
2026-08-09 23:18:46 +02:00
Irmen de Jong
c53e72c5b2
Merge branch 'master' into new-codegens
...
# Conflicts:
# compiler/test/TestCompilerOnExamples.kt
2026-08-09 23:05:04 +02:00
Irmen de Jong
5ba494c5e5
fix IR codegen needing explicit CMP instructions because of changed status bits contract (see commit #19238cc36)
2026-08-09 22:36:39 +02:00
Irmen de Jong
b353904d30
fix for loop index register type issue in IR on m68k targets
2026-08-09 21:57:22 +02:00
Irmen de Jong
a3161fa117
implemented endian-aware msb/lsb handling
2026-08-08 19:34:12 +02:00
Irmen de Jong
9c8e81b566
IR: fix m68k indexing datatype size
2026-08-08 18:14:30 +02:00
Irmen de Jong
b3b983c7ec
fix untyped pointer indexing on 32 bits targets (long vs uword)
2026-08-08 16:01:28 +02:00
Irmen de Jong
14ae579f00
amiga: add iffparse library module
2026-08-08 14:57:07 +02:00
Irmen de Jong
45f48d2e88
amiga: added %option amiga_chipram in blocks to allocate them in CHIP ram (for sound and graphics data)
2026-08-08 02:01:04 +02:00
Irmen de Jong
8d6ed7712d
fix ir block cleanup bug
2026-08-08 01:24:09 +02:00
Irmen de Jong
c2d151920d
new docs about register allocation
2026-08-07 17:43:46 +02:00
Irmen de Jong
e007d127f0
IR: smarter handling of x<<16 and x>>16 if x is a long
2026-08-05 02:01:21 +02:00
Irmen de Jong
e5d9609db1
IR: added new multi-bit shifting opcodes
2026-08-05 01:42:49 +02:00
Irmen de Jong
051f3809cd
IR: improved add/sub of small const values
2026-08-05 00:10:09 +02:00
Irmen de Jong
b5fd07bb91
IR: added STOREIM instruction for immediate store constant to memory
2026-08-04 23:11:07 +02:00