mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-04-07 06:37:31 +00:00
Working on classic structs. #197
This commit is contained in:
parent
47d6ea3f9a
commit
5fec69e3f1
201
src/main/fragment/cache/fragment-cache-mos6502x.asm
vendored
201
src/main/fragment/cache/fragment-cache-mos6502x.asm
vendored
@ -3161,6 +3161,30 @@ iny
|
||||
inx
|
||||
cpx #{c3}
|
||||
bne !-
|
||||
//FRAGMENT vwuz1=_deref_pwuc1
|
||||
lda {c1}
|
||||
sta {z1}
|
||||
lda {c1}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuz1=_deref_pbuz2
|
||||
ldy #0
|
||||
lda ({z2}),y
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=_deref_pbuz1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
//FRAGMENT vbuxx=_deref_pbuz1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
tax
|
||||
//FRAGMENT vbuyy=_deref_pbuz1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
tay
|
||||
//FRAGMENT pbuz1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
tay
|
||||
sta ({z1}),y
|
||||
//FRAGMENT _deref_pbuc1=_byte_pprz1
|
||||
lda {z1}
|
||||
sta {c1}
|
||||
@ -3190,21 +3214,6 @@ lda {z1}
|
||||
sta {c1}
|
||||
lda {z1}+1
|
||||
sta {c1}+1
|
||||
//FRAGMENT vbuz1=_deref_pbuz2
|
||||
ldy #0
|
||||
lda ({z2}),y
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=_deref_pbuz1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
//FRAGMENT vbuxx=_deref_pbuz1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
tax
|
||||
//FRAGMENT vbuyy=_deref_pbuz1
|
||||
ldy #0
|
||||
lda ({z1}),y
|
||||
tay
|
||||
//FRAGMENT vbuz1=vbuz2_plus_vbuz2
|
||||
lda {z2}
|
||||
asl
|
||||
@ -3985,10 +3994,6 @@ sta ({z1}),y
|
||||
tay
|
||||
txa
|
||||
sta ({z1}),y
|
||||
//FRAGMENT pbuz1_derefidx_vbuxx=vbuxx
|
||||
txa
|
||||
tay
|
||||
sta ({z1}),y
|
||||
//FRAGMENT pbuz1_derefidx_vbuaa=vbuyy
|
||||
sta $ff
|
||||
tya
|
||||
@ -8647,11 +8652,6 @@ bcs {la1}
|
||||
cpx #{c1}
|
||||
bcc {la1}
|
||||
beq {la1}
|
||||
//FRAGMENT vwuz1=_deref_pwuc1
|
||||
lda {c1}
|
||||
sta {z1}
|
||||
lda {c1}+1
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuc1_derefidx_vbuz1_eq_vbuz2_then_la1
|
||||
ldy {z1}
|
||||
lda {c1},y
|
||||
@ -11875,6 +11875,28 @@ iny
|
||||
lda #{c1}
|
||||
sty {z1}+1
|
||||
sta {z1}
|
||||
//FRAGMENT vduz1=vduc1_minus__deref_pduc2
|
||||
lda #<{c1}
|
||||
sec
|
||||
sbc {c2}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
sbc {c2}+1
|
||||
sta {z1}+1
|
||||
lda #<{c1}>>$10
|
||||
sbc {c2}+2
|
||||
sta {z1}+2
|
||||
lda #>{c1}>>$10
|
||||
sbc {c2}+3
|
||||
sta {z1}+3
|
||||
//FRAGMENT pbuz1=pbuz2_plus_1
|
||||
clc
|
||||
lda {z2}
|
||||
adc #1
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuz1=_deref_pbuc1_ror_1
|
||||
lda {c1}
|
||||
lsr
|
||||
@ -12312,14 +12334,6 @@ sta {z1}
|
||||
//FRAGMENT vbsz1_lt_0_then_la1
|
||||
lda {z1}
|
||||
bmi {la1}
|
||||
//FRAGMENT pbuz1=pbuz2_plus_1
|
||||
clc
|
||||
lda {z2}
|
||||
adc #1
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbsaa=pbsc1_derefidx_vbuz1
|
||||
ldy {z1}
|
||||
lda {c1},y
|
||||
@ -14943,6 +14957,20 @@ sta ($fe),y
|
||||
iny
|
||||
lda ({z1}),y
|
||||
sta ($fe),y
|
||||
//FRAGMENT vduz1=vduz2_minus_vduc1
|
||||
lda {z2}
|
||||
sec
|
||||
sbc #<{c1}
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
sbc #>{c1}
|
||||
sta {z1}+1
|
||||
lda {z2}+2
|
||||
sbc #<{c1}>>$10
|
||||
sta {z1}+2
|
||||
lda {z2}+3
|
||||
sbc #>{c1}>>$10
|
||||
sta {z1}+3
|
||||
//FRAGMENT vbsz1_le_vbsc1_then_la1
|
||||
lda #{c1}
|
||||
sec
|
||||
@ -14993,6 +15021,37 @@ sta {z1}
|
||||
lda {z2}+1
|
||||
sbc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuz2
|
||||
lda {z2}
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuaa
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuyy
|
||||
tya
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT pbuz1=pbuz1_plus_vbuz2
|
||||
lda {z2}
|
||||
clc
|
||||
@ -15206,81 +15265,3 @@ sta {c1},x
|
||||
lda #{c2}
|
||||
ora {c1},y
|
||||
sta {c1},y
|
||||
//FRAGMENT vduz1=vduc1_minus__deref_pduc2
|
||||
lda #<{c1}
|
||||
sec
|
||||
sbc {c2}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
sbc {c2}+1
|
||||
sta {z1}+1
|
||||
lda #<{c1}>>$10
|
||||
sbc {c2}+2
|
||||
sta {z1}+2
|
||||
lda #>{c1}>>$10
|
||||
sbc {c2}+3
|
||||
sta {z1}+3
|
||||
//FRAGMENT vduz1=vduz2_minus_vduc1
|
||||
lda {z2}
|
||||
sec
|
||||
sbc #<{c1}
|
||||
sta {z1}
|
||||
lda {z2}+1
|
||||
sbc #>{c1}
|
||||
sta {z1}+1
|
||||
lda {z2}+2
|
||||
sbc #<{c1}>>$10
|
||||
sta {z1}+2
|
||||
lda {z2}+3
|
||||
sbc #>{c1}>>$10
|
||||
sta {z1}+3
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuz2
|
||||
lda {z2}
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuaa
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuxx
|
||||
txa
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vwuz1=vwuc1_plus_vbuyy
|
||||
tya
|
||||
clc
|
||||
adc #<{c1}
|
||||
sta {z1}
|
||||
lda #>{c1}
|
||||
adc #0
|
||||
sta {z1}+1
|
||||
//FRAGMENT vbuz1=_deref_pbuc1_plus__deref_pbuc2
|
||||
lda {c1}
|
||||
clc
|
||||
adc {c2}
|
||||
sta {z1}
|
||||
//FRAGMENT vbuaa=_deref_pbuc1_plus__deref_pbuc2
|
||||
lda {c1}
|
||||
clc
|
||||
adc {c2}
|
||||
//FRAGMENT vbuxx=_deref_pbuc1_plus__deref_pbuc2
|
||||
lda {c1}
|
||||
clc
|
||||
adc {c2}
|
||||
tax
|
||||
//FRAGMENT vbuyy=_deref_pbuc1_plus__deref_pbuc2
|
||||
lda {c1}
|
||||
clc
|
||||
adc {c2}
|
||||
tay
|
||||
|
@ -248,11 +248,9 @@ public class Compiler {
|
||||
|
||||
new PassNAssertTypeMatch(program).check();
|
||||
|
||||
if(!program.getTargetPlatform().getVariableBuilderConfig().isStructModelClassic()) {
|
||||
new Pass1UnwindStructPrepare(program).execute();
|
||||
new Pass1UnwindStructVariables(program).execute();
|
||||
new Pass1UnwindStructValues(program).execute();
|
||||
}
|
||||
new Pass1UnwindStructPrepare(program).execute();
|
||||
new Pass1UnwindStructVariables(program).execute();
|
||||
new Pass1UnwindStructValues(program).execute();
|
||||
|
||||
if(getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("CONTROL FLOW GRAPH AFTER UNWIND");
|
||||
@ -314,9 +312,7 @@ public class Compiler {
|
||||
new Pass1CallPhiReturn(program).execute();
|
||||
new PassNUnwindLValueLists(program).execute();
|
||||
|
||||
if(!program.getTargetPlatform().getVariableBuilderConfig().isStructModelClassic()) {
|
||||
new PassNStructUnwoundPlaceholderRemoval(program).execute();
|
||||
}
|
||||
new PassNStructUnwoundPlaceholderRemoval(program).execute();
|
||||
|
||||
getLog().append("\nCONTROL FLOW GRAPH SSA");
|
||||
getLog().append(program.getGraph().toString(program));
|
||||
@ -552,10 +548,8 @@ public class Compiler {
|
||||
|
||||
private void pass3Analysis() {
|
||||
|
||||
if(program.getTargetPlatform().getVariableBuilderConfig().isStructModelClassic()) {
|
||||
new Pass1UnwindStructValues(program).execute();
|
||||
new PassNStructUnwoundPlaceholderRemoval(program).execute();
|
||||
}
|
||||
new Pass1UnwindStructValues(program).execute();
|
||||
new PassNStructUnwoundPlaceholderRemoval(program).execute();
|
||||
|
||||
if(getLog().isVerboseSizeInfo()) {
|
||||
getLog().append(program.getSizeInfo());
|
||||
|
@ -281,6 +281,8 @@ public class Pass1UnwindStructValues extends Pass1Base {
|
||||
public static boolean copyValues(ValueSource lValueSource, ValueSource rValueSource, List<RValue> lValueUnwoundList, boolean initialAssignment, Statement currentStmt, ControlFlowBlock currentBlock, ListIterator<Statement> stmtIt, Program program) {
|
||||
if(lValueSource == null || rValueSource == null)
|
||||
return false;
|
||||
if(lValueSource.equals(rValueSource))
|
||||
return true;
|
||||
if(lValueSource.isSimple() && rValueSource.isSimple()) {
|
||||
stmtIt.previous();
|
||||
LValue lValueRef = (LValue) lValueSource.getSimpleValue(program.getScope());
|
||||
|
@ -17,6 +17,7 @@ import dk.camelot64.kickc.model.values.*;
|
||||
import dk.camelot64.kickc.passes.utils.SizeOfConstants;
|
||||
|
||||
import java.util.ListIterator;
|
||||
import java.util.Objects;
|
||||
|
||||
/** Value Source for a variable */
|
||||
public class ValueSourceVariable extends ValueSourceBase {
|
||||
@ -107,4 +108,16 @@ public class ValueSourceVariable extends ValueSourceBase {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if(this == o) return true;
|
||||
if(o == null || getClass() != o.getClass()) return false;
|
||||
ValueSourceVariable that = (ValueSourceVariable) o;
|
||||
return variable.equals(that.variable);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(variable);
|
||||
}
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
// Test intermediate vars
|
||||
|
||||
// #pragma struct_model(classic)
|
||||
#pragma struct_model(classic)
|
||||
|
||||
char * const SCREEN = (char*)0x0400;
|
||||
char idx = 0;
|
||||
|
@ -7,34 +7,64 @@
|
||||
.segmentdef Data [startAfter="Code"]
|
||||
.segment Basic
|
||||
:BasicUpstart(main)
|
||||
.const SIZEOF_STRUCT_DATA = 2
|
||||
.const OFFSET_STRUCT_DATA_D = 1
|
||||
// #pragma struct_model(classic)
|
||||
.label SCREEN = $400
|
||||
.segment Code
|
||||
main: {
|
||||
.label x = 2
|
||||
.label __0 = 4
|
||||
.label y = 6
|
||||
.label __1 = 8
|
||||
// sum(1,2)
|
||||
ldx #2
|
||||
lda #1
|
||||
jsr sum
|
||||
// sum(1,2)
|
||||
txa
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda sum.return-1,y
|
||||
sta __0-1,y
|
||||
dey
|
||||
bne !-
|
||||
// struct Data x = sum(1,2)
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda __0-1,y
|
||||
sta x-1,y
|
||||
dey
|
||||
bne !-
|
||||
// SCREEN[idx++] = x.c
|
||||
lda.z x
|
||||
sta SCREEN
|
||||
// sum(3, 4)
|
||||
ldx #4
|
||||
lda #3
|
||||
jsr sum
|
||||
// sum(3, 4)
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda sum.return-1,y
|
||||
sta __1-1,y
|
||||
dey
|
||||
bne !-
|
||||
// struct Data y = sum(3, 4)
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda __1-1,y
|
||||
sta y-1,y
|
||||
dey
|
||||
bne !-
|
||||
// SCREEN[idx++] = y.d
|
||||
lda y+OFFSET_STRUCT_DATA_D
|
||||
sta SCREEN+1
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// sum(byte register(A) a, byte register(X) b)
|
||||
sum: {
|
||||
.label d = 2
|
||||
.label return = $a
|
||||
.label d = $c
|
||||
// a+b
|
||||
stx.z $ff
|
||||
clc
|
||||
@ -43,8 +73,12 @@ sum: {
|
||||
sta.z d
|
||||
stx d+OFFSET_STRUCT_DATA_D
|
||||
// return d;
|
||||
tax
|
||||
lda d+OFFSET_STRUCT_DATA_D
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda d-1,y
|
||||
sta return-1,y
|
||||
dey
|
||||
bne !-
|
||||
// }
|
||||
rts
|
||||
}
|
||||
|
@ -3,17 +3,17 @@ void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
[1] call sum
|
||||
[2] sum::return_c#0 = sum::return_c#2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[3] main::x_c#0 = sum::return_c#0
|
||||
[4] *SCREEN = main::x_c#0
|
||||
[2] *(&main::$0) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[3] *(&main::x) = memcpy(*(&main::$0), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[4] *SCREEN = *((byte*)&main::x)
|
||||
[5] call sum
|
||||
[6] sum::return_d#1 = sum::return_d#2
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[7] main::y_d#0 = sum::return_d#1
|
||||
[8] *(SCREEN+1) = main::y_d#0
|
||||
[6] *(&main::$1) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[7] *(&main::y) = memcpy(*(&main::$1), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[8] *(SCREEN+1) = *((byte*)&main::y+OFFSET_STRUCT_DATA_D)
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[9] return
|
||||
@ -26,9 +26,8 @@ sum: scope:[sum] from main main::@1
|
||||
[11] sum::$0 = sum::a#2 + sum::b#2
|
||||
[12] *((byte*)&sum::d) = sum::$0
|
||||
[13] *((byte*)&sum::d+OFFSET_STRUCT_DATA_D) = sum::b#2
|
||||
[14] sum::return_c#2 = *((byte*)&sum::d)
|
||||
[15] sum::return_d#2 = *((byte*)&sum::d+OFFSET_STRUCT_DATA_D)
|
||||
[14] *(&sum::return) = memcpy(*(&sum::d), struct Data, SIZEOF_STRUCT_DATA)
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
[16] return
|
||||
[15] return
|
||||
to:@return
|
||||
|
@ -1,11 +1,9 @@
|
||||
Inlined call call __init
|
||||
Eliminating unused variable with no statement main::$0
|
||||
Eliminating unused variable with no statement main::$1
|
||||
Unwinding list assignment { main::$0_c, main::$0_d } = { sum::return_c, sum::return_d }
|
||||
Unwinding list assignment { main::$1_c, main::$1_d } = { sum::return_c, sum::return_d }
|
||||
Unwinding list assignment { sum::return_c#0, sum::return_d#0 } = { sum::return_c#3, sum::return_d#3 }
|
||||
Unwinding list assignment { sum::return_c#1, sum::return_d#1 } = { sum::return_c#3, sum::return_d#3 }
|
||||
Removing C-classic struct-unwound assignment main::x = struct-unwound {*(&main::x)}
|
||||
Removing C-classic struct-unwound assignment main::y = struct-unwound {*(&main::y)}
|
||||
Removing C-classic struct-unwound assignment sum::d = struct-unwound {*((byte*)&sum::d+OFFSET_STRUCT_DATA_C), *((byte*)&sum::d+OFFSET_STRUCT_DATA_D)}
|
||||
Removing C-classic struct-unwound assignment sum::return = struct-unwound {*(&sum::return)}
|
||||
Removing C-classic struct-unwound assignment sum::return = struct-unwound {}
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
|
||||
@ -15,32 +13,24 @@ main: scope:[main] from __start::@1
|
||||
sum::a#0 = 1
|
||||
sum::b#0 = 2
|
||||
call sum
|
||||
sum::return_c#0 = sum::return_c#3
|
||||
sum::return_d#0 = sum::return_d#3
|
||||
sum::return = sum::return
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
idx#6 = phi( main/idx#11 )
|
||||
sum::return_d#4 = phi( main/sum::return_d#0 )
|
||||
sum::return_c#4 = phi( main/sum::return_c#0 )
|
||||
main::$0_c = sum::return_c#4
|
||||
main::$0_d = sum::return_d#4
|
||||
main::x_c#0 = main::$0_c
|
||||
SCREEN[idx#6] = main::x_c#0
|
||||
main::$0 = sum::return
|
||||
*(&main::x) = memcpy(*(&main::$0), struct Data, SIZEOF_STRUCT_DATA)
|
||||
SCREEN[idx#6] = *((byte*)&main::x+OFFSET_STRUCT_DATA_C)
|
||||
idx#0 = ++ idx#6
|
||||
sum::a#1 = 3
|
||||
sum::b#1 = 4
|
||||
call sum
|
||||
sum::return_c#1 = sum::return_c#3
|
||||
sum::return_d#1 = sum::return_d#3
|
||||
sum::return = sum::return
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
idx#7 = phi( main::@1/idx#0 )
|
||||
sum::return_d#5 = phi( main::@1/sum::return_d#1 )
|
||||
sum::return_c#5 = phi( main::@1/sum::return_c#1 )
|
||||
main::$1_c = sum::return_c#5
|
||||
main::$1_d = sum::return_d#5
|
||||
main::y_d#0 = main::$1_d
|
||||
SCREEN[idx#7] = main::y_d#0
|
||||
main::$1 = sum::return
|
||||
*(&main::y) = memcpy(*(&main::$1), struct Data, SIZEOF_STRUCT_DATA)
|
||||
SCREEN[idx#7] = *((byte*)&main::y+OFFSET_STRUCT_DATA_D)
|
||||
idx#1 = ++ idx#7
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
@ -56,16 +46,9 @@ sum: scope:[sum] from main main::@1
|
||||
sum::$0 = sum::a#2 + sum::b#2
|
||||
*((byte*)&sum::d+OFFSET_STRUCT_DATA_C) = sum::$0
|
||||
*((byte*)&sum::d+OFFSET_STRUCT_DATA_D) = sum::b#2
|
||||
sum::return_c#2 = *((byte*)&sum::d+OFFSET_STRUCT_DATA_C)
|
||||
sum::return_d#2 = *((byte*)&sum::d+OFFSET_STRUCT_DATA_D)
|
||||
sum::return#0 = struct-unwound {sum::return_c#2, sum::return_d#2}
|
||||
*(&sum::return) = memcpy(*(&sum::d), struct Data, SIZEOF_STRUCT_DATA)
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
sum::return_d#6 = phi( sum/sum::return_d#2 )
|
||||
sum::return_c#6 = phi( sum/sum::return_c#2 )
|
||||
sum::return_c#3 = sum::return_c#6
|
||||
sum::return_d#3 = sum::return_d#6
|
||||
sum::return#1 = struct-unwound {sum::return_c#3, sum::return_d#3}
|
||||
return
|
||||
to:@return
|
||||
|
||||
@ -93,6 +76,7 @@ SYMBOL TABLE SSA
|
||||
constant byte OFFSET_STRUCT_DATA_C = 0
|
||||
constant byte OFFSET_STRUCT_DATA_D = 1
|
||||
constant byte* const SCREEN = (byte*)$400
|
||||
constant byte SIZEOF_STRUCT_DATA = 2
|
||||
void __start()
|
||||
byte idx
|
||||
byte idx#0
|
||||
@ -109,14 +93,10 @@ byte idx#7
|
||||
byte idx#8
|
||||
byte idx#9
|
||||
void main()
|
||||
byte~ main::$0_c
|
||||
byte~ main::$0_d
|
||||
byte~ main::$1_c
|
||||
byte~ main::$1_d
|
||||
byte main::x_c
|
||||
byte main::x_c#0
|
||||
byte main::y_d
|
||||
byte main::y_d#0
|
||||
struct Data~ main::$0
|
||||
struct Data~ main::$1
|
||||
struct Data main::x loadstore
|
||||
struct Data main::y loadstore
|
||||
struct Data sum(byte sum::a , byte sum::b)
|
||||
byte~ sum::$0
|
||||
byte sum::a
|
||||
@ -128,25 +108,7 @@ byte sum::b#0
|
||||
byte sum::b#1
|
||||
byte sum::b#2
|
||||
struct Data sum::d loadstore
|
||||
struct Data sum::return
|
||||
struct Data sum::return#0
|
||||
struct Data sum::return#1
|
||||
byte sum::return_c
|
||||
byte sum::return_c#0
|
||||
byte sum::return_c#1
|
||||
byte sum::return_c#2
|
||||
byte sum::return_c#3
|
||||
byte sum::return_c#4
|
||||
byte sum::return_c#5
|
||||
byte sum::return_c#6
|
||||
byte sum::return_d
|
||||
byte sum::return_d#0
|
||||
byte sum::return_d#1
|
||||
byte sum::return_d#2
|
||||
byte sum::return_d#3
|
||||
byte sum::return_d#4
|
||||
byte sum::return_d#5
|
||||
byte sum::return_d#6
|
||||
struct Data sum::return loadstore
|
||||
|
||||
Adding number conversion cast (unumber) 1 in sum::a#0 = 1
|
||||
Adding number conversion cast (unumber) 2 in sum::b#0 = 2
|
||||
@ -169,17 +131,9 @@ Finalized unsigned number type (byte) 2
|
||||
Finalized unsigned number type (byte) 3
|
||||
Finalized unsigned number type (byte) 4
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Alias sum::return_c#0 = sum::return_c#4
|
||||
Alias sum::return_d#0 = sum::return_d#4
|
||||
Alias idx#11 = idx#6
|
||||
Alias main::x_c#0 = main::$0_c
|
||||
Alias sum::return_c#1 = sum::return_c#5
|
||||
Alias sum::return_d#1 = sum::return_d#5
|
||||
Alias idx#0 = idx#7
|
||||
Alias main::y_d#0 = main::$1_d
|
||||
Alias idx#1 = idx#8 idx#2
|
||||
Alias sum::return_c#2 = sum::return_c#6 sum::return_c#3
|
||||
Alias sum::return_d#2 = sum::return_d#6 sum::return_d#3
|
||||
Alias idx#12 = idx#3
|
||||
Alias idx#10 = idx#4 idx#9 idx#5
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
@ -192,20 +146,13 @@ Constant sum::a#1 = 3
|
||||
Constant sum::b#1 = 4
|
||||
Constant idx#12 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Simplifying expression containing zero SCREEN in [8] SCREEN[idx#12] = main::x_c#0
|
||||
Simplifying expression containing zero (byte*)&sum::d in [22] *((byte*)&sum::d+OFFSET_STRUCT_DATA_C) = sum::$0
|
||||
Simplifying expression containing zero (byte*)&sum::d in [24] sum::return_c#2 = *((byte*)&sum::d+OFFSET_STRUCT_DATA_C)
|
||||
Simplifying expression containing zero (byte*)&main::x in [7] SCREEN[idx#12] = *((byte*)&main::x+OFFSET_STRUCT_DATA_C)
|
||||
Simplifying expression containing zero SCREEN in [7] SCREEN[idx#12] = *((byte*)&main::x)
|
||||
Simplifying expression containing zero (byte*)&sum::d in [20] *((byte*)&sum::d+OFFSET_STRUCT_DATA_C) = sum::$0
|
||||
Successful SSA optimization PassNSimplifyExpressionWithZero
|
||||
Eliminating unused variable main::$0_d and assignment [4] main::$0_d = sum::return_d#0
|
||||
Eliminating unused variable main::$1_c and assignment [10] main::$1_c = sum::return_c#1
|
||||
Eliminating unused variable idx#1 and assignment [13] idx#1 = ++ idx#0
|
||||
Eliminating unused variable sum::return#0 and assignment [21] sum::return#0 = struct-unwound {sum::return_c#2, sum::return_d#2}
|
||||
Eliminating unused variable sum::return#1 and assignment [22] sum::return#1 = struct-unwound {sum::return_c#2, sum::return_d#2}
|
||||
Eliminating unused variable idx#1 and assignment [11] idx#1 = ++ idx#0
|
||||
Eliminating unused constant OFFSET_STRUCT_DATA_C
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Eliminating unused variable sum::return_d#0 and assignment [2] sum::return_d#0 = sum::return_d#2
|
||||
Eliminating unused variable sum::return_c#1 and assignment [7] sum::return_c#1 = sum::return_c#2
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused procedure __start
|
||||
Removing unused procedure block __start
|
||||
Removing unused procedure block __start::__init1
|
||||
@ -213,7 +160,7 @@ Removing unused procedure block __start::@1
|
||||
Removing unused procedure block __start::@2
|
||||
Removing unused procedure block __start::@return
|
||||
Successful SSA optimization PassNEliminateEmptyStart
|
||||
Constant right-side identified [4] idx#0 = ++ idx#12
|
||||
Constant right-side identified [5] idx#0 = ++ idx#12
|
||||
Successful SSA optimization Pass2ConstantRValueConsolidation
|
||||
Constant idx#0 = ++idx#12
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
@ -234,6 +181,10 @@ Consolidated array index constant in *(SCREEN+++0)
|
||||
Successful SSA optimization Pass2ConstantAdditionElimination
|
||||
Simplifying constant integer increment ++0
|
||||
Successful SSA optimization Pass2ConstantSimplification
|
||||
Removing C-classic struct-unwound assignment sum::return = struct-unwound {}
|
||||
Removing C-classic struct-unwound assignment main::$0 = struct-unwound {*(&main::$0)}
|
||||
Removing C-classic struct-unwound assignment sum::return = struct-unwound {}
|
||||
Removing C-classic struct-unwound assignment main::$1 = struct-unwound {*(&main::$1)}
|
||||
Adding NOP phi() at start of main
|
||||
CALL GRAPH
|
||||
Calls in [main] to sum:1 sum:5
|
||||
@ -248,17 +199,17 @@ void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
[1] call sum
|
||||
[2] sum::return_c#0 = sum::return_c#2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[3] main::x_c#0 = sum::return_c#0
|
||||
[4] *SCREEN = main::x_c#0
|
||||
[2] *(&main::$0) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[3] *(&main::x) = memcpy(*(&main::$0), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[4] *SCREEN = *((byte*)&main::x)
|
||||
[5] call sum
|
||||
[6] sum::return_d#1 = sum::return_d#2
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[7] main::y_d#0 = sum::return_d#1
|
||||
[8] *(SCREEN+1) = main::y_d#0
|
||||
[6] *(&main::$1) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[7] *(&main::y) = memcpy(*(&main::$1), struct Data, SIZEOF_STRUCT_DATA)
|
||||
[8] *(SCREEN+1) = *((byte*)&main::y+OFFSET_STRUCT_DATA_D)
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
[9] return
|
||||
@ -271,21 +222,20 @@ sum: scope:[sum] from main main::@1
|
||||
[11] sum::$0 = sum::a#2 + sum::b#2
|
||||
[12] *((byte*)&sum::d) = sum::$0
|
||||
[13] *((byte*)&sum::d+OFFSET_STRUCT_DATA_D) = sum::b#2
|
||||
[14] sum::return_c#2 = *((byte*)&sum::d)
|
||||
[15] sum::return_d#2 = *((byte*)&sum::d+OFFSET_STRUCT_DATA_D)
|
||||
[14] *(&sum::return) = memcpy(*(&sum::d), struct Data, SIZEOF_STRUCT_DATA)
|
||||
to:sum::@return
|
||||
sum::@return: scope:[sum] from sum
|
||||
[16] return
|
||||
[15] return
|
||||
to:@return
|
||||
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
byte idx
|
||||
void main()
|
||||
byte main::x_c
|
||||
byte main::x_c#0 4.0
|
||||
byte main::y_d
|
||||
byte main::y_d#0 4.0
|
||||
struct Data~ main::$0
|
||||
struct Data~ main::$1
|
||||
struct Data main::x loadstore
|
||||
struct Data main::y loadstore
|
||||
struct Data sum(byte sum::a , byte sum::b)
|
||||
byte~ sum::$0 22.0
|
||||
byte sum::a
|
||||
@ -293,79 +243,81 @@ byte sum::a#2 11.0
|
||||
byte sum::b
|
||||
byte sum::b#2 7.333333333333333
|
||||
struct Data sum::d loadstore
|
||||
struct Data sum::return
|
||||
byte sum::return_c
|
||||
byte sum::return_c#0 4.0
|
||||
byte sum::return_c#2 3.25
|
||||
byte sum::return_d
|
||||
byte sum::return_d#1 4.0
|
||||
byte sum::return_d#2 4.333333333333333
|
||||
struct Data sum::return loadstore
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ sum::a#2 ]
|
||||
[ sum::b#2 ]
|
||||
Added variable sum::return_c#0 to live range equivalence class [ sum::return_c#0 ]
|
||||
Added variable main::x_c#0 to live range equivalence class [ main::x_c#0 ]
|
||||
Added variable sum::return_d#1 to live range equivalence class [ sum::return_d#1 ]
|
||||
Added variable main::y_d#0 to live range equivalence class [ main::y_d#0 ]
|
||||
Added variable sum::$0 to live range equivalence class [ sum::$0 ]
|
||||
Added variable sum::return_c#2 to live range equivalence class [ sum::return_c#2 ]
|
||||
Added variable sum::return_d#2 to live range equivalence class [ sum::return_d#2 ]
|
||||
Added variable main::x to live range equivalence class [ main::x ]
|
||||
Added variable main::$0 to live range equivalence class [ main::$0 ]
|
||||
Added variable main::y to live range equivalence class [ main::y ]
|
||||
Added variable main::$1 to live range equivalence class [ main::$1 ]
|
||||
Added variable sum::return to live range equivalence class [ sum::return ]
|
||||
Added variable sum::d to live range equivalence class [ sum::d ]
|
||||
Complete equivalence classes
|
||||
[ sum::a#2 ]
|
||||
[ sum::b#2 ]
|
||||
[ sum::return_c#0 ]
|
||||
[ main::x_c#0 ]
|
||||
[ sum::return_d#1 ]
|
||||
[ main::y_d#0 ]
|
||||
[ sum::$0 ]
|
||||
[ sum::return_c#2 ]
|
||||
[ sum::return_d#2 ]
|
||||
[ main::x ]
|
||||
[ main::$0 ]
|
||||
[ main::y ]
|
||||
[ main::$1 ]
|
||||
[ sum::return ]
|
||||
[ sum::d ]
|
||||
Allocated zp[1]:2 [ sum::a#2 ]
|
||||
Allocated zp[1]:3 [ sum::b#2 ]
|
||||
Allocated zp[1]:4 [ sum::return_c#0 ]
|
||||
Allocated zp[1]:5 [ main::x_c#0 ]
|
||||
Allocated zp[1]:6 [ sum::return_d#1 ]
|
||||
Allocated zp[1]:7 [ main::y_d#0 ]
|
||||
Allocated zp[1]:8 [ sum::$0 ]
|
||||
Allocated zp[1]:9 [ sum::return_c#2 ]
|
||||
Allocated zp[1]:10 [ sum::return_d#2 ]
|
||||
Allocated zp[2]:11 [ sum::d ]
|
||||
Allocated zp[1]:4 [ sum::$0 ]
|
||||
Allocated zp[2]:5 [ main::x ]
|
||||
Allocated zp[2]:7 [ main::$0 ]
|
||||
Allocated zp[2]:9 [ main::y ]
|
||||
Allocated zp[2]:11 [ main::$1 ]
|
||||
Allocated zp[2]:13 [ sum::return ]
|
||||
Allocated zp[2]:15 [ sum::d ]
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [11] sum::$0 = sum::a#2 + sum::b#2 [ sum::b#2 sum::$0 sum::d ] ( sum:1 [ sum::b#2 sum::$0 sum::d ] { { sum::return_c#0 = sum::return_c#2 } } sum:5 [ sum::b#2 sum::$0 sum::d ] { { sum::return_d#1 = sum::return_d#2 } } ) always clobbers reg byte a
|
||||
Statement [2] *(&main::$0) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) [ main::$0 sum::return main::x main::$1 main::y sum::d ] ( [ main::$0 sum::return main::x main::$1 main::y sum::d ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [3] *(&main::x) = memcpy(*(&main::$0), struct Data, SIZEOF_STRUCT_DATA) [ sum::return main::x main::$1 main::y sum::d ] ( [ sum::return main::x main::$1 main::y sum::d ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [4] *SCREEN = *((byte*)&main::x) [ sum::return main::$1 main::y sum::d ] ( [ sum::return main::$1 main::y sum::d ] { } ) always clobbers reg byte a
|
||||
Statement [6] *(&main::$1) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) [ main::$1 main::y ] ( [ main::$1 main::y ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [7] *(&main::y) = memcpy(*(&main::$1), struct Data, SIZEOF_STRUCT_DATA) [ main::y ] ( [ main::y ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [8] *(SCREEN+1) = *((byte*)&main::y+OFFSET_STRUCT_DATA_D) [ ] ( [ ] { } ) always clobbers reg byte a
|
||||
Statement [11] sum::$0 = sum::a#2 + sum::b#2 [ sum::return sum::b#2 sum::$0 sum::d ] ( sum:1 [ main::$0 main::x main::$1 main::y sum::return sum::b#2 sum::$0 sum::d ] { } sum:5 [ main::$1 main::y sum::return sum::b#2 sum::$0 sum::d ] { } ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:3 [ sum::b#2 ]
|
||||
Statement [11] sum::$0 = sum::a#2 + sum::b#2 [ sum::b#2 sum::$0 sum::d ] ( sum:1 [ sum::b#2 sum::$0 sum::d ] { { sum::return_c#0 = sum::return_c#2 } } sum:5 [ sum::b#2 sum::$0 sum::d ] { { sum::return_d#1 = sum::return_d#2 } } ) always clobbers reg byte a
|
||||
Statement [14] *(&sum::return) = memcpy(*(&sum::d), struct Data, SIZEOF_STRUCT_DATA) [ sum::return sum::d ] ( sum:1 [ main::$0 main::x main::$1 main::y sum::return sum::d ] { } sum:5 [ main::$1 main::y sum::return sum::d ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [2] *(&main::$0) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) [ main::$0 sum::return main::x main::$1 main::y sum::d ] ( [ main::$0 sum::return main::x main::$1 main::y sum::d ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [3] *(&main::x) = memcpy(*(&main::$0), struct Data, SIZEOF_STRUCT_DATA) [ sum::return main::x main::$1 main::y sum::d ] ( [ sum::return main::x main::$1 main::y sum::d ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [4] *SCREEN = *((byte*)&main::x) [ sum::return main::$1 main::y sum::d ] ( [ sum::return main::$1 main::y sum::d ] { } ) always clobbers reg byte a
|
||||
Statement [6] *(&main::$1) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) [ main::$1 main::y ] ( [ main::$1 main::y ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [7] *(&main::y) = memcpy(*(&main::$1), struct Data, SIZEOF_STRUCT_DATA) [ main::y ] ( [ main::y ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [8] *(SCREEN+1) = *((byte*)&main::y+OFFSET_STRUCT_DATA_D) [ ] ( [ ] { } ) always clobbers reg byte a
|
||||
Statement [11] sum::$0 = sum::a#2 + sum::b#2 [ sum::return sum::b#2 sum::$0 sum::d ] ( sum:1 [ main::$0 main::x main::$1 main::y sum::return sum::b#2 sum::$0 sum::d ] { } sum:5 [ main::$1 main::y sum::return sum::b#2 sum::$0 sum::d ] { } ) always clobbers reg byte a
|
||||
Statement [14] *(&sum::return) = memcpy(*(&sum::d), struct Data, SIZEOF_STRUCT_DATA) [ sum::return sum::d ] ( sum:1 [ main::$0 main::x main::$1 main::y sum::return sum::d ] { } sum:5 [ main::$1 main::y sum::return sum::d ] { } ) always clobbers reg byte a reg byte y
|
||||
Potential registers zp[1]:2 [ sum::a#2 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:3 [ sum::b#2 ] : zp[1]:3 , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:4 [ sum::return_c#0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:5 [ main::x_c#0 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:6 [ sum::return_d#1 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:7 [ main::y_d#0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:8 [ sum::$0 ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:9 [ sum::return_c#2 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:10 [ sum::return_d#2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[2]:11 [ sum::d ] : zp[2]:11 ,
|
||||
Potential registers zp[1]:4 [ sum::$0 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[2]:5 [ main::x ] : zp[2]:5 ,
|
||||
Potential registers zp[2]:7 [ main::$0 ] : zp[2]:7 ,
|
||||
Potential registers zp[2]:9 [ main::y ] : zp[2]:9 ,
|
||||
Potential registers zp[2]:11 [ main::$1 ] : zp[2]:11 ,
|
||||
Potential registers zp[2]:13 [ sum::return ] : zp[2]:13 ,
|
||||
Potential registers zp[2]:15 [ sum::d ] : zp[2]:15 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [sum] 22: zp[1]:8 [ sum::$0 ] 11: zp[1]:2 [ sum::a#2 ] 7.33: zp[1]:3 [ sum::b#2 ] 4.33: zp[1]:10 [ sum::return_d#2 ] 4: zp[1]:4 [ sum::return_c#0 ] 4: zp[1]:6 [ sum::return_d#1 ] 3.25: zp[1]:9 [ sum::return_c#2 ] 0: zp[2]:11 [ sum::d ]
|
||||
Uplift Scope [main] 4: zp[1]:5 [ main::x_c#0 ] 4: zp[1]:7 [ main::y_d#0 ]
|
||||
Uplift Scope [sum] 22: zp[1]:4 [ sum::$0 ] 11: zp[1]:2 [ sum::a#2 ] 7.33: zp[1]:3 [ sum::b#2 ] 0: zp[2]:13 [ sum::return ] 0: zp[2]:15 [ sum::d ]
|
||||
Uplift Scope [Data]
|
||||
Uplift Scope [main] 0: zp[2]:5 [ main::x ] 0: zp[2]:7 [ main::$0 ] 0: zp[2]:9 [ main::y ] 0: zp[2]:11 [ main::$1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [sum] best 104 combination reg byte a [ sum::$0 ] reg byte a [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte a [ sum::return_d#2 ] zp[1]:4 [ sum::return_c#0 ] zp[1]:6 [ sum::return_d#1 ] zp[1]:9 [ sum::return_c#2 ] zp[2]:11 [ sum::d ]
|
||||
Limited combination testing to 100 combinations of 12288 possible.
|
||||
Uplifting [main] best 92 combination reg byte a [ main::x_c#0 ] reg byte a [ main::y_d#0 ]
|
||||
Uplifting [Data] best 92 combination
|
||||
Uplifting [] best 92 combination
|
||||
Attempting to uplift remaining variables inzp[1]:4 [ sum::return_c#0 ]
|
||||
Uplifting [sum] best 86 combination reg byte a [ sum::return_c#0 ]
|
||||
Attempting to uplift remaining variables inzp[1]:6 [ sum::return_d#1 ]
|
||||
Uplifting [sum] best 80 combination reg byte a [ sum::return_d#1 ]
|
||||
Attempting to uplift remaining variables inzp[1]:9 [ sum::return_c#2 ]
|
||||
Uplifting [sum] best 76 combination reg byte x [ sum::return_c#2 ]
|
||||
Allocated (was zp[2]:11) zp[2]:2 [ sum::d ]
|
||||
Uplifting [sum] best 154 combination reg byte a [ sum::$0 ] reg byte a [ sum::a#2 ] reg byte x [ sum::b#2 ] zp[2]:13 [ sum::return ] zp[2]:15 [ sum::d ]
|
||||
Uplifting [Data] best 154 combination
|
||||
Uplifting [main] best 154 combination zp[2]:5 [ main::x ] zp[2]:7 [ main::$0 ] zp[2]:9 [ main::y ] zp[2]:11 [ main::$1 ]
|
||||
Uplifting [] best 154 combination
|
||||
Allocated (was zp[2]:5) zp[2]:2 [ main::x ]
|
||||
Allocated (was zp[2]:7) zp[2]:4 [ main::$0 ]
|
||||
Allocated (was zp[2]:9) zp[2]:6 [ main::y ]
|
||||
Allocated (was zp[2]:11) zp[2]:8 [ main::$1 ]
|
||||
Allocated (was zp[2]:13) zp[2]:10 [ sum::return ]
|
||||
Allocated (was zp[2]:15) zp[2]:12 [ sum::d ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
// File Comments
|
||||
@ -380,12 +332,16 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
.segment Basic
|
||||
:BasicUpstart(main)
|
||||
// Global Constants & labels
|
||||
.const SIZEOF_STRUCT_DATA = 2
|
||||
.const OFFSET_STRUCT_DATA_D = 1
|
||||
// #pragma struct_model(classic)
|
||||
.label SCREEN = $400
|
||||
.segment Code
|
||||
// main
|
||||
main: {
|
||||
.label x = 2
|
||||
.label __0 = 4
|
||||
.label y = 6
|
||||
.label __1 = 8
|
||||
// [1] call sum
|
||||
// [10] phi from main to sum [phi:main->sum]
|
||||
sum_from_main:
|
||||
@ -394,13 +350,25 @@ main: {
|
||||
// [10] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1
|
||||
lda #1
|
||||
jsr sum
|
||||
// [2] sum::return_c#0 = sum::return_c#2 -- vbuaa=vbuxx
|
||||
txa
|
||||
jmp __b1
|
||||
// main::@1
|
||||
__b1:
|
||||
// [3] main::x_c#0 = sum::return_c#0
|
||||
// [4] *SCREEN = main::x_c#0 -- _deref_pbuc1=vbuaa
|
||||
// [2] *(&main::$0) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda sum.return-1,y
|
||||
sta __0-1,y
|
||||
dey
|
||||
bne !-
|
||||
// [3] *(&main::x) = memcpy(*(&main::$0), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda __0-1,y
|
||||
sta x-1,y
|
||||
dey
|
||||
bne !-
|
||||
// [4] *SCREEN = *((byte*)&main::x) -- _deref_pbuc1=_deref_pbuc2
|
||||
lda.z x
|
||||
sta SCREEN
|
||||
// [5] call sum
|
||||
// [10] phi from main::@1 to sum [phi:main::@1->sum]
|
||||
@ -410,12 +378,25 @@ main: {
|
||||
// [10] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1
|
||||
lda #3
|
||||
jsr sum
|
||||
// [6] sum::return_d#1 = sum::return_d#2
|
||||
jmp __b2
|
||||
// main::@2
|
||||
__b2:
|
||||
// [7] main::y_d#0 = sum::return_d#1
|
||||
// [8] *(SCREEN+1) = main::y_d#0 -- _deref_pbuc1=vbuaa
|
||||
// [6] *(&main::$1) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda sum.return-1,y
|
||||
sta __1-1,y
|
||||
dey
|
||||
bne !-
|
||||
// [7] *(&main::y) = memcpy(*(&main::$1), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda __1-1,y
|
||||
sta y-1,y
|
||||
dey
|
||||
bne !-
|
||||
// [8] *(SCREEN+1) = *((byte*)&main::y+OFFSET_STRUCT_DATA_D) -- _deref_pbuc1=_deref_pbuc2
|
||||
lda y+OFFSET_STRUCT_DATA_D
|
||||
sta SCREEN+1
|
||||
jmp __breturn
|
||||
// main::@return
|
||||
@ -426,7 +407,8 @@ main: {
|
||||
// sum
|
||||
// sum(byte register(A) a, byte register(X) b)
|
||||
sum: {
|
||||
.label d = 2
|
||||
.label return = $a
|
||||
.label d = $c
|
||||
// [11] sum::$0 = sum::a#2 + sum::b#2 -- vbuaa=vbuaa_plus_vbuxx
|
||||
stx.z $ff
|
||||
clc
|
||||
@ -435,14 +417,17 @@ sum: {
|
||||
sta.z d
|
||||
// [13] *((byte*)&sum::d+OFFSET_STRUCT_DATA_D) = sum::b#2 -- _deref_pbuc1=vbuxx
|
||||
stx d+OFFSET_STRUCT_DATA_D
|
||||
// [14] sum::return_c#2 = *((byte*)&sum::d) -- vbuxx=_deref_pbuc1
|
||||
ldx.z d
|
||||
// [15] sum::return_d#2 = *((byte*)&sum::d+OFFSET_STRUCT_DATA_D) -- vbuaa=_deref_pbuc1
|
||||
lda d+OFFSET_STRUCT_DATA_D
|
||||
// [14] *(&sum::return) = memcpy(*(&sum::d), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda d-1,y
|
||||
sta return-1,y
|
||||
dey
|
||||
bne !-
|
||||
jmp __breturn
|
||||
// sum::@return
|
||||
__breturn:
|
||||
// [16] return
|
||||
// [15] return
|
||||
rts
|
||||
}
|
||||
// File Data
|
||||
@ -453,7 +438,6 @@ Removing instruction jmp __b2
|
||||
Removing instruction jmp __breturn
|
||||
Removing instruction jmp __breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing instruction ldx.z d with TAX
|
||||
Removing instruction sum_from_main:
|
||||
Removing instruction __b1:
|
||||
Removing instruction sum_from___b1:
|
||||
@ -465,41 +449,35 @@ Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
FINAL SYMBOL TABLE
|
||||
constant byte OFFSET_STRUCT_DATA_D = 1
|
||||
constant byte* const SCREEN = (byte*) 1024
|
||||
constant byte SIZEOF_STRUCT_DATA = 2
|
||||
byte idx
|
||||
void main()
|
||||
byte main::x_c
|
||||
byte main::x_c#0 reg byte a 4.0
|
||||
byte main::y_d
|
||||
byte main::y_d#0 reg byte a 4.0
|
||||
struct Data~ main::$0 zp[2]:4
|
||||
struct Data~ main::$1 zp[2]:8
|
||||
struct Data main::x loadstore zp[2]:2
|
||||
struct Data main::y loadstore zp[2]:6
|
||||
struct Data sum(byte sum::a , byte sum::b)
|
||||
byte~ sum::$0 reg byte a 22.0
|
||||
byte sum::a
|
||||
byte sum::a#2 reg byte a 11.0
|
||||
byte sum::b
|
||||
byte sum::b#2 reg byte x 7.333333333333333
|
||||
struct Data sum::d loadstore zp[2]:2
|
||||
struct Data sum::return
|
||||
byte sum::return_c
|
||||
byte sum::return_c#0 reg byte a 4.0
|
||||
byte sum::return_c#2 reg byte x 3.25
|
||||
byte sum::return_d
|
||||
byte sum::return_d#1 reg byte a 4.0
|
||||
byte sum::return_d#2 reg byte a 4.333333333333333
|
||||
struct Data sum::d loadstore zp[2]:12
|
||||
struct Data sum::return loadstore zp[2]:10
|
||||
|
||||
reg byte a [ sum::a#2 ]
|
||||
reg byte x [ sum::b#2 ]
|
||||
reg byte a [ sum::return_c#0 ]
|
||||
reg byte a [ main::x_c#0 ]
|
||||
reg byte a [ sum::return_d#1 ]
|
||||
reg byte a [ main::y_d#0 ]
|
||||
reg byte a [ sum::$0 ]
|
||||
reg byte x [ sum::return_c#2 ]
|
||||
reg byte a [ sum::return_d#2 ]
|
||||
zp[2]:2 [ sum::d ]
|
||||
zp[2]:2 [ main::x ]
|
||||
zp[2]:4 [ main::$0 ]
|
||||
zp[2]:6 [ main::y ]
|
||||
zp[2]:8 [ main::$1 ]
|
||||
zp[2]:10 [ sum::return ]
|
||||
zp[2]:12 [ sum::d ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
Score: 63
|
||||
Score: 142
|
||||
|
||||
// File Comments
|
||||
// Test intermediate vars
|
||||
@ -513,12 +491,16 @@ Score: 63
|
||||
.segment Basic
|
||||
:BasicUpstart(main)
|
||||
// Global Constants & labels
|
||||
.const SIZEOF_STRUCT_DATA = 2
|
||||
.const OFFSET_STRUCT_DATA_D = 1
|
||||
// #pragma struct_model(classic)
|
||||
.label SCREEN = $400
|
||||
.segment Code
|
||||
// main
|
||||
main: {
|
||||
.label x = 2
|
||||
.label __0 = 4
|
||||
.label y = 6
|
||||
.label __1 = 8
|
||||
// sum(1,2)
|
||||
// [1] call sum
|
||||
// [10] phi from main to sum [phi:main->sum]
|
||||
@ -527,14 +509,26 @@ main: {
|
||||
// [10] phi sum::a#2 = 1 [phi:main->sum#1] -- vbuaa=vbuc1
|
||||
lda #1
|
||||
jsr sum
|
||||
// sum(1,2)
|
||||
// [2] sum::return_c#0 = sum::return_c#2 -- vbuaa=vbuxx
|
||||
txa
|
||||
// main::@1
|
||||
// sum(1,2)
|
||||
// [2] *(&main::$0) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda sum.return-1,y
|
||||
sta __0-1,y
|
||||
dey
|
||||
bne !-
|
||||
// struct Data x = sum(1,2)
|
||||
// [3] main::x_c#0 = sum::return_c#0
|
||||
// [3] *(&main::x) = memcpy(*(&main::$0), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda __0-1,y
|
||||
sta x-1,y
|
||||
dey
|
||||
bne !-
|
||||
// SCREEN[idx++] = x.c
|
||||
// [4] *SCREEN = main::x_c#0 -- _deref_pbuc1=vbuaa
|
||||
// [4] *SCREEN = *((byte*)&main::x) -- _deref_pbuc1=_deref_pbuc2
|
||||
lda.z x
|
||||
sta SCREEN
|
||||
// sum(3, 4)
|
||||
// [5] call sum
|
||||
@ -544,13 +538,26 @@ main: {
|
||||
// [10] phi sum::a#2 = 3 [phi:main::@1->sum#1] -- vbuaa=vbuc1
|
||||
lda #3
|
||||
jsr sum
|
||||
// sum(3, 4)
|
||||
// [6] sum::return_d#1 = sum::return_d#2
|
||||
// main::@2
|
||||
// sum(3, 4)
|
||||
// [6] *(&main::$1) = memcpy(*(&sum::return), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda sum.return-1,y
|
||||
sta __1-1,y
|
||||
dey
|
||||
bne !-
|
||||
// struct Data y = sum(3, 4)
|
||||
// [7] main::y_d#0 = sum::return_d#1
|
||||
// [7] *(&main::y) = memcpy(*(&main::$1), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda __1-1,y
|
||||
sta y-1,y
|
||||
dey
|
||||
bne !-
|
||||
// SCREEN[idx++] = y.d
|
||||
// [8] *(SCREEN+1) = main::y_d#0 -- _deref_pbuc1=vbuaa
|
||||
// [8] *(SCREEN+1) = *((byte*)&main::y+OFFSET_STRUCT_DATA_D) -- _deref_pbuc1=_deref_pbuc2
|
||||
lda y+OFFSET_STRUCT_DATA_D
|
||||
sta SCREEN+1
|
||||
// main::@return
|
||||
// }
|
||||
@ -560,7 +567,8 @@ main: {
|
||||
// sum
|
||||
// sum(byte register(A) a, byte register(X) b)
|
||||
sum: {
|
||||
.label d = 2
|
||||
.label return = $a
|
||||
.label d = $c
|
||||
// a+b
|
||||
// [11] sum::$0 = sum::a#2 + sum::b#2 -- vbuaa=vbuaa_plus_vbuxx
|
||||
stx.z $ff
|
||||
@ -572,13 +580,16 @@ sum: {
|
||||
// [13] *((byte*)&sum::d+OFFSET_STRUCT_DATA_D) = sum::b#2 -- _deref_pbuc1=vbuxx
|
||||
stx d+OFFSET_STRUCT_DATA_D
|
||||
// return d;
|
||||
// [14] sum::return_c#2 = *((byte*)&sum::d) -- vbuxx=_deref_pbuc1
|
||||
tax
|
||||
// [15] sum::return_d#2 = *((byte*)&sum::d+OFFSET_STRUCT_DATA_D) -- vbuaa=_deref_pbuc1
|
||||
lda d+OFFSET_STRUCT_DATA_D
|
||||
// [14] *(&sum::return) = memcpy(*(&sum::d), struct Data, SIZEOF_STRUCT_DATA) -- _deref_pssc1=_deref_pssc2_memcpy_vbuc3
|
||||
ldy #SIZEOF_STRUCT_DATA
|
||||
!:
|
||||
lda d-1,y
|
||||
sta return-1,y
|
||||
dey
|
||||
bne !-
|
||||
// sum::@return
|
||||
// }
|
||||
// [16] return
|
||||
// [15] return
|
||||
rts
|
||||
}
|
||||
// File Data
|
||||
|
@ -1,33 +1,27 @@
|
||||
constant byte OFFSET_STRUCT_DATA_D = 1
|
||||
constant byte* const SCREEN = (byte*) 1024
|
||||
constant byte SIZEOF_STRUCT_DATA = 2
|
||||
byte idx
|
||||
void main()
|
||||
byte main::x_c
|
||||
byte main::x_c#0 reg byte a 4.0
|
||||
byte main::y_d
|
||||
byte main::y_d#0 reg byte a 4.0
|
||||
struct Data~ main::$0 zp[2]:4
|
||||
struct Data~ main::$1 zp[2]:8
|
||||
struct Data main::x loadstore zp[2]:2
|
||||
struct Data main::y loadstore zp[2]:6
|
||||
struct Data sum(byte sum::a , byte sum::b)
|
||||
byte~ sum::$0 reg byte a 22.0
|
||||
byte sum::a
|
||||
byte sum::a#2 reg byte a 11.0
|
||||
byte sum::b
|
||||
byte sum::b#2 reg byte x 7.333333333333333
|
||||
struct Data sum::d loadstore zp[2]:2
|
||||
struct Data sum::return
|
||||
byte sum::return_c
|
||||
byte sum::return_c#0 reg byte a 4.0
|
||||
byte sum::return_c#2 reg byte x 3.25
|
||||
byte sum::return_d
|
||||
byte sum::return_d#1 reg byte a 4.0
|
||||
byte sum::return_d#2 reg byte a 4.333333333333333
|
||||
struct Data sum::d loadstore zp[2]:12
|
||||
struct Data sum::return loadstore zp[2]:10
|
||||
|
||||
reg byte a [ sum::a#2 ]
|
||||
reg byte x [ sum::b#2 ]
|
||||
reg byte a [ sum::return_c#0 ]
|
||||
reg byte a [ main::x_c#0 ]
|
||||
reg byte a [ sum::return_d#1 ]
|
||||
reg byte a [ main::y_d#0 ]
|
||||
reg byte a [ sum::$0 ]
|
||||
reg byte x [ sum::return_c#2 ]
|
||||
reg byte a [ sum::return_d#2 ]
|
||||
zp[2]:2 [ sum::d ]
|
||||
zp[2]:2 [ main::x ]
|
||||
zp[2]:4 [ main::$0 ]
|
||||
zp[2]:6 [ main::y ]
|
||||
zp[2]:8 [ main::$1 ]
|
||||
zp[2]:10 [ sum::return ]
|
||||
zp[2]:12 [ sum::d ]
|
||||
|
@ -2,8 +2,8 @@ Eliminating unused variable with no statement main::$0
|
||||
Eliminating unused variable with no statement main::$1
|
||||
Unwinding list assignment { main::$0_x, main::$0_y } = { getPoint::return_x, getPoint::return_y }
|
||||
Unwinding list assignment { main::$1_x, main::$1_y } = { getPoint::return_x, getPoint::return_y }
|
||||
Unwinding list assignment { getPoint::return_x#0, getPoint::return_y#0 } = { getPoint::return_x#3, getPoint::return_y#3 }
|
||||
Unwinding list assignment { getPoint::return_x#1, getPoint::return_y#1 } = { getPoint::return_x#3, getPoint::return_y#3 }
|
||||
Unwinding list assignment { getPoint::return_x#0, getPoint::return_y#0 } = { getPoint::return_x#5, getPoint::return_y#5 }
|
||||
Unwinding list assignment { getPoint::return_x#1, getPoint::return_y#1 } = { getPoint::return_x#5, getPoint::return_y#5 }
|
||||
Removing C-classic struct-unwound assignment main::point1 = struct-unwound {*((byte*)&main::point1+OFFSET_STRUCT_POINT_X), *((byte*)&main::point1+OFFSET_STRUCT_POINT_Y)}
|
||||
Removing C-classic struct-unwound assignment main::point2 = struct-unwound {*((byte*)&main::point2+OFFSET_STRUCT_POINT_X), *((byte*)&main::point2+OFFSET_STRUCT_POINT_Y)}
|
||||
|
||||
@ -14,14 +14,14 @@ main: scope:[main] from __start
|
||||
getPoint::x#0 = 2
|
||||
getPoint::y#0 = 3
|
||||
call getPoint
|
||||
getPoint::return_x#0 = getPoint::return_x#3
|
||||
getPoint::return_y#0 = getPoint::return_y#3
|
||||
getPoint::return_x#0 = getPoint::return_x#5
|
||||
getPoint::return_y#0 = getPoint::return_y#5
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
getPoint::return_y#4 = phi( main/getPoint::return_y#0 )
|
||||
getPoint::return_x#4 = phi( main/getPoint::return_x#0 )
|
||||
main::$0_x = getPoint::return_x#4
|
||||
main::$0_y = getPoint::return_y#4
|
||||
getPoint::return_y#3 = phi( main/getPoint::return_y#0 )
|
||||
getPoint::return_x#3 = phi( main/getPoint::return_x#0 )
|
||||
main::$0_x = getPoint::return_x#3
|
||||
main::$0_y = getPoint::return_y#3
|
||||
*((byte*)&main::point1+OFFSET_STRUCT_POINT_X) = main::$0_x
|
||||
*((byte*)&main::point1+OFFSET_STRUCT_POINT_Y) = main::$0_y
|
||||
SCREEN[0] = *((byte*)&main::point1+OFFSET_STRUCT_POINT_X)
|
||||
@ -29,14 +29,14 @@ main::@1: scope:[main] from main
|
||||
getPoint::x#1 = 4
|
||||
getPoint::y#1 = 5
|
||||
call getPoint
|
||||
getPoint::return_x#1 = getPoint::return_x#3
|
||||
getPoint::return_y#1 = getPoint::return_y#3
|
||||
getPoint::return_x#1 = getPoint::return_x#5
|
||||
getPoint::return_y#1 = getPoint::return_y#5
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
getPoint::return_y#5 = phi( main::@1/getPoint::return_y#1 )
|
||||
getPoint::return_x#5 = phi( main::@1/getPoint::return_x#1 )
|
||||
main::$1_x = getPoint::return_x#5
|
||||
main::$1_y = getPoint::return_y#5
|
||||
getPoint::return_y#4 = phi( main::@1/getPoint::return_y#1 )
|
||||
getPoint::return_x#4 = phi( main::@1/getPoint::return_x#1 )
|
||||
main::$1_x = getPoint::return_x#4
|
||||
main::$1_y = getPoint::return_y#4
|
||||
*((byte*)&main::point2+OFFSET_STRUCT_POINT_X) = main::$1_x
|
||||
*((byte*)&main::point2+OFFSET_STRUCT_POINT_Y) = main::$1_y
|
||||
SCREEN[2] = *((byte*)&main::point2+OFFSET_STRUCT_POINT_X)
|
||||
@ -57,11 +57,9 @@ getPoint: scope:[getPoint] from main main::@1
|
||||
getPoint::return#0 = struct-unwound {getPoint::return_x#2, getPoint::return_y#2}
|
||||
to:getPoint::@return
|
||||
getPoint::@return: scope:[getPoint] from getPoint
|
||||
getPoint::return_y#6 = phi( getPoint/getPoint::return_y#2 )
|
||||
getPoint::return_x#6 = phi( getPoint/getPoint::return_x#2 )
|
||||
getPoint::return_x#3 = getPoint::return_x#6
|
||||
getPoint::return_y#3 = getPoint::return_y#6
|
||||
getPoint::return#1 = struct-unwound {getPoint::return_x#3, getPoint::return_y#3}
|
||||
getPoint::return_y#5 = phi( getPoint/getPoint::return_y#2 )
|
||||
getPoint::return_x#5 = phi( getPoint/getPoint::return_x#2 )
|
||||
getPoint::return#1 = struct-unwound {}
|
||||
return
|
||||
to:@return
|
||||
|
||||
@ -95,7 +93,6 @@ byte getPoint::return_x#2
|
||||
byte getPoint::return_x#3
|
||||
byte getPoint::return_x#4
|
||||
byte getPoint::return_x#5
|
||||
byte getPoint::return_x#6
|
||||
byte getPoint::return_y
|
||||
byte getPoint::return_y#0
|
||||
byte getPoint::return_y#1
|
||||
@ -103,7 +100,6 @@ byte getPoint::return_y#2
|
||||
byte getPoint::return_y#3
|
||||
byte getPoint::return_y#4
|
||||
byte getPoint::return_y#5
|
||||
byte getPoint::return_y#6
|
||||
byte getPoint::x
|
||||
byte getPoint::x#0
|
||||
byte getPoint::x#1
|
||||
@ -153,12 +149,12 @@ Finalized unsigned number type (byte) 5
|
||||
Finalized unsigned number type (byte) 2
|
||||
Finalized unsigned number type (byte) 3
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Alias getPoint::return_x#0 = getPoint::return_x#4
|
||||
Alias getPoint::return_y#0 = getPoint::return_y#4
|
||||
Alias getPoint::return_x#1 = getPoint::return_x#5
|
||||
Alias getPoint::return_y#1 = getPoint::return_y#5
|
||||
Alias getPoint::return_x#2 = getPoint::p_x#0 getPoint::x#2 getPoint::return_x#6 getPoint::return_x#3
|
||||
Alias getPoint::return_y#2 = getPoint::p_y#0 getPoint::y#2 getPoint::return_y#6 getPoint::return_y#3
|
||||
Alias getPoint::return_x#0 = getPoint::return_x#3
|
||||
Alias getPoint::return_y#0 = getPoint::return_y#3
|
||||
Alias getPoint::return_x#1 = getPoint::return_x#4
|
||||
Alias getPoint::return_y#1 = getPoint::return_y#4
|
||||
Alias getPoint::return_x#2 = getPoint::p_x#0 getPoint::x#2 getPoint::return_x#5
|
||||
Alias getPoint::return_y#2 = getPoint::p_y#0 getPoint::y#2 getPoint::return_y#5
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Constant getPoint::x#0 = 2
|
||||
Constant getPoint::y#0 = 3
|
||||
@ -172,7 +168,7 @@ Simplifying expression containing zero (byte*)&main::point2 in [18] *((byte*)&ma
|
||||
Simplifying expression containing zero (byte*)&main::point2 in [20] SCREEN[2] = *((byte*)&main::point2+OFFSET_STRUCT_POINT_X)
|
||||
Successful SSA optimization PassNSimplifyExpressionWithZero
|
||||
Eliminating unused variable getPoint::return#0 and assignment [20] getPoint::return#0 = struct-unwound {getPoint::return_x#2, getPoint::return_y#2}
|
||||
Eliminating unused variable getPoint::return#1 and assignment [21] getPoint::return#1 = struct-unwound {getPoint::return_x#2, getPoint::return_y#2}
|
||||
Eliminating unused variable getPoint::return#1 and assignment [21] getPoint::return#1 = struct-unwound {}
|
||||
Eliminating unused constant OFFSET_STRUCT_POINT_X
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused procedure __start
|
||||
|
@ -1,6 +1,6 @@
|
||||
Eliminating unused variable with no statement main::$0
|
||||
Unwinding list assignment { main::$0_x, main::$0_y } = { point::return_x, point::return_y }
|
||||
Unwinding list assignment { point::return_x#0, point::return_y#0 } = { point::return_x#2, point::return_y#2 }
|
||||
Unwinding list assignment { point::return_x#0, point::return_y#0 } = { point::return_x#3, point::return_y#3 }
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
|
||||
@ -9,14 +9,14 @@ main: scope:[main] from __start
|
||||
main::q_x#0 = 0
|
||||
main::q_y#0 = 0
|
||||
call point
|
||||
point::return_x#0 = point::return_x#2
|
||||
point::return_y#0 = point::return_y#2
|
||||
point::return_x#0 = point::return_x#3
|
||||
point::return_y#0 = point::return_y#3
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
point::return_y#3 = phi( main/point::return_y#0 )
|
||||
point::return_x#3 = phi( main/point::return_x#0 )
|
||||
main::$0_x = point::return_x#3
|
||||
main::$0_y = point::return_y#3
|
||||
point::return_y#2 = phi( main/point::return_y#0 )
|
||||
point::return_x#2 = phi( main/point::return_x#0 )
|
||||
main::$0_x = point::return_x#2
|
||||
main::$0_y = point::return_y#2
|
||||
main::q_x#1 = main::$0_x
|
||||
main::q_y#1 = main::$0_y
|
||||
main::SCREEN[0] = main::q_x#1
|
||||
@ -33,11 +33,9 @@ point: scope:[point] from main
|
||||
point::return#0 = struct-unwound {point::return_x#1, point::return_y#1}
|
||||
to:point::@return
|
||||
point::@return: scope:[point] from point
|
||||
point::return_y#4 = phi( point/point::return_y#1 )
|
||||
point::return_x#4 = phi( point/point::return_x#1 )
|
||||
point::return_x#2 = point::return_x#4
|
||||
point::return_y#2 = point::return_y#4
|
||||
point::return#1 = struct-unwound {point::return_x#2, point::return_y#2}
|
||||
point::return_y#3 = phi( point/point::return_y#1 )
|
||||
point::return_x#3 = phi( point/point::return_x#1 )
|
||||
point::return#1 = struct-unwound {}
|
||||
return
|
||||
to:@return
|
||||
|
||||
@ -74,13 +72,11 @@ byte point::return_x#0
|
||||
byte point::return_x#1
|
||||
byte point::return_x#2
|
||||
byte point::return_x#3
|
||||
byte point::return_x#4
|
||||
byte point::return_y
|
||||
byte point::return_y#0
|
||||
byte point::return_y#1
|
||||
byte point::return_y#2
|
||||
byte point::return_y#3
|
||||
byte point::return_y#4
|
||||
|
||||
Adding number conversion cast (unumber) 0 in main::SCREEN[0] = main::q_x#1
|
||||
Adding number conversion cast (unumber) 1 in main::SCREEN[1] = main::q_y#1
|
||||
@ -92,12 +88,12 @@ Successful SSA optimization PassNCastSimplification
|
||||
Finalized unsigned number type (byte) 0
|
||||
Finalized unsigned number type (byte) 1
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Alias point::return_x#0 = point::return_x#3
|
||||
Alias point::return_y#0 = point::return_y#3
|
||||
Alias point::return_x#0 = point::return_x#2
|
||||
Alias point::return_y#0 = point::return_y#2
|
||||
Alias main::q_x#1 = main::$0_x
|
||||
Alias main::q_y#1 = main::$0_y
|
||||
Alias point::return_x#1 = point::return_x#4 point::return_x#2
|
||||
Alias point::return_y#1 = point::return_y#4 point::return_y#2
|
||||
Alias point::return_x#1 = point::return_x#3
|
||||
Alias point::return_y#1 = point::return_y#3
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Constant main::q_x#0 = 0
|
||||
Constant main::q_y#0 = 0
|
||||
@ -113,7 +109,7 @@ Successful SSA optimization Pass2ConstantIdentification
|
||||
Simplifying expression containing zero main::SCREEN in [7] main::SCREEN[0] = main::q_x#1
|
||||
Successful SSA optimization PassNSimplifyExpressionWithZero
|
||||
Eliminating unused variable point::return#0 and assignment [4] point::return#0 = struct-unwound {point::return_x#1, point::return_y#1}
|
||||
Eliminating unused variable point::return#1 and assignment [5] point::return#1 = struct-unwound {point::return_x#1, point::return_y#1}
|
||||
Eliminating unused variable point::return#1 and assignment [5] point::return#1 = struct-unwound {}
|
||||
Eliminating unused constant main::q_x#0
|
||||
Eliminating unused constant main::q_y#0
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
|
@ -3,8 +3,8 @@ void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
[1] call get
|
||||
[2] get::return_x#0 = get::return_x#5
|
||||
[3] get::return_y#0 = get::return_y#5
|
||||
[2] get::return_x#0 = get::return_x#7
|
||||
[3] get::return_y#0 = get::return_y#7
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main
|
||||
[4] main::$0_x = get::return_x#0
|
||||
@ -16,8 +16,8 @@ main::@1: scope:[main] from main::@2 main::@3
|
||||
[8] main::i#2 = phi( main::@2/1, main::@3/main::i#1 )
|
||||
[9] get::i#1 = main::i#2
|
||||
[10] call get
|
||||
[11] get::return_x#1 = get::return_x#5
|
||||
[12] get::return_y#1 = get::return_y#5
|
||||
[11] get::return_x#1 = get::return_x#7
|
||||
[12] get::return_y#1 = get::return_y#7
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
[13] main::$1_x = get::return_x#1
|
||||
@ -45,8 +45,8 @@ get::@4: scope:[get] from get::@3
|
||||
[25] get::return_y#4 = *((byte*)p2+OFFSET_STRUCT_POINT_Y)
|
||||
to:get::@return
|
||||
get::@return: scope:[get] from get::@1 get::@2 get::@4
|
||||
[26] get::return_y#5 = phi( get::@1/get::return_y#2, get::@2/get::return_y#3, get::@4/get::return_y#4 )
|
||||
[26] get::return_x#5 = phi( get::@1/get::return_x#2, get::@2/get::return_x#3, get::@4/get::return_x#4 )
|
||||
[26] get::return_y#7 = phi( get::@1/get::return_y#2, get::@2/get::return_y#3, get::@4/get::return_y#4 )
|
||||
[26] get::return_x#7 = phi( get::@1/get::return_x#2, get::@2/get::return_x#3, get::@4/get::return_x#4 )
|
||||
[27] return
|
||||
to:@return
|
||||
get::@2: scope:[get] from get::@3
|
||||
|
@ -3,8 +3,8 @@ Eliminating unused variable with no statement main::$0
|
||||
Eliminating unused variable with no statement main::$1
|
||||
Unwinding list assignment { main::$0_x, main::$0_y } = { get::return_x, get::return_y }
|
||||
Unwinding list assignment { main::$1_x, main::$1_y } = { get::return_x, get::return_y }
|
||||
Unwinding list assignment { get::return_x#0, get::return_y#0 } = { get::return_x#5, get::return_y#5 }
|
||||
Unwinding list assignment { get::return_x#1, get::return_y#1 } = { get::return_x#5, get::return_y#5 }
|
||||
Unwinding list assignment { get::return_x#0, get::return_y#0 } = { get::return_x#7, get::return_y#7 }
|
||||
Unwinding list assignment { get::return_x#1, get::return_y#1 } = { get::return_x#7, get::return_y#7 }
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
|
||||
@ -12,14 +12,14 @@ void main()
|
||||
main: scope:[main] from __start::@1
|
||||
get::i#0 = 0
|
||||
call get
|
||||
get::return_x#0 = get::return_x#5
|
||||
get::return_y#0 = get::return_y#5
|
||||
get::return_x#0 = get::return_x#7
|
||||
get::return_y#0 = get::return_y#7
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main
|
||||
get::return_y#6 = phi( main/get::return_y#0 )
|
||||
get::return_x#6 = phi( main/get::return_x#0 )
|
||||
main::$0_x = get::return_x#6
|
||||
main::$0_y = get::return_y#6
|
||||
get::return_y#5 = phi( main/get::return_y#0 )
|
||||
get::return_x#5 = phi( main/get::return_x#0 )
|
||||
main::$0_x = get::return_x#5
|
||||
main::$0_y = get::return_y#5
|
||||
*((byte*)SCREEN+OFFSET_STRUCT_POINT_X) = main::$0_x
|
||||
*((byte*)SCREEN+OFFSET_STRUCT_POINT_Y) = main::$0_y
|
||||
main::i#0 = 1
|
||||
@ -28,15 +28,15 @@ main::@1: scope:[main] from main::@2 main::@3
|
||||
main::i#2 = phi( main::@2/main::i#0, main::@3/main::i#1 )
|
||||
get::i#1 = main::i#2
|
||||
call get
|
||||
get::return_x#1 = get::return_x#5
|
||||
get::return_y#1 = get::return_y#5
|
||||
get::return_x#1 = get::return_x#7
|
||||
get::return_y#1 = get::return_y#7
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
main::i#3 = phi( main::@1/main::i#2 )
|
||||
get::return_y#7 = phi( main::@1/get::return_y#1 )
|
||||
get::return_x#7 = phi( main::@1/get::return_x#1 )
|
||||
main::$1_x = get::return_x#7
|
||||
main::$1_y = get::return_y#7
|
||||
get::return_y#6 = phi( main::@1/get::return_y#1 )
|
||||
get::return_x#6 = phi( main::@1/get::return_x#1 )
|
||||
main::$1_x = get::return_x#6
|
||||
main::$1_y = get::return_y#6
|
||||
main::$3 = main::i#3 * SIZEOF_STRUCT_POINT
|
||||
((byte*)SCREEN+OFFSET_STRUCT_POINT_X)[main::$3] = main::$1_x
|
||||
((byte*)SCREEN+OFFSET_STRUCT_POINT_Y)[main::$3] = main::$1_y
|
||||
@ -87,11 +87,9 @@ get::@4: scope:[get] from get::@3
|
||||
get::return#2 = struct-unwound {get::return_x#4, get::return_y#4}
|
||||
to:get::@return
|
||||
get::@return: scope:[get] from get::@1 get::@2 get::@4
|
||||
get::return_y#8 = phi( get::@1/get::return_y#2, get::@2/get::return_y#3, get::@4/get::return_y#4 )
|
||||
get::return_x#8 = phi( get::@1/get::return_x#2, get::@2/get::return_x#3, get::@4/get::return_x#4 )
|
||||
get::return_x#5 = get::return_x#8
|
||||
get::return_y#5 = get::return_y#8
|
||||
get::return#3 = struct-unwound {get::return_x#5, get::return_y#5}
|
||||
get::return_y#7 = phi( get::@1/get::return_y#2, get::@2/get::return_y#3, get::@4/get::return_y#4 )
|
||||
get::return_x#7 = phi( get::@1/get::return_x#2, get::@2/get::return_x#3, get::@4/get::return_x#4 )
|
||||
get::return#3 = struct-unwound {}
|
||||
return
|
||||
to:@return
|
||||
|
||||
@ -149,7 +147,6 @@ byte get::return_x#4
|
||||
byte get::return_x#5
|
||||
byte get::return_x#6
|
||||
byte get::return_x#7
|
||||
byte get::return_x#8
|
||||
byte get::return_y
|
||||
byte get::return_y#0
|
||||
byte get::return_y#1
|
||||
@ -159,7 +156,6 @@ byte get::return_y#4
|
||||
byte get::return_y#5
|
||||
byte get::return_y#6
|
||||
byte get::return_y#7
|
||||
byte get::return_y#8
|
||||
void main()
|
||||
byte~ main::$0_x
|
||||
byte~ main::$0_y
|
||||
@ -194,14 +190,12 @@ Finalized unsigned number type (byte) 0
|
||||
Finalized unsigned number type (byte) 0
|
||||
Finalized unsigned number type (byte) 1
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Alias get::return_x#0 = get::return_x#6
|
||||
Alias get::return_y#0 = get::return_y#6
|
||||
Alias get::return_x#1 = get::return_x#7
|
||||
Alias get::return_y#1 = get::return_y#7
|
||||
Alias get::return_x#0 = get::return_x#5
|
||||
Alias get::return_y#0 = get::return_y#5
|
||||
Alias get::return_x#1 = get::return_x#6
|
||||
Alias get::return_y#1 = get::return_y#6
|
||||
Alias main::i#2 = main::i#3
|
||||
Alias get::i#2 = get::i#3
|
||||
Alias get::return_x#5 = get::return_x#8
|
||||
Alias get::return_y#5 = get::return_y#8
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Simple Condition main::$2 [21] if(main::i#1!=rangelast(1,2)) goto main::@1
|
||||
Simple Condition get::$0 [25] if(get::i#2==0) goto get::@1
|
||||
@ -250,7 +244,7 @@ Eliminating unused variable get::return#1 and assignment [32] get::return#1 = st
|
||||
Eliminating unused variable get::$6 and assignment [33] get::$6 = get::$12
|
||||
Eliminating unused variable get::$7 and assignment [35] get::$7 = get::$13 + OFFSET_STRUCT_POINT_Y
|
||||
Eliminating unused variable get::return#2 and assignment [37] get::return#2 = struct-unwound {get::return_x#4, get::return_y#4}
|
||||
Eliminating unused variable get::return#3 and assignment [39] get::return#3 = struct-unwound {get::return_x#5, get::return_y#5}
|
||||
Eliminating unused variable get::return#3 and assignment [39] get::return#3 = struct-unwound {}
|
||||
Eliminating unused constant OFFSET_STRUCT_POINT_X
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused procedure __start
|
||||
@ -293,12 +287,12 @@ Calls in [main] to get:1 get:11
|
||||
Created 4 initial phi equivalence classes
|
||||
Coalesced [10] get::i#4 = get::i#1
|
||||
Coalesced [22] main::i#4 = main::i#1
|
||||
Coalesced [28] get::return_x#11 = get::return_x#4
|
||||
Coalesced [29] get::return_y#11 = get::return_y#4
|
||||
Coalesced [34] get::return_x#10 = get::return_x#3
|
||||
Coalesced [35] get::return_y#10 = get::return_y#3
|
||||
Coalesced [38] get::return_x#9 = get::return_x#2
|
||||
Coalesced [39] get::return_y#9 = get::return_y#2
|
||||
Coalesced [28] get::return_x#10 = get::return_x#4
|
||||
Coalesced [29] get::return_y#10 = get::return_y#4
|
||||
Coalesced [34] get::return_x#9 = get::return_x#3
|
||||
Coalesced [35] get::return_y#9 = get::return_y#3
|
||||
Coalesced [38] get::return_x#8 = get::return_x#2
|
||||
Coalesced [39] get::return_y#8 = get::return_y#2
|
||||
Coalesced down to 4 phi equivalence classes
|
||||
Culled Empty Block label main::@4
|
||||
Adding NOP phi() at start of main
|
||||
@ -309,8 +303,8 @@ void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
[1] call get
|
||||
[2] get::return_x#0 = get::return_x#5
|
||||
[3] get::return_y#0 = get::return_y#5
|
||||
[2] get::return_x#0 = get::return_x#7
|
||||
[3] get::return_y#0 = get::return_y#7
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main
|
||||
[4] main::$0_x = get::return_x#0
|
||||
@ -322,8 +316,8 @@ main::@1: scope:[main] from main::@2 main::@3
|
||||
[8] main::i#2 = phi( main::@2/1, main::@3/main::i#1 )
|
||||
[9] get::i#1 = main::i#2
|
||||
[10] call get
|
||||
[11] get::return_x#1 = get::return_x#5
|
||||
[12] get::return_y#1 = get::return_y#5
|
||||
[11] get::return_x#1 = get::return_x#7
|
||||
[12] get::return_y#1 = get::return_y#7
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
[13] main::$1_x = get::return_x#1
|
||||
@ -351,8 +345,8 @@ get::@4: scope:[get] from get::@3
|
||||
[25] get::return_y#4 = *((byte*)p2+OFFSET_STRUCT_POINT_Y)
|
||||
to:get::@return
|
||||
get::@return: scope:[get] from get::@1 get::@2 get::@4
|
||||
[26] get::return_y#5 = phi( get::@1/get::return_y#2, get::@2/get::return_y#3, get::@4/get::return_y#4 )
|
||||
[26] get::return_x#5 = phi( get::@1/get::return_x#2, get::@2/get::return_x#3, get::@4/get::return_x#4 )
|
||||
[26] get::return_y#7 = phi( get::@1/get::return_y#2, get::@2/get::return_y#3, get::@4/get::return_y#4 )
|
||||
[26] get::return_x#7 = phi( get::@1/get::return_x#2, get::@2/get::return_x#3, get::@4/get::return_x#4 )
|
||||
[27] return
|
||||
to:@return
|
||||
get::@2: scope:[get] from get::@3
|
||||
@ -377,14 +371,14 @@ byte get::return_x#1 11.0
|
||||
byte get::return_x#2 101.0
|
||||
byte get::return_x#3 101.0
|
||||
byte get::return_x#4 101.0
|
||||
byte get::return_x#5 79.0
|
||||
byte get::return_x#7 79.0
|
||||
byte get::return_y
|
||||
byte get::return_y#0 2.0
|
||||
byte get::return_y#1 11.0
|
||||
byte get::return_y#2 202.0
|
||||
byte get::return_y#3 202.0
|
||||
byte get::return_y#4 202.0
|
||||
byte get::return_y#5 52.66666666666666
|
||||
byte get::return_y#7 52.66666666666666
|
||||
void main()
|
||||
byte~ main::$0_x 2.0
|
||||
byte~ main::$0_y 2.0
|
||||
@ -398,8 +392,8 @@ byte main::i#2 4.4
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ get::i#2 get::i#1 ]
|
||||
[ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
[ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
[ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
[ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
Added variable get::return_x#0 to live range equivalence class [ get::return_x#0 ]
|
||||
Added variable get::return_y#0 to live range equivalence class [ get::return_y#0 ]
|
||||
Added variable main::$0_x to live range equivalence class [ main::$0_x ]
|
||||
@ -412,8 +406,8 @@ Added variable main::$3 to live range equivalence class [ main::$3 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ get::i#2 get::i#1 ]
|
||||
[ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
[ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
[ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
[ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
[ get::return_x#0 ]
|
||||
[ get::return_y#0 ]
|
||||
[ main::$0_x ]
|
||||
@ -425,8 +419,8 @@ Complete equivalence classes
|
||||
[ main::$3 ]
|
||||
Allocated zp[1]:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp[1]:3 [ get::i#2 get::i#1 ]
|
||||
Allocated zp[1]:4 [ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
Allocated zp[1]:5 [ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
Allocated zp[1]:4 [ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
Allocated zp[1]:5 [ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
Allocated zp[1]:6 [ get::return_x#0 ]
|
||||
Allocated zp[1]:7 [ get::return_y#0 ]
|
||||
Allocated zp[1]:8 [ main::$0_x ]
|
||||
@ -449,8 +443,8 @@ Statement [16] ((byte*)SCREEN)[main::$3] = main::$1_x [ main::i#2 main::$1_y mai
|
||||
Statement [17] ((byte*)SCREEN+OFFSET_STRUCT_POINT_Y)[main::$3] = main::$1_y [ main::i#2 ] ( [ main::i#2 ] { } ) always clobbers reg byte a
|
||||
Potential registers zp[1]:2 [ main::i#2 main::i#1 ] : zp[1]:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:3 [ get::i#2 get::i#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:4 [ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:5 [ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:4 [ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ] : zp[1]:4 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:5 [ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ] : zp[1]:5 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:6 [ get::return_x#0 ] : zp[1]:6 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:7 [ get::return_y#0 ] : zp[1]:7 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:8 [ main::$0_x ] : zp[1]:8 , reg byte a , reg byte x , reg byte y ,
|
||||
@ -462,12 +456,12 @@ Potential registers zp[1]:13 [ main::$1_y ] : zp[1]:13 , reg byte x , reg byte y
|
||||
Potential registers zp[1]:14 [ main::$3 ] : zp[1]:14 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [get] 658.67: zp[1]:5 [ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ] 382: zp[1]:4 [ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ] 128.5: zp[1]:3 [ get::i#2 get::i#1 ] 11: zp[1]:10 [ get::return_x#1 ] 11: zp[1]:11 [ get::return_y#1 ] 2: zp[1]:6 [ get::return_x#0 ] 2: zp[1]:7 [ get::return_y#0 ]
|
||||
Uplift Scope [get] 658.67: zp[1]:5 [ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ] 382: zp[1]:4 [ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ] 128.5: zp[1]:3 [ get::i#2 get::i#1 ] 11: zp[1]:10 [ get::return_x#1 ] 11: zp[1]:11 [ get::return_y#1 ] 2: zp[1]:6 [ get::return_x#0 ] 2: zp[1]:7 [ get::return_y#0 ]
|
||||
Uplift Scope [main] 20.9: zp[1]:2 [ main::i#2 main::i#1 ] 16.5: zp[1]:14 [ main::$3 ] 7.33: zp[1]:12 [ main::$1_x ] 7.33: zp[1]:13 [ main::$1_y ] 2: zp[1]:8 [ main::$0_x ] 2: zp[1]:9 [ main::$0_y ]
|
||||
Uplift Scope [Point]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [get] best 853 combination reg byte x [ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ] reg byte a [ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ] reg byte a [ get::i#2 get::i#1 ] reg byte a [ get::return_x#1 ] zp[1]:11 [ get::return_y#1 ] zp[1]:6 [ get::return_x#0 ] zp[1]:7 [ get::return_y#0 ]
|
||||
Uplifting [get] best 853 combination reg byte x [ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ] reg byte a [ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ] reg byte a [ get::i#2 get::i#1 ] reg byte a [ get::return_x#1 ] zp[1]:11 [ get::return_y#1 ] zp[1]:6 [ get::return_x#0 ] zp[1]:7 [ get::return_y#0 ]
|
||||
Limited combination testing to 100 combinations of 16384 possible.
|
||||
Uplifting [main] best 673 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::$3 ] zp[1]:12 [ main::$1_x ] zp[1]:13 [ main::$1_y ] zp[1]:8 [ main::$0_x ] zp[1]:9 [ main::$0_y ]
|
||||
Limited combination testing to 100 combinations of 1296 possible.
|
||||
@ -519,8 +513,8 @@ main: {
|
||||
// [21] phi get::i#2 = 0 [phi:main->get#0] -- vbuaa=vbuc1
|
||||
lda #0
|
||||
jsr get
|
||||
// [2] get::return_x#0 = get::return_x#5
|
||||
// [3] get::return_y#0 = get::return_y#5
|
||||
// [2] get::return_x#0 = get::return_x#7
|
||||
// [3] get::return_y#0 = get::return_y#7
|
||||
jmp __b2
|
||||
// main::@2
|
||||
__b2:
|
||||
@ -548,8 +542,8 @@ main: {
|
||||
get_from___b1:
|
||||
// [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy
|
||||
jsr get
|
||||
// [11] get::return_x#1 = get::return_x#5
|
||||
// [12] get::return_y#1 = get::return_y#5
|
||||
// [11] get::return_x#1 = get::return_x#7
|
||||
// [12] get::return_y#1 = get::return_y#7
|
||||
jmp __b3
|
||||
// main::@3
|
||||
__b3:
|
||||
@ -601,8 +595,8 @@ get: {
|
||||
__breturn_from___b1:
|
||||
__breturn_from___b2:
|
||||
__breturn_from___b4:
|
||||
// [26] phi get::return_y#5 = get::return_y#2 [phi:get::@1/get::@2/get::@4->get::@return#0] -- register_copy
|
||||
// [26] phi get::return_x#5 = get::return_x#2 [phi:get::@1/get::@2/get::@4->get::@return#1] -- register_copy
|
||||
// [26] phi get::return_y#7 = get::return_y#2 [phi:get::@1/get::@2/get::@4->get::@return#0] -- register_copy
|
||||
// [26] phi get::return_x#7 = get::return_x#2 [phi:get::@1/get::@2/get::@4->get::@return#1] -- register_copy
|
||||
jmp __breturn
|
||||
// get::@return
|
||||
__breturn:
|
||||
@ -673,14 +667,14 @@ byte get::return_x#1 reg byte a 11.0
|
||||
byte get::return_x#2 reg byte a 101.0
|
||||
byte get::return_x#3 reg byte a 101.0
|
||||
byte get::return_x#4 reg byte a 101.0
|
||||
byte get::return_x#5 reg byte a 79.0
|
||||
byte get::return_x#7 reg byte a 79.0
|
||||
byte get::return_y
|
||||
byte get::return_y#0 reg byte x 2.0
|
||||
byte get::return_y#1 reg byte x 11.0
|
||||
byte get::return_y#2 reg byte x 202.0
|
||||
byte get::return_y#3 reg byte x 202.0
|
||||
byte get::return_y#4 reg byte x 202.0
|
||||
byte get::return_y#5 reg byte x 52.66666666666666
|
||||
byte get::return_y#7 reg byte x 52.66666666666666
|
||||
void main()
|
||||
byte~ main::$0_x reg byte a 2.0
|
||||
byte~ main::$0_y reg byte x 2.0
|
||||
@ -696,8 +690,8 @@ constant struct Point* p2 = (struct Point*) 57344
|
||||
|
||||
reg byte y [ main::i#2 main::i#1 ]
|
||||
reg byte a [ get::i#2 get::i#1 ]
|
||||
reg byte a [ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
reg byte x [ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
reg byte a [ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
reg byte x [ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
reg byte a [ get::return_x#0 ]
|
||||
reg byte x [ get::return_y#0 ]
|
||||
reg byte a [ main::$0_x ]
|
||||
@ -741,8 +735,8 @@ main: {
|
||||
lda #0
|
||||
jsr get
|
||||
// get(0)
|
||||
// [2] get::return_x#0 = get::return_x#5
|
||||
// [3] get::return_y#0 = get::return_y#5
|
||||
// [2] get::return_x#0 = get::return_x#7
|
||||
// [3] get::return_y#0 = get::return_y#7
|
||||
// main::@2
|
||||
// [4] main::$0_x = get::return_x#0
|
||||
// [5] main::$0_y = get::return_y#0
|
||||
@ -766,8 +760,8 @@ main: {
|
||||
// [21] phi get::i#2 = get::i#1 [phi:main::@1->get#0] -- register_copy
|
||||
jsr get
|
||||
// get(i)
|
||||
// [11] get::return_x#1 = get::return_x#5
|
||||
// [12] get::return_y#1 = get::return_y#5
|
||||
// [11] get::return_x#1 = get::return_x#7
|
||||
// [12] get::return_y#1 = get::return_y#7
|
||||
// main::@3
|
||||
// [13] main::$1_x = get::return_x#1 -- vbuz1=vbuaa
|
||||
sta.z __1_x
|
||||
@ -814,8 +808,8 @@ get: {
|
||||
// [25] get::return_y#4 = *((byte*)p2+OFFSET_STRUCT_POINT_Y) -- vbuxx=_deref_pbuc1
|
||||
ldx p2+OFFSET_STRUCT_POINT_Y
|
||||
// [26] phi from get::@1 get::@2 get::@4 to get::@return [phi:get::@1/get::@2/get::@4->get::@return]
|
||||
// [26] phi get::return_y#5 = get::return_y#2 [phi:get::@1/get::@2/get::@4->get::@return#0] -- register_copy
|
||||
// [26] phi get::return_x#5 = get::return_x#2 [phi:get::@1/get::@2/get::@4->get::@return#1] -- register_copy
|
||||
// [26] phi get::return_y#7 = get::return_y#2 [phi:get::@1/get::@2/get::@4->get::@return#0] -- register_copy
|
||||
// [26] phi get::return_x#7 = get::return_x#2 [phi:get::@1/get::@2/get::@4->get::@return#1] -- register_copy
|
||||
// get::@return
|
||||
// }
|
||||
// [27] return
|
||||
|
@ -11,14 +11,14 @@ byte get::return_x#1 reg byte a 11.0
|
||||
byte get::return_x#2 reg byte a 101.0
|
||||
byte get::return_x#3 reg byte a 101.0
|
||||
byte get::return_x#4 reg byte a 101.0
|
||||
byte get::return_x#5 reg byte a 79.0
|
||||
byte get::return_x#7 reg byte a 79.0
|
||||
byte get::return_y
|
||||
byte get::return_y#0 reg byte x 2.0
|
||||
byte get::return_y#1 reg byte x 11.0
|
||||
byte get::return_y#2 reg byte x 202.0
|
||||
byte get::return_y#3 reg byte x 202.0
|
||||
byte get::return_y#4 reg byte x 202.0
|
||||
byte get::return_y#5 reg byte x 52.66666666666666
|
||||
byte get::return_y#7 reg byte x 52.66666666666666
|
||||
void main()
|
||||
byte~ main::$0_x reg byte a 2.0
|
||||
byte~ main::$0_y reg byte x 2.0
|
||||
@ -34,8 +34,8 @@ constant struct Point* p2 = (struct Point*) 57344
|
||||
|
||||
reg byte y [ main::i#2 main::i#1 ]
|
||||
reg byte a [ get::i#2 get::i#1 ]
|
||||
reg byte a [ get::return_x#5 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
reg byte x [ get::return_y#5 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
reg byte a [ get::return_x#7 get::return_x#2 get::return_x#3 get::return_x#4 ]
|
||||
reg byte x [ get::return_y#7 get::return_y#2 get::return_y#3 get::return_y#4 ]
|
||||
reg byte a [ get::return_x#0 ]
|
||||
reg byte x [ get::return_y#0 ]
|
||||
reg byte a [ main::$0_x ]
|
||||
|
@ -3,8 +3,8 @@ Eliminating unused variable with no statement main::$0
|
||||
Eliminating unused variable with no statement main::$1
|
||||
Unwinding list assignment { main::$0_x, main::$0_y } = { get::return_x, get::return_y }
|
||||
Unwinding list assignment { main::$1_x, main::$1_y } = { get::return_x, get::return_y }
|
||||
Unwinding list assignment { get::return_x#0, get::return_y#0 } = { get::return_x#3, get::return_y#3 }
|
||||
Unwinding list assignment { get::return_x#1, get::return_y#1 } = { get::return_x#3, get::return_y#3 }
|
||||
Unwinding list assignment { get::return_x#0, get::return_y#0 } = { get::return_x#5, get::return_y#5 }
|
||||
Unwinding list assignment { get::return_x#1, get::return_y#1 } = { get::return_x#5, get::return_y#5 }
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
|
||||
@ -12,14 +12,14 @@ void main()
|
||||
main: scope:[main] from __start::@1
|
||||
get::i#0 = 0
|
||||
call get
|
||||
get::return_x#0 = get::return_x#3
|
||||
get::return_y#0 = get::return_y#3
|
||||
get::return_x#0 = get::return_x#5
|
||||
get::return_y#0 = get::return_y#5
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main
|
||||
get::return_y#4 = phi( main/get::return_y#0 )
|
||||
get::return_x#4 = phi( main/get::return_x#0 )
|
||||
main::$0_x = get::return_x#4
|
||||
main::$0_y = get::return_y#4
|
||||
get::return_y#3 = phi( main/get::return_y#0 )
|
||||
get::return_x#3 = phi( main/get::return_x#0 )
|
||||
main::$0_x = get::return_x#3
|
||||
main::$0_y = get::return_y#3
|
||||
*((byte*)SCREEN+OFFSET_STRUCT_POINT_X) = main::$0_x
|
||||
*((byte*)SCREEN+OFFSET_STRUCT_POINT_Y) = main::$0_y
|
||||
main::i#0 = 1
|
||||
@ -28,15 +28,15 @@ main::@1: scope:[main] from main::@2 main::@3
|
||||
main::i#2 = phi( main::@2/main::i#0, main::@3/main::i#1 )
|
||||
get::i#1 = main::i#2
|
||||
call get
|
||||
get::return_x#1 = get::return_x#3
|
||||
get::return_y#1 = get::return_y#3
|
||||
get::return_x#1 = get::return_x#5
|
||||
get::return_y#1 = get::return_y#5
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@1
|
||||
main::i#3 = phi( main::@1/main::i#2 )
|
||||
get::return_y#5 = phi( main::@1/get::return_y#1 )
|
||||
get::return_x#5 = phi( main::@1/get::return_x#1 )
|
||||
main::$1_x = get::return_x#5
|
||||
main::$1_y = get::return_y#5
|
||||
get::return_y#4 = phi( main::@1/get::return_y#1 )
|
||||
get::return_x#4 = phi( main::@1/get::return_x#1 )
|
||||
main::$1_x = get::return_x#4
|
||||
main::$1_y = get::return_y#4
|
||||
main::$3 = main::i#3 * SIZEOF_STRUCT_POINT
|
||||
((byte*)SCREEN+OFFSET_STRUCT_POINT_X)[main::$3] = main::$1_x
|
||||
((byte*)SCREEN+OFFSET_STRUCT_POINT_Y)[main::$3] = main::$1_y
|
||||
@ -57,11 +57,9 @@ get: scope:[get] from main main::@1
|
||||
get::return#0 = struct-unwound {get::return_x#2, get::return_y#2}
|
||||
to:get::@return
|
||||
get::@return: scope:[get] from get
|
||||
get::return_y#6 = phi( get/get::return_y#2 )
|
||||
get::return_x#6 = phi( get/get::return_x#2 )
|
||||
get::return_x#3 = get::return_x#6
|
||||
get::return_y#3 = get::return_y#6
|
||||
get::return#1 = struct-unwound {get::return_x#3, get::return_y#3}
|
||||
get::return_y#5 = phi( get/get::return_y#2 )
|
||||
get::return_x#5 = phi( get/get::return_x#2 )
|
||||
get::return#1 = struct-unwound {}
|
||||
return
|
||||
to:@return
|
||||
|
||||
@ -103,7 +101,6 @@ byte get::return_x#2
|
||||
byte get::return_x#3
|
||||
byte get::return_x#4
|
||||
byte get::return_x#5
|
||||
byte get::return_x#6
|
||||
byte get::return_y
|
||||
byte get::return_y#0
|
||||
byte get::return_y#1
|
||||
@ -111,7 +108,6 @@ byte get::return_y#2
|
||||
byte get::return_y#3
|
||||
byte get::return_y#4
|
||||
byte get::return_y#5
|
||||
byte get::return_y#6
|
||||
void main()
|
||||
byte~ main::$0_x
|
||||
byte~ main::$0_y
|
||||
@ -134,13 +130,13 @@ Simplifying constant integer cast 0
|
||||
Successful SSA optimization PassNCastSimplification
|
||||
Finalized unsigned number type (byte) 0
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Alias get::return_x#0 = get::return_x#4
|
||||
Alias get::return_y#0 = get::return_y#4
|
||||
Alias get::return_x#1 = get::return_x#5
|
||||
Alias get::return_y#1 = get::return_y#5
|
||||
Alias get::return_x#0 = get::return_x#3
|
||||
Alias get::return_y#0 = get::return_y#3
|
||||
Alias get::return_x#1 = get::return_x#4
|
||||
Alias get::return_y#1 = get::return_y#4
|
||||
Alias main::i#2 = main::i#3
|
||||
Alias get::return_x#2 = get::p_x#0 get::i#2 get::return_x#6 get::return_x#3
|
||||
Alias get::return_y#2 = get::return_y#6 get::return_y#3
|
||||
Alias get::return_x#2 = get::p_x#0 get::i#2 get::return_x#5
|
||||
Alias get::return_y#2 = get::return_y#5
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Simple Condition main::$2 [21] if(main::i#1!=rangelast(1,2)) goto main::@1
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
@ -160,7 +156,7 @@ Simplifying expression containing zero (byte*)SCREEN in [6] *((byte*)SCREEN+OFFS
|
||||
Simplifying expression containing zero (byte*)SCREEN in [17] ((byte*)SCREEN+OFFSET_STRUCT_POINT_X)[main::$3] = main::$1_x
|
||||
Successful SSA optimization PassNSimplifyExpressionWithZero
|
||||
Eliminating unused variable get::return#0 and assignment [17] get::return#0 = struct-unwound {get::return_x#2, get::return_y#2}
|
||||
Eliminating unused variable get::return#1 and assignment [18] get::return#1 = struct-unwound {get::return_x#2, get::return_y#2}
|
||||
Eliminating unused variable get::return#1 and assignment [18] get::return#1 = struct-unwound {}
|
||||
Eliminating unused constant OFFSET_STRUCT_POINT_X
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused procedure __start
|
||||
@ -196,7 +192,7 @@ CALL GRAPH
|
||||
Calls in [main] to get:1 get:9
|
||||
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [8] get::return_x#7 = get::i#1
|
||||
Coalesced [8] get::return_x#6 = get::i#1
|
||||
Coalesced [18] main::i#4 = main::i#1
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block label main::@4
|
||||
|
@ -50,16 +50,16 @@ main::@1: scope:[main] from main main::@4
|
||||
main::@2: scope:[main] from main::@1
|
||||
[23] phi()
|
||||
[24] call tod_read
|
||||
[25] tod_read::return_TENTHS#2 = tod_read::return_TENTHS#0
|
||||
[26] tod_read::return_SEC#2 = tod_read::return_SEC#0
|
||||
[27] tod_read::return_MIN#2 = tod_read::return_MIN#0
|
||||
[28] tod_read::return_HOURS#2 = tod_read::return_HOURS#0
|
||||
[25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0
|
||||
[26] tod_read::return_SEC#1 = tod_read::return_SEC#0
|
||||
[27] tod_read::return_MIN#1 = tod_read::return_MIN#0
|
||||
[28] tod_read::return_HOURS#1 = tod_read::return_HOURS#0
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2
|
||||
[30] tod_str::tod_SEC#0 = tod_read::return_SEC#2
|
||||
[31] tod_str::tod_MIN#0 = tod_read::return_MIN#2
|
||||
[32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#2
|
||||
[29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1
|
||||
[30] tod_str::tod_SEC#0 = tod_read::return_SEC#1
|
||||
[31] tod_str::tod_MIN#0 = tod_read::return_MIN#1
|
||||
[32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1
|
||||
[33] call tod_str
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
|
@ -2,7 +2,7 @@ Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx
|
||||
Inlined call call __init
|
||||
Eliminating unused variable with no statement main::$2
|
||||
Unwinding list assignment { main::$2_TENTHS, main::$2_SEC, main::$2_MIN, main::$2_HOURS } = { tod_read::return_TENTHS, tod_read::return_SEC, tod_read::return_MIN, tod_read::return_HOURS }
|
||||
Unwinding list assignment { tod_read::return_TENTHS#2, tod_read::return_SEC#2, tod_read::return_MIN#2, tod_read::return_HOURS#2 } = { tod_read::return_TENTHS#1, tod_read::return_SEC#1, tod_read::return_MIN#1, tod_read::return_HOURS#1 }
|
||||
Unwinding list assignment { tod_read::return_TENTHS#1, tod_read::return_SEC#1, tod_read::return_MIN#1, tod_read::return_HOURS#1 } = { tod_read::return_TENTHS#2, tod_read::return_SEC#2, tod_read::return_MIN#2, tod_read::return_HOURS#2 }
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
|
||||
@ -308,15 +308,11 @@ tod_read: scope:[tod_read] from main::@4
|
||||
tod_read::return#0 = struct-unwound {tod_read::return_TENTHS#0, tod_read::return_SEC#0, tod_read::return_MIN#0, tod_read::return_HOURS#0}
|
||||
to:tod_read::@return
|
||||
tod_read::@return: scope:[tod_read] from tod_read
|
||||
tod_read::return_HOURS#3 = phi( tod_read/tod_read::return_HOURS#0 )
|
||||
tod_read::return_MIN#3 = phi( tod_read/tod_read::return_MIN#0 )
|
||||
tod_read::return_SEC#3 = phi( tod_read/tod_read::return_SEC#0 )
|
||||
tod_read::return_TENTHS#3 = phi( tod_read/tod_read::return_TENTHS#0 )
|
||||
tod_read::return_TENTHS#1 = tod_read::return_TENTHS#3
|
||||
tod_read::return_SEC#1 = tod_read::return_SEC#3
|
||||
tod_read::return_MIN#1 = tod_read::return_MIN#3
|
||||
tod_read::return_HOURS#1 = tod_read::return_HOURS#3
|
||||
tod_read::return#1 = struct-unwound {tod_read::return_TENTHS#1, tod_read::return_SEC#1, tod_read::return_MIN#1, tod_read::return_HOURS#1}
|
||||
tod_read::return_HOURS#2 = phi( tod_read/tod_read::return_HOURS#0 )
|
||||
tod_read::return_MIN#2 = phi( tod_read/tod_read::return_MIN#0 )
|
||||
tod_read::return_SEC#2 = phi( tod_read/tod_read::return_SEC#0 )
|
||||
tod_read::return_TENTHS#2 = phi( tod_read/tod_read::return_TENTHS#0 )
|
||||
tod_read::return#1 = struct-unwound {}
|
||||
return
|
||||
to:@return
|
||||
|
||||
@ -379,20 +375,20 @@ main::@2: scope:[main] from main::@1
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2
|
||||
call tod_read
|
||||
tod_read::return_TENTHS#2 = tod_read::return_TENTHS#1
|
||||
tod_read::return_SEC#2 = tod_read::return_SEC#1
|
||||
tod_read::return_MIN#2 = tod_read::return_MIN#1
|
||||
tod_read::return_HOURS#2 = tod_read::return_HOURS#1
|
||||
tod_read::return_TENTHS#1 = tod_read::return_TENTHS#2
|
||||
tod_read::return_SEC#1 = tod_read::return_SEC#2
|
||||
tod_read::return_MIN#1 = tod_read::return_MIN#2
|
||||
tod_read::return_HOURS#1 = tod_read::return_HOURS#2
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@4
|
||||
tod_read::return_HOURS#4 = phi( main::@4/tod_read::return_HOURS#2 )
|
||||
tod_read::return_MIN#4 = phi( main::@4/tod_read::return_MIN#2 )
|
||||
tod_read::return_SEC#4 = phi( main::@4/tod_read::return_SEC#2 )
|
||||
tod_read::return_TENTHS#4 = phi( main::@4/tod_read::return_TENTHS#2 )
|
||||
main::$2_TENTHS = tod_read::return_TENTHS#4
|
||||
main::$2_SEC = tod_read::return_SEC#4
|
||||
main::$2_MIN = tod_read::return_MIN#4
|
||||
main::$2_HOURS = tod_read::return_HOURS#4
|
||||
tod_read::return_HOURS#3 = phi( main::@4/tod_read::return_HOURS#1 )
|
||||
tod_read::return_MIN#3 = phi( main::@4/tod_read::return_MIN#1 )
|
||||
tod_read::return_SEC#3 = phi( main::@4/tod_read::return_SEC#1 )
|
||||
tod_read::return_TENTHS#3 = phi( main::@4/tod_read::return_TENTHS#1 )
|
||||
main::$2_TENTHS = tod_read::return_TENTHS#3
|
||||
main::$2_SEC = tod_read::return_SEC#3
|
||||
main::$2_MIN = tod_read::return_MIN#3
|
||||
main::$2_HOURS = tod_read::return_HOURS#3
|
||||
tod_str::tod_TENTHS#0 = main::$2_TENTHS
|
||||
tod_str::tod_SEC#0 = main::$2_SEC
|
||||
tod_str::tod_MIN#0 = main::$2_MIN
|
||||
@ -640,25 +636,21 @@ byte tod_read::return_HOURS#0
|
||||
byte tod_read::return_HOURS#1
|
||||
byte tod_read::return_HOURS#2
|
||||
byte tod_read::return_HOURS#3
|
||||
byte tod_read::return_HOURS#4
|
||||
byte tod_read::return_MIN
|
||||
byte tod_read::return_MIN#0
|
||||
byte tod_read::return_MIN#1
|
||||
byte tod_read::return_MIN#2
|
||||
byte tod_read::return_MIN#3
|
||||
byte tod_read::return_MIN#4
|
||||
byte tod_read::return_SEC
|
||||
byte tod_read::return_SEC#0
|
||||
byte tod_read::return_SEC#1
|
||||
byte tod_read::return_SEC#2
|
||||
byte tod_read::return_SEC#3
|
||||
byte tod_read::return_SEC#4
|
||||
byte tod_read::return_TENTHS
|
||||
byte tod_read::return_TENTHS#0
|
||||
byte tod_read::return_TENTHS#1
|
||||
byte tod_read::return_TENTHS#2
|
||||
byte tod_read::return_TENTHS#3
|
||||
byte tod_read::return_TENTHS#4
|
||||
byte tod_read::secs
|
||||
byte tod_read::secs#0
|
||||
byte tod_read::tenths
|
||||
@ -919,15 +911,15 @@ Alias memset::c#2 = memset::c#3
|
||||
Alias memset::dst#2 = memset::dst#3
|
||||
Alias memset::end#1 = memset::end#2
|
||||
Alias memset::str#5 = memset::str#6
|
||||
Alias tod_read::return_TENTHS#0 = tod_read::tod_TENTHS#0 tod_read::tenths#0 tod_read::return_TENTHS#3 tod_read::return_TENTHS#1
|
||||
Alias tod_read::return_SEC#0 = tod_read::tod_SEC#0 tod_read::secs#0 tod_read::return_SEC#3 tod_read::return_SEC#1
|
||||
Alias tod_read::return_MIN#0 = tod_read::tod_MIN#0 tod_read::mins#0 tod_read::return_MIN#3 tod_read::return_MIN#1
|
||||
Alias tod_read::return_HOURS#0 = tod_read::tod_HOURS#0 tod_read::hours#0 tod_read::return_HOURS#3 tod_read::return_HOURS#1
|
||||
Alias tod_read::return_TENTHS#0 = tod_read::tod_TENTHS#0 tod_read::tenths#0 tod_read::return_TENTHS#2
|
||||
Alias tod_read::return_SEC#0 = tod_read::tod_SEC#0 tod_read::secs#0 tod_read::return_SEC#2
|
||||
Alias tod_read::return_MIN#0 = tod_read::tod_MIN#0 tod_read::mins#0 tod_read::return_MIN#2
|
||||
Alias tod_read::return_HOURS#0 = tod_read::tod_HOURS#0 tod_read::hours#0 tod_read::return_HOURS#2
|
||||
Alias tod_str::return#0 = tod_str::return#3 tod_str::return#1
|
||||
Alias tod_read::return_TENTHS#2 = tod_read::return_TENTHS#4
|
||||
Alias tod_read::return_SEC#2 = tod_read::return_SEC#4
|
||||
Alias tod_read::return_MIN#2 = tod_read::return_MIN#4
|
||||
Alias tod_read::return_HOURS#2 = tod_read::return_HOURS#4
|
||||
Alias tod_read::return_TENTHS#1 = tod_read::return_TENTHS#3
|
||||
Alias tod_read::return_SEC#1 = tod_read::return_SEC#3
|
||||
Alias tod_read::return_MIN#1 = tod_read::return_MIN#3
|
||||
Alias tod_read::return_HOURS#1 = tod_read::return_HOURS#3
|
||||
Alias tod_str::tod_TENTHS#0 = main::$2_TENTHS
|
||||
Alias tod_str::tod_SEC#0 = main::$2_SEC
|
||||
Alias tod_str::tod_MIN#0 = main::$2_MIN
|
||||
@ -1025,7 +1017,7 @@ Eliminating unused variable memcpy::return#3 and assignment [60] memcpy::return#
|
||||
Eliminating unused variable memset::return#2 and assignment [62] memset::return#2 = memset::str#3
|
||||
Eliminating unused variable memset::return#3 and assignment [64] memset::return#3 = memset::str#3
|
||||
Eliminating unused variable tod_read::return#0 and assignment [86] tod_read::return#0 = struct-unwound {tod_read::return_TENTHS#0, tod_read::return_SEC#0, tod_read::return_MIN#0, tod_read::return_HOURS#0}
|
||||
Eliminating unused variable tod_read::return#1 and assignment [87] tod_read::return#1 = struct-unwound {tod_read::return_TENTHS#0, tod_read::return_SEC#0, tod_read::return_MIN#0, tod_read::return_HOURS#0}
|
||||
Eliminating unused variable tod_read::return#1 and assignment [87] tod_read::return#1 = struct-unwound {}
|
||||
Eliminating unused constant gotoxy::x#1
|
||||
Eliminating unused constant gotoxy::y#1
|
||||
Eliminating unused constant cputs::c#0
|
||||
@ -1282,16 +1274,16 @@ main::@1: scope:[main] from main main::@4
|
||||
main::@2: scope:[main] from main::@1
|
||||
[23] phi()
|
||||
[24] call tod_read
|
||||
[25] tod_read::return_TENTHS#2 = tod_read::return_TENTHS#0
|
||||
[26] tod_read::return_SEC#2 = tod_read::return_SEC#0
|
||||
[27] tod_read::return_MIN#2 = tod_read::return_MIN#0
|
||||
[28] tod_read::return_HOURS#2 = tod_read::return_HOURS#0
|
||||
[25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0
|
||||
[26] tod_read::return_SEC#1 = tod_read::return_SEC#0
|
||||
[27] tod_read::return_MIN#1 = tod_read::return_MIN#0
|
||||
[28] tod_read::return_HOURS#1 = tod_read::return_HOURS#0
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2
|
||||
[30] tod_str::tod_SEC#0 = tod_read::return_SEC#2
|
||||
[31] tod_str::tod_MIN#0 = tod_read::return_MIN#2
|
||||
[32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#2
|
||||
[29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1
|
||||
[30] tod_str::tod_SEC#0 = tod_read::return_SEC#1
|
||||
[31] tod_str::tod_MIN#0 = tod_read::return_MIN#1
|
||||
[32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1
|
||||
[33] call tod_str
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
@ -1589,16 +1581,16 @@ byte tod_read::mins
|
||||
struct TIME_OF_DAY tod_read::return
|
||||
byte tod_read::return_HOURS
|
||||
byte tod_read::return_HOURS#0 122.44444444444446
|
||||
byte tod_read::return_HOURS#2 50.5
|
||||
byte tod_read::return_HOURS#1 50.5
|
||||
byte tod_read::return_MIN
|
||||
byte tod_read::return_MIN#0 157.42857142857142
|
||||
byte tod_read::return_MIN#2 50.5
|
||||
byte tod_read::return_MIN#1 50.5
|
||||
byte tod_read::return_SEC
|
||||
byte tod_read::return_SEC#0 220.39999999999998
|
||||
byte tod_read::return_SEC#2 50.5
|
||||
byte tod_read::return_SEC#1 50.5
|
||||
byte tod_read::return_TENTHS
|
||||
byte tod_read::return_TENTHS#0 367.33333333333337
|
||||
byte tod_read::return_TENTHS#2 50.5
|
||||
byte tod_read::return_TENTHS#1 50.5
|
||||
byte tod_read::secs
|
||||
byte tod_read::tenths
|
||||
byte tod_read::tod_HOURS
|
||||
@ -1652,10 +1644,10 @@ Added variable tod_init::tod_TENTHS#0 to live range equivalence class [ tod_init
|
||||
Added variable tod_init::tod_SEC#0 to live range equivalence class [ tod_init::tod_SEC#0 ]
|
||||
Added variable tod_init::tod_MIN#0 to live range equivalence class [ tod_init::tod_MIN#0 ]
|
||||
Added variable tod_init::tod_HOURS#0 to live range equivalence class [ tod_init::tod_HOURS#0 ]
|
||||
Added variable tod_read::return_TENTHS#2 to live range equivalence class [ tod_read::return_TENTHS#2 ]
|
||||
Added variable tod_read::return_SEC#2 to live range equivalence class [ tod_read::return_SEC#2 ]
|
||||
Added variable tod_read::return_MIN#2 to live range equivalence class [ tod_read::return_MIN#2 ]
|
||||
Added variable tod_read::return_HOURS#2 to live range equivalence class [ tod_read::return_HOURS#2 ]
|
||||
Added variable tod_read::return_TENTHS#1 to live range equivalence class [ tod_read::return_TENTHS#1 ]
|
||||
Added variable tod_read::return_SEC#1 to live range equivalence class [ tod_read::return_SEC#1 ]
|
||||
Added variable tod_read::return_MIN#1 to live range equivalence class [ tod_read::return_MIN#1 ]
|
||||
Added variable tod_read::return_HOURS#1 to live range equivalence class [ tod_read::return_HOURS#1 ]
|
||||
Added variable tod_str::tod_TENTHS#0 to live range equivalence class [ tod_str::tod_TENTHS#0 ]
|
||||
Added variable tod_str::tod_SEC#0 to live range equivalence class [ tod_str::tod_SEC#0 ]
|
||||
Added variable tod_str::tod_MIN#0 to live range equivalence class [ tod_str::tod_MIN#0 ]
|
||||
@ -1710,10 +1702,10 @@ Complete equivalence classes
|
||||
[ tod_init::tod_SEC#0 ]
|
||||
[ tod_init::tod_MIN#0 ]
|
||||
[ tod_init::tod_HOURS#0 ]
|
||||
[ tod_read::return_TENTHS#2 ]
|
||||
[ tod_read::return_SEC#2 ]
|
||||
[ tod_read::return_MIN#2 ]
|
||||
[ tod_read::return_HOURS#2 ]
|
||||
[ tod_read::return_TENTHS#1 ]
|
||||
[ tod_read::return_SEC#1 ]
|
||||
[ tod_read::return_MIN#1 ]
|
||||
[ tod_read::return_HOURS#1 ]
|
||||
[ tod_str::tod_TENTHS#0 ]
|
||||
[ tod_str::tod_SEC#0 ]
|
||||
[ tod_str::tod_MIN#0 ]
|
||||
@ -1767,10 +1759,10 @@ Allocated zp[1]:25 [ tod_init::tod_TENTHS#0 ]
|
||||
Allocated zp[1]:26 [ tod_init::tod_SEC#0 ]
|
||||
Allocated zp[1]:27 [ tod_init::tod_MIN#0 ]
|
||||
Allocated zp[1]:28 [ tod_init::tod_HOURS#0 ]
|
||||
Allocated zp[1]:29 [ tod_read::return_TENTHS#2 ]
|
||||
Allocated zp[1]:30 [ tod_read::return_SEC#2 ]
|
||||
Allocated zp[1]:31 [ tod_read::return_MIN#2 ]
|
||||
Allocated zp[1]:32 [ tod_read::return_HOURS#2 ]
|
||||
Allocated zp[1]:29 [ tod_read::return_TENTHS#1 ]
|
||||
Allocated zp[1]:30 [ tod_read::return_SEC#1 ]
|
||||
Allocated zp[1]:31 [ tod_read::return_MIN#1 ]
|
||||
Allocated zp[1]:32 [ tod_read::return_HOURS#1 ]
|
||||
Allocated zp[1]:33 [ tod_str::tod_TENTHS#0 ]
|
||||
Allocated zp[1]:34 [ tod_str::tod_SEC#0 ]
|
||||
Allocated zp[1]:35 [ tod_str::tod_MIN#0 ]
|
||||
@ -1827,18 +1819,18 @@ Removing always clobbered register reg byte a as potential for zp[1]:26 [ tod_in
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:27 [ tod_init::tod_MIN#0 ]
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:28 [ tod_init::tod_HOURS#0 ]
|
||||
Statement [52] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & $7f [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:7::tod_init:20 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a
|
||||
Statement [63] tod_str::$0 = tod_str::tod_HOURS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [63] tod_str::$0 = tod_str::tod_HOURS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:33 [ tod_str::tod_TENTHS#0 ]
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:34 [ tod_str::tod_SEC#0 ]
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:35 [ tod_str::tod_MIN#0 ]
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:36 [ tod_str::tod_HOURS#0 ]
|
||||
Statement [66] tod_str::$2 = tod_str::tod_HOURS#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [69] tod_str::$4 = tod_str::tod_MIN#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [72] tod_str::$6 = tod_str::tod_MIN#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [75] tod_str::$8 = tod_str::tod_SEC#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [78] tod_str::$10 = tod_str::tod_SEC#0 & $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [81] tod_str::$12 = tod_str::tod_TENTHS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [84] tod_str::$14 = tod_str::tod_TENTHS#0 & $f [ tod_str::$14 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::$14 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [66] tod_str::$2 = tod_str::tod_HOURS#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [69] tod_str::$4 = tod_str::tod_MIN#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [72] tod_str::$6 = tod_str::tod_MIN#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [75] tod_str::$8 = tod_str::tod_SEC#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [78] tod_str::$10 = tod_str::tod_SEC#0 & $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [81] tod_str::$12 = tod_str::tod_TENTHS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [84] tod_str::$14 = tod_str::tod_TENTHS#0 & $f [ tod_str::$14 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::$14 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [90] cputs::c#1 = *cputs::s#2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] ( main:7::cputs:35 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [97] conio_line_text[conio_cursor_x] = cputc::c#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:35::cputc:95 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte y
|
||||
Statement [98] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:35::cputc:95 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y
|
||||
@ -1875,14 +1867,14 @@ Statement [48] gotoxy::$6 = COLORRAM + gotoxy::line_offset#0 [ conio_cursor_x co
|
||||
Statement [49] conio_line_color = gotoxy::$6 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( gotoxy:14 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } conio_c64_init:5::gotoxy:14 [ TOD_ZERO conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { gotoxy::y#2 = gotoxy::y#4 conio_c64_init::line#2 } } main:7::gotoxy:22 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { } ) always clobbers reg byte a
|
||||
Statement [51] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) = *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) | $80 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:7::tod_init:20 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a
|
||||
Statement [52] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) = *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) & $7f [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] ( main:7::tod_init:20 [ tod_init::tod_TENTHS#0 tod_init::tod_SEC#0 tod_init::tod_MIN#0 tod_init::tod_HOURS#0 ] { } ) always clobbers reg byte a
|
||||
Statement [63] tod_str::$0 = tod_str::tod_HOURS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [66] tod_str::$2 = tod_str::tod_HOURS#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [69] tod_str::$4 = tod_str::tod_MIN#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [72] tod_str::$6 = tod_str::tod_MIN#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [75] tod_str::$8 = tod_str::tod_SEC#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [78] tod_str::$10 = tod_str::tod_SEC#0 & $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [81] tod_str::$12 = tod_str::tod_TENTHS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [84] tod_str::$14 = tod_str::tod_TENTHS#0 & $f [ tod_str::$14 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::$14 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 } { tod_str::tod_SEC#0 = tod_read::return_SEC#2 } { tod_str::tod_MIN#0 = tod_read::return_MIN#2 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 } } ) always clobbers reg byte a
|
||||
Statement [63] tod_str::$0 = tod_str::tod_HOURS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::tod_HOURS#0 tod_str::$0 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [66] tod_str::$2 = tod_str::tod_HOURS#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$2 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [69] tod_str::$4 = tod_str::tod_MIN#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::tod_MIN#0 tod_str::$4 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [72] tod_str::$6 = tod_str::tod_MIN#0 & $f [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$6 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [75] tod_str::$8 = tod_str::tod_SEC#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::tod_SEC#0 tod_str::$8 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [78] tod_str::$10 = tod_str::tod_SEC#0 & $f [ tod_str::tod_TENTHS#0 tod_str::$10 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$10 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [81] tod_str::$12 = tod_str::tod_TENTHS#0 >> 4 [ tod_str::tod_TENTHS#0 tod_str::$12 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::tod_TENTHS#0 tod_str::$12 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [84] tod_str::$14 = tod_str::tod_TENTHS#0 & $f [ tod_str::$14 ] ( main:7::tod_str:33 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color tod_str::$14 ] { { tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 } { tod_str::tod_SEC#0 = tod_read::return_SEC#1 } { tod_str::tod_MIN#0 = tod_read::return_MIN#1 } { tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 } } ) always clobbers reg byte a
|
||||
Statement [90] cputs::c#1 = *cputs::s#2 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] ( main:7::cputs:35 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color cputs::s#2 cputs::c#1 ] { } ) always clobbers reg byte a reg byte y
|
||||
Statement [97] conio_line_text[conio_cursor_x] = cputc::c#0 [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:35::cputc:95 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte y
|
||||
Statement [98] conio_line_color[conio_cursor_x] = LIGHT_BLUE [ conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] ( main:7::cputs:35::cputc:95 [ cputs::s#0 conio_cursor_x conio_cursor_y conio_line_text conio_line_color ] { { cputc::c#0 = cputs::c#1 } } ) always clobbers reg byte a reg byte y
|
||||
@ -1920,10 +1912,10 @@ Potential registers zp[1]:25 [ tod_init::tod_TENTHS#0 ] : zp[1]:25 , reg byte x
|
||||
Potential registers zp[1]:26 [ tod_init::tod_SEC#0 ] : zp[1]:26 , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:27 [ tod_init::tod_MIN#0 ] : zp[1]:27 , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:28 [ tod_init::tod_HOURS#0 ] : zp[1]:28 , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:29 [ tod_read::return_TENTHS#2 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:30 [ tod_read::return_SEC#2 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:31 [ tod_read::return_MIN#2 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:32 [ tod_read::return_HOURS#2 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:29 [ tod_read::return_TENTHS#1 ] : zp[1]:29 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:30 [ tod_read::return_SEC#1 ] : zp[1]:30 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:31 [ tod_read::return_MIN#1 ] : zp[1]:31 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:32 [ tod_read::return_HOURS#1 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:33 [ tod_str::tod_TENTHS#0 ] : zp[1]:33 , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:34 [ tod_str::tod_SEC#0 ] : zp[1]:34 , reg byte x , reg byte y ,
|
||||
Potential registers zp[1]:35 [ tod_str::tod_MIN#0 ] : zp[1]:35 , reg byte x , reg byte y ,
|
||||
@ -1968,7 +1960,7 @@ Uplift Scope [cputc] 1,050,001.5: zp[1]:70 [ cputc::c#0 ]
|
||||
Uplift Scope [cputs] 200,002: zp[2]:4 [ cputs::s#2 cputs::s#0 ] 100,001: zp[1]:69 [ cputs::c#1 ]
|
||||
Uplift Scope [tod_str] 2,002: zp[1]:53 [ tod_str::$0 ] 2,002: zp[1]:54 [ tod_str::$1 ] 2,002: zp[1]:55 [ tod_str::$2 ] 2,002: zp[1]:56 [ tod_str::$3 ] 2,002: zp[1]:57 [ tod_str::$4 ] 2,002: zp[1]:58 [ tod_str::$5 ] 2,002: zp[1]:59 [ tod_str::$6 ] 2,002: zp[1]:60 [ tod_str::$7 ] 2,002: zp[1]:61 [ tod_str::$8 ] 2,002: zp[1]:62 [ tod_str::$9 ] 2,002: zp[1]:63 [ tod_str::$10 ] 2,002: zp[1]:64 [ tod_str::$11 ] 2,002: zp[1]:65 [ tod_str::$12 ] 2,002: zp[1]:66 [ tod_str::$13 ] 2,002: zp[1]:67 [ tod_str::$14 ] 2,002: zp[1]:68 [ tod_str::$15 ] 525.75: zp[1]:36 [ tod_str::tod_HOURS#0 ] 191.18: zp[1]:35 [ tod_str::tod_MIN#0 ] 116.83: zp[1]:34 [ tod_str::tod_SEC#0 ] 84.12: zp[1]:33 [ tod_str::tod_TENTHS#0 ]
|
||||
Uplift Scope [gotoxy] 2,002: zp[2]:39 [ gotoxy::$8 ] 2,002: zp[2]:41 [ gotoxy::$9 ] 2,002: zp[2]:45 [ gotoxy::$5 ] 2,002: zp[2]:47 [ gotoxy::$6 ] 1,501.5: zp[2]:37 [ gotoxy::$7 ] 1,360.33: zp[1]:3 [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#2 ] 1,001: zp[2]:43 [ gotoxy::line_offset#0 ]
|
||||
Uplift Scope [tod_read] 367.33: zp[1]:52 [ tod_read::return_TENTHS#0 ] 220.4: zp[1]:51 [ tod_read::return_SEC#0 ] 157.43: zp[1]:50 [ tod_read::return_MIN#0 ] 122.44: zp[1]:49 [ tod_read::return_HOURS#0 ] 50.5: zp[1]:29 [ tod_read::return_TENTHS#2 ] 50.5: zp[1]:30 [ tod_read::return_SEC#2 ] 50.5: zp[1]:31 [ tod_read::return_MIN#2 ] 50.5: zp[1]:32 [ tod_read::return_HOURS#2 ]
|
||||
Uplift Scope [tod_read] 367.33: zp[1]:52 [ tod_read::return_TENTHS#0 ] 220.4: zp[1]:51 [ tod_read::return_SEC#0 ] 157.43: zp[1]:50 [ tod_read::return_MIN#0 ] 122.44: zp[1]:49 [ tod_read::return_HOURS#0 ] 50.5: zp[1]:29 [ tod_read::return_TENTHS#1 ] 50.5: zp[1]:30 [ tod_read::return_SEC#1 ] 50.5: zp[1]:31 [ tod_read::return_MIN#1 ] 50.5: zp[1]:32 [ tod_read::return_HOURS#1 ]
|
||||
Uplift Scope [tod_init] 37.33: zp[1]:28 [ tod_init::tod_HOURS#0 ] 22.4: zp[1]:27 [ tod_init::tod_MIN#0 ] 16: zp[1]:26 [ tod_init::tod_SEC#0 ] 12.44: zp[1]:25 [ tod_init::tod_TENTHS#0 ]
|
||||
Uplift Scope [conio_c64_init] 33: zp[1]:2 [ conio_c64_init::line#2 conio_c64_init::line#0 ]
|
||||
Uplift Scope [cputln]
|
||||
@ -1986,7 +1978,7 @@ Uplifting [] best 122806 combination zp[1]:20 [ conio_cursor_y ] zp[2]:23 [ coni
|
||||
Uplifting [cputc] best 122500 combination reg byte a [ cputc::c#0 ]
|
||||
Uplifting [cputs] best 121800 combination zp[2]:4 [ cputs::s#2 cputs::s#0 ] reg byte a [ cputs::c#1 ]
|
||||
Uplifting [gotoxy] best 121784 combination zp[2]:39 [ gotoxy::$8 ] zp[2]:41 [ gotoxy::$9 ] zp[2]:45 [ gotoxy::$5 ] zp[2]:47 [ gotoxy::$6 ] zp[2]:37 [ gotoxy::$7 ] reg byte x [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#2 ] zp[2]:43 [ gotoxy::line_offset#0 ]
|
||||
Uplifting [tod_read] best 121685 combination reg byte y [ tod_read::return_TENTHS#0 ] reg byte x [ tod_read::return_SEC#0 ] reg byte a [ tod_read::return_MIN#0 ] zp[1]:49 [ tod_read::return_HOURS#0 ] zp[1]:29 [ tod_read::return_TENTHS#2 ] zp[1]:30 [ tod_read::return_SEC#2 ] zp[1]:31 [ tod_read::return_MIN#2 ] zp[1]:32 [ tod_read::return_HOURS#2 ]
|
||||
Uplifting [tod_read] best 121685 combination reg byte y [ tod_read::return_TENTHS#0 ] reg byte x [ tod_read::return_SEC#0 ] reg byte a [ tod_read::return_MIN#0 ] zp[1]:49 [ tod_read::return_HOURS#0 ] zp[1]:29 [ tod_read::return_TENTHS#1 ] zp[1]:30 [ tod_read::return_SEC#1 ] zp[1]:31 [ tod_read::return_MIN#1 ] zp[1]:32 [ tod_read::return_HOURS#1 ]
|
||||
Limited combination testing to 100 combinations of 65536 possible.
|
||||
Uplifting [tod_init] best 121673 combination reg byte y [ tod_init::tod_HOURS#0 ] reg byte x [ tod_init::tod_MIN#0 ] zp[1]:26 [ tod_init::tod_SEC#0 ] zp[1]:25 [ tod_init::tod_TENTHS#0 ]
|
||||
Uplifting [conio_c64_init] best 121661 combination reg byte x [ conio_c64_init::line#2 conio_c64_init::line#0 ]
|
||||
@ -2044,14 +2036,14 @@ Attempting to uplift remaining variables inzp[1]:34 [ tod_str::tod_SEC#0 ]
|
||||
Uplifting [tod_str] best 121517 combination zp[1]:34 [ tod_str::tod_SEC#0 ]
|
||||
Attempting to uplift remaining variables inzp[1]:33 [ tod_str::tod_TENTHS#0 ]
|
||||
Uplifting [tod_str] best 121517 combination zp[1]:33 [ tod_str::tod_TENTHS#0 ]
|
||||
Attempting to uplift remaining variables inzp[1]:29 [ tod_read::return_TENTHS#2 ]
|
||||
Uplifting [tod_read] best 121457 combination reg byte y [ tod_read::return_TENTHS#2 ]
|
||||
Attempting to uplift remaining variables inzp[1]:30 [ tod_read::return_SEC#2 ]
|
||||
Uplifting [tod_read] best 121397 combination reg byte x [ tod_read::return_SEC#2 ]
|
||||
Attempting to uplift remaining variables inzp[1]:31 [ tod_read::return_MIN#2 ]
|
||||
Uplifting [tod_read] best 121397 combination zp[1]:31 [ tod_read::return_MIN#2 ]
|
||||
Attempting to uplift remaining variables inzp[1]:32 [ tod_read::return_HOURS#2 ]
|
||||
Uplifting [tod_read] best 121357 combination reg byte a [ tod_read::return_HOURS#2 ]
|
||||
Attempting to uplift remaining variables inzp[1]:29 [ tod_read::return_TENTHS#1 ]
|
||||
Uplifting [tod_read] best 121457 combination reg byte y [ tod_read::return_TENTHS#1 ]
|
||||
Attempting to uplift remaining variables inzp[1]:30 [ tod_read::return_SEC#1 ]
|
||||
Uplifting [tod_read] best 121397 combination reg byte x [ tod_read::return_SEC#1 ]
|
||||
Attempting to uplift remaining variables inzp[1]:31 [ tod_read::return_MIN#1 ]
|
||||
Uplifting [tod_read] best 121397 combination zp[1]:31 [ tod_read::return_MIN#1 ]
|
||||
Attempting to uplift remaining variables inzp[1]:32 [ tod_read::return_HOURS#1 ]
|
||||
Uplifting [tod_read] best 121357 combination reg byte a [ tod_read::return_HOURS#1 ]
|
||||
Attempting to uplift remaining variables inzp[1]:26 [ tod_init::tod_SEC#0 ]
|
||||
Uplifting [tod_init] best 121357 combination zp[1]:26 [ tod_init::tod_SEC#0 ]
|
||||
Attempting to uplift remaining variables inzp[1]:25 [ tod_init::tod_TENTHS#0 ]
|
||||
@ -2063,7 +2055,7 @@ Coalescing zero page register [ zp[2]:37 [ gotoxy::$7 ] ] with [ zp[2]:41 [ goto
|
||||
Coalescing zero page register [ zp[2]:43 [ gotoxy::line_offset#0 ] ] with [ zp[2]:47 [ gotoxy::$6 ] ] - score: 1
|
||||
Coalescing zero page register [ zp[2]:37 [ gotoxy::$7 gotoxy::$9 ] ] with [ zp[2]:43 [ gotoxy::line_offset#0 gotoxy::$6 ] ] - score: 1
|
||||
Coalescing zero page register [ zp[2]:14 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ] ] with [ zp[2]:6 [ memcpy::source#2 memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ]
|
||||
Coalescing zero page register [ zp[1]:31 [ tod_read::return_MIN#2 ] ] with [ zp[1]:25 [ tod_init::tod_TENTHS#0 ] ]
|
||||
Coalescing zero page register [ zp[1]:31 [ tod_read::return_MIN#1 ] ] with [ zp[1]:25 [ tod_init::tod_TENTHS#0 ] ]
|
||||
Coalescing zero page register [ zp[1]:33 [ tod_str::tod_TENTHS#0 ] ] with [ zp[1]:26 [ tod_init::tod_SEC#0 ] ]
|
||||
Coalescing zero page register [ zp[1]:49 [ tod_read::return_HOURS#0 ] ] with [ zp[1]:34 [ tod_str::tod_SEC#0 ] ]
|
||||
Coalescing zero page register [ zp[2]:73 [ memset::end#0 ] ] with [ zp[2]:8 [ memcpy::destination#2 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] ]
|
||||
@ -2073,7 +2065,7 @@ Allocated (was zp[1]:19) zp[1]:6 [ conio_cursor_x ]
|
||||
Allocated (was zp[1]:20) zp[1]:7 [ conio_cursor_y ]
|
||||
Allocated (was zp[2]:21) zp[2]:8 [ conio_line_text ]
|
||||
Allocated (was zp[2]:23) zp[2]:10 [ conio_line_color ]
|
||||
Allocated (was zp[1]:31) zp[1]:12 [ tod_read::return_MIN#2 tod_init::tod_TENTHS#0 ]
|
||||
Allocated (was zp[1]:31) zp[1]:12 [ tod_read::return_MIN#1 tod_init::tod_TENTHS#0 ]
|
||||
Allocated (was zp[1]:33) zp[1]:13 [ tod_str::tod_TENTHS#0 tod_init::tod_SEC#0 ]
|
||||
Allocated (was zp[2]:37) zp[2]:14 [ gotoxy::$7 gotoxy::$9 gotoxy::line_offset#0 gotoxy::$6 ]
|
||||
Allocated (was zp[2]:39) zp[2]:16 [ gotoxy::$8 ]
|
||||
@ -2235,22 +2227,22 @@ main: {
|
||||
__b2:
|
||||
// [24] call tod_read
|
||||
jsr tod_read
|
||||
// [25] tod_read::return_TENTHS#2 = tod_read::return_TENTHS#0
|
||||
// [26] tod_read::return_SEC#2 = tod_read::return_SEC#0
|
||||
// [27] tod_read::return_MIN#2 = tod_read::return_MIN#0 -- vbuz1=vbuaa
|
||||
// [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0
|
||||
// [26] tod_read::return_SEC#1 = tod_read::return_SEC#0
|
||||
// [27] tod_read::return_MIN#1 = tod_read::return_MIN#0 -- vbuz1=vbuaa
|
||||
sta.z tod_read.return_MIN
|
||||
// [28] tod_read::return_HOURS#2 = tod_read::return_HOURS#0 -- vbuaa=vbuz1
|
||||
// [28] tod_read::return_HOURS#1 = tod_read::return_HOURS#0 -- vbuaa=vbuz1
|
||||
lda.z tod_read.return_HOURS
|
||||
jmp __b3
|
||||
// main::@3
|
||||
__b3:
|
||||
// [29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 -- vbuz1=vbuyy
|
||||
// [29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 -- vbuz1=vbuyy
|
||||
sty.z tod_str.tod_TENTHS
|
||||
// [30] tod_str::tod_SEC#0 = tod_read::return_SEC#2 -- vbuz1=vbuxx
|
||||
// [30] tod_str::tod_SEC#0 = tod_read::return_SEC#1 -- vbuz1=vbuxx
|
||||
stx.z tod_str.tod_SEC
|
||||
// [31] tod_str::tod_MIN#0 = tod_read::return_MIN#2 -- vbuyy=vbuz1
|
||||
// [31] tod_str::tod_MIN#0 = tod_read::return_MIN#1 -- vbuyy=vbuz1
|
||||
ldy.z tod_read.return_MIN
|
||||
// [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 -- vbuxx=vbuaa
|
||||
// [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa
|
||||
tax
|
||||
// [33] call tod_str
|
||||
jsr tod_str
|
||||
@ -3056,16 +3048,16 @@ byte tod_read::mins
|
||||
struct TIME_OF_DAY tod_read::return
|
||||
byte tod_read::return_HOURS
|
||||
byte tod_read::return_HOURS#0 return_HOURS zp[1]:20 122.44444444444446
|
||||
byte tod_read::return_HOURS#2 reg byte a 50.5
|
||||
byte tod_read::return_HOURS#1 reg byte a 50.5
|
||||
byte tod_read::return_MIN
|
||||
byte tod_read::return_MIN#0 reg byte a 157.42857142857142
|
||||
byte tod_read::return_MIN#2 return_MIN zp[1]:12 50.5
|
||||
byte tod_read::return_MIN#1 return_MIN zp[1]:12 50.5
|
||||
byte tod_read::return_SEC
|
||||
byte tod_read::return_SEC#0 reg byte x 220.39999999999998
|
||||
byte tod_read::return_SEC#2 reg byte x 50.5
|
||||
byte tod_read::return_SEC#1 reg byte x 50.5
|
||||
byte tod_read::return_TENTHS
|
||||
byte tod_read::return_TENTHS#0 reg byte y 367.33333333333337
|
||||
byte tod_read::return_TENTHS#2 reg byte y 50.5
|
||||
byte tod_read::return_TENTHS#1 reg byte y 50.5
|
||||
byte tod_read::secs
|
||||
byte tod_read::tenths
|
||||
byte tod_read::tod_HOURS
|
||||
@ -3111,10 +3103,10 @@ zp[2]:8 [ conio_line_text ]
|
||||
zp[2]:10 [ conio_line_color ]
|
||||
reg byte x [ tod_init::tod_MIN#0 ]
|
||||
reg byte y [ tod_init::tod_HOURS#0 ]
|
||||
reg byte y [ tod_read::return_TENTHS#2 ]
|
||||
reg byte x [ tod_read::return_SEC#2 ]
|
||||
zp[1]:12 [ tod_read::return_MIN#2 tod_init::tod_TENTHS#0 ]
|
||||
reg byte a [ tod_read::return_HOURS#2 ]
|
||||
reg byte y [ tod_read::return_TENTHS#1 ]
|
||||
reg byte x [ tod_read::return_SEC#1 ]
|
||||
zp[1]:12 [ tod_read::return_MIN#1 tod_init::tod_TENTHS#0 ]
|
||||
reg byte a [ tod_read::return_HOURS#1 ]
|
||||
zp[1]:13 [ tod_str::tod_TENTHS#0 tod_init::tod_SEC#0 ]
|
||||
reg byte y [ tod_str::tod_MIN#0 ]
|
||||
reg byte x [ tod_str::tod_HOURS#0 ]
|
||||
@ -3290,21 +3282,21 @@ main: {
|
||||
// tod_read()
|
||||
// [24] call tod_read
|
||||
jsr tod_read
|
||||
// [25] tod_read::return_TENTHS#2 = tod_read::return_TENTHS#0
|
||||
// [26] tod_read::return_SEC#2 = tod_read::return_SEC#0
|
||||
// [27] tod_read::return_MIN#2 = tod_read::return_MIN#0 -- vbuz1=vbuaa
|
||||
// [25] tod_read::return_TENTHS#1 = tod_read::return_TENTHS#0
|
||||
// [26] tod_read::return_SEC#1 = tod_read::return_SEC#0
|
||||
// [27] tod_read::return_MIN#1 = tod_read::return_MIN#0 -- vbuz1=vbuaa
|
||||
sta.z tod_read.return_MIN
|
||||
// [28] tod_read::return_HOURS#2 = tod_read::return_HOURS#0 -- vbuaa=vbuz1
|
||||
// [28] tod_read::return_HOURS#1 = tod_read::return_HOURS#0 -- vbuaa=vbuz1
|
||||
lda.z tod_read.return_HOURS
|
||||
// main::@3
|
||||
// tod_str(tod_read())
|
||||
// [29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#2 -- vbuz1=vbuyy
|
||||
// [29] tod_str::tod_TENTHS#0 = tod_read::return_TENTHS#1 -- vbuz1=vbuyy
|
||||
sty.z tod_str.tod_TENTHS
|
||||
// [30] tod_str::tod_SEC#0 = tod_read::return_SEC#2 -- vbuz1=vbuxx
|
||||
// [30] tod_str::tod_SEC#0 = tod_read::return_SEC#1 -- vbuz1=vbuxx
|
||||
stx.z tod_str.tod_SEC
|
||||
// [31] tod_str::tod_MIN#0 = tod_read::return_MIN#2 -- vbuyy=vbuz1
|
||||
// [31] tod_str::tod_MIN#0 = tod_read::return_MIN#1 -- vbuyy=vbuz1
|
||||
ldy.z tod_read.return_MIN
|
||||
// [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#2 -- vbuxx=vbuaa
|
||||
// [32] tod_str::tod_HOURS#0 = tod_read::return_HOURS#1 -- vbuxx=vbuaa
|
||||
tax
|
||||
// [33] call tod_str
|
||||
jsr tod_str
|
||||
|
@ -94,16 +94,16 @@ byte tod_read::mins
|
||||
struct TIME_OF_DAY tod_read::return
|
||||
byte tod_read::return_HOURS
|
||||
byte tod_read::return_HOURS#0 return_HOURS zp[1]:20 122.44444444444446
|
||||
byte tod_read::return_HOURS#2 reg byte a 50.5
|
||||
byte tod_read::return_HOURS#1 reg byte a 50.5
|
||||
byte tod_read::return_MIN
|
||||
byte tod_read::return_MIN#0 reg byte a 157.42857142857142
|
||||
byte tod_read::return_MIN#2 return_MIN zp[1]:12 50.5
|
||||
byte tod_read::return_MIN#1 return_MIN zp[1]:12 50.5
|
||||
byte tod_read::return_SEC
|
||||
byte tod_read::return_SEC#0 reg byte x 220.39999999999998
|
||||
byte tod_read::return_SEC#2 reg byte x 50.5
|
||||
byte tod_read::return_SEC#1 reg byte x 50.5
|
||||
byte tod_read::return_TENTHS
|
||||
byte tod_read::return_TENTHS#0 reg byte y 367.33333333333337
|
||||
byte tod_read::return_TENTHS#2 reg byte y 50.5
|
||||
byte tod_read::return_TENTHS#1 reg byte y 50.5
|
||||
byte tod_read::secs
|
||||
byte tod_read::tenths
|
||||
byte tod_read::tod_HOURS
|
||||
@ -149,10 +149,10 @@ zp[2]:8 [ conio_line_text ]
|
||||
zp[2]:10 [ conio_line_color ]
|
||||
reg byte x [ tod_init::tod_MIN#0 ]
|
||||
reg byte y [ tod_init::tod_HOURS#0 ]
|
||||
reg byte y [ tod_read::return_TENTHS#2 ]
|
||||
reg byte x [ tod_read::return_SEC#2 ]
|
||||
zp[1]:12 [ tod_read::return_MIN#2 tod_init::tod_TENTHS#0 ]
|
||||
reg byte a [ tod_read::return_HOURS#2 ]
|
||||
reg byte y [ tod_read::return_TENTHS#1 ]
|
||||
reg byte x [ tod_read::return_SEC#1 ]
|
||||
zp[1]:12 [ tod_read::return_MIN#1 tod_init::tod_TENTHS#0 ]
|
||||
reg byte a [ tod_read::return_HOURS#1 ]
|
||||
zp[1]:13 [ tod_str::tod_TENTHS#0 tod_init::tod_SEC#0 ]
|
||||
reg byte y [ tod_str::tod_MIN#0 ]
|
||||
reg byte x [ tod_str::tod_HOURS#0 ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user