From d09f4e2219bca1457c7b93444dbdb6d7a7e650a9 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Fri, 3 Sep 2021 17:56:28 +0200 Subject: [PATCH] added test refs --- src/test/ref/struct-with-huge-array.asm | 78 +++++ src/test/ref/struct-with-huge-array.cfg | 18 ++ src/test/ref/struct-with-huge-array.log | 392 ++++++++++++++++++++++++ src/test/ref/struct-with-huge-array.sym | 14 + 4 files changed, 502 insertions(+) create mode 100644 src/test/ref/struct-with-huge-array.asm create mode 100644 src/test/ref/struct-with-huge-array.cfg create mode 100644 src/test/ref/struct-with-huge-array.log create mode 100644 src/test/ref/struct-with-huge-array.sym diff --git a/src/test/ref/struct-with-huge-array.asm b/src/test/ref/struct-with-huge-array.asm new file mode 100644 index 000000000..02be66107 --- /dev/null +++ b/src/test/ref/struct-with-huge-array.asm @@ -0,0 +1,78 @@ + // Commodore 64 PRG executable file +.file [name="struct-with-huge-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + .const SIZEOF_STRUCT___0 = $11a + .label SCREEN = $400 +.segment Code +main: { + .label i = 2 + .label __2 = 4 + .label __3 = 6 + // bug b + lda #b + sta.z $ff + lda #0 + tay + tax + !n: + sta ($fe),y + iny + cpy #$ff + bne !+ + inc.z $ff + inx + !: + cpy #<$11a + bne !n- + cpx #>$11a + bne !n- + lda #<0 + sta.z i + sta.z i+1 + __b1: + // for(unsigned int i=0;i$11a + bcc __b2 + bne !+ + lda.z i + cmp #<$11a + bcc __b2 + !: + // } + rts + __b2: + // SCREEN[i] = b.header[i] + lda.z i + clc + adc #b + sta.z __2+1 + lda.z i + clc + adc #SCREEN + sta.z __3+1 + ldy #0 + lda (__2),y + sta (__3),y + // for(unsigned int i=0;ib + sta.z $ff + lda #0 + tay + tax + !n: + sta ($fe),y + iny + cpy #$ff + bne !+ + inc.z $ff + inx + !: + cpy #<$11a + bne !n- + cpx #>$11a + bne !n- + // [1] phi from main to main::@1 [phi:main->main::@1] + __b1_from_main: + // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 + lda #<0 + sta.z i + lda #>0 + sta.z i+1 + jmp __b1 + // main::@1 + __b1: + // [2] if(main::i#2<$11a) goto main::@2 -- vwuz1_lt_vwuc1_then_la1 + lda.z i+1 + cmp #>$11a + bcc __b2 + bne !+ + lda.z i + cmp #<$11a + bcc __b2 + !: + jmp __breturn + // main::@return + __breturn: + // [3] return + rts + // main::@2 + __b2: + // [4] main::$2 = (char *)&main::b + main::i#2 -- pbuz1=pbuc1_plus_vwuz2 + lda.z i + clc + adc #b + sta.z __2+1 + // [5] main::$3 = SCREEN + main::i#2 -- pbuz1=pbuc1_plus_vwuz2 + lda.z i + clc + adc #SCREEN + sta.z __3+1 + // [6] *main::$3 = *main::$2 -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (__2),y + ldy #0 + sta (__3),y + // [7] main::i#1 = ++ main::i#2 -- vwuz1=_inc_vwuz1 + inc.z i + bne !+ + inc.z i+1 + !: + // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] + __b1_from___b2: + // [1] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 + .segment Data + b: .fill SIZEOF_STRUCT___0, 0 +} + // File Data + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp __b1 +Removing instruction jmp __breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #>0 +Removing instruction ldy #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction __b1_from_main: +Removing instruction __breturn: +Removing instruction __b1_from___b2: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +__constant char *SCREEN = (char *) 1024 +__constant unsigned int SIZEOF_STRUCT_$0 = $11a +void main() +char *main::$2 // zp[2]:4 11.0 +char *main::$3 // zp[2]:6 22.0 +__loadstore struct $0 main::b // mem[282] +unsigned int main::i +unsigned int main::i#1 // i zp[2]:2 22.0 +unsigned int main::i#2 // i zp[2]:2 11.0 + +zp[2]:2 [ main::i#2 main::i#1 ] +zp[2]:4 [ main::$2 ] +zp[2]:6 [ main::$3 ] +mem[282] [ main::b ] + + +FINAL ASSEMBLER +Score: 955 + + // File Comments + // Upstart + // Commodore 64 PRG executable file +.file [name="struct-with-huge-array.prg", type="prg", segments="Program"] +.segmentdef Program [segments="Basic, Code, Data"] +.segmentdef Basic [start=$0801] +.segmentdef Code [start=$80d] +.segmentdef Data [startAfter="Code"] +.segment Basic +:BasicUpstart(main) + // Global Constants & labels + .const SIZEOF_STRUCT___0 = $11a + .label SCREEN = $400 +.segment Code + // main +main: { + .label i = 2 + .label __2 = 4 + .label __3 = 6 + // bug b + // [0] *(&main::b) = memset(struct $0, $11a) -- _deref_pssc1=_memset_vwuc2 + lda #b + sta.z $ff + lda #0 + tay + tax + !n: + sta ($fe),y + iny + cpy #$ff + bne !+ + inc.z $ff + inx + !: + cpy #<$11a + bne !n- + cpx #>$11a + bne !n- + // [1] phi from main to main::@1 [phi:main->main::@1] + // [1] phi main::i#2 = 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 + lda #<0 + sta.z i + sta.z i+1 + // main::@1 + __b1: + // for(unsigned int i=0;i$11a + bcc __b2 + bne !+ + lda.z i + cmp #<$11a + bcc __b2 + !: + // main::@return + // } + // [3] return + rts + // main::@2 + __b2: + // SCREEN[i] = b.header[i] + // [4] main::$2 = (char *)&main::b + main::i#2 -- pbuz1=pbuc1_plus_vwuz2 + lda.z i + clc + adc #b + sta.z __2+1 + // [5] main::$3 = SCREEN + main::i#2 -- pbuz1=pbuc1_plus_vwuz2 + lda.z i + clc + adc #SCREEN + sta.z __3+1 + // [6] *main::$3 = *main::$2 -- _deref_pbuz1=_deref_pbuz2 + ldy #0 + lda (__2),y + sta (__3),y + // for(unsigned int i=0;imain::@1] + // [1] phi main::i#2 = main::i#1 [phi:main::@2->main::@1#0] -- register_copy + jmp __b1 + .segment Data + b: .fill SIZEOF_STRUCT___0, 0 +} + // File Data + diff --git a/src/test/ref/struct-with-huge-array.sym b/src/test/ref/struct-with-huge-array.sym new file mode 100644 index 000000000..96e0424e1 --- /dev/null +++ b/src/test/ref/struct-with-huge-array.sym @@ -0,0 +1,14 @@ +__constant char *SCREEN = (char *) 1024 +__constant unsigned int SIZEOF_STRUCT_$0 = $11a +void main() +char *main::$2 // zp[2]:4 11.0 +char *main::$3 // zp[2]:6 22.0 +__loadstore struct $0 main::b // mem[282] +unsigned int main::i +unsigned int main::i#1 // i zp[2]:2 22.0 +unsigned int main::i#2 // i zp[2]:2 11.0 + +zp[2]:2 [ main::i#2 main::i#1 ] +zp[2]:4 [ main::$2 ] +zp[2]:6 [ main::$3 ] +mem[282] [ main::b ]