From 948db1a3895033e129c48f2219c695fb7feb5ec4 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sat, 24 Feb 2018 08:14:01 +0100 Subject: [PATCH] Fixed lo/hi test --- .../kickc/test/ref/test-lohiconst.log | 390 +++++++++++++++++- .../kickc/test/ref/test-lohiconst.prg | Bin 38 -> 0 bytes .../kickc/test/ref/test-lohiconst.vs | 3 - 3 files changed, 378 insertions(+), 15 deletions(-) delete mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.prg delete mode 100644 src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.vs diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log b/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log index fcf4dad02..b46ad1bef 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log @@ -1,14 +1,380 @@ -parsing -flex pass 1 -flex pass 2 -flex pass 3 -Output pass +PARSING src/test/java/dk/camelot64/kickc/test/kc/test-lohiconst.kc +// PI in u[4.28] format +const dword PI_u4f28 = $3243f6a9; -Memory Map ----------- -Default-segment: - $0801-$080c Basic - $080d-$0824 Program +void main() { + byte* SCREEN = $400; + SCREEN[0] = > > PI_u4f28; + SCREEN[1] = < > PI_u4f28; + SCREEN[2] = > < PI_u4f28; + SCREEN[3] = < < PI_u4f28; +} + +STATEMENTS + (dword) PI_u4f28 ← (dword/signed dword) 843314857 +proc (void()) main() + (byte*) main::SCREEN ← (word/signed word/dword/signed dword) 1024 + (word~) main::$0 ← > (dword) PI_u4f28 + (byte~) main::$1 ← > (word~) main::$0 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$1 + (word~) main::$2 ← > (dword) PI_u4f28 + (byte~) main::$3 ← < (word~) main::$2 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$3 + (word~) main::$4 ← < (dword) PI_u4f28 + (byte~) main::$5 ← > (word~) main::$4 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte~) main::$5 + (word~) main::$6 ← < (dword) PI_u4f28 + (byte~) main::$7 ← < (word~) main::$6 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$7 +main::@return: + return +endproc // main() + call main + +SYMBOLS +(dword) PI_u4f28 +(void()) main() +(word~) main::$0 +(byte~) main::$1 +(word~) main::$2 +(byte~) main::$3 +(word~) main::$4 +(byte~) main::$5 +(word~) main::$6 +(byte~) main::$7 +(label) main::@return +(byte*) main::SCREEN + +Promoting word/signed word/dword/signed dword to byte* in main::SCREEN ← ((byte*)) 1024 +INITIAL CONTROL FLOW GRAPH +@begin: scope:[] from + (dword) PI_u4f28 ← (dword/signed dword) 843314857 + to:@1 +main: scope:[main] from + (byte*) main::SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024 + (word~) main::$0 ← > (dword) PI_u4f28 + (byte~) main::$1 ← > (word~) main::$0 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$1 + (word~) main::$2 ← > (dword) PI_u4f28 + (byte~) main::$3 ← < (word~) main::$2 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$3 + (word~) main::$4 ← < (dword) PI_u4f28 + (byte~) main::$5 ← > (word~) main::$4 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte~) main::$5 + (word~) main::$6 ← < (dword) PI_u4f28 + (byte~) main::$7 ← < (word~) main::$6 + *((byte*) main::SCREEN + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$7 + to:main::@return +main::@return: scope:[main] from main + return + to:@return +@1: scope:[] from @begin + call main + to:@end +@end: scope:[] from @1 + +PROCEDURE MODIFY VARIABLE ANALYSIS + +Completing Phi functions... + +CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN +@begin: scope:[] from + (dword) PI_u4f28#0 ← (dword/signed dword) 843314857 + to:@1 +main: scope:[main] from @1 + (byte*) main::SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024 + (word~) main::$0 ← > (dword) PI_u4f28#0 + (byte~) main::$1 ← > (word~) main::$0 + *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte~) main::$1 + (word~) main::$2 ← > (dword) PI_u4f28#0 + (byte~) main::$3 ← < (word~) main::$2 + *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte~) main::$3 + (word~) main::$4 ← < (dword) PI_u4f28#0 + (byte~) main::$5 ← > (word~) main::$4 + *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte~) main::$5 + (word~) main::$6 ← < (dword) PI_u4f28#0 + (byte~) main::$7 ← < (word~) main::$6 + *((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte~) main::$7 + to:main::@return +main::@return: scope:[main] from main + return + to:@return +@1: scope:[] from @begin + call main param-assignment + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(dword) PI_u4f28 +(dword) PI_u4f28#0 +(void()) main() +(word~) main::$0 +(byte~) main::$1 +(word~) main::$2 +(byte~) main::$3 +(word~) main::$4 +(byte~) main::$5 +(word~) main::$6 +(byte~) main::$7 +(label) main::@return +(byte*) main::SCREEN +(byte*) main::SCREEN#0 + +OPTIMIZING CONTROL FLOW GRAPH +Culled Empty Block (label) @2 +Succesful SSA optimization Pass2CullEmptyBlocks +Constant (const dword) PI_u4f28#0 = 843314857 +Constant (const byte*) main::SCREEN#0 = ((byte*))1024 +Succesful SSA optimization Pass2ConstantIdentification +Constant (const word) main::$0 = >PI_u4f28#0 +Constant (const word) main::$2 = >PI_u4f28#0 +Constant (const word) main::$4 = main::$0 +Constant (const byte) main::$3 = main::$4 +Constant (const byte) main::$7 = >(const dword) PI_u4f28#0 +Constant inlined main::$2 = >(const dword) PI_u4f28#0 +Constant inlined main::$0 = >(const dword) PI_u4f28#0 +Constant inlined main::$5 = ><(const dword) PI_u4f28#0 +Constant inlined main::$6 = <(const dword) PI_u4f28#0 +Constant inlined main::$3 = <>(const dword) PI_u4f28#0 +Constant inlined main::$4 = <(const dword) PI_u4f28#0 +Constant inlined main::$7 = <<(const dword) PI_u4f28#0 +Succesful SSA optimization Pass2ConstantInlining +Block Sequence Planned @begin @1 @end main main::@return +Block Sequence Planned @begin @1 @end main main::@return +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +CALL GRAPH +Calls in [] to main:2 + +Propagating live ranges... +Created 0 initial phi equivalence classes +Coalesced down to 0 phi equivalence classes +Block Sequence Planned @begin @1 @end main main::@return +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Propagating live ranges... + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() [ ] ( ) + to:@1 +@1: scope:[] from @begin + [1] phi() [ ] ( ) + [2] call main param-assignment [ ] ( ) + to:@end +@end: scope:[] from @1 + [3] phi() [ ] ( ) +main: scope:[main] from @1 + [4] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← >>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) + [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← <>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) + [6] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← ><(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) + [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← <<(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) + to:main::@return +main::@return: scope:[main] from main + [8] return [ ] ( main:2 [ ] ) + to:@return + +DOMINATORS +@begin dominated by @begin +@1 dominated by @1 @begin +@end dominated by @1 @begin @end +main dominated by @1 @begin main +main::@return dominated by main::@return @1 @begin main + +NATURAL LOOPS + +NATURAL LOOPS WITH DEPTH +Found 0 loops in scope [] +Found 0 loops in scope [main] + + +VARIABLE REGISTER WEIGHTS +(dword) PI_u4f28 +(void()) main() +(byte*) main::SCREEN + +Initial phi equivalence classes +Complete equivalence classes + +INITIAL ASM +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .const PI_u4f28 = $3243f6a9 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG4 @1 +b1: +//SEG5 [2] call main param-assignment [ ] ( ) + jsr main +//SEG6 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG7 @end +bend: +//SEG8 main +main: { + .label SCREEN = $400 + //SEG9 [4] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← >>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>PI_u4f28>>16 + sta SCREEN+0 + //SEG10 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← <>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>16 + sta SCREEN+1 + //SEG11 [6] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← ><(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>PI_u4f28&$ffff + sta SCREEN+2 + //SEG12 [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← <<(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← <>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← ><(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← <<(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [] + +Uplifting [main] best 45 combination +Uplifting [] best 45 combination + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG1 Global Constants & labels + .const PI_u4f28 = $3243f6a9 +//SEG2 @begin +bbegin: +//SEG3 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG4 @1 +b1: +//SEG5 [2] call main param-assignment [ ] ( ) + jsr main +//SEG6 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG7 @end +bend: +//SEG8 main +main: { + .label SCREEN = $400 + //SEG9 [4] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← >>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>PI_u4f28>>16 + sta SCREEN+0 + //SEG10 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← <>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>16 + sta SCREEN+1 + //SEG11 [6] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← ><(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>PI_u4f28&$ffff + sta SCREEN+2 + //SEG12 [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← <<(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #@1] +//SEG4 @1 +//SEG5 [2] call main param-assignment [ ] ( ) + jsr main +//SEG6 [3] phi from @1 to @end [phi:@1->@end] +//SEG7 @end +//SEG8 main +main: { + .label SCREEN = $400 + //SEG9 [4] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← >>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>PI_u4f28>>16 + sta SCREEN+0 + //SEG10 [5] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← <>(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>16 + sta SCREEN+1 + //SEG11 [6] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← ><(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #>PI_u4f28&$ffff + sta SCREEN+2 + //SEG12 [7] *((const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← <<(const dword) PI_u4f28#0 [ ] ( main:2 [ ] ) -- _deref_pbuc1=vbuc2 + lda #