jespergravgaard
2367aa93cd
Added final score to the log
2017-12-30 13:45:59 +01:00
jespergravgaard
c7b137d631
Added working test for signed multiplication. Refactored AsmFragment synthesis away from relying on vwuc.
2017-12-30 11:55:28 +01:00
jespergravgaard
b95c7e20f5
Moved multiply into a library
2017-12-29 22:45:19 +01:00
jespergravgaard
df227e0b49
Implemented fast multiplication - tested that all results are correct.
2017-12-29 19:35:54 +01:00
jespergravgaard
fa00ecfbbf
Test data for alignment test
2017-12-29 18:20:44 +01:00
jespergravgaard
694fb66379
Added data alignment directive for arrays/strings.
2017-12-29 18:20:11 +01:00
jespergravgaard
39925809e3
Removed AsmFragment log again
2017-12-29 16:34:55 +01:00
jespergravgaard
b2a5e5184b
Removed AsmFragment log again
2017-12-29 16:19:23 +01:00
jespergravgaard
6b79ecc537
Implemented all fast multiply tables.
2017-12-29 16:05:27 +01:00
jespergravgaard
db6c1f54db
Improved log format slightly
2017-12-29 13:53:16 +01:00
jespergravgaard
5ec1070b41
Improved tests for CI
2017-12-29 11:40:03 +01:00
jespergravgaard
31e412bb11
Slimming log output
2017-12-29 11:21:11 +01:00
jespergravgaard
32d7db5ce7
Moved tests into Maven Test area to allow maven-based testing.
2017-12-28 15:34:32 +01:00
jespergravgaard
ff51d04356
Improved KC mul table gen.
2017-12-28 15:10:56 +01:00
jespergravgaard
d1ee716008
Improved KC mul table gen.
2017-12-28 14:46:31 +01:00
jespergravgaard
5e25684cf9
Slight improvement of code
2017-12-28 04:38:19 +01:00
jespergravgaard
6dcafb83c2
Optimized KC based multiply table generator.
2017-12-28 04:32:26 +01:00
jespergravgaard
8198b8f168
Generating fast multiply table in both ASM and KC - now word-based generation.
2017-12-28 04:13:31 +01:00
jespergravgaard
389b6042ed
Generating fast multiply table in both ASM and KC.
2017-12-28 03:32:59 +01:00
jespergravgaard
bb0aeb9e3b
Implementing fast multiplication KC program.
2017-12-28 01:50:55 +01:00
jespergravgaard
6532fdd002
Added array length mismatch error in Pass1.
2017-12-28 00:17:39 +01:00
jespergravgaard
19a040345f
Added array zero initializer and ASM .fill for arrays declared with a size but without initializer.
2017-12-27 23:53:51 +01:00
jespergravgaard
62a56f23fb
Removed unused LValueLoHiByte.
2017-12-27 22:48:26 +01:00
jespergravgaard
4bcf51732b
Added aseetion stopping compilation at pass 3 if any value list has survived.
2017-12-27 22:22:53 +01:00
jespergravgaard
347fc03f47
Made all declared arrays/strings implicitly constant.
2017-12-27 22:08:15 +01:00
jespergravgaard
4a7dd31d40
Fixed word constructor detection to detect all inline word constructors.
2017-12-27 21:47:07 +01:00
jespergravgaard
212e8572de
Improved constant string detection. Type System is still a bit of a mess.
2017-12-27 20:52:38 +01:00
jespergravgaard
8a1dbc36d7
Refactored recursive value replacement into ValueReplacer. Moved VariableReplacer to a simple ValueReplacer. Added test for true inline word constructors.
2017-12-27 13:40:55 +01:00
jespergravgaard
a3a7d02cd7
Added test to confirm that pointer destinations can now be incremented corrently. Closes #29
2017-12-26 17:38:51 +01:00
jespergravgaard
b412a4aefc
Assignments are now expressions. For-loops can now contain assignments in the increment part. LValue handling reimplemented (lvalue no longer exist in parser - only expression). RValues now also contains pointer derefs. Complex array expressions (SCREEN+$100)[i] now possible as LValues. ASM fragment generation improved to handle new more complex LValues & RValues. Closes #5 . Closes #43
2017-12-26 17:24:30 +01:00
jespergravgaard
2c44783879
Added ALU potential for _word_ operator
2017-12-26 10:31:30 +01:00
jespergravgaard
91f22c44f0
Removed all ASM steps between ASM optimizations - result smaller log file.
2017-12-26 09:15:10 +01:00
jespergravgaard
42b026a757
Allowing ZP coalescing whenever registers are the same type (before variables had to be the same type).
2017-12-26 00:24:40 +01:00
jespergravgaard
e3353acbc9
Implemented syntax for composing word from two bytes word w = { b1, b2 };
...
Optimizer still needs to attempt to (and allow) placing the two byte variables directly at the lo/hi-vars of the word wo minimize moving data around.
Closes #37
2017-12-25 23:27:54 +01:00
Jesper Gravgaard
bd3c26b5ec
Fixed constant inlining inside constant value lists.
2017-12-25 20:53:52 +01:00
Jesper Gravgaard
e314794f0b
Implemented true recursive variable replacer that can replace into pointers/value lists. Also using this when building SSA. Prepared syntax ant type inference for building a word from 2 bytes using word w = { b1, b2 };
2017-12-25 20:19:53 +01:00
Jesper Gravgaard
eb6ee9bff8
Prepared parser for inline word expressions.
2017-12-23 15:35:13 +01:00
Jesper Gravgaard
10b8431833
Simplified fragment value naming further.
2017-12-23 10:49:18 +01:00
Jesper Gravgaard
8b96c1ae40
Merge remote-tracking branch 'gitlab/master'
2017-12-23 10:31:24 +01:00
Jesper Gravgaard
9d6fd3e1c9
Simplified fragment symbol naming
2017-12-23 10:31:20 +01:00
jespergravgaard
c38e9b85e4
Implemented signed words - first test works. Closes #22
2017-12-23 02:35:50 +01:00
jespergravgaard
978c1fb997
Improved readability.
2017-12-22 14:34:10 +01:00
jespergravgaard
b3649997b6
Simplified fragement synthesis.
2017-12-13 00:48:59 +01:00
jespergravgaard
177be17dd9
Last of fragment renaming completed (zpptrby1/zpptrsby1 => pbuz1/pbsz1)
2017-12-13 00:29:48 +01:00
jespergravgaard
49b8545232
Next part of fragment renaming completed (coby1/cosby1/cowo1/coswo1 => vbuc1/vbsc1/vwuc1/vwsc1)
2017-12-12 22:39:27 +01:00
jespergravgaard
07478e86b1
Next part of fragment renaming completed (zpby1/zpsby1 => vbuz1/vbsz1)
2017-12-12 20:53:22 +01:00
jespergravgaard
8b8095ff87
First part of fragment renaming completed (aby/xby/yby/asby/xsby/ysby => vbuaa/vbuxx/vbuyy/vbsaa/vbsxx/vbsyy)
2017-12-12 00:09:14 +01:00
Jesper Gravgaard
5a819659a0
Removed signed byte register usage by allowing the fragment binding to also look at the variable type.
2017-12-10 20:00:00 +01:00
Jesper Gravgaard
e2aa0cd7e0
Removed signed byte register usage by allowing the fragment binding to also look at the variable type.
2017-12-10 19:53:14 +01:00
jespergravgaard
69dba6ea27
Added casting problem test nocast.kc
2017-12-05 23:31:43 +01:00
jespergravgaard
a79853a4ec
Improved static ASM analysis to recognize & remove several LDA/LDX/LDY of the same value.
2017-12-05 22:01:32 +01:00
jespergravgaard
c1b2b8ab7d
Added sprite MSB
2017-12-05 21:49:40 +01:00
jespergravgaard
ad9873d201
Improved slightly
2017-12-05 01:15:17 +01:00
jespergravgaard
5b070b5a27
Added progress while generating sines
2017-12-05 01:11:31 +01:00
jespergravgaard
3569405dc1
Added some consts
2017-12-04 23:54:12 +01:00
jespergravgaard
56b74e7e0f
Implemented initial sinus sprites.
2017-12-04 23:48:14 +01:00
jespergravgaard
c74b86a616
Moved tables into methods.
2017-12-03 23:24:25 +01:00
jespergravgaard
9ea1d4f2c1
Minor refactoring improving sine example.
2017-12-03 23:17:13 +01:00
jespergravgaard
c769aabc0a
Minor refactoring improving float lib.
2017-12-03 23:08:47 +01:00
jespergravgaard
80d5f2bf9d
Updated print test reference data.
2017-12-03 22:59:25 +01:00
jespergravgaard
e18a8cb7d8
Added library for using BASIC functions. Improved print library. Added test creating a sine. Added asserts for methods with to few/many parameters. Added assert for requiring procedure return value. Added som missing fragments.
2017-12-03 22:57:54 +01:00
jespergravgaard
878d3ae36b
Added tests for to few and many method parameters
2017-12-03 17:01:23 +01:00
jespergravgaard
87f58d8782
Implemented check in pass1 ensuring that all used vars have been assigned a value. Closes #8 . Closes #21 .
2017-12-03 16:49:56 +01:00
jespergravgaard
b43489f11a
Implemented ASM long label relabelling. Closes #57
2017-12-03 15:12:20 +01:00
jespergravgaard
defd957837
Intorduced better error when assigning a constant. Closes #19
2017-12-03 14:26:28 +01:00
jespergravgaard
ee5b113b3a
Declared constants only create a single version. Closes #34 .
2017-12-03 14:01:31 +01:00
jespergravgaard
0323fb0a0d
Fixed tests to take adcantadge of casting & int constant type elasticity.
2017-12-02 17:17:19 +01:00
jespergravgaard
9c39311d67
Preventing double imports. Closes #102
2017-12-02 16:56:58 +01:00
jespergravgaard
41fd3bc436
Implemented import functionality. Added import test. Closes #32 .
2017-12-02 16:35:13 +01:00
jespergravgaard
78dd8bc149
Added import keyword and failing test.
2017-12-02 00:01:53 +01:00
jespergravgaard
2f0bcfacd7
Rewrote syntax to separate declarations and statements.
2017-12-01 23:45:09 +01:00
jespergravgaard
fed99da261
Disallowing code outside methods. Closes #18 .
2017-12-01 23:25:53 +01:00
jespergravgaard
3023540e15
Refactored unused var analysis to reuse VariableReferenceInfos
2017-12-01 08:33:25 +01:00
jespergravgaard
18c36a6ed9
Implemented pass1 removal of all unused variables - but keeping all calls & side-effects. Closes #31
2017-11-30 23:19:02 +01:00
jespergravgaard
deb1304ba6
Added pass 1 base class. Added test for unused vars.
2017-11-30 21:51:13 +01:00
jespergravgaard
42840f8f77
Renamed phase 5 optimization.
2017-11-30 20:08:03 +01:00
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
Jesper Gravgaard
eb6cf1188c
Working on a new live range analysis and the ability to handle constants symbolically. TODOs remaining: Live range overlap analysis of register combinations inside methods must also look at registers alive at all calls. Examine why temp-vars are used in flipper. Examine why flipper is plotted in a wrong position on the screen. Implement constants into the symbol table and support them in code. Implement new constant consolidation steps.
2017-09-04 00:49:00 +02:00
jespergravgaard
61d16b3030
Implemented phi transition reuse when transitions are identical on a register basis
2017-08-26 02:05:46 +02:00
jespergravgaard
83edd3e21b
Implemented phi transition reuse when transitions are identical
2017-08-26 01:15:57 +02:00
jespergravgaard
23d9af8420
Started work on phi transition optimization
2017-08-23 09:37:16 +02:00
Jesper Gravgaard
f72585e3c0
Fixed clobber issues caused by statement idx of phi statementsin ASM changed to the call-statement instead of the phi.
2017-08-22 14:57:04 +02:00
jespergravgaard
64c690f925
Improved ZP register ASM naming further. (issue with allocation not choosing optimal registers in some cases - a few tests left failing)
2017-08-21 08:27:34 +02:00
jespergravgaard
029227652e
Improved zp register references across scopes.
2017-08-21 01:19:43 +02:00
jespergravgaard
5a91902c21
Moved register allocation into symbol table Variable
2017-08-20 21:41:17 +02:00
jespergravgaard
1982d01297
renames
2017-08-20 21:20:07 +02:00
jespergravgaard
ffce3298ef
Moved bresenham into main()
2017-08-20 21:12:40 +02:00
jespergravgaard
2707bd5861
Working on outputting variable labels in ASM. Moving register allocation & constant values into symbol table.
2017-08-20 21:09:03 +02:00
jespergravgaard
df631667a0
Changed ranged loop to only accept constants.
2017-08-18 08:40:15 +02:00
jespergravgaard
14dfaee552
Implemented for() loops.
2017-08-18 00:28:39 +02:00
jespergravgaard
5a075a0ce4
Added for syntax to parser
2017-08-14 08:34:02 +02:00
jespergravgaard
d5f62dfd11
Improved program flow for if-statements without else by inverting the condition and jumping over the stmts. Improved fragment synthesizing.
2017-08-13 03:03:56 +02:00
jespergravgaard
7b30fa4f2c
Added ifmin() for optimizing if() block sequence.
2017-08-13 00:44:48 +02:00
jespergravgaard
4741a2d22e
Improve pass structure
2017-08-13 00:30:51 +02:00
jespergravgaard
9c8372b989
Redundant and unused label elimination in ASM.
2017-08-12 21:27:36 +02:00
jespergravgaard
5f27eba623
Fixed scope issues in ASM. Added scope to blocks.
2017-08-12 20:16:07 +02:00
Jesper Gravgaard
15a9415d63
Improved ASM readability
2017-08-12 18:30:21 +02:00
jespergravgaard
1577fe026e
Changed ASM numbers to HEX
2017-08-12 02:55:20 +02:00
jespergravgaard
7555d45b34
Finally got a hold of live ranges when propagating back over calls.
2017-08-12 02:30:37 +02:00
jespergravgaard
9334e435da
refactored addpoint to increment its own counter
2017-08-12 00:31:14 +02:00
jespergravgaard
7c7e0ec08f
Added more minimal test for modifying globals
2017-08-12 00:23:55 +02:00
jespergravgaard
450fc1add0
Added more minimal test for modifying globals
2017-08-12 00:22:46 +02:00
jespergravgaard
fc859e8a03
Implemented ability of procedures to modify globals
2017-08-12 00:15:59 +02:00
jespergravgaard
867d78fd31
Implemented ASM voronoi with squared distance function.
2017-08-07 23:17:56 +02:00
jespergravgaard
1f4ea4f68c
Scrren init moved out of main loop.
2017-08-07 21:40:32 +02:00
jespergravgaard
3eaed1c946
Animated voronoi. Added fragments as needed.
2017-08-07 21:23:35 +02:00
jespergravgaard
772a2a3761
Removed unnecessary fragments
2017-08-07 17:53:43 +02:00
jespergravgaard
9f5efab3ee
Less logging during uplift.
2017-08-07 17:17:14 +02:00
jespergravgaard
d640c53033
Added fragment manager with ability to do fragment synthesis from sub-fragments. Added more fragments.
2017-08-07 16:35:10 +02:00
jespergravgaard
2a19c52c1d
Implemented Voronoi renderer. Added missing fragments. Added combination limit and an iteration trying to uplift the remains.
2017-08-07 14:53:25 +02:00
jespergravgaard
ec1838adba
Added ALU uplift potential analysis
2017-08-06 17:00:10 +02:00
jespergravgaard
3624e3ec27
Fixed two register allocation issues. 1. disallow two variables in the same phi-block to be allocated to the same register. 2. When analyzing potential registers call parameter phi statements are no longer examined.
2017-08-06 15:41:06 +02:00
jespergravgaard
0dae641df0
Optimized ASM instruction lookup by introducing a map.
2017-08-06 15:01:11 +02:00
jespergravgaard
0da6c7af6a
Optimized fragment generation by caching loaded fragment files.
2017-08-06 14:14:58 +02:00
jespergravgaard
439a70e52a
Implemented potential register elimination based on clobber analysis of individual statements.
2017-08-06 13:31:29 +02:00
Jesper Gravgaard
0e5bd97e21
Moved uplift combination testing to separate pass. Made interface for limiting the relevant registers for each equivalence class - improving speed of the combination testing.
2017-08-03 15:05:36 +02:00
jespergravgaard
3b99b6671c
Added ALU to uplift attempts
2017-08-03 01:08:48 +02:00
jespergravgaard
59d33faf92
Implemented new uplift score function sum(cycles*10^loopdepth). Added a lot of missing fragments. Sorted scopes so max weight scopes are allocated first.
2017-08-02 22:20:00 +02:00
jespergravgaard
b9831c9445
Implemented register uplift combination search. This yields near optimal register allocation - but at a calculation cost at O(4^N) where N is the number of live range equivalence classes in a scope.
2017-08-02 00:57:29 +02:00
jespergravgaard
14c8ec13bf
Improved segment generation
2017-08-01 20:38:55 +02:00
jespergravgaard
323e10ab37
Introduced Asm Segments which establish relation between ASM code and the generating ICL.
2017-08-01 13:58:15 +02:00
jespergravgaard
14c1f7e8eb
Now identifying undeclared variables
2017-08-01 01:33:42 +02:00
jespergravgaard
b56f634b1e
Merge remote-tracking branch 'gitlab/master'
2017-07-31 23:41:25 +02:00
jespergravgaard
64d9ff3f23
Gathered all pass results in Program.
2017-07-31 23:41:10 +02:00
Jesper Gravgaard
46dd64e46c
Fixed test data
2017-07-31 23:39:42 +02:00
Jesper Gravgaard
27084f8667
Merge remote-tracking branch 'gitlab/master'
2017-07-31 23:38:05 +02:00
Jesper Gravgaard
4a9a3d54f5
Fixed test data
2017-07-31 23:37:15 +02:00
jespergravgaard
5d21c6aa97
Added indexes to ASM lines in AsmProgram
2017-07-31 21:53:42 +02:00
jespergravgaard
47e8b6b2b9
More fragments - a start at calculating value for ASM.
2017-07-31 20:00:25 +02:00
Jesper Gravgaard
18bbde8a44
Started implementing register uplift with clobber checks. Added a bunch of missing fragments. Added a few failing tests of errors that should give a nice error message.
2017-07-30 16:31:59 +02:00
jespergravgaard
3a14d2ef5b
Cleaned up pointer handling in ASM fragments and binding
2017-07-30 11:28:28 +02:00
jespergravgaard
5f1cf097a4
Added a pointer test
2017-07-30 11:08:44 +02:00
jespergravgaard
120eba90a5
Implemented clobber assertion check for testing potential register allocations.
2017-07-29 23:38:07 +02:00
jespergravgaard
e34e01544b
Fixed constant addition elimination. Moved ASM generation for a single statement to separate function - preparing for clobber analysis of register allocation. Added fibmem test. Tested ALU.
2017-07-29 21:04:28 +02:00
jespergravgaard
7f20f2a6ba
Implemented variable register weight analysis.
2017-07-29 17:10:32 +02:00
jespergravgaard
0377193ec8
Moved to maven based configuration & build.
2017-07-29 14:59:55 +02:00
jespergravgaard
c12c45b5bd
Fixed cross-scope aliasing. Improved assignment ASM for register copies.
2017-07-29 13:41:47 +02:00
jespergravgaard
d159163f21
fixed tests
2017-07-29 11:18:15 +02:00
jespergravgaard
438bdc38b4
Propagating live ranges backwards through calls to avoid coalescing variables in procedures with variables alive outside during the call.
2017-07-29 11:08:24 +02:00
jespergravgaard
9634741d76
Split zero page register allocation into separate phase steps. Added live range information to register allocation phases.
2017-07-29 10:24:37 +02:00
jespergravgaard
b4d5685222
Added a nested loop test.
2017-07-28 03:08:19 +02:00
jespergravgaard
007a5d34b4
Implemented loop depth analysis pass.
2017-07-28 02:55:19 +02:00
jespergravgaard
d1a13402fe
Added loop depth analysis pass - not implemented yet.
2017-07-28 01:23:20 +02:00
jespergravgaard
45e64d59f1
A few renames and better doc.
2017-07-28 00:43:55 +02:00
jespergravgaard
d501534561
Implemented call graph analysis.
2017-07-28 00:38:17 +02:00
jespergravgaard
e7ea5fb4ea
Implemented control flow graph loop analysis.
2017-07-27 22:20:50 +02:00
jespergravgaard
709cc57a1a
Implemented graph dominator analysis.
2017-07-27 15:23:46 +02:00
jespergravgaard
be212f3b38
Implemented live ranged based register allocation - coalescing on phi statements first, copy-assignments second, other assignments third - and finally the remaining vars are added.
2017-07-27 01:33:10 +02:00
jespergravgaard
13c84a1741
Implemented PhiMemCoalesce.
2017-07-26 19:44:51 +02:00
jespergravgaard
16d4ab93f0
Added another block assertion
2017-07-26 17:01:01 +02:00
jespergravgaard
878059da13
Added more asserts
2017-07-26 16:09:47 +02:00
jespergravgaard
d7e0a638f2
Fixed tests
2017-07-26 15:14:56 +02:00
jespergravgaard
bebf020364
Improved phi lifting by introducing new blocks when lifting back to blocks with conditional jumps. Improved sequence planner to ensure blocks in the same scopes are kept together.
2017-07-26 15:09:00 +02:00
jespergravgaard
c43ab3acef
Implemented variable live range identification
2017-07-26 00:26:50 +02:00
jespergravgaard
69cbee294d
Made room for new pass 3 interval analysis
2017-07-25 00:56:42 +02:00
jespergravgaard
0aa64b3203
Added pass1 optimization removing empty blocks.
2017-07-25 00:21:40 +02:00
jespergravgaard
2819d3c58a
Added pass1 optimization removing empty blocks.
2017-07-25 00:17:56 +02:00
jespergravgaard
524252105a
Refactored toString to avoid redundant code.
2017-07-24 08:19:44 +02:00
jespergravgaard
300bb644b9
Refactored phi to use blocks instead of individual statements
2017-07-23 23:29:40 +02:00
jespergravgaard
122cef4e30
Better label naming when creating intermediate labels
2017-07-21 12:18:05 +02:00
jespergravgaard
88c7ed453a
Better label naming when creating intermediate labels
2017-07-21 11:32:41 +02:00
jespergravgaard
4c0a9cd241
Removed cast calls to getSymbol()
2017-07-21 10:49:28 +02:00
jespergravgaard
6ef3af4fdf
ICL Programs are now JSON serializable
2017-07-21 01:53:38 +02:00
jespergravgaard
d38c26eeb5
added a few toString()s
2017-07-20 10:14:22 +02:00
jespergravgaard
00463cd72f
Moved all ref creation to getRef()
2017-07-20 10:02:25 +02:00
Jesper Gravgaard
de88808c5f
Replaced all program labels with labelrefs ans procedures with procedurerefs.
2017-07-20 09:26:06 +02:00
Jesper Gravgaard
e6d09187e3
Added typed and untyped print functions everywhere. Now getting the same output as the old compilation!
2017-07-19 13:21:16 +02:00
Jesper Gravgaard
6e087e9a1c
Now serializing all symbol types
2017-07-18 23:13:24 +02:00
Jesper Gravgaard
819c904419
Implementing JSON serialization of ICL
2017-07-18 22:49:25 +02:00
Jesper Gravgaard
1b0b81baf2
Restructured code in new packages
2017-07-18 18:12:11 +02:00
Jesper Gravgaard
92747454c7
Restructured code in new packages
2017-07-18 18:10:12 +02:00
Jesper Gravgaard
32a2c9eb2b
Optimized registers for fibmem.
2017-07-18 16:46:52 +02:00
Jesper Gravgaard
a7e0e2b1d0
Added main method to flipper. Fixed a few bugs in compiler.
2017-07-16 11:09:32 +02:00
Jesper Gravgaard
f6eeb5ff83
Removed comments from ASM output
2017-07-16 09:41:27 +02:00
Jesper Gravgaard
67b4257ad9
Added a second test
2017-07-15 23:32:25 +02:00
Jesper Gravgaard
0116c9e21d
Added full compile log to test
2017-07-15 23:26:45 +02:00
Jesper Gravgaard
8e59603418
made map linked for predictability
2017-07-15 22:21:07 +02:00
Jesper Gravgaard
81ba13c9c3
Implemented test comparing reference output to actual compilation output
2017-07-15 22:00:02 +02:00
Jesper Gravgaard
a908e4f1ca
Proper implementation of pre-modifiers (++/--)
2017-07-14 12:13:16 +02:00
Jesper Gravgaard
1743e4f9d0
Proper handling of post modifiers
2017-07-14 01:59:04 +02:00
Jesper Gravgaard
1dfbcd1ca4
Working on predictability in output
2017-07-14 00:25:25 +02:00
Jesper Gravgaard
5c1aa7a2e7
Working on predictability in output
2017-07-14 00:15:33 +02:00
Jesper Gravgaard
20cb48b07d
Working on predictability in output
2017-07-14 00:11:57 +02:00
Jesper Gravgaard
e271abb8a0
Using ++/-- post increment/decrement operators.
2017-07-13 23:48:25 +02:00
Jesper Gravgaard
ed7a4dded9
Added ++/-- post increment/decrement operators.
2017-07-13 23:40:17 +02:00
Jesper Gravgaard
de8e5139cc
Added a phase 2 block assertion checking that the program always contains all referenced blocks.
2017-07-13 22:03:52 +02:00
Jesper Gravgaard
56cf4c80ef
Added a phase 2 symbol assertion checking that the program always matches the symbol table.
2017-07-13 21:35:43 +02:00
Jesper Gravgaard
2e90516f34
Fixed problem with nested do loops being mixed up during empty block culling. Improved flipper implementation.
2017-07-13 20:41:16 +02:00
Jesper Gravgaard
d41f762a8b
Completed KickC implementation of flipper
2017-07-13 00:50:53 +02:00
Jesper Gravgaard
8d7dfa8a8d
Implemented most of flipper in KickC
2017-07-13 00:13:26 +02:00
Jesper Gravgaard
b25be31ba1
Implemented Control flow Graph Sequence Planner. Implemented working flipper.
2017-07-11 01:06:13 +02:00
jespergravgaard
01a26b4710
Implemented usage counting in sub-constant elimination. Added some more fragments
2017-06-17 11:09:59 +02:00
jespergravgaard
e5f1f7f387
Added support for multiple procs
2017-06-14 21:54:28 +02:00
jespergravgaard
5254d7d3a6
Fixed for callsum
2017-06-13 23:11:56 +02:00
jespergravgaard
790feb1dcc
New alias elimination implementation. Optimized register allocation for test.
2017-06-13 22:48:03 +02:00
jespergravgaard
a5204acf79
Merge remote-tracking branch 'gitlab/master'
2017-06-13 19:48:14 +02:00
jespergravgaard
872c4cfc28
aliasing works on return statements
2017-06-13 19:48:09 +02:00
Jesper Gravgaard
fb3b083938
Working on parameter passing & return values
2017-06-13 07:18:07 +02:00
jespergravgaard
3b2cc5cde1
Refactoring control flow graph to enable proc calls. Still need to handle return values properly.
2017-06-11 23:36:05 +02:00
jespergravgaard
12bff79433
Control Flow Graph now handles procs & sub sprocs
2017-06-11 19:15:09 +02:00
jespergravgaard
40d44da2fc
Added proc/endproc statements
2017-06-05 16:17:08 +02:00
jespergravgaard
03ee43c3b7
Looking at function calls
2017-06-05 16:01:50 +02:00
jespergravgaard
2dedf8263b
Looking at function calls
2017-06-05 00:38:50 +02:00
jespergravgaard
4aa00d4536
Added special ALU register support
2017-06-04 00:45:40 +02:00
jespergravgaard
357bbecade
Added *idx operator for array indexing.
2017-06-03 23:49:06 +02:00
jespergravgaard
65f41f874f
Added constant addition optimization and improved alias-optimization
2017-06-03 22:37:12 +02:00
jespergravgaard
0f3da0ea3e
Fixed bresenham array again
2017-05-31 01:12:23 +02:00
jespergravgaard
0bdd9d2f2e
Implemented A register - and achieved optimal asm in sprite tabel generation.
2017-05-31 00:59:30 +02:00
jespergravgaard
aac15e64dd
Added rol/ror and a table generation example
2017-05-30 23:55:02 +02:00
jespergravgaard
2a2d873e62
Added static register value analysis - eliminating uncecasary loads.
2017-05-30 11:09:39 +02:00
jespergravgaard
b7fd96c4ee
Added clobber info on instruction set
2017-05-30 09:51:07 +02:00
jespergravgaard
cc3158e387
Added array-based bresenham
2017-05-29 22:54:36 +02:00
jespergravgaard
1540439d36
Added array-based bresenham
2017-05-29 22:43:05 +02:00
jespergravgaard
38408825cd
Implemented simple bresenhm
2017-05-28 21:47:50 +02:00
jespergravgaard
5367a41bcf
Asm Fragment binding using registers instead of variables.
2017-05-28 18:22:57 +02:00
jespergravgaard
5c907162f3
Added more general pointer support
2017-05-28 17:58:02 +02:00
jespergravgaard
b3dfb503f5
Now supporting fibonacci array generation
2017-05-28 12:46:14 +02:00
jespergravgaard
6f56b1bcfa
added pointers/arrays
2017-05-28 08:58:22 +02:00
jespergravgaard
6376029dbf
Now parsing array declarations
2017-05-25 02:24:18 +02:00
jespergravgaard
15b1dc60fe
Added syntax for functions & arrays.
2017-05-23 08:51:39 +02:00
jespergravgaard
a565a0bea7
Added ASM optimization removing jumps / branches to next instruction.
2017-05-21 13:40:56 +02:00
jespergravgaard
39e5b5a894
Added do {} while(). Fixed relative jump labels. Added fib2 & y-usage.
2017-05-21 12:56:11 +02:00
jespergravgaard
0ba8ac742e
Retired old ASM sequence for new ASM program
2017-05-21 10:56:26 +02:00
jespergravgaard
651f02e153
better syntax parser
2017-05-20 22:08:06 +02:00
jespergravgaard
da8ff513e6
Allowing last asm line without newline
2017-05-20 22:05:01 +02:00
jespergravgaard
8f9f042144
Created ASM parser & representation
2017-05-20 21:49:11 +02:00
jespergravgaard
91b455e042
Renamed fragment files to match windows
2017-05-20 11:48:01 +02:00
jespergravgaard
f8aa837eda
initial attempts at register optimization
2017-05-18 00:06:31 +02:00
jespergravgaard
d5ff6e3ea2
Implemented conditional simplification optimization
2017-05-17 23:21:02 +02:00
jespergravgaard
84c0b01354
updated fib
2017-05-15 23:33:19 +02:00
jespergravgaard
7e043de594
Implemented fib - and fixed alias elimination issue
2017-05-15 21:54:32 +02:00
jespergravgaard
62533afc6a
Refactored fragment handling
2017-05-15 18:30:43 +02:00
jespergravgaard
968f51343a
Implemented the last asm fragments
2017-05-15 18:15:56 +02:00
jespergravgaard
4e4fee9035
Implmented asm fragment generator
2017-05-15 17:01:11 +02:00
jespergravgaard
4ca3fe0787
Added naive register allocation
2017-05-15 08:40:47 +02:00
Jesper Gravgaard
c58a999a42
Added repeating pass 2 optimizations
2017-05-14 13:25:31 +02:00
Jesper Gravgaard
b3fd0eb28c
Added more simple optimizing passes
2017-05-14 11:30:46 +02:00
Jesper Gravgaard
73fa2839e0
Typified all Symbols
2017-05-13 16:20:58 +02:00
Jesper Gravgaard
3b8580498b
Implemented phi function completion loop.
2017-05-12 10:26:56 +02:00
jespergravgaard
807198113b
SSA with phi function almost complete
2017-05-08 18:08:07 +02:00
jespergravgaard
4eb905b15c
Constructing Control Flow Graph.
2017-05-07 20:32:30 +02:00
jespergravgaard
a06fe6e989
Parsing, 3 Address Code, Type Inference
2017-05-07 11:58:54 +02:00
jespergravgaard
7a24cc0b62
SSA form generation for expressions started
2017-05-05 09:55:15 +02:00
jespergravgaard
04d4f32ad9
A bit more subpix work. Some font-work and a KickC parser start.
2017-05-01 00:11:51 +02:00