Commit Graph

1029 Commits

Author SHA1 Message Date
Irmen de Jong
08bacdd090 temp vars are now dynamically added to AST as needed 2022-02-10 02:52:47 +01:00
Irmen de Jong
41b1c80492 label name from memory() no longer interned as string var 2022-02-10 00:45:20 +01:00
Irmen de Jong
e5d7316e5d streamlining non-zpvars asmgen using new mechanism 2022-02-10 00:09:09 +01:00
Irmen de Jong
98b2855b9c cleanups 2022-02-09 16:35:52 +01:00
Irmen de Jong
f3c52c409f variable zp allocation now only done in the allocator 2022-02-08 23:44:21 +01:00
Irmen de Jong
1307bdc612 more cleanups to the allocator 2022-02-08 22:46:49 +01:00
Irmen de Jong
8c2e6971fc start using vars instead of callgraph (2) 2022-02-08 21:09:00 +01:00
Irmen de Jong
7d67005709 more rewrite variable allocation 2022-02-08 20:40:10 +01:00
Irmen de Jong
101fb0b8aa some naming changes and cleanups 2022-02-06 23:14:44 +01:00
Irmen de Jong
10de7dc1f9 fixed the concurrent modification issue on zeropage when running unit tests in parallel, by not having machine targets be static objects 2022-02-06 21:29:06 +01:00
Irmen de Jong
6bdd81623f cleaning up AsmGen interface 2022-02-06 17:07:03 +01:00
Irmen de Jong
8ae3bad6f7 fix rts in empty asmsub 2022-02-06 05:05:58 +01:00
Irmen de Jong
77de99b383 rts-check for non-inlined subroutines + var init adjustment when noreinit, moved out of codegen 2022-02-06 04:03:03 +01:00
Irmen de Jong
312949f336 added experimental codegen backend option 2022-02-05 21:42:03 +01:00
Irmen de Jong
08e052380a comments 2022-02-05 03:14:26 +01:00
Irmen de Jong
6916b8bff7 remove redundant properties 2022-02-03 23:59:24 +01:00
Irmen de Jong
69b9dfa468 fix invalid recursion warning for code referencing subroutine but not via a call 2022-02-01 23:09:52 +01:00
Irmen de Jong
ab61b8ba0a doc ref 2022-02-01 21:47:53 +01:00
Irmen de Jong
5c8c64242f callgraph: nameInAssemblyCode searches smarter (for unused()) 2022-02-01 00:33:05 +01:00
Irmen de Jong
e773be2f58 remove no longer needed asmSymbol scoping prefixing, now asmSymbolName are identical to asmVarName 2022-01-31 01:47:22 +01:00
Irmen de Jong
f965804e6d fix invalid optimization of returning a parameter variable in a subroutine 2022-01-28 16:44:42 +01:00
Irmen de Jong
ec078eba72 optimize w=msb(w) => w>>=8, w=lsb(w) ==> w&=$00ff 2022-01-28 16:11:52 +01:00
Irmen de Jong
7b3cd71085 fixed improper optimization of word<<8 and word>>8 2022-01-28 13:54:06 +01:00
Irmen de Jong
06128b5d07 optimize word&=$ff00 and word&=$00ff 2022-01-28 13:40:28 +01:00
Irmen de Jong
a170506356 simplify IdentifierReference equality check back to default (name+pos) 2022-01-27 23:32:55 +01:00
Irmen de Jong
5ecf2a3357 enable more optimizations for typecasted assignments. Fixed missing codegen for assigning bytes to words in certain cases. 2022-01-27 18:05:25 +01:00
Irmen de Jong
e2b8c069d7 check for missing '&' in string + value expressions (can't just add a value to a string) 2022-01-24 23:30:40 +01:00
Irmen de Jong
08db72903c for long containment checks use a subroutine instead of huge cmp-table 2022-01-24 22:40:22 +01:00
Irmen de Jong
46f9fab140 library API change: string.find now returns index of character + carry bit status (instead of substring address) 2022-01-24 21:37:04 +01:00
Irmen de Jong
b7d06f2c0a API change: added alignment parameter to memory() function 2022-01-24 18:58:57 +01:00
Irmen de Jong
118196a0bf library API change: moved cx16.vload() to cx16diskio module 2022-01-24 18:31:18 +01:00
Irmen de Jong
586ce1fc80 tweak return's use of intermediate variable 2022-01-24 01:10:04 +01:00
Irmen de Jong
adb979df38 tweak comment 2022-01-23 22:34:05 +01:00
Irmen de Jong
3401cb5b4a fixed compiler recursion crash when returning certain typecasted value 2022-01-23 19:13:20 +01:00
Irmen de Jong
ebf1f12e97 inferred type for len() is now more precise 2022-01-23 17:24:39 +01:00
Irmen de Jong
5766208207 fix compiler crash when initializing an array var with another array var 2022-01-23 14:23:34 +01:00
Irmen de Jong
4bf4771f08 fix @requirezp in astToSource. Fix sometimes allocating zeropage variables in normal ram. 2022-01-23 13:42:52 +01:00
Irmen de Jong
0e87db9eb7 fix invalid size copied when initializing arrays in Zeropage 2022-01-23 13:00:01 +01:00
Irmen de Jong
1e053783f3 fix invalid size copied when assigning non-byte arrays 2022-01-23 02:42:36 +01:00
Irmen de Jong
7afc96112b now correctly requires using & (address-of) when assigning the address of a label or subroutine, used to generate invalid code when it was omitted 2022-01-23 02:23:30 +01:00
Irmen de Jong
7bb41a30ed fixed compiler crash when assigning number larger than 65535 2022-01-23 01:44:16 +01:00
Irmen de Jong
3d1b0eb843 fixed compiler crash when using cx16.r0H as function call argument 2022-01-23 01:28:16 +01:00
Irmen de Jong
5b9af0b5ae tweaks 2022-01-21 23:38:54 +01:00
Irmen de Jong
9219ec539d allow "goto pointervar" for indirect jumps 2022-01-21 22:55:59 +01:00
Irmen de Jong
c8bd57cd4d fixed signature of mouse_get(): it returns the buttonstatus in A. Added convenience cx16.mouse_pos() routine. 2022-01-21 22:06:17 +01:00
Irmen de Jong
53bf8c09fd fix screencode encoding selection 2022-01-19 21:37:27 +01:00
Irmen de Jong
651c383668 refactor encoder to be the same for all 3 machine targets now 2022-01-19 21:21:33 +01:00
Irmen de Jong
9ed7587e3e document new string encoding syntax 2022-01-19 21:21:33 +01:00
Irmen de Jong
674295e800 improve error reporting from string encoders 2022-01-19 21:21:33 +01:00
Irmen de Jong
6b02f2eea0 implement iso encoding and new string encoding syntax, fixes #38 2022-01-19 21:21:32 +01:00
Irmen de Jong
3b59592110 generalize string encoding flag into enum 2022-01-18 21:21:49 +01:00
Irmen de Jong
72640ae058 no longer add nops around breakpoint for vice 2022-01-17 22:12:58 +01:00
Irmen de Jong
d916027e75 labels no longer start with '_' fixes #62 2022-01-17 22:03:53 +01:00
Irmen de Jong
8966d2aa06 comments and prepare new version 7.7 2022-01-16 23:03:00 +01:00
Irmen de Jong
de7ea04f54 when zp option = dontuse, print error for any variable with @requirezp 2022-01-16 18:13:24 +01:00
Irmen de Jong
bf71fabe0e fix codegen mistake for zp allocated loop vars 2022-01-16 18:09:09 +01:00
Irmen de Jong
b3368acb33 todos to fix broken examples 2022-01-16 17:57:47 +01:00
Irmen de Jong
87220c6697 docs for @requirezp 2022-01-16 17:20:36 +01:00
Irmen de Jong
fb4c1473c5 array and string initialization in zeropage 2022-01-16 17:20:36 +01:00
Irmen de Jong
2bb2502d20 added @requirezp to syntax files 2022-01-16 17:20:36 +01:00
Irmen de Jong
0f0f40bff3 improved ForloopAsmGen loopvar zp allocation 2022-01-16 17:20:36 +01:00
Irmen de Jong
a798fe72d3 cx16 reserved zp vars (virtual registers) 2022-01-16 17:20:36 +01:00
Irmen de Jong
7dd2517f67 fix Zp allocation issues 2022-01-16 17:20:36 +01:00
Irmen de Jong
641477d6f6 add @requirezp and allow str/array to be on zp (with warning) 2022-01-16 17:20:32 +01:00
Irmen de Jong
69f0c80cd7 added pokemon() function 2022-01-15 19:04:04 +01:00
Irmen de Jong
c8f4ab4f06 doc 2022-01-12 22:21:01 +01:00
Irmen de Jong
e425c4cca8 optimizing pipe codegen 2022-01-11 23:17:35 +01:00
Irmen de Jong
056ec986c2 use var initializer assignments in a clearer way 2022-01-11 00:34:44 +01:00
Irmen de Jong
b29c3152db Assignment: make its origin explicit 2022-01-10 02:25:02 +01:00
Irmen de Jong
3831679772 VarDecl: make its origin explicit 2022-01-10 01:53:03 +01:00
Irmen de Jong
596f9566d8 todo 2022-01-10 01:00:50 +01:00
Irmen de Jong
124befe9d6 slightly optimized code for assigning boolean expressions such as `b = xx>99` 2022-01-09 18:49:44 +01:00
Irmen de Jong
895534f32b don't remove dead variable assignments if they are a function call 2022-01-09 18:41:01 +01:00
Irmen de Jong
50c16fe6de code size optimization: don't copy floats with inlined copy code but use copy_float routine 2022-01-09 16:18:13 +01:00
Irmen de Jong
b092d1a5d3 fixed code gen issue for uword >= comparison 2022-01-09 13:23:29 +01:00
Irmen de Jong
a9b45630d7 optimized code for variable comparisons to zero 2022-01-09 13:10:01 +01:00
Irmen de Jong
c1a39c269e optimized code for stack eval comparisons with zero 2022-01-09 03:19:49 +01:00
Irmen de Jong
7135205299 fix codegen bug for pipe expressions to actually return correct value and not corrupt X register 2022-01-08 17:41:46 +01:00
Irmen de Jong
d99d977d2b fix more typecasting issues 2022-01-08 17:04:25 +01:00
Irmen de Jong
7dd7e562bc pipes also as expressions, cleanup codegen, fix various typecasting issues 2022-01-08 13:45:19 +01:00
Irmen de Jong
75d857027e cleanup of Pipe codegen 2022-01-08 01:33:40 +01:00
Irmen de Jong
8f3df3039a added pipe operator `|>` 2022-01-06 22:54:18 +01:00
Irmen de Jong
02c315c194 add missing unit tests and type checking for 'in' expression 2022-01-06 00:01:49 +01:00
Irmen de Jong
b697375573 add note about unspecified order of evaluation of expressions and subroutine call arguments 2022-01-05 23:21:45 +01:00
Irmen de Jong
c57ef7725e preparing v7.6 2022-01-04 20:40:35 +01:00
Irmen de Jong
3ae07503f2 doc css styling: font size slightly bigger for code as well 2022-01-03 23:28:11 +01:00
Irmen de Jong
9a0341adde doc css styling: font size slightly bigger 2022-01-03 23:16:07 +01:00
Irmen de Jong
96225efd96 library doc tweaks 2022-01-03 23:15:34 +01:00
Irmen de Jong
c3bd904f41 todo 2022-01-02 23:46:36 +01:00
Irmen de Jong
74257163b1 fix that memory("name", ...) also allocates a STR variable for the name 2022-01-02 17:07:04 +01:00
Irmen de Jong
7bc75fd220 fix that memory("a b c", ...) produces invalid symbol 2022-01-02 16:11:53 +01:00
Irmen de Jong
a23281afab added experimental -noreinit option 2022-01-01 16:35:36 +01:00
Irmen de Jong
9e90dbdde6 slight optimization of repeat loop (> 256 iters) code generation on 65c02 cpu 2022-01-01 14:42:37 +01:00
Irmen de Jong
1e8d8e40a2 slight optimization of repeat loop (0-256 iters) code generation on 65c02 cpu 2021-12-31 14:06:35 +01:00
Irmen de Jong
583e208c1e remark 2021-12-31 11:34:53 +01:00
Irmen de Jong
9b91c427a1 add porting guide
sizeof(pointer) is hardcoded as 2 now
2021-12-31 00:16:23 +01:00
Irmen de Jong
196c5e9c24 v39->r39 2021-12-30 19:05:56 +01:00
Irmen de Jong
7c889f17b9 c128 fixes 2021-12-30 18:33:26 +01:00
Irmen de Jong
c15a75556d Merge branch 'master' into c128target
# Conflicts:
#	compiler/src/prog8/CompilerMain.kt
#	examples/test.p8
2021-12-30 18:22:05 +01:00
Irmen de Jong
5275c2e35f todo porting guide 2021-12-30 18:20:09 +01:00
Irmen de Jong
5267e06969 added -asmlist cli option to produce assembler listing output 2021-12-30 14:42:09 +01:00
Irmen de Jong
9f8c70b326 fix warning about testing multiple values 2021-12-30 00:49:36 +01:00
Irmen de Jong
a65404e63a doc 2021-12-29 18:24:05 +01:00
Irmen de Jong
05a1ddad05 Merge branch 'master' into c128target
# Conflicts:
#	examples/test.p8
2021-12-29 18:14:24 +01:00
Irmen de Jong
4be3d63c0e slight optimization of if-in 2021-12-29 18:13:43 +01:00
Irmen de Jong
de6ce4a46e add "X in [1,2,3]" expression (efficient containment check) 2021-12-29 17:26:00 +01:00
Irmen de Jong
7a9e5afb93 fix: for loop over array literal no longer crashes the compiler 2021-12-28 17:51:38 +01:00
Irmen de Jong
b2876b0a03 add a suggestion to use when statement if it seems appropriate 2021-12-28 16:38:12 +01:00
Irmen de Jong
56d21de001 Merge branch 'master' into c128target
# Conflicts:
#	examples/test.p8
2021-12-28 13:57:27 +01:00
Irmen de Jong
6e11b8ada1 GoSub no longer inherits from Jump node, fixes subtle ast/codegen bugs related to jsrs 2021-12-28 01:55:13 +01:00
Irmen de Jong
79405f47f6 fix if-gosub 2021-12-28 01:24:31 +01:00
Irmen de Jong
1c7c4fc3b0 optimized if-goto codegeneration 2021-12-28 00:42:00 +01:00
Irmen de Jong
9906b58818 tweak while desugaring, moved postfixexpr optimizations to VariousCleanups regardless of optimizer setting because asmgen requires these for conditional expressions 2021-12-27 12:41:26 +01:00
Irmen de Jong
371f084884 comment 2021-12-27 02:17:04 +01:00
Irmen de Jong
c55fdd9834 removed special code generation for while and util expression (replaced by jumps)
also added exhaustive parent node checker in validation step
2021-12-27 02:04:28 +01:00
Irmen de Jong
a3be8ccc87 Merge branch 'master' into c128target 2021-12-22 21:25:49 +01:00
Irmen de Jong
cdfef30c22 fixed docs on rsave()/rrestore() builtin functions 2021-12-22 21:24:36 +01:00
Irmen de Jong
cabf1e82e8 some shadow registers added to make uppercase()/lowercase() work 2021-12-22 21:20:34 +01:00
Irmen de Jong
6da83e2bd7 first steps to add C128 compiler target 2021-12-21 19:08:33 +01:00
Irmen de Jong
1462c57d0c no need for intermediary returnvalue var for prefix expressions 2021-12-16 21:00:38 +01:00
Irmen de Jong
77c2b2b326 fix position of @shared in array var declarations so that the order is now type[] @shared 2021-12-16 20:36:05 +01:00
Irmen de Jong
3cf9b9d9a5 code size optimization: subroutine calls with 2 byte arg will pass it via A/Y registers instead of separate param assignments at every call site 2021-12-16 01:48:22 +01:00
Irmen de Jong
08f87c321f fixed capitalization of operator sets to be consistent with other sets names 2021-12-15 23:43:14 +01:00
Irmen de Jong
890327b381 the returnvalue of the diskio.load() function family now is just the last load address+1 (like kernal's LOAD routine).
This fixes the inconsistent attempt to calculate a size, just let the caller do this if required.
Added a small helper function in cx16diskio to do this for loads that span multiple banks.
2021-12-14 23:54:42 +01:00
Irmen de Jong
b21f7411dd fix compiler crash when trying to concatenate string var and string literal. 2021-12-14 23:07:46 +01:00
Irmen de Jong
5df623bd2e doc 2021-12-14 22:40:03 +01:00
Irmen de Jong
1e9d249f71 fixed output of float values in cmp instructions 2021-12-13 00:17:59 +01:00
Irmen de Jong
35998142fe version 7.5 2021-12-10 20:18:17 +01:00
Irmen de Jong
33061aaa0d fix: allow scoped variables such as cx16.rX as loop variable in forloops 2021-12-10 14:59:04 +01:00
Irmen de Jong
e342311bef fix wrong code for inplace modification of a pointervariable's memory value 2021-12-10 14:48:53 +01:00
Irmen de Jong
3d743a1ba1 added more constfolding 2021-12-09 23:32:48 +01:00
Irmen de Jong
d8d56b195f comments 2021-12-09 21:13:13 +01:00
Irmen de Jong
c812b5ee09 elaborate pointervar indexing a bit more in the docs 2021-12-07 22:25:14 +01:00
Irmen de Jong
547b1d3720 comment corrections 2021-12-06 23:33:18 +01:00
Irmen de Jong
84f75f4156 tweaked some more .getOrElse 2021-12-06 21:22:00 +01:00
Irmen de Jong
ff69da3fa2 error when 'else' choice in when statemetn isn't the last one, also generate slightly better code for when statements 2021-12-05 21:54:46 +01:00
Irmen de Jong
edffe92a24 astchecker is smarter in detecting rts in inline assembly 2021-12-05 21:28:31 +01:00
Irmen de Jong
b6fe40ada4 fix: cx16.r0 now properly treated as zeropage var on cx16 so @(cx16.r0) won't copy it to temp var anymore 2021-12-05 21:21:41 +01:00
Irmen de Jong
81deed143b fix grammar problem: \x and \u escape sequences didn't work in character literals. 2021-12-05 18:11:40 +01:00
Irmen de Jong
397f98513b optimize loading A from pointervar 2021-12-04 05:36:48 +01:00
Irmen de Jong
e545ea9504 fix and optimize storing A into pointervar 2021-12-04 04:43:58 +01:00
Irmen de Jong
9a68864b67 version 7.5-dev 2021-12-04 00:18:44 +01:00
Irmen de Jong
72d7178762 added diskio.load_raw() to load headerless files 2021-12-04 00:07:21 +01:00
Irmen de Jong
1f346230e3 release 7.4 2021-11-30 22:50:12 +01:00
Irmen de Jong
a2860a7c8c todo 2021-11-30 22:45:43 +01:00
Irmen de Jong
ea0fe8d3d2 PrefixExpression doesn't cause clobber risk 2021-11-30 02:32:37 +01:00
Irmen de Jong
2560042ac7 fix compiler crashes on in-place operations on cx16 registers or invalid signed types 2021-11-30 02:27:37 +01:00
Irmen de Jong
83f893f50b doc 2021-11-30 00:54:03 +01:00
Irmen de Jong
9ecf95b075 fix syntaxerror in const processing of ranges if it contained variables 2021-11-29 23:36:41 +01:00
Irmen de Jong
7748c261da rsave/rrestore moved from sys to builtin function to solve the stack related problem when calling it as a regular subroutine 2021-11-29 23:13:04 +01:00
Irmen de Jong
a2db44f80c also consider Y register for clobber check for functioncall arguments 2021-11-29 22:09:05 +01:00
Irmen de Jong
b438d8aec0 fix invalid range size check when stepval is not a positive integer 2021-11-29 02:01:19 +01:00
Irmen de Jong
4ac169b210 formatting 2021-11-29 01:25:21 +01:00
Irmen de Jong
32068a832a split some additional binary expressions to avoid stack-based evaluation 2021-11-28 18:27:28 +01:00
Irmen de Jong
0a568f2530 fix the check of double-defined subroutine variables 2021-11-28 12:52:32 +01:00
Irmen de Jong
c52aa648c0 use an AnonymousScope to contain GoSub changes instead of adding separate statements 2021-11-28 12:09:13 +01:00
Irmen de Jong
7c5ec1853d nice error message if pop() argument is wrong 2021-11-28 02:20:35 +01:00
Irmen de Jong
e8f4686430 undid failed attempt of using sys.push/sys.pop for stack args - now using new push(), pushw(), pop(), popw() builtin functions 2021-11-28 01:22:40 +01:00
Irmen de Jong
64a411628d doc fixes 2021-11-27 19:58:08 +01:00
Irmen de Jong
54025d2bf5 small refactor and spelling fixes 2021-11-27 14:49:18 +01:00
Irmen de Jong
e4648e2138 proper rounding of builtin functions that return int from float 2021-11-26 20:32:12 +01:00
Irmen de Jong
110e047681 replace subroutine calls (statement) by GoSub 2021-11-26 19:47:01 +01:00
Irmen de Jong
17d403d812 Merge branch 'ref-subroutine-param' into v7.4-dev
# Conflicts:
#	compilerAst/src/prog8/ast/AstToplevel.kt
2021-11-26 01:12:14 +01:00
Irmen de Jong
e52d05c7db fix some scoping related symbol lookup issues, clarified scoping rules in docs 2021-11-23 23:43:23 +01:00
Irmen de Jong
ff715881bc allow scoped identifiers to reference a subroutine parameter directly.
also for asmsubroutines, but the asm generation for that is not yet done.
2021-11-21 23:21:39 +01:00
Irmen de Jong
e86246a985 todo 2021-11-21 14:00:19 +01:00
Irmen de Jong
625aaa02eb documented the compiler's command line options in more detail 2021-11-21 13:53:22 +01:00
Irmen de Jong
787e35c9f3 asm optimizer can now also see of a symbol reference if it is in IO space or not (to a certain extent), so that these instructions are no longer optimized away 2021-11-21 13:12:51 +01:00
Irmen de Jong
8887e6af91 fix substituting 0 only if its actually the same variable that's substituted 2021-11-21 12:34:57 +01:00
Irmen de Jong
3c39baf1d6 don't optimize seemingly redundant assembly instructions away that manipulate IO memory space 2021-11-21 03:24:03 +01:00
Irmen de Jong
b292124f3c replaced many short/int values by unsigned types if appropriate 2021-11-21 00:55:56 +01:00
Irmen de Jong
107935ed31 add some more const folding patterns 2021-11-20 22:47:49 +01:00
Irmen de Jong
adfaddbcf4 give a nicer error when given a wrong compilation target. 2021-11-20 18:30:55 +01:00
Irmen de Jong
74db5c6be7 fix referencesIdentifier() and better removal of unnecessary assignments 2021-11-20 17:41:41 +01:00
Irmen de Jong
f9399bcce7 r=(q+r)-c and r=q+(r-c) are now both also 'augmentable', and BinExprSplitter doesn't check for associativeOperator anymore 2021-11-20 02:03:32 +01:00
Irmen de Jong
b334d89715 refactor and fix the way memory addresses are checked to be in IO space or regular ram 2021-11-18 22:47:58 +01:00
Irmen de Jong
4f5d36a84d optimization added: bitwise operations with a negative constant number -> replace the number by its positive 2 complement 2021-11-18 02:51:42 +01:00
Irmen de Jong
8f379e2262 give an error when initializing an integer var with a float value instead of silently rounding 2021-11-18 01:56:11 +01:00
Irmen de Jong
fa11a6e18b removed faulty and too aggressive assembly optimization of double-store 2021-11-18 01:43:22 +01:00
Irmen de Jong
52bedce8f4 added test for assignment.isAugmented 2021-11-18 01:05:16 +01:00
Irmen de Jong
4c82af36e6 fix improperly changed behavior about =0 initializer 2021-11-18 00:17:22 +01:00
Irmen de Jong
dafa0d9138 fix compiler crash bug due to reused ast expression nodes. Now all (relevant) Nodes have a copy() function to make a clone. 2021-11-17 23:05:59 +01:00
Irmen de Jong
6af3209d4d add more const foldings 2021-11-17 00:57:00 +01:00
Irmen de Jong
964e8e0a17 update to Kotlin 1.6.0 2021-11-16 22:36:23 +01:00
Irmen de Jong
1f60a2d8b9 comments 2021-11-15 01:30:12 +01:00
Irmen de Jong
c80df4140b until-loop condition now also simplified to avoid stack-eval 2021-11-14 22:51:02 +01:00
Irmen de Jong
ab2d1122a9 conditional expressions are optimized more intelligently (simple ones are not split off in separate assignments) 2021-11-14 12:38:56 +01:00
Irmen de Jong
5190594c8a added several more assembly-level optimizations to remove redundant instructions 2021-11-14 12:23:46 +01:00
Irmen de Jong
c858ceeb58 compiler shouldn't use cx16.r15 as temp var 2021-11-14 02:38:59 +01:00
Irmen de Jong
f0f52b9166 optimize typecasted binary expression to avoid even more estack use. also fix wrong parent crash in removal of unused variable's assignments. 2021-11-13 14:22:37 +01:00
Irmen de Jong
00c6f74481 tweak temp float 2021-11-13 12:56:59 +01:00
Irmen de Jong
2177ba0ed2 added signed versions of the cx16 virtual registers 2021-11-13 02:42:21 +01:00
Irmen de Jong
69f4a4d4f8 tweak expr.typecastTo() a bit 2021-11-11 00:15:09 +01:00
Irmen de Jong
222bcb808f optimize load-store-load combo in output asm 2021-11-10 23:47:35 +01:00
Irmen de Jong
8df3da11e3 add cosr8, sinr8, cosr16 and sinr16 builtin functions that take a degree 0..179 (= 0..358 in 2 degree steps)
to more easily scale halves/quarters etc of a circle than possible with the ones that take 0..255 'degrees'.
2021-11-09 23:39:26 +01:00
Irmen de Jong
b909facfe5 fix compiler stackoverflow crash on certain typecasted expressions containing floats. 2021-11-09 19:31:19 +01:00
Irmen de Jong
7780d94de1 discovered crash related to float typecasting in asm assignment codegen 2021-11-09 03:45:07 +01:00
Irmen de Jong
f2c440e466 new sin/cos idea 2021-11-09 02:38:43 +01:00
Irmen de Jong
4937e004b5 fix compiler crash where it used wrong datatype in split assignment
fixes crash for "ubyte bb ;; uword ww ;; bb = not bb or not ww"
2021-11-09 01:13:23 +01:00
Irmen de Jong
4cb383dccb discovered crash about storage size mismatch 2021-11-08 21:44:06 +01:00
Irmen de Jong
857724c7e6 attempt to make if-statement not use stack eval anymore 2021-11-08 19:07:36 +01:00
Irmen de Jong
60627ce756 kotest migration done, fixes #70 2021-11-08 16:19:24 +01:00
Irmen de Jong
7e8db16e18 moved to kotest assertions in compilerAst module tests 2021-11-07 21:18:18 +01:00
Irmen de Jong
1fbbed7e23 remove unittest machinery from modules that don't have tests 2021-11-07 17:34:14 +01:00
Irmen de Jong
984272beb4 migrated compilerAst module to KoTest (but not finished with the assertions yet) 2021-11-07 17:25:53 +01:00
Irmen de Jong
793596614e attempt to fix ReadTheDocs build issue 2021-11-07 00:37:31 +01:00
Irmen de Jong
136280100c attempt to fix ReadTheDocs build issue 2021-11-07 00:23:44 +01:00
Irmen de Jong
72a7e61fd0 version 7.2 2021-11-06 23:42:13 +01:00
Irmen de Jong
f40620aa25 "not x" as a condition (if, while, until) is optimized into "x==0", this avoids calculating the value 2021-11-06 23:25:32 +01:00
Irmen de Jong
57a9fed42b todo 2021-11-06 19:09:33 +01:00
Irmen de Jong
74456d1135 optimized prefix-expression in to use stack evaluation less 2021-11-06 17:57:00 +01:00
Irmen de Jong
be73739c62 todo 2021-11-03 23:08:11 +01:00
Irmen de Jong
eea3fb48a8 add command line option 'optfloatx' to explicitly re-enable float expr optimization as this can increase code size significantly.
The output size of the various example programs using floating point, when not using this optimization, has been reduced significantly.
The resulting code runs a (tiny) bit slower though.
2021-11-03 22:52:08 +01:00
Irmen de Jong
b4fa72c058 fix parent node linkage for reading array parameter 2021-11-03 21:57:31 +01:00
Irmen de Jong
b0a865b0f1 update todo 2021-11-02 23:55:50 +01:00
Irmen de Jong
3410aea788 fix regression: don't add 0 initializer when variable is assigned to anyway (or is loopvar in a for-loop) 2021-11-02 21:23:59 +01:00
Irmen de Jong
bc0a133bb1 doc 2021-11-02 20:24:45 +01:00
Irmen de Jong
1110bd0851 fix vardecl initialization value to not use stack eval anymore but separate assignment
(this causes the optimized assignment code gen to be used instead)
but some programs now end up larger in output size
2021-11-01 00:24:15 +01:00
Irmen de Jong
1b576f826d remove unneeded sibling methods 2021-10-31 16:50:15 +01:00
Irmen de Jong
fe17566370 improved reporting of slow stack based evaluation code 2021-10-31 14:18:49 +01:00
Irmen de Jong
97836e18b2 simplified gradle config, automatically run installDist task after build 2021-10-30 12:01:52 +02:00
Irmen de Jong
7b69df4db2 todos 2021-10-30 00:38:48 +02:00
Irmen de Jong
4d5bd0fa32 simplify ZeroPage reserved locations handling a bit 2021-10-29 17:34:42 +02:00
Irmen de Jong
0b5ddcdc9b split out the code generator into own project submodule 2021-10-29 05:00:30 +02:00
Irmen de Jong
f21dcaa6fb split out the code optimizers into own project submodule 2021-10-29 02:42:10 +02:00
Irmen de Jong
d4513364fb fix compiler crash when file on command line doesn't exist 2021-10-27 00:23:54 +02:00
Irmen de Jong
f4186981fd todo 2021-10-26 23:30:48 +02:00
Irmen de Jong
4668932bac todo 2021-10-19 23:38:07 +02:00
Irmen de Jong
502bf90007 comments 2021-10-19 01:12:28 +02:00
Irmen de Jong
cf0e395921 got rid of SourceCode.pathString() and the 'need' to strip < and > 2021-10-16 17:15:22 +02:00
Irmen de Jong
6ef438ce50 todo 2021-10-16 15:08:36 +02:00
Irmen de Jong
06defd0cb0 paths are now always relative 2021-10-16 02:43:22 +02:00
Irmen de Jong
0f80897c50 todo 2021-10-15 01:02:32 +02:00
Irmen de Jong
57bb1c2c0d performance optimized checks against short ranges of values 2021-10-15 00:51:45 +02:00
Irmen de Jong
7b35b414e8 tweak check of DataType against multiple values 2021-10-15 00:39:42 +02:00
Irmen de Jong
761aac7a23 replace inferredType.istype() by infix form 2021-10-15 00:28:23 +02:00
Irmen de Jong
15a02d7664 making InferredType easier to use 2021-10-15 00:18:13 +02:00
Irmen de Jong
16ed68c1ec Module.name is now derived back from the source's origin string 2021-10-14 23:58:14 +02:00
Irmen de Jong
4d27c2901b fix weird error printing when doing %import textio.p8 2021-10-13 21:55:51 +02:00
Irmen de Jong
855e18b31c fix SourceCode to properly set the sourceName of a resource or string as well 2021-10-13 21:46:38 +02:00
Irmen de Jong
d790878af6 enabled test 2021-10-13 20:28:42 +02:00
Irmen de Jong
6070afa6b6 cleanup SourceCode class 2021-10-13 19:16:01 +02:00
Irmen de Jong
975594703d doc 2021-10-13 18:21:48 +02:00
Irmen de Jong
6b8c3ef614 renamed command line option -libdirs to -srcdirs
this more clearly separates this meaning from the internal library modules
2021-10-13 18:16:51 +02:00
Irmen de Jong
ca3a990f9e todo 2021-10-13 01:33:29 +02:00
Irmen de Jong
66574d058a renamed InferredType.typeOrElse to getOr()
this is closer to the convention of most functional return types
2021-10-13 00:21:38 +02:00
Irmen de Jong
07132a2c42 removed unreliable inlining of non-asmsub subroutines. Fixes #60 2021-10-08 23:09:38 +02:00
Irmen de Jong
af99173cd7 range expressions are on integers only 2021-09-06 22:15:27 +02:00
Irmen de Jong
fd1f30f92b removed %target directive (didn't add much, too confusing, only supported single target) 2021-09-04 15:01:16 +02:00
Irmen de Jong
85897ef8cd launch box16 emulator with the vice monlist file that contains symbols+breakpoints 2021-07-06 22:27:47 +02:00
Irmen de Jong
6367c6d116 add support for second alternative emulator (box16 in case of cx16 target) 2021-07-05 22:47:51 +02:00
Irmen de Jong
049dbf5a78 improve compiler error when defining duplicate block names 2021-07-04 15:14:39 +02:00
Irmen de Jong
95a62fcdd1 tidy up todo doc 2021-07-02 21:47:27 +02:00
Irmen de Jong
7880ac1909 wording and version 2021-06-24 21:34:11 +02:00
Irmen de Jong
f53848b4b9 wording and version 2021-06-24 21:25:35 +02:00
Irmen de Jong
fd2bbd2b59 no longer allow subroutine name same as its block name due to asm symbol scoping issues 2021-06-12 17:31:09 +02:00
Irmen de Jong
127c470746 add some explanation about Cx16 v38 - v39 issue 2021-06-12 15:48:04 +02:00
Irmen de Jong
c5bfef4264 slight improvement on scope doc, added doc example for %asminclude/%asmbinary 2021-06-09 23:46:07 +02:00
Irmen de Jong
19e99204b9 fix asm symbol name scoping bug and add unit tests for this 2021-06-04 22:42:28 +02:00
Irmen de Jong
13f5b94c3e Clarified instructions of how to obtain the compiler. Fixed sphinx css config issue. 2021-06-03 21:21:44 +02:00
Irmen de Jong
3a2498401d working on unit tests for symbol scope bug 2021-06-03 21:21:38 +02:00
Irmen de Jong
e7f6f0950f identified asm symbol name scoping bugs 2021-06-01 22:21:50 +02:00
Irmen de Jong
d4b69ac79c improved repeat counter vars allocation (re-use var if possible) 2021-05-30 15:30:34 +02:00
Irmen de Jong
31ae9e1243 refactor repeat loop counter var creation into single routine 2021-05-22 13:01:51 +02:00
Irmen de Jong
29e2d4e0c8 give error when passing invalid command line option 2021-05-20 23:34:20 +02:00
Irmen de Jong
0e614ad6fc added @shared flag to vardecl to mark variable as shared with assembly code elsewhere, to not have it optimized away 2021-05-19 01:19:25 +02:00
Irmen de Jong
ca1a8cd617 improve doc about string (im)mutability 2021-05-19 00:15:17 +02:00
Irmen de Jong
ba96a637be remove strdedup compiler argument again
(string deduplication is the default again but only for known-const strings, i.e. string literals)
2021-05-18 23:52:43 +02:00
Irmen de Jong
6b7216f4ec todo 2021-05-17 19:00:20 +02:00
Irmen de Jong
ca61248861 printing 2-letter strings is now only optimized into direct CHROUT if it's a const string literal 2021-05-16 15:00:40 +02:00
Irmen de Jong
68d7b4649e label and directive location docs 2021-05-16 12:32:08 +02:00
Irmen de Jong
0416aacbbd fix %asminclude by removing scopelabel argument and improving docs to remove false promise about labels 2021-05-16 00:14:57 +02:00
Irmen de Jong
ae5d7705bb allow correct parsing of source files that don't end in a EOL character. Fixes #40 2021-05-14 17:14:44 +02:00
Irmen de Jong
25d80f4df1 added compiler option to choose string literal deduplication yes/no -- default changed to NO 2021-05-13 00:35:22 +02:00
meisl
ee23ac0537 * docs: fix typo 2021-05-07 15:28:22 +02:00
Irmen de Jong
dae59238cd fix array type checking crash when attempting to use str literal to initialize a byte array.
Fixes #34
2021-05-07 00:04:29 +02:00
Irmen de Jong
8736da1a21 strings of 1 and 2 length no longer optimized into one call to CHROUT - also upgrade to kotlin 1.5.0 2021-05-06 23:46:18 +02:00
meisl
63d67bc6cb + docs: add missing word 2021-05-06 15:49:58 +02:00
Irmen de Jong
d906fcea0e refactor some type checks 2021-04-30 00:09:15 +02:00
Irmen de Jong
29c8e8b740 doc 2021-04-29 19:57:14 +02:00
Irmen de Jong
71fec4c555 added a few more simple special codegen segements for the logic operators on a memmory-read 2021-04-29 19:38:42 +02:00
Irmen de Jong
5ee36c897d todo 2021-04-29 00:57:32 +02:00
Irmen de Jong
4aba0c7405 unused variables are removed more aggressively (no longer checking asm blocks for their names) 2021-04-29 00:48:16 +02:00
Irmen de Jong
8d3d5f726a removed Datatype.STRUCT 2021-04-29 00:13:17 +02:00
Irmen de Jong
a9a7068818 removed support for structs. It was too much hassle and complexity and subtle bugs. 2021-04-29 00:01:20 +02:00
Irmen de Jong
17068130bb removed PROG8_LIBDIR env variables and replaced with -libdirs command line option 2021-04-28 20:04:23 +02:00
Irmen de Jong
8b84f87217 removed fastrnd8() because it was hilariously bad, just use rnd() 2021-04-28 01:53:12 +02:00
Irmen de Jong
3bf335e0a0 todo 2021-04-27 23:13:46 +02:00
Irmen de Jong
68f696d165 added 'callrom' builtin function (for cx16 target) that calls a routine in banked ROM 2021-04-25 18:04:56 +02:00
Irmen de Jong
1170aed026 added 'callfar' builtin function (for cx16 target) that uses jsrfar to call a routine in banked RAM 2021-04-25 17:47:13 +02:00
Irmen de Jong
dd379430d9 added docs on flexible string character mapping to petscii 2021-04-20 01:22:49 +02:00
Irmen de Jong
a086d6e009 allow labels also in blocks instead of only in subroutines 2021-04-18 23:03:18 +02:00
Irmen de Jong
e93701f50e fix compiler error when initializing var with memory(...) in block scope instead of subroutine 2021-04-17 15:49:41 +02:00
Irmen de Jong
56fec674c5 actually not simplifying if-code generation, leads to larger code at the moment 2021-04-13 00:03:22 +02:00
Irmen de Jong
54d92a027a fix problems with moving vardecls from inner scope to subroutine scope 2021-04-12 22:53:25 +02:00
Irmen de Jong
319ac3a641 preparing optimizations for if statements 2021-04-12 03:34:58 +02:00
Irmen de Jong
0a03c46351 preparing optimization plan for if statements 2021-04-12 02:37:15 +02:00
Irmen de Jong
e0454e95db warn about for-loop wrapped iteration if loop range is inverted from normal 2021-04-08 22:54:47 +02:00
Irmen de Jong
91e421d961 optimize x % p where p=power-of-2, into just x & (p-1) 2021-04-08 22:21:16 +02:00
Irmen de Jong
1a64cb38d5 fix compiler crash with assigning certain array values as vardecl initializer 2021-04-08 19:21:17 +02:00