1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-25 05:33:29 +00:00
Commit Graph

317 Commits

Author SHA1 Message Date
jespergravgaard
d9490718fa Optimizing ASM removing double jumps and unreachable code (after JMP/RTS). Closes #58. Closes #99. 2017-11-30 00:27:11 +01:00
jespergravgaard
6eb54c11a6 Working on improving constants.kc. Now everything works except allocation to asby (where clobber by a-register is not detected.) 2017-11-29 22:01:30 +01:00
jespergravgaard
1c59ae231e Fixed problem with inline string by extracting them as local constants. Closes #98 2017-11-29 21:31:20 +01:00
jespergravgaard
14987484ee Fixed live range problem when calling multiple calls one after the other. Closes #97. 2017-11-29 12:29:57 +01:00
jespergravgaard
507b27f436 Fixed an alias problem visible in print.kc where to eager aliasing destroyed the ln function. Now aliases are not identified, when the assignment is done withing another scope. 2017-11-29 01:31:46 +01:00
jespergravgaard
1edb436dfd Fixed problem with ++ being added twice in *(char_cursor++) = *str; 2017-11-28 01:23:59 +01:00
jespergravgaard
663b885196 Now removing any unused procedures in pass 1. Closed #96 2017-11-28 00:39:15 +01:00
jespergravgaard
b81ae706af Fixed problem with inline data (strings/arrays) being generated at the start of methods. Closed #4 2017-11-27 23:55:39 +01:00
jespergravgaard
015de8da3d Improved static value analysis to identify #<0, #>0 as identical to #0 2017-11-27 18:11:28 +01:00
jespergravgaard
7d08159fb2 Added test for lda #>0 / lda #<0. 2017-11-27 01:12:29 +01:00
jespergravgaard
d1d6724e0b Working on skipping unneeded lda #>0 / lda #<0. Fixed word+byte type inference. 2017-11-27 01:04:12 +01:00
jespergravgaard
cd06dd2016 Implemented type promotion & type checking of all assignments. 2017-11-27 00:34:59 +01:00
jespergravgaard
0d622f978c Added two string problems (local & inline) to error-test-cases. 2017-11-26 21:46:53 +01:00
jespergravgaard
ae167736d4 Fixed wordexpr problem. Improved type inference of binary/unary constants. Added sby->by fragment synthesis. 2017-11-26 21:27:00 +01:00
jespergravgaard
ebb71b4130 Working on support for inline constants with multiple potential types.
Improving fragment synthesis.
2017-11-26 17:38:45 +01:00
jespergravgaard
c8e3b36893 Added byte casting fragments 2017-11-25 00:10:21 +01:00
jespergravgaard
96f2610d25 Fixed infinite recursion 2017-11-24 23:49:36 +01:00
jespergravgaard
0efe62585b Added explicit casting - started testing it on byte / signed byte. 2017-11-24 23:25:16 +01:00
jespergravgaard
d348365010 Improved fragment synthesis 2017-11-23 07:31:26 +01:00
jespergravgaard
b81e8eeaa4 Improved fragment synthesis 2017-11-22 10:37:00 +01:00
jespergravgaard
a6e1f2cade Working on support for signed bytes. Syntax done, very simple program working - explicit casting needed, better asm fragment management needed 2017-11-21 00:30:16 +01:00
jespergravgaard
a1baf2e046 Using inverse space in scroller 2017-11-17 10:17:57 +01:00
jespergravgaard
e64b12e7be Added 8x8 char scroller 2017-11-17 09:37:11 +01:00
jespergravgaard
f28db3067b Closes #59 Better ASM static value analysis. Analysis is string-based, so a more advanced method might yield better results - ef ever needed. 2017-11-14 00:02:31 +01:00
jespergravgaard
148f9ae072 Implemented somewhat Better ASM static value analysis. Also recognizes ZP sta zp5, ldx zp5. 2017-11-13 23:41:23 +01:00
jespergravgaard
5ed20ccc76 Added test for direct increment of constant numberic pointer ++*$d020; 2017-11-13 22:14:11 +01:00
jespergravgaard
788f3d63a2 Added test for direct increment of constant numberic pointer ++*$d020; 2017-11-13 22:00:29 +01:00
jespergravgaard
8462d75265 Closes #3 Pointer: Support calculated pointers eg. *(ptr+i) 2017-11-13 21:52:38 +01:00
jespergravgaard
365357596b Closes #26 Change pointer derefs ASM signature to _deref_xxx (from _star_xxx) 2017-11-13 19:05:57 +01:00
jespergravgaard
f351b28f58 Using *(BGCOL)++ instead of *BGCOL=*BGCOL+1; 2017-11-13 00:55:46 +01:00
jespergravgaard
de5f92498d Implemented more proper pointer handling by wrapping any unary *'s into PointerDerefs. 2017-11-13 00:47:05 +01:00
jespergravgaard
1b999c8c1d Using cached symbol table for faster uplift 2017-11-11 18:45:33 +01:00
jespergravgaard
ffbc958d47 Using cached symbol table for faster uplift 2017-11-11 18:22:45 +01:00
jespergravgaard
796edcc05b Added cached symbol table for faster uplift 2017-11-11 18:07:44 +01:00
jespergravgaard
af281612d2 Added cached map for statement from index 2017-11-11 08:46:56 +01:00
jespergravgaard
15d6935601 added TODO for compile time keyword 2017-11-10 08:29:55 +01:00
jespergravgaard
b0e6ae0b67 Added a test with two levels of methods to test live ranges / call-paths and allocation of a minimal number of registers. 2017-11-10 00:27:56 +01:00
jespergravgaard
514797897e Optimized effective live ranges further to improce uplift speed 2017-11-10 00:12:34 +01:00
jespergravgaard
a3c18cf756 Optimized live range equivalence classe set lookup from variable to spped up uplift. 2017-11-10 00:01:49 +01:00
jespergravgaard
58500b39e0 Implemented a less verbose statement print for uplift performance 2017-11-09 23:28:21 +01:00
jespergravgaard
88d765324a Caching statement->block mapping for uplift performance 2017-11-09 23:05:23 +01:00
jespergravgaard
fdf4e7ac3a Caching Variable Reference Infos to improve uplift performance. 2017-11-09 22:34:46 +01:00
jespergravgaard
baa84880ea Succesfully implemented new live range calculation utilizing call-paths. Need a new optimization round for uplift. 2017-11-09 21:34:13 +01:00
jespergravgaard
4fd32274af Working on handling procedure parameter aliases 2017-11-08 12:09:15 +01:00
jespergravgaard
e4bf84c57c Improved call-path alias detection to inclide all call-parameters but no call-returns 2017-11-08 10:10:43 +01:00
jespergravgaard
0026676080 Implemented call-path based effective alive analysis with call-path specific aliases. 2017-11-07 09:32:16 +01:00
jespergravgaard
b20327590f Working on better live ranges that take into account the call-path taken to the current statement and any aliases on that path (due to phi statements) 2017-11-06 08:20:33 +01:00
jespergravgaard
9d3c8afdf0 Restructured TODO 2017-11-05 12:01:30 +01:00
jespergravgaard
f18b40d4ac Removed semicolon after inline asm. 2017-11-05 11:31:10 +01:00
jespergravgaard
8ba5a2733f Added inline ASM TODO's 2017-11-05 11:17:08 +01:00
jespergravgaard
f46aba8c9b Added inline ASM clobber test. 2017-11-05 09:56:04 +01:00
jespergravgaard
09dd676363 Added semicolon to do {} while (); 2017-11-05 09:44:00 +01:00
jespergravgaard
f1512af630 Added failing test for inline asm with variable reference parameters. 2017-11-05 03:10:10 +01:00
jespergravgaard
8d68d449c4 Implemented inline asm syntax and code generation. Now need to handle parameters. 2017-11-05 03:01:32 +01:00
jespergravgaard
86b1d0db73 Created a single parser for KickC incorporating the ASM parser (for inline ASM - but also for ASM fragment files. ) 2017-11-05 02:20:29 +01:00
jespergravgaard
506b891ef3 Added basic upstart jumping to main() 2017-11-04 19:53:55 +01:00
Jesper Gravgaard
fc45798d75 Separated fragment generation & fragment signature / loading / synthesizing. 2017-11-04 19:04:39 +01:00
jespergravgaard
3d607aba7f Working on inline asm 2017-11-04 14:15:44 +01:00
jespergravgaard
bcef1c3662 Fixed constant propagation problem: (const-identification.kc) Constants are not identified correctly. Some times constant pointers are treated as variables Eg. byte* SCREEN = $0400 is adressed through zero-page even though it can be adressed directly. 2017-11-03 07:58:02 +01:00
jespergravgaard
14219443a8 Ensured that assignment to variables with ALU potential does not affect potential registers through clobbering. 2017-11-01 16:43:13 +01:00
jespergravgaard
4bcef390f3 Fixed bresenham line to do proper word-based addition. 2017-11-01 14:10:49 +01:00
jespergravgaard
0317fc50c3 Improved constant inlining to inline constants with different valued versions 2017-11-01 13:26:32 +01:00
jespergravgaard
4de433730f Fixed problems with versioned constant call parameters being mixed up and with missing scope name on constant references across scopes. 2017-11-01 12:59:29 +01:00
jespergravgaard
6097d80b91 Added a bunch of test cases highlighting each known error 2017-10-29 11:43:39 +01:00
jespergravgaard
c4c60a5b36 Added a bunch of test cases highlighting each known error 2017-10-29 11:41:35 +01:00
jespergravgaard
00f53c49b6 Added support for lo/hi lvalues. Added more ALU options. Working on bitmap plotter. 2017-10-29 01:56:53 +02:00
jespergravgaard
f60be66531 Working on bitmap bresenham. Added lo/hi unary operators. 2017-10-26 12:48:04 +02:00
jespergravgaard
7def3abf28 Improved TODO 2017-10-23 01:29:39 +02:00
jespergravgaard
0d9a0a84f8 Added another known problem 2017-10-23 01:23:39 +02:00
jespergravgaard
cd2c50b8a8 Fixed NPE 2017-10-23 01:22:36 +02:00
jespergravgaard
471117561b Updated TODO. Removed string keyword. 2017-10-23 01:12:13 +02:00
jespergravgaard
943775d97d Implemented phi transition assignment clobber checking. 2017-10-23 00:48:22 +02:00
jespergravgaard
ee5499a313 Added minimal PHI clobber example. 2017-10-21 13:34:42 +02:00
jespergravgaard
f63a540d15 Removed unnecessary (synthesizeable) fragments. 2017-10-21 12:58:03 +02:00
jespergravgaard
774e909a20 Added half-asses halfscii. 2017-10-21 12:36:37 +02:00
jespergravgaard
c569ce8de9 Improved fragment manager enabling synthesis of more fragments. Added boolean operators (and, or, xor, not) 2017-10-20 17:25:04 +02:00
jespergravgaard
1ee63ce40a Added literal char syntax. Added literal test. Improved voronoi by using inmem arrays. 2017-10-19 10:21:32 +02:00
jespergravgaard
b4abb9394e Fixed ClassCastException when attempting to removing a procedure with an empty start. Added a pointer conter increment test. 2017-10-19 09:12:46 +02:00
jespergravgaard
5a4388d6d3 Added KC-based scroller 2017-10-19 01:29:44 +02:00
jespergravgaard
7be265f42c Fixed culling problem causing conditional branches into phi-functions to be skipped. 2017-10-18 14:16:59 +02:00
jespergravgaard
6fb5372f1b Added support for ASM .string directives through string initializer. 2017-10-17 22:51:16 +02:00
jespergravgaard
1a649008b9 Added support for ASM .byte directives through array initializers. 2017-10-17 13:34:41 +02:00
jespergravgaard
feba0565b4 Cleaned up RValue hierarchy. Removing redundant Constant interface. Moving ConstantVar out of the value-hierarchy. 2017-10-17 11:35:37 +02:00
jespergravgaard
efc750ce11 Moved type inference into the model. Renamed ICL to model. 2017-10-17 09:58:00 +02:00
jespergravgaard
09ed57fb98 Separated ASM fragment system out from ASM base 2017-10-17 09:47:26 +02:00
jespergravgaard
1f4efe0a4f Added asm names to symbol table printout. 2017-10-17 09:39:15 +02:00
Jesper Gravgaard
5de6bbba13 Added missing fragments (through signature rewriting) 2017-10-16 13:20:08 +02:00
jespergravgaard
520361f7b6 Optimized live range effective - vastly improving compile speed. 2017-10-16 12:47:42 +02:00
jespergravgaard
d551f8c569 Small numbers skip $ 2017-10-15 23:15:49 +02:00
jespergravgaard
3c1f4d2901 Minor syntax fixes 2017-10-15 22:48:04 +02:00
Jesper Gravgaard
46ffa81633 Added operator precedence to constant printing - avoiding unnecesary perenthesis 2017-10-15 22:39:50 +02:00
Jesper Gravgaard
7b9e80aaac Added constant addition consolidation optimization. 2017-10-15 17:53:18 +02:00
jespergravgaard
525ac454cc Added a new constant test 2017-10-14 22:37:30 +02:00
jespergravgaard
a09ca15dbf Inlining constants that are unnamed, single versions of a variable or aliases of other constants 2017-10-14 22:36:52 +02:00
jespergravgaard
1a9ae72668 Added unnamed constant inlining 2017-10-13 08:06:55 +02:00
jespergravgaard
ccfa6bdbf3 added simple asm constants (syntax error still) 2017-10-04 01:08:36 +02:00
Jesper Gravgaard
6f2dfdbec3 Initial working implementation of constants in the symbol table and ASM. Still needs to output const definitions (intelligently). 2017-10-02 21:47:12 +02:00
Jesper Gravgaard
a553cb97c3 Added more fragments 2017-09-06 21:23:48 +02:00
Jesper Gravgaard
616311daf8 Finally new live ranges are working correctly - including effective live ranges for statements inside methods. 2017-09-06 18:59:53 +02:00
Jesper Gravgaard
99088aef58 Improved uplift test and zp coalesce test to include live ranges from calling statements in overlap testing. The new live range system is still far from perfect. Next step is getEffectiveAlive(stmt) returning alive vars + alive vars from all calling contexts. 2017-09-04 22:15:18 +02:00