CONTROL FLOW GRAPH SSA void main() main: scope:[main] from __start main::idx#0 = 0 SCREEN[main::idx#0] = '0'+SIZEOF_VOID main::idx#1 = ++ main::idx#0 main::idx#2 = ++ main::idx#1 SCREEN[main::idx#2] = '0'+SIZEOF_CHAR main::idx#3 = ++ main::idx#2 SCREEN[main::idx#3] = '0'+SIZEOF_SIGNED_CHAR main::idx#4 = ++ main::idx#3 SCREEN[main::idx#4] = '0'+SIZEOF_CHAR main::idx#5 = ++ main::idx#4 SCREEN[main::idx#5] = '0'+SIZEOF_SIGNED_CHAR main::idx#6 = ++ main::idx#5 SCREEN[main::idx#6] = '0'+SIZEOF_BOOL main::idx#7 = ++ main::idx#6 main::idx#8 = ++ main::idx#7 SCREEN[main::idx#8] = '0'+SIZEOF_UNSIGNED_INT main::idx#9 = ++ main::idx#8 SCREEN[main::idx#9] = '0'+SIZEOF_INT main::idx#10 = ++ main::idx#9 SCREEN[main::idx#10] = '0'+SIZEOF_UNSIGNED_INT main::idx#11 = ++ main::idx#10 SCREEN[main::idx#11] = '0'+SIZEOF_INT main::idx#12 = ++ main::idx#11 SCREEN[main::idx#12] = '0'+SIZEOF_UNSIGNED_INT main::idx#13 = ++ main::idx#12 SCREEN[main::idx#13] = '0'+SIZEOF_INT main::idx#14 = ++ main::idx#13 main::idx#15 = ++ main::idx#14 SCREEN[main::idx#15] = '0'+SIZEOF_POINTER main::idx#16 = ++ main::idx#15 SCREEN[main::idx#16] = '0'+SIZEOF_POINTER main::idx#17 = ++ main::idx#16 SCREEN[main::idx#17] = '0'+SIZEOF_POINTER main::idx#18 = ++ main::idx#17 SCREEN[main::idx#18] = '0'+SIZEOF_POINTER main::idx#19 = ++ main::idx#18 main::idx#20 = ++ main::idx#19 SCREEN[main::idx#20] = '0'+SIZEOF_UNSIGNED_LONG main::idx#21 = ++ main::idx#20 SCREEN[main::idx#21] = '0'+SIZEOF_LONG main::idx#22 = ++ main::idx#21 SCREEN[main::idx#22] = '0'+SIZEOF_UNSIGNED_LONG main::idx#23 = ++ main::idx#22 SCREEN[main::idx#23] = '0'+SIZEOF_LONG main::idx#24 = ++ main::idx#23 to:main::@return main::@return: scope:[main] from main return to:@return void __start() __start: scope:[__start] from call main to:__start::@1 __start::@1: scope:[__start] from __start to:__start::@return __start::@return: scope:[__start] from __start::@1 return to:@return SYMBOL TABLE SSA __constant char * const SCREEN = (char *)$400 __constant char SIZEOF_BOOL = 1 __constant char SIZEOF_CHAR = 1 __constant char SIZEOF_INT = 2 __constant char SIZEOF_LONG = 4 __constant char SIZEOF_POINTER = 2 __constant char SIZEOF_SIGNED_CHAR = 1 __constant char SIZEOF_UNSIGNED_INT = 2 __constant char SIZEOF_UNSIGNED_LONG = 4 __constant char SIZEOF_VOID = 0 void __start() void main() char main::idx char main::idx#0 char main::idx#1 char main::idx#10 char main::idx#11 char main::idx#12 char main::idx#13 char main::idx#14 char main::idx#15 char main::idx#16 char main::idx#17 char main::idx#18 char main::idx#19 char main::idx#2 char main::idx#20 char main::idx#21 char main::idx#22 char main::idx#23 char main::idx#24 char main::idx#3 char main::idx#4 char main::idx#5 char main::idx#6 char main::idx#7 char main::idx#8 char main::idx#9 Simplifying constant pointer cast (char *) 1024 Successful SSA optimization PassNCastSimplification Constant main::idx#0 = 0 Successful SSA optimization Pass2ConstantIdentification Simplifying expression containing zero '0' in [1] SCREEN[main::idx#0] = '0'+SIZEOF_VOID Simplifying expression containing zero SCREEN in [1] SCREEN[main::idx#0] = '0' Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused variable main::idx#24 and assignment [43] main::idx#24 = ++ main::idx#23 Eliminating unused constant SIZEOF_VOID Successful SSA optimization PassNEliminateUnusedVars Removing unused procedure __start Removing unused procedure block __start Removing unused procedure block __start::@1 Removing unused procedure block __start::@return Successful SSA optimization PassNEliminateEmptyStart Constant right-side identified [1] main::idx#1 = ++ main::idx#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#1 = ++main::idx#0 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [1] main::idx#2 = ++ main::idx#1 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#2 = ++main::idx#1 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [2] main::idx#3 = ++ main::idx#2 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#3 = ++main::idx#2 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [3] main::idx#4 = ++ main::idx#3 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#4 = ++main::idx#3 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [4] main::idx#5 = ++ main::idx#4 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#5 = ++main::idx#4 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [5] main::idx#6 = ++ main::idx#5 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#6 = ++main::idx#5 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [6] main::idx#7 = ++ main::idx#6 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#7 = ++main::idx#6 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [6] main::idx#8 = ++ main::idx#7 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#8 = ++main::idx#7 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [7] main::idx#9 = ++ main::idx#8 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#9 = ++main::idx#8 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [8] main::idx#10 = ++ main::idx#9 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#10 = ++main::idx#9 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [9] main::idx#11 = ++ main::idx#10 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#11 = ++main::idx#10 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [10] main::idx#12 = ++ main::idx#11 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#12 = ++main::idx#11 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [11] main::idx#13 = ++ main::idx#12 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#13 = ++main::idx#12 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [12] main::idx#14 = ++ main::idx#13 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#14 = ++main::idx#13 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [12] main::idx#15 = ++ main::idx#14 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#15 = ++main::idx#14 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [13] main::idx#16 = ++ main::idx#15 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#16 = ++main::idx#15 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [14] main::idx#17 = ++ main::idx#16 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#17 = ++main::idx#16 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [15] main::idx#18 = ++ main::idx#17 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#18 = ++main::idx#17 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [16] main::idx#19 = ++ main::idx#18 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#19 = ++main::idx#18 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [16] main::idx#20 = ++ main::idx#19 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#20 = ++main::idx#19 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [17] main::idx#21 = ++ main::idx#20 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#21 = ++main::idx#20 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [18] main::idx#22 = ++ main::idx#21 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#22 = ++main::idx#21 Successful SSA optimization Pass2ConstantIdentification Constant right-side identified [19] main::idx#23 = ++ main::idx#22 Successful SSA optimization Pass2ConstantRValueConsolidation Constant main::idx#23 = ++main::idx#22 Successful SSA optimization Pass2ConstantIdentification Inlining constant with different constant siblings main::idx#0 Inlining constant with different constant siblings main::idx#1 Inlining constant with different constant siblings main::idx#2 Inlining constant with different constant siblings main::idx#3 Inlining constant with different constant siblings main::idx#4 Inlining constant with different constant siblings main::idx#5 Inlining constant with different constant siblings main::idx#6 Inlining constant with different constant siblings main::idx#7 Inlining constant with different constant siblings main::idx#8 Inlining constant with different constant siblings main::idx#9 Inlining constant with different constant siblings main::idx#10 Inlining constant with different constant siblings main::idx#11 Inlining constant with different constant siblings main::idx#12 Inlining constant with different constant siblings main::idx#13 Inlining constant with different constant siblings main::idx#14 Inlining constant with different constant siblings main::idx#15 Inlining constant with different constant siblings main::idx#16 Inlining constant with different constant siblings main::idx#17 Inlining constant with different constant siblings main::idx#18 Inlining constant with different constant siblings main::idx#19 Inlining constant with different constant siblings main::idx#20 Inlining constant with different constant siblings main::idx#21 Inlining constant with different constant siblings main::idx#22 Inlining constant with different constant siblings main::idx#23 Constant inlined main::idx#16 = ++++++++++++++++++++++++++++++++0 Constant inlined main::idx#17 = ++++++++++++++++++++++++++++++++++0 Constant inlined main::idx#18 = ++++++++++++++++++++++++++++++++++++0 Constant inlined main::idx#19 = ++++++++++++++++++++++++++++++++++++++0 Constant inlined main::idx#12 = ++++++++++++++++++++++++0 Constant inlined main::idx#23 = ++++++++++++++++++++++++++++++++++++++++++++++0 Constant inlined main::idx#13 = ++++++++++++++++++++++++++0 Constant inlined main::idx#14 = ++++++++++++++++++++++++++++0 Constant inlined main::idx#15 = ++++++++++++++++++++++++++++++0 Constant inlined main::idx#0 = 0 Constant inlined main::idx#1 = ++0 Constant inlined main::idx#2 = ++++0 Constant inlined main::idx#3 = ++++++0 Constant inlined main::idx#4 = ++++++++0 Constant inlined main::idx#5 = ++++++++++0 Constant inlined main::idx#6 = ++++++++++++0 Constant inlined main::idx#7 = ++++++++++++++0 Constant inlined main::idx#8 = ++++++++++++++++0 Constant inlined main::idx#20 = ++++++++++++++++++++++++++++++++++++++++0 Constant inlined main::idx#9 = ++++++++++++++++++0 Constant inlined main::idx#10 = ++++++++++++++++++++0 Constant inlined main::idx#21 = ++++++++++++++++++++++++++++++++++++++++++0 Constant inlined main::idx#11 = ++++++++++++++++++++++0 Constant inlined main::idx#22 = ++++++++++++++++++++++++++++++++++++++++++++0 Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(SCREEN+++++0) Consolidated array index constant in *(SCREEN+++++++0) Consolidated array index constant in *(SCREEN+++++++++0) Consolidated array index constant in *(SCREEN+++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++++++++++++++++0) Consolidated array index constant in *(SCREEN+++++++++++++++++++++++++++++++++++++++++++++++0) Successful SSA optimization Pass2ConstantAdditionElimination Simplifying constant integer increment ++0 Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 Simplifying constant integer increment ++3 Simplifying constant integer increment ++4 Simplifying constant integer increment ++5 Simplifying constant integer increment ++6 Simplifying constant integer increment ++7 Simplifying constant integer increment ++8 Simplifying constant integer increment ++9 Simplifying constant integer increment ++$a Simplifying constant integer increment ++$b Simplifying constant integer increment ++$c Simplifying constant integer increment ++$d Simplifying constant integer increment ++$e Simplifying constant integer increment ++$f Simplifying constant integer increment ++$10 Simplifying constant integer increment ++$11 Simplifying constant integer increment ++$12 Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 Simplifying constant integer increment ++3 Simplifying constant integer increment ++4 Simplifying constant integer increment ++5 Simplifying constant integer increment ++7 Simplifying constant integer increment ++8 Simplifying constant integer increment ++9 Simplifying constant integer increment ++$a Simplifying constant integer increment ++$b Simplifying constant integer increment ++$c Simplifying constant integer increment ++$e Simplifying constant integer increment ++$f Simplifying constant integer increment ++$10 Simplifying constant integer increment ++$11 Simplifying constant integer increment ++$13 Simplifying constant integer increment ++$13 Simplifying constant integer increment ++$14 Simplifying constant integer increment ++$15 Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++$14 Simplifying constant integer increment ++$15 Simplifying constant integer increment ++$16 Successful SSA optimization Pass2ConstantSimplification CALL GRAPH Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes FINAL CONTROL FLOW GRAPH void main() main: scope:[main] from [0] *SCREEN = '0' [1] *(SCREEN+2) = '0'+SIZEOF_CHAR [2] *(SCREEN+3) = '0'+SIZEOF_SIGNED_CHAR [3] *(SCREEN+4) = '0'+SIZEOF_CHAR [4] *(SCREEN+5) = '0'+SIZEOF_SIGNED_CHAR [5] *(SCREEN+6) = '0'+SIZEOF_BOOL [6] *(SCREEN+8) = '0'+SIZEOF_UNSIGNED_INT [7] *(SCREEN+9) = '0'+SIZEOF_INT [8] *(SCREEN+$a) = '0'+SIZEOF_UNSIGNED_INT [9] *(SCREEN+$b) = '0'+SIZEOF_INT [10] *(SCREEN+$c) = '0'+SIZEOF_UNSIGNED_INT [11] *(SCREEN+$d) = '0'+SIZEOF_INT [12] *(SCREEN+$f) = '0'+SIZEOF_POINTER [13] *(SCREEN+$10) = '0'+SIZEOF_POINTER [14] *(SCREEN+$11) = '0'+SIZEOF_POINTER [15] *(SCREEN+$12) = '0'+SIZEOF_POINTER [16] *(SCREEN+$14) = '0'+SIZEOF_UNSIGNED_LONG [17] *(SCREEN+$15) = '0'+SIZEOF_LONG [18] *(SCREEN+$16) = '0'+SIZEOF_UNSIGNED_LONG [19] *(SCREEN+$17) = '0'+SIZEOF_LONG to:main::@return main::@return: scope:[main] from main [20] return to:@return VARIABLE REGISTER WEIGHTS void main() char main::idx Initial phi equivalence classes Complete equivalence classes REGISTER UPLIFT POTENTIAL REGISTERS Statement [0] *SCREEN = '0' [ ] ( [ ] { } ) always clobbers reg byte a Statement [1] *(SCREEN+2) = '0'+SIZEOF_CHAR [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] *(SCREEN+3) = '0'+SIZEOF_SIGNED_CHAR [ ] ( [ ] { } ) always clobbers reg byte a Statement [3] *(SCREEN+4) = '0'+SIZEOF_CHAR [ ] ( [ ] { } ) always clobbers reg byte a Statement [4] *(SCREEN+5) = '0'+SIZEOF_SIGNED_CHAR [ ] ( [ ] { } ) always clobbers reg byte a Statement [5] *(SCREEN+6) = '0'+SIZEOF_BOOL [ ] ( [ ] { } ) always clobbers reg byte a Statement [6] *(SCREEN+8) = '0'+SIZEOF_UNSIGNED_INT [ ] ( [ ] { } ) always clobbers reg byte a Statement [7] *(SCREEN+9) = '0'+SIZEOF_INT [ ] ( [ ] { } ) always clobbers reg byte a Statement [8] *(SCREEN+$a) = '0'+SIZEOF_UNSIGNED_INT [ ] ( [ ] { } ) always clobbers reg byte a Statement [9] *(SCREEN+$b) = '0'+SIZEOF_INT [ ] ( [ ] { } ) always clobbers reg byte a Statement [10] *(SCREEN+$c) = '0'+SIZEOF_UNSIGNED_INT [ ] ( [ ] { } ) always clobbers reg byte a Statement [11] *(SCREEN+$d) = '0'+SIZEOF_INT [ ] ( [ ] { } ) always clobbers reg byte a Statement [12] *(SCREEN+$f) = '0'+SIZEOF_POINTER [ ] ( [ ] { } ) always clobbers reg byte a Statement [13] *(SCREEN+$10) = '0'+SIZEOF_POINTER [ ] ( [ ] { } ) always clobbers reg byte a Statement [14] *(SCREEN+$11) = '0'+SIZEOF_POINTER [ ] ( [ ] { } ) always clobbers reg byte a Statement [15] *(SCREEN+$12) = '0'+SIZEOF_POINTER [ ] ( [ ] { } ) always clobbers reg byte a Statement [16] *(SCREEN+$14) = '0'+SIZEOF_UNSIGNED_LONG [ ] ( [ ] { } ) always clobbers reg byte a Statement [17] *(SCREEN+$15) = '0'+SIZEOF_LONG [ ] ( [ ] { } ) always clobbers reg byte a Statement [18] *(SCREEN+$16) = '0'+SIZEOF_UNSIGNED_LONG [ ] ( [ ] { } ) always clobbers reg byte a Statement [19] *(SCREEN+$17) = '0'+SIZEOF_LONG [ ] ( [ ] { } ) always clobbers reg byte a REGISTER UPLIFT SCOPES Uplift Scope [main] Uplift Scope [] Uplifting [main] best 129 combination Uplifting [] best 129 combination ASSEMBLER BEFORE OPTIMIZATION // File Comments // Tests the sizeof() operator on types // Upstart // Commodore 64 PRG executable file .file [name="sizeof-types.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_CHAR = 1 .const SIZEOF_SIGNED_CHAR = 1 .const SIZEOF_BOOL = 1 .const SIZEOF_UNSIGNED_INT = 2 .const SIZEOF_INT = 2 .const SIZEOF_POINTER = 2 .const SIZEOF_UNSIGNED_LONG = 4 .const SIZEOF_LONG = 4 .label SCREEN = $400 .segment Code // main main: { // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 lda #'0' sta SCREEN // [1] *(SCREEN+2) = '0'+SIZEOF_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_CHAR sta SCREEN+2 // [2] *(SCREEN+3) = '0'+SIZEOF_SIGNED_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_SIGNED_CHAR sta SCREEN+3 // [3] *(SCREEN+4) = '0'+SIZEOF_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_CHAR sta SCREEN+4 // [4] *(SCREEN+5) = '0'+SIZEOF_SIGNED_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_SIGNED_CHAR sta SCREEN+5 // [5] *(SCREEN+6) = '0'+SIZEOF_BOOL -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_BOOL sta SCREEN+6 // [6] *(SCREEN+8) = '0'+SIZEOF_UNSIGNED_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_INT sta SCREEN+8 // [7] *(SCREEN+9) = '0'+SIZEOF_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_INT sta SCREEN+9 // [8] *(SCREEN+$a) = '0'+SIZEOF_UNSIGNED_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_INT sta SCREEN+$a // [9] *(SCREEN+$b) = '0'+SIZEOF_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_INT sta SCREEN+$b // [10] *(SCREEN+$c) = '0'+SIZEOF_UNSIGNED_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_INT sta SCREEN+$c // [11] *(SCREEN+$d) = '0'+SIZEOF_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_INT sta SCREEN+$d // [12] *(SCREEN+$f) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_POINTER sta SCREEN+$f // [13] *(SCREEN+$10) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_POINTER sta SCREEN+$10 // [14] *(SCREEN+$11) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_POINTER sta SCREEN+$11 // [15] *(SCREEN+$12) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_POINTER sta SCREEN+$12 // [16] *(SCREEN+$14) = '0'+SIZEOF_UNSIGNED_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_LONG sta SCREEN+$14 // [17] *(SCREEN+$15) = '0'+SIZEOF_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_LONG sta SCREEN+$15 // [18] *(SCREEN+$16) = '0'+SIZEOF_UNSIGNED_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_LONG sta SCREEN+$16 // [19] *(SCREEN+$17) = '0'+SIZEOF_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_LONG sta SCREEN+$17 jmp __breturn // main::@return __breturn: // [20] return rts } // File Data ASSEMBLER OPTIMIZATIONS Removing instruction jmp __breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #'0'+SIZEOF_POINTER Removing instruction lda #'0'+SIZEOF_POINTER Removing instruction lda #'0'+SIZEOF_POINTER Succesful ASM optimization Pass5UnnecesaryLoadElimination Removing instruction __breturn: Succesful ASM optimization Pass5UnusedLabelElimination FINAL SYMBOL TABLE __constant char * const SCREEN = (char *) 1024 __constant char SIZEOF_BOOL = 1 __constant char SIZEOF_CHAR = 1 __constant char SIZEOF_INT = 2 __constant char SIZEOF_LONG = 4 __constant char SIZEOF_POINTER = 2 __constant char SIZEOF_SIGNED_CHAR = 1 __constant char SIZEOF_UNSIGNED_INT = 2 __constant char SIZEOF_UNSIGNED_LONG = 4 void main() char main::idx FINAL ASSEMBLER Score: 120 // File Comments // Tests the sizeof() operator on types // Upstart // Commodore 64 PRG executable file .file [name="sizeof-types.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_CHAR = 1 .const SIZEOF_SIGNED_CHAR = 1 .const SIZEOF_BOOL = 1 .const SIZEOF_UNSIGNED_INT = 2 .const SIZEOF_INT = 2 .const SIZEOF_POINTER = 2 .const SIZEOF_UNSIGNED_LONG = 4 .const SIZEOF_LONG = 4 .label SCREEN = $400 .segment Code // main main: { // SCREEN[idx++] = '0'+sizeof(void) // [0] *SCREEN = '0' -- _deref_pbuc1=vbuc2 lda #'0' sta SCREEN // SCREEN[idx++] = '0'+sizeof(byte) // [1] *(SCREEN+2) = '0'+SIZEOF_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_CHAR sta SCREEN+2 // SCREEN[idx++] = '0'+sizeof(signed byte) // [2] *(SCREEN+3) = '0'+SIZEOF_SIGNED_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_SIGNED_CHAR sta SCREEN+3 // SCREEN[idx++] = '0'+sizeof(unsigned char) // [3] *(SCREEN+4) = '0'+SIZEOF_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_CHAR sta SCREEN+4 // SCREEN[idx++] = '0'+sizeof(signed char) // [4] *(SCREEN+5) = '0'+SIZEOF_SIGNED_CHAR -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_SIGNED_CHAR sta SCREEN+5 // SCREEN[idx++] = '0'+sizeof(bool) // [5] *(SCREEN+6) = '0'+SIZEOF_BOOL -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_BOOL sta SCREEN+6 // SCREEN[idx++] = '0'+sizeof(word) // [6] *(SCREEN+8) = '0'+SIZEOF_UNSIGNED_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_INT sta SCREEN+8 // SCREEN[idx++] = '0'+sizeof(signed word) // [7] *(SCREEN+9) = '0'+SIZEOF_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_INT sta SCREEN+9 // SCREEN[idx++] = '0'+sizeof(unsigned int) // [8] *(SCREEN+$a) = '0'+SIZEOF_UNSIGNED_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_INT sta SCREEN+$a // SCREEN[idx++] = '0'+sizeof(signed int) // [9] *(SCREEN+$b) = '0'+SIZEOF_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_INT sta SCREEN+$b // SCREEN[idx++] = '0'+sizeof(unsigned short) // [10] *(SCREEN+$c) = '0'+SIZEOF_UNSIGNED_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_INT sta SCREEN+$c // SCREEN[idx++] = '0'+sizeof(signed short) // [11] *(SCREEN+$d) = '0'+SIZEOF_INT -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_INT sta SCREEN+$d // SCREEN[idx++] = '0'+sizeof(byte*) // [12] *(SCREEN+$f) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_POINTER sta SCREEN+$f // SCREEN[idx++] = '0'+sizeof(word*) // [13] *(SCREEN+$10) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 sta SCREEN+$10 // SCREEN[idx++] = '0'+sizeof(int**) // [14] *(SCREEN+$11) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 sta SCREEN+$11 // SCREEN[idx++] = '0'+sizeof(int***) // [15] *(SCREEN+$12) = '0'+SIZEOF_POINTER -- _deref_pbuc1=vbuc2 sta SCREEN+$12 // SCREEN[idx++] = '0'+sizeof(dword) // [16] *(SCREEN+$14) = '0'+SIZEOF_UNSIGNED_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_LONG sta SCREEN+$14 // SCREEN[idx++] = '0'+sizeof(signed dword) // [17] *(SCREEN+$15) = '0'+SIZEOF_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_LONG sta SCREEN+$15 // SCREEN[idx++] = '0'+sizeof(unsigned long) // [18] *(SCREEN+$16) = '0'+SIZEOF_UNSIGNED_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_UNSIGNED_LONG sta SCREEN+$16 // SCREEN[idx++] = '0'+sizeof(signed long) // [19] *(SCREEN+$17) = '0'+SIZEOF_LONG -- _deref_pbuc1=vbuc2 lda #'0'+SIZEOF_LONG sta SCREEN+$17 // main::@return // } // [20] return rts } // File Data