kickc/src/test/ref/sizeof-types.log

625 lines
25 KiB
Plaintext

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