Irmen de Jong
|
8ffca93cd5
|
added transform routine for expr -> RPN
|
2023-03-17 22:28:22 +01:00 |
|
Irmen de Jong
|
7fea0c124a
|
introduce PtRpn node to replace PtBinaryExpression later
|
2023-03-17 22:28:22 +01:00 |
|
Irmen de Jong
|
c07cd72e85
|
restored the non=problematic asm optimization steps...
|
2023-03-14 22:30:50 +01:00 |
|
Irmen de Jong
|
e2c101206c
|
removed a problematic asm optimization step that could result in dysfunctional code when writing to I/O addresses
|
2023-03-14 22:14:48 +01:00 |
|
Irmen de Jong
|
ebd9f1471b
|
fix crash when using const word as pointer and implement 2 missing assign codegen paths
|
2023-03-11 15:39:03 +01:00 |
|
Irmen de Jong
|
d76547ead4
|
don't crash on certain undefined symbols, give proper error instead
Also the error handlers in unit tests now de-duplicate messages just like the compiler itself does
|
2023-03-11 14:58:41 +01:00 |
|
Irmen de Jong
|
4600772e05
|
fix pokew mistake
|
2023-03-11 01:03:34 +01:00 |
|
Irmen de Jong
|
f350137a14
|
fix array in place assignments
fixes balls and snow examples amongst others
|
2023-03-10 04:07:50 +01:00 |
|
Irmen de Jong
|
6c34672549
|
array in-place assignment problem
|
2023-03-10 02:02:47 +01:00 |
|
Irmen de Jong
|
c968bacb01
|
fix pokew() crash with certain address expressions
|
2023-03-08 23:29:57 +01:00 |
|
Irmen de Jong
|
48fed4e6fb
|
slight tweak to codegenerator backend interface
|
2023-03-08 00:14:38 +01:00 |
|
Irmen de Jong
|
fd269453a4
|
todos
|
2023-03-04 14:14:01 +01:00 |
|
Irmen de Jong
|
540b3ae2f4
|
tweak BinaryExpression splitting
|
2023-02-28 21:45:38 +01:00 |
|
Irmen de Jong
|
d282a2d846
|
remove cx16.callrom() just use callfar
|
2023-02-23 23:02:56 +01:00 |
|
Irmen de Jong
|
ba9268a09e
|
added -varshigh compiler option to move BSS section.
Documented BSS a bit in the manual.
|
2023-02-22 22:44:29 +01:00 |
|
Irmen de Jong
|
fb9902c536
|
avoid const fold loop on const bool thing=true
fixes #97
|
2023-02-22 21:27:08 +01:00 |
|
Irmen de Jong
|
5318ba6c6e
|
shrink evalstack from 2 to 1 page
c64=$cf00-$cfff, x16: $0700-$07ff
|
2023-02-21 22:52:04 +01:00 |
|
Irmen de Jong
|
d9e4f39ddc
|
memset BSS section to zero all at once, less individual var=0 assigns
|
2023-02-21 00:26:21 +01:00 |
|
Irmen de Jong
|
435b9d8973
|
get rid of 'noreinit' option for now, because it resulted in unreliable code
|
2023-02-20 23:29:16 +01:00 |
|
Irmen de Jong
|
0ea70ba656
|
fix proper initialization of zeropagevars with 'noreinit'
|
2023-02-20 23:05:27 +01:00 |
|
Irmen de Jong
|
92a07b87d2
|
clearer
|
2023-02-20 02:32:36 +01:00 |
|
Irmen de Jong
|
c3c82282ba
|
reinitGlobals option is clearer than the inverse
|
2023-02-19 19:09:29 +01:00 |
|
Irmen de Jong
|
adc15c24ef
|
introduce bss segments
|
2023-02-19 18:12:37 +01:00 |
|
Irmen de Jong
|
9ca6860ffa
|
tweak
|
2023-02-19 15:08:16 +01:00 |
|
Irmen de Jong
|
aaf375a57b
|
move some utility methods into Pt Ast nodes itself
|
2023-02-16 22:45:35 +01:00 |
|
Irmen de Jong
|
c59df6ec20
|
optimize isZpVar
|
2023-02-16 00:41:20 +01:00 |
|
Irmen de Jong
|
5c3f41f64d
|
reintroduce explicit PtAugmentedAssign ast node
|
2023-02-15 22:54:32 +01:00 |
|
Irmen de Jong
|
b95608f68a
|
new common ICodeGeneratorBackend interface for all code generator classes
|
2023-02-12 23:52:54 +01:00 |
|
Irmen de Jong
|
f09bcf3fcf
|
Merge branch 'master' into codegen-on-new-ast
|
2023-02-12 17:36:18 +01:00 |
|
Irmen de Jong
|
d0b18dec8e
|
shuffle variable sorting around to attempt smaller compiled programs
|
2023-02-12 17:34:33 +01:00 |
|
Irmen de Jong
|
75d486b124
|
fix variable node casting
|
2023-02-12 17:04:58 +01:00 |
|
Irmen de Jong
|
4914609485
|
local varnames and fix uninitialized parents
|
2023-02-12 16:00:58 +01:00 |
|
Irmen de Jong
|
8f904f75bb
|
Merge branch 'master' into codegen-on-new-ast
|
2023-02-11 14:40:23 +01:00 |
|
Irmen de Jong
|
549c598f51
|
variables sorted in asm
|
2023-02-11 14:35:56 +01:00 |
|
Irmen de Jong
|
ed68d604d6
|
fix break as indirect jump
fix subroutine param scoped name
|
2023-02-11 01:21:27 +01:00 |
|
Irmen de Jong
|
30d20a453b
|
tweak SymbolTable and fix its unittest
|
2023-02-09 22:58:21 +01:00 |
|
Irmen de Jong
|
fe29d8a23f
|
tweak codegen of inline sub
|
2023-02-09 21:59:09 +01:00 |
|
Irmen de Jong
|
694d088160
|
some cleanups about asmsub return registers and types
|
2023-02-09 03:19:57 +01:00 |
|
Irmen de Jong
|
6aabbffc62
|
some cleanups
|
2023-02-09 02:34:18 +01:00 |
|
Irmen de Jong
|
c75b1581d2
|
lookup via new ST
|
2023-02-05 01:15:23 +01:00 |
|
Irmen de Jong
|
109e118aba
|
fix sub return register
|
2023-02-03 21:16:44 +01:00 |
|
Irmen de Jong
|
201b77d5b6
|
boolean vs byte cast fixing, and pointervar error
|
2023-02-02 00:57:20 +01:00 |
|
Irmen de Jong
|
a5ca08f33d
|
fix popCpuStack to load values into asmsub register params
|
2023-02-01 22:00:37 +01:00 |
|
Irmen de Jong
|
988a3e4446
|
group the three Pt nodes that represent a variable in the p8 source under single interface IPtVariable
|
2023-01-31 23:29:15 +01:00 |
|
Irmen de Jong
|
0f5cd22bb7
|
more codegen fixes
|
2023-01-31 22:57:26 +01:00 |
|
Irmen de Jong
|
2f5bed36b3
|
remove bool to ubyte typecasts
|
2023-01-31 01:25:44 +01:00 |
|
Irmen de Jong
|
5b6534bb28
|
fix symbol lookup in new ast and minor codegen errors
|
2023-01-31 00:18:21 +01:00 |
|
Irmen de Jong
|
e31e5b2477
|
got rid of PtScopeVarsDecls
|
2023-01-29 13:49:27 +01:00 |
|
Irmen de Jong
|
8a4979f44c
|
vm target 'zeropage' more robust
|
2023-01-29 12:47:12 +01:00 |
|
Irmen de Jong
|
e67464325f
|
fix missing symboltable entries for asmgen
|
2023-01-28 00:00:23 +01:00 |
|
Irmen de Jong
|
c78d1e3c39
|
implemented Pt findTarget and siblings
|
2023-01-27 01:51:21 +01:00 |
|
Irmen de Jong
|
48c9349ce9
|
working on codegen fixes
|
2023-01-25 01:57:25 +01:00 |
|
Irmen de Jong
|
117d848466
|
consolidate builtin function definitions into codeCore
|
2023-01-25 00:23:00 +01:00 |
|
Irmen de Jong
|
b2cb125bd4
|
more 6502 codegen on new Pt-AST.
|
2023-01-22 17:10:52 +01:00 |
|
Irmen de Jong
|
5e8f767642
|
6502 codegen on new Pt-AST.
|
2023-01-22 17:10:52 +01:00 |
|
Irmen de Jong
|
3718b9d768
|
less joins
|
2023-01-02 02:10:38 +01:00 |
|
Irmen de Jong
|
c25eb088ec
|
redo 8e730ef93d to avoid larger code generated
|
2023-01-01 23:43:33 +01:00 |
|
Irmen de Jong
|
3feb3e52f8
|
optimizing scoped names in zeropage
|
2022-12-31 03:57:51 +01:00 |
|
Irmen de Jong
|
8e730ef93d
|
optimizing scoped names more and fix scoping of identifier names in arrays (pointers) in SymbolTable
|
2022-12-31 03:20:20 +01:00 |
|
Irmen de Jong
|
e0913a39ab
|
optimizing
|
2022-12-30 18:50:45 +01:00 |
|
Irmen de Jong
|
a04839dd6b
|
vm: add property for custom breakpoint handler
|
2022-12-30 15:10:13 +01:00 |
|
Irmen de Jong
|
002006517a
|
rewrite bool=bool^1 into bool=not bool
|
2022-12-29 19:42:38 +01:00 |
|
Irmen de Jong
|
ded9ada9bc
|
allow "not xx in array" expression in 6502 codegen
fix compiler crash on certain bool to byte casts
|
2022-12-23 17:07:34 +01:00 |
|
Irmen de Jong
|
578969c34c
|
optimize redundant rts/bra or rts/jmp generation in when statement
|
2022-12-10 17:21:15 +01:00 |
|
Irmen de Jong
|
ca1089b881
|
optimized codegen for logical expressions with simple right operand (such as c64.READST() & $40 )
|
2022-12-06 20:23:56 +01:00 |
|
Irmen de Jong
|
a82b2da16e
|
Fix some FP related assignment issues in 6502 codegen.
|
2022-12-04 13:03:38 +01:00 |
|
Irmen de Jong
|
f2273c0acc
|
fix several FP rom routine addresses on cx16.
|
2022-12-03 19:56:54 +01:00 |
|
Irmen de Jong
|
5e896cf582
|
preparing to add Golden RAM
|
2022-12-03 00:21:31 +01:00 |
|
Irmen de Jong
|
10760a53a8
|
optimize cmp word equal/notequal
|
2022-11-29 20:14:35 +01:00 |
|
Irmen de Jong
|
eee805183c
|
don't overwrite temp vars in complex comparison expressions. Fixes #89
|
2022-11-29 04:13:25 +01:00 |
|
Irmen de Jong
|
b8fb391022
|
- ir codegen now allows subroutine having the same name as its block
this is not possible for the 6502 codegen due to 64tass scoping limitation
|
2022-11-28 21:54:33 +01:00 |
|
Irmen de Jong
|
ec64a68a71
|
fixed compiler crash: unsigned = (-(unsigned as word) as uword)
|
2022-11-27 17:25:47 +01:00 |
|
Irmen de Jong
|
db55562f6a
|
fixed adpcm playback
|
2022-11-27 16:36:30 +01:00 |
|
Irmen de Jong
|
e2f20ebf94
|
fix crash on empty conditional branch statement (if_cc { } )
|
2022-11-23 02:14:48 +01:00 |
|
Irmen de Jong
|
922033c1b2
|
main block element order now remains the same as in source
|
2022-11-16 00:32:00 +01:00 |
|
Irmen de Jong
|
836a2700f2
|
func(x>>1) no longer uses slow stack eval
|
2022-11-15 02:49:40 +01:00 |
|
Irmen de Jong
|
562d722ad5
|
codegen: added missing codegen for float array inplace modification
|
2022-11-03 20:08:46 +01:00 |
|
Irmen de Jong
|
224f490455
|
Merge branch 'master' into labeledchunks
# Conflicts:
# codeGenIntermediate/src/prog8/codegen/intermediate/AssignmentGen.kt
# codeGenIntermediate/src/prog8/codegen/intermediate/ExpressionGen.kt
# examples/test.p8
|
2022-10-29 18:26:09 +02:00 |
|
Irmen de Jong
|
434515d957
|
fix: array[x] = ~array[x] no longer crashes the codegen
|
2022-10-27 23:56:38 +02:00 |
|
Irmen de Jong
|
094f7803b7
|
fix: array[x] = -array[x] no longer crashes the codegen
|
2022-10-27 23:20:40 +02:00 |
|
Irmen de Jong
|
b0c7bad391
|
fix: array[x] = -value no longer crashes the codegen
|
2022-10-27 21:58:37 +02:00 |
|
Irmen de Jong
|
e9a4a905ef
|
preparing to fix the array indexing compiler issue
|
2022-10-26 23:53:17 +02:00 |
|
Irmen de Jong
|
76428b16f0
|
Merge branch 'master' into labeledchunks
# Conflicts:
# codeGenIntermediate/src/prog8/codegen/intermediate/BuiltinFuncGen.kt
# docs/source/todo.rst
# examples/test.p8
# virtualmachine/src/prog8/vm/VirtualMachine.kt
|
2022-10-23 12:19:02 +02:00 |
|
Irmen de Jong
|
0d7b14e2d8
|
fix crash when assigning certain memory read to word variable. Fixes #82
|
2022-10-23 11:57:23 +02:00 |
|
Irmen de Jong
|
e94bf4c63c
|
replace rnd()/rndw() builtin functions by regular routines in math module
|
2022-10-22 17:02:43 +02:00 |
|
Irmen de Jong
|
6fc89607d3
|
ir: moving to labeled chunks, no more IRLabel nodes
|
2022-10-07 00:34:56 +02:00 |
|
Irmen de Jong
|
af6be44676
|
ir: adding register usage inspections
fix compiler problems with untrimmed inlined asm, and when only a single return statement is present in a subroutine
|
2022-09-30 20:25:00 +02:00 |
|
Irmen de Jong
|
e7a3a89bfb
|
fix windows issue
|
2022-09-27 22:41:48 +02:00 |
|
Irmen de Jong
|
06cf2e0bd7
|
vm: fix memory slabs (bsieve example)
|
2022-09-27 16:32:44 +02:00 |
|
Irmen de Jong
|
1d65d63bd9
|
ir: making sure all names are scoped properly. textelite now runs in vm
|
2022-09-25 18:02:35 +02:00 |
|
Irmen de Jong
|
b1e4347e10
|
fix compiler crash sometimes when casting byte to word
|
2022-09-22 13:00:47 +02:00 |
|
Irmen de Jong
|
97aa91c75e
|
removed 16 bits sin/cos routines from math library (sin16, sin16r etc)
|
2022-09-22 12:55:00 +02:00 |
|
Irmen de Jong
|
d07d00fa41
|
Join codeAst and codeCore modules
|
2022-09-19 17:28:18 +02:00 |
|
Irmen de Jong
|
fc0a0105b3
|
move memoryslab administration from allocator to symboltable
|
2022-08-21 19:48:56 +02:00 |
|
Irmen de Jong
|
40aa733ea7
|
clearer name
|
2022-08-15 20:55:35 +02:00 |
|
Irmen de Jong
|
f249ccd414
|
added asm optimization for same pointer index
|
2022-08-14 12:50:46 +02:00 |
|
Irmen de Jong
|
44ee4b989f
|
optimize code for logical expressions more if right operand is simple
|
2022-08-12 00:49:40 +02:00 |
|
Irmen de Jong
|
18790d867c
|
optimize conditional expression WORD & $ff00 to just msb(WORD)&$ff
|
2022-08-12 00:21:44 +02:00 |
|
Irmen de Jong
|
d6b8936376
|
fix mkword(@(ptr), 0) wrong asm
|
2022-08-11 23:01:19 +02:00 |
|
Irmen de Jong
|
2d34fdd28f
|
in a block marked option force_output, make all subroutines in asm use .block rather than .proc
this fixes some obscure assembly issues where subroutines were omitted from the output program by 64tass
|
2022-08-10 21:28:40 +02:00 |
|
Irmen de Jong
|
68abda1219
|
fix a few small compiler errors (removing functioncall, removing block, assigning virtual register return value)
|
2022-08-09 23:38:29 +02:00 |
|
Irmen de Jong
|
f778f08f76
|
tweak
|
2022-08-08 21:09:49 +02:00 |
|
Irmen de Jong
|
4644c9b621
|
got rid of GoSub ast node and codegen complexity related to that.
sometimes programs get smaller, sometimes bigger.
|
2022-08-07 03:24:20 +02:00 |
|
Irmen de Jong
|
00b717cde8
|
tweak
|
2022-08-04 18:35:10 +02:00 |
|
Irmen de Jong
|
310219e5d7
|
make sure memory slabs block is at the bottom of the asm file to not allocate needless space in the resulting prg
|
2022-07-31 15:37:36 +02:00 |
|
Irmen de Jong
|
a0deb463c9
|
optimized codegen for some equality comparison expressions and some logical expressions
|
2022-07-31 15:25:54 +02:00 |
|
Irmen de Jong
|
046dceb5c2
|
added optimized case for signed division by 2
|
2022-07-24 13:59:35 +02:00 |
|
Irmen de Jong
|
dcc1f00048
|
fix rounding errors in signed divide by power-of-two
The optimized bit-shifting division is removed (for now)
|
2022-07-24 12:34:55 +02:00 |
|
Irmen de Jong
|
5189eaca36
|
move the vm unit tests to codeGenVirtual module and remove virtualmachine dependency in the compiler module
|
2022-07-17 12:56:22 +02:00 |
|
Irmen de Jong
|
f690f58bd4
|
callfar() now accepts a variable as address, so it can be used to indirect JSR to a subroutine whose address is not fixed. ('goto' already could indirect JMP to a variable address.)
|
2022-07-14 19:29:59 +02:00 |
|
Irmen de Jong
|
2d600da8b6
|
fix codegen crash on certain nested typecast
|
2022-07-13 22:24:31 +02:00 |
|
Irmen de Jong
|
7a26646e1b
|
tweak bool type handling
|
2022-07-11 02:08:12 +02:00 |
|
Irmen de Jong
|
1163543a98
|
fix bool param lookup problem
|
2022-07-07 22:23:56 +02:00 |
|
Irmen de Jong
|
65daf29acd
|
fix compiler crash related to word types in certain comparison expressions
|
2022-07-07 22:23:56 +02:00 |
|
Irmen de Jong
|
298b25cf7d
|
fix compiler crash on certain typecasting assignment
|
2022-07-07 22:23:56 +02:00 |
|
Irmen de Jong
|
41f4e22a17
|
introduce BOOL type
|
2022-07-07 22:23:56 +02:00 |
|
Irmen de Jong
|
288c57c144
|
ack to allow user to override the following two with command line redefinition:
|
2022-07-07 22:16:08 +02:00 |
|
Irmen de Jong
|
b41779bd02
|
added -D command line option to define symbols in the assembly file
|
2022-07-06 23:40:36 +02:00 |
|
Irmen de Jong
|
e1c77ce236
|
fix pop() name scoping
|
2022-07-02 23:27:08 +02:00 |
|
Irmen de Jong
|
965340ff90
|
logical and/or/xor/not all replaced by bitwise &,|,^,~ (ast, codegens)
this also fixed some invalid outcomes of logical expressions!
|
2022-07-02 00:38:17 +02:00 |
|
Irmen de Jong
|
fb989ae62f
|
cx16: reset rom/ram/monitor banks at program exit to sane values.
|
2022-07-01 00:14:38 +02:00 |
|
Irmen de Jong
|
4b358abbb7
|
"not" operator removed from ast and codegen (it's been replaced with x==0 as equivalent)
|
2022-06-29 01:13:08 +02:00 |
|
Irmen de Jong
|
ef92451d1a
|
fix logical expressions on arbitrary values, for now with boolean() around the operands
|
2022-06-28 01:18:36 +02:00 |
|
Irmen de Jong
|
bb1cda0916
|
fix: boolean values of terms in logical expressions are now properly evaluated
|
2022-06-26 23:55:34 +02:00 |
|
Irmen de Jong
|
eea09f4de5
|
fix invalid asm label sometimes generated for multiple loops in same subroutine
|
2022-06-24 02:26:45 +02:00 |
|
Irmen de Jong
|
bda016bb3b
|
optimized 6502 codegen for logical expressions
|
2022-06-15 22:17:15 +02:00 |
|
Irmen de Jong
|
cc174b7b85
|
added boolean() builtin function and use it to get rid of !=0 comparisons
|
2022-06-14 23:34:45 +02:00 |
|
Irmen de Jong
|
bf9d120081
|
logical operators now always return a boolean byte result, instead of sometimes word type as well
(preparing for codegen simplifications for these)
|
2022-06-13 01:37:16 +02:00 |
|
Irmen de Jong
|
775c85fc18
|
don't swap operands that would change function evaluation order + vm: fix label casing error
|
2022-06-13 00:25:45 +02:00 |
|
Irmen de Jong
|
5a756aaed9
|
Pipe expression "|>" removed from the language
|
2022-06-12 18:41:42 +02:00 |
|
Irmen de Jong
|
c6e92ecac4
|
some code cleanup
|
2022-06-12 16:15:08 +02:00 |
|
Irmen de Jong
|
710f27afa9
|
bump library versions
|
2022-06-09 22:44:17 +02:00 |
|
Irmen de Jong
|
0a65dfdd10
|
optimized codegen for some more simple expressions with +/-
|
2022-06-07 22:30:08 +02:00 |
|
Irmen de Jong
|
3075578245
|
optimized codegen for assigning value or variable to indexed pointer. (6502)
|
2022-06-06 18:30:19 +02:00 |
|
Irmen de Jong
|
b042b7705e
|
fix invalid removal of repeated assignments.
|
2022-06-06 17:27:06 +02:00 |
|
Irmen de Jong
|
d56eb397f9
|
fix codegen for rol/ror on pointer indexed
|
2022-06-06 16:07:45 +02:00 |
|
Irmen de Jong
|
3054a1d32d
|
api change: removed swap() builtin function (too complex in codegen for little used function)
|
2022-06-06 16:01:11 +02:00 |
|
Irmen de Jong
|
f70b914779
|
fix optimized codegen for 2 arg functions, sometimes was passing wrong arg value due to register overwriting
|
2022-06-06 13:21:45 +02:00 |
|
Irmen de Jong
|
9e3e2ff81a
|
fix assembly generation error when pipe character is part of string literal
|
2022-06-04 22:25:51 +02:00 |
|
Irmen de Jong
|
dbb92881a1
|
fixed X register corruption in some cases of rol() and ror()
|
2022-06-04 21:10:48 +02:00 |
|
Irmen de Jong
|
10bf7f5d07
|
fix: again gives proper name redefinition errors in same scope
|
2022-06-04 20:15:46 +02:00 |
|
Irmen de Jong
|
8618ba1b60
|
fix 6502 expression codegen for pointer indexing
|
2022-06-04 18:46:16 +02:00 |
|
Irmen de Jong
|
3c8c44155d
|
vm: loadix instruction added for indirect addressing via pointer
|
2022-06-04 18:07:57 +02:00 |
|
Irmen de Jong
|
2002412026
|
optimized codegen for pointer indexing (read expressions)
|
2022-06-04 17:20:17 +02:00 |
|
Irmen de Jong
|
73a3a61729
|
swap() checks for unsupported code gen
|
2022-06-03 23:41:24 +02:00 |
|
Irmen de Jong
|
5fe6aa2800
|
fix swap() code for pointervars
|
2022-06-03 23:13:35 +02:00 |
|
Irmen de Jong
|
ba614801ee
|
cleanup
|
2022-05-22 23:11:22 +02:00 |
|
Irmen de Jong
|
0bf00d1ca4
|
c64/c128 targets: perform cleanup at program exit such as re-enabling run-stop key and character set switching.
|
2022-05-15 16:44:26 +02:00 |
|
Irmen de Jong
|
7c121bfc01
|
first steps to support multiple args in pipe expressions
|
2022-05-07 19:00:47 +02:00 |
|
Irmen de Jong
|
da01a5b4dc
|
vm: implement float to integer cast, any, all, reverse
|
2022-05-04 22:08:21 +02:00 |
|