mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-01-03 11:31:21 +00:00
Fixed problem with for() continue.
This commit is contained in:
parent
da56d74339
commit
c82234db19
@ -1005,11 +1005,10 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor<Object> {
|
||||
sequence.addStatement(endJmpStmt);
|
||||
StatementLabel doJumpTarget = new StatementLabel(doJumpLabel.getRef(), StatementSource.forClassic(ctx), Comment.NO_COMMENTS);
|
||||
sequence.addStatement(doJumpTarget);
|
||||
// Reuse the begin jump target for continue.
|
||||
loopStack.peek().setContinueLabel(beginJumpLabel);
|
||||
// Add body
|
||||
addLoopBody(stmtForCtx.stmt());
|
||||
// Add increment
|
||||
addLoopContinueLabel(loopStack.peek(), ctx);
|
||||
KickCParser.CommaExprContext incrementCtx = ctx.commaExpr(1);
|
||||
if(incrementCtx != null) {
|
||||
PrePostModifierHandler.addPreModifiers(this, incrementCtx, StatementSource.forClassic(ctx));
|
||||
|
@ -1301,6 +1301,11 @@ public class TestPrograms {
|
||||
compileAndCompare("loop-break-continue");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoopForContinue() throws IOException, URISyntaxException {
|
||||
compileAndCompare("loop-for-continue");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoopWhileContinue() throws IOException, URISyntaxException {
|
||||
compileAndCompare("loop-while-continue");
|
||||
|
14
src/test/kc/loop-for-continue.kc
Normal file
14
src/test/kc/loop-for-continue.kc
Normal file
@ -0,0 +1,14 @@
|
||||
// Tests continue statement in a simple for()-loop
|
||||
|
||||
const char* SCREEN = $400;
|
||||
|
||||
const char[] MESSAGE = "hello brave new world!";
|
||||
|
||||
void main() {
|
||||
char idx = 0;
|
||||
for( char i =0; MESSAGE[i]; i++) {
|
||||
if(MESSAGE[i]==' ')
|
||||
continue;
|
||||
SCREEN[idx++] = MESSAGE[i];
|
||||
}
|
||||
}
|
@ -31,8 +31,7 @@ byte myprintf(byte *dst, byte *str, word w1, word w2, word w3) {
|
||||
byte b, digit;
|
||||
byte[6] buf6;
|
||||
word w;
|
||||
kickasm {{ .break }}
|
||||
for (; *str != 0; ++str) {
|
||||
for (; *str != 0; ++str) {
|
||||
b = *str;
|
||||
if (bFormat != 0) { // "(bFormat)" is the normal way -- not supported -- https://gitlab.com/camelot/kickc/issues/135
|
||||
if (b == '0') { bLeadZero = 1; continue; }
|
||||
|
26
src/test/ref/loop-for-continue.asm
Normal file
26
src/test/ref/loop-for-continue.asm
Normal file
@ -0,0 +1,26 @@
|
||||
// Tests continue statement in a simple for()-loop
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.label SCREEN = $400
|
||||
main: {
|
||||
ldx #0
|
||||
ldy #0
|
||||
b1:
|
||||
lda #0
|
||||
cmp MESSAGE,y
|
||||
bne b2
|
||||
rts
|
||||
b2:
|
||||
lda MESSAGE,y
|
||||
cmp #' '
|
||||
beq b4
|
||||
lda MESSAGE,y
|
||||
sta SCREEN,x
|
||||
inx
|
||||
b4:
|
||||
iny
|
||||
jmp b1
|
||||
}
|
||||
MESSAGE: .text "hello brave new world!"
|
||||
.byte 0
|
31
src/test/ref/loop-for-continue.cfg
Normal file
31
src/test/ref/loop-for-continue.cfg
Normal file
@ -0,0 +1,31 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi()
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi()
|
||||
[2] call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@4
|
||||
[5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@4/(byte) main::idx#5 )
|
||||
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@4/(byte) main::i#1 )
|
||||
[6] if((byte) 0!=*((const byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[7] return
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] if(*((const byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@4
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← *((const byte[]) MESSAGE#0 + (byte) main::i#2)
|
||||
[10] (byte) main::idx#1 ← ++ (byte) main::idx#2
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2 main::@3
|
||||
[11] (byte) main::idx#5 ← phi( main::@2/(byte) main::idx#2 main::@3/(byte) main::idx#1 )
|
||||
[12] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
509
src/test/ref/loop-for-continue.log
Normal file
509
src/test/ref/loop-for-continue.log
Normal file
@ -0,0 +1,509 @@
|
||||
Warning! Adding boolean cast to non-boolean condition *((byte[]) MESSAGE + (byte) main::i)
|
||||
Culled Empty Block (label) main::@6
|
||||
Culled Empty Block (label) main::@3
|
||||
Culled Empty Block (label) main::@7
|
||||
Culled Empty Block (label) main::@8
|
||||
Culled Empty Block (label) main::@9
|
||||
Culled Empty Block (label) main::@10
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
@begin: scope:[] from
|
||||
(byte*) SCREEN#0 ← ((byte*)) (number) $400
|
||||
(byte[]) MESSAGE#0 ← (const string) $0
|
||||
to:@1
|
||||
main: scope:[main] from @1
|
||||
(byte) main::idx#0 ← (number) 0
|
||||
(byte) main::i#0 ← (number) 0
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@5
|
||||
(byte) main::idx#4 ← phi( main/(byte) main::idx#0 main::@5/(byte) main::idx#5 )
|
||||
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#1 )
|
||||
(bool~) main::$2 ← (number) 0 != *((byte[]) MESSAGE#0 + (byte) main::i#2)
|
||||
if((bool~) main::$2) goto main::@2
|
||||
to:main::@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
(byte) main::idx#3 ← phi( main::@1/(byte) main::idx#4 )
|
||||
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
|
||||
(bool~) main::$0 ← *((byte[]) MESSAGE#0 + (byte) main::i#3) == (byte) ' '
|
||||
(bool~) main::$1 ← ! (bool~) main::$0
|
||||
if((bool~) main::$1) goto main::@4
|
||||
to:main::@5
|
||||
main::@4: scope:[main] from main::@2
|
||||
(byte) main::idx#2 ← phi( main::@2/(byte) main::idx#3 )
|
||||
(byte) main::i#4 ← phi( main::@2/(byte) main::i#3 )
|
||||
*((byte*) SCREEN#0 + (byte) main::idx#2) ← *((byte[]) MESSAGE#0 + (byte) main::i#4)
|
||||
(byte) main::idx#1 ← ++ (byte) main::idx#2
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@2 main::@4
|
||||
(byte) main::idx#5 ← phi( main::@2/(byte) main::idx#3 main::@4/(byte) main::idx#1 )
|
||||
(byte) main::i#5 ← phi( main::@2/(byte) main::i#3 main::@4/(byte) main::i#4 )
|
||||
(byte) main::i#1 ← ++ (byte) main::i#5
|
||||
to:main::@1
|
||||
main::@return: scope:[main] from main::@1
|
||||
return
|
||||
to:@return
|
||||
@1: scope:[] from @begin
|
||||
call main
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
|
||||
SYMBOL TABLE SSA
|
||||
(const string) $0 = (string) "hello brave new world!"
|
||||
(label) @1
|
||||
(label) @2
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte[]) MESSAGE
|
||||
(byte[]) MESSAGE#0
|
||||
(byte*) SCREEN
|
||||
(byte*) SCREEN#0
|
||||
(void()) main()
|
||||
(bool~) main::$0
|
||||
(bool~) main::$1
|
||||
(bool~) main::$2
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@4
|
||||
(label) main::@5
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#0
|
||||
(byte) main::i#1
|
||||
(byte) main::i#2
|
||||
(byte) main::i#3
|
||||
(byte) main::i#4
|
||||
(byte) main::i#5
|
||||
(byte) main::idx
|
||||
(byte) main::idx#0
|
||||
(byte) main::idx#1
|
||||
(byte) main::idx#2
|
||||
(byte) main::idx#3
|
||||
(byte) main::idx#4
|
||||
(byte) main::idx#5
|
||||
|
||||
Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0
|
||||
Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0
|
||||
Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (number) 0 != *((byte[]) MESSAGE#0 + (byte) main::i#2)
|
||||
Successful SSA optimization PassNAddNumberTypeConversions
|
||||
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
|
||||
Inlining cast (byte) main::idx#0 ← (unumber)(number) 0
|
||||
Inlining cast (byte) main::i#0 ← (unumber)(number) 0
|
||||
Successful SSA optimization Pass2InlineCast
|
||||
Simplifying constant pointer cast (byte*) 1024
|
||||
Simplifying constant integer cast 0
|
||||
Simplifying constant integer cast 0
|
||||
Simplifying constant integer cast 0
|
||||
Successful SSA optimization PassNCastSimplification
|
||||
Finalized unsigned number type (byte) 0
|
||||
Finalized unsigned number type (byte) 0
|
||||
Finalized unsigned number type (byte) 0
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Inversing boolean not [9] (bool~) main::$1 ← *((byte[]) MESSAGE#0 + (byte) main::i#3) != (byte) ' ' from [8] (bool~) main::$0 ← *((byte[]) MESSAGE#0 + (byte) main::i#3) == (byte) ' '
|
||||
Successful SSA optimization Pass2UnaryNotSimplification
|
||||
Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4
|
||||
Alias (byte) main::idx#2 = (byte) main::idx#3 (byte) main::idx#4
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Alias (byte) main::i#2 = (byte) main::i#5
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Simple Condition (bool~) main::$2 [6] if((byte) 0!=*((byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2
|
||||
Simple Condition (bool~) main::$1 [10] if(*((byte[]) MESSAGE#0 + (byte) main::i#2)!=(byte) ' ') goto main::@4
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Negating conditional jump and destination [10] if(*((byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@5
|
||||
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
||||
Constant (const byte*) SCREEN#0 = (byte*) 1024
|
||||
Constant (const byte[]) MESSAGE#0 = $0
|
||||
Constant (const byte) main::idx#0 = 0
|
||||
Constant (const byte) main::i#0 = 0
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Inlining constant with var siblings (const byte) main::idx#0
|
||||
Inlining constant with var siblings (const byte) main::i#0
|
||||
Constant inlined $0 = (const byte[]) MESSAGE#0
|
||||
Constant inlined main::i#0 = (byte) 0
|
||||
Constant inlined main::idx#0 = (byte) 0
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Added new block during phi lifting main::@11(between main::@2 and main::@5)
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @2
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
Coalesced [12] main::idx#8 ← main::idx#1
|
||||
Coalesced [15] main::i#6 ← main::i#1
|
||||
Coalesced [16] main::idx#6 ← main::idx#5
|
||||
Coalesced (already) [17] main::idx#7 ← main::idx#2
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) @2
|
||||
Culled Empty Block (label) main::@11
|
||||
Renumbering block main::@4 to main::@3
|
||||
Renumbering block main::@5 to main::@4
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @1
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main
|
||||
|
||||
FINAL CONTROL FLOW GRAPH
|
||||
@begin: scope:[] from
|
||||
[0] phi()
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] phi()
|
||||
[2] call main
|
||||
to:@end
|
||||
@end: scope:[] from @1
|
||||
[3] phi()
|
||||
main: scope:[main] from @1
|
||||
[4] phi()
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@4
|
||||
[5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@4/(byte) main::idx#5 )
|
||||
[5] (byte) main::i#2 ← phi( main/(byte) 0 main::@4/(byte) main::i#1 )
|
||||
[6] if((byte) 0!=*((const byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[7] return
|
||||
to:@return
|
||||
main::@2: scope:[main] from main::@1
|
||||
[8] if(*((const byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@4
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← *((const byte[]) MESSAGE#0 + (byte) main::i#2)
|
||||
[10] (byte) main::idx#1 ← ++ (byte) main::idx#2
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@2 main::@3
|
||||
[11] (byte) main::idx#5 ← phi( main::@2/(byte) main::idx#2 main::@3/(byte) main::idx#1 )
|
||||
[12] (byte) main::i#1 ← ++ (byte) main::i#2
|
||||
to:main::@1
|
||||
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
(byte[]) MESSAGE
|
||||
(byte*) SCREEN
|
||||
(void()) main()
|
||||
(byte) main::i
|
||||
(byte) main::i#1 22.0
|
||||
(byte) main::i#2 9.166666666666666
|
||||
(byte) main::idx
|
||||
(byte) main::idx#1 22.0
|
||||
(byte) main::idx#2 11.0
|
||||
(byte) main::idx#5 16.5
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::idx#2 main::idx#5 main::idx#1 ]
|
||||
Complete equivalence classes
|
||||
[ main::i#2 main::i#1 ]
|
||||
[ main::idx#2 main::idx#5 main::idx#1 ]
|
||||
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#5 main::idx#1 ]
|
||||
|
||||
INITIAL ASM
|
||||
Target platform is c64basic
|
||||
// File Comments
|
||||
// Tests continue statement in a simple for()-loop
|
||||
// Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(bbegin)
|
||||
.pc = $80d "Program"
|
||||
// Global Constants & labels
|
||||
.label SCREEN = $400
|
||||
// @begin
|
||||
bbegin:
|
||||
// [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
// @1
|
||||
b1:
|
||||
// [2] call main
|
||||
// [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
// [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
// @end
|
||||
bend:
|
||||
// main
|
||||
main: {
|
||||
.label idx = 3
|
||||
.label i = 2
|
||||
// [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
// [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta.z idx
|
||||
// [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta.z i
|
||||
jmp b1
|
||||
// main::@1
|
||||
b1:
|
||||
// [6] if((byte) 0!=*((const byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuz1_then_la1
|
||||
lda #0
|
||||
ldy.z i
|
||||
cmp MESSAGE,y
|
||||
bne b2
|
||||
jmp breturn
|
||||
// main::@return
|
||||
breturn:
|
||||
// [7] return
|
||||
rts
|
||||
// main::@2
|
||||
b2:
|
||||
// [8] if(*((const byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@4 -- pbuc1_derefidx_vbuz1_eq_vbuc2_then_la1
|
||||
ldy.z i
|
||||
lda MESSAGE,y
|
||||
cmp #' '
|
||||
beq b4_from_b2
|
||||
jmp b3
|
||||
// main::@3
|
||||
b3:
|
||||
// [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← *((const byte[]) MESSAGE#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
|
||||
ldy.z i
|
||||
lda MESSAGE,y
|
||||
ldy.z idx
|
||||
sta SCREEN,y
|
||||
// [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuz1=_inc_vbuz1
|
||||
inc.z idx
|
||||
// [11] phi from main::@2 main::@3 to main::@4 [phi:main::@2/main::@3->main::@4]
|
||||
b4_from_b2:
|
||||
b4_from_b3:
|
||||
// [11] phi (byte) main::idx#5 = (byte) main::idx#2 [phi:main::@2/main::@3->main::@4#0] -- register_copy
|
||||
jmp b4
|
||||
// main::@4
|
||||
b4:
|
||||
// [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
|
||||
inc.z i
|
||||
// [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
|
||||
b1_from_b4:
|
||||
// [5] phi (byte) main::idx#2 = (byte) main::idx#5 [phi:main::@4->main::@1#0] -- register_copy
|
||||
// [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@1#1] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
// File Data
|
||||
MESSAGE: .text "hello brave new world!"
|
||||
.byte 0
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [6] if((byte) 0!=*((const byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2 [ main::i#2 main::idx#2 ] ( main:2 [ main::i#2 main::idx#2 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::idx#2 main::idx#5 main::idx#1 ]
|
||||
Statement [8] if(*((const byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@4 [ main::i#2 main::idx#2 ] ( main:2 [ main::i#2 main::idx#2 ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← *((const byte[]) MESSAGE#0 + (byte) main::i#2) [ main::i#2 main::idx#2 ] ( main:2 [ main::i#2 main::idx#2 ] ) always clobbers reg byte a
|
||||
Statement [6] if((byte) 0!=*((const byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2 [ main::i#2 main::idx#2 ] ( main:2 [ main::i#2 main::idx#2 ] ) always clobbers reg byte a
|
||||
Statement [8] if(*((const byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@4 [ main::i#2 main::idx#2 ] ( main:2 [ main::i#2 main::idx#2 ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← *((const byte[]) MESSAGE#0 + (byte) main::i#2) [ main::i#2 main::idx#2 ] ( main:2 [ main::i#2 main::idx#2 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::idx#2 main::idx#5 main::idx#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [main] 49.5: zp ZP_BYTE:3 [ main::idx#2 main::idx#5 main::idx#1 ] 31.17: zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [main] best 523 combination reg byte x [ main::idx#2 main::idx#5 main::idx#1 ] reg byte y [ main::i#2 main::i#1 ]
|
||||
Uplifting [] best 523 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
// File Comments
|
||||
// Tests continue statement in a simple for()-loop
|
||||
// Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(bbegin)
|
||||
.pc = $80d "Program"
|
||||
// Global Constants & labels
|
||||
.label SCREEN = $400
|
||||
// @begin
|
||||
bbegin:
|
||||
// [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
b1_from_bbegin:
|
||||
jmp b1
|
||||
// @1
|
||||
b1:
|
||||
// [2] call main
|
||||
// [4] phi from @1 to main [phi:@1->main]
|
||||
main_from_b1:
|
||||
jsr main
|
||||
// [3] phi from @1 to @end [phi:@1->@end]
|
||||
bend_from_b1:
|
||||
jmp bend
|
||||
// @end
|
||||
bend:
|
||||
// main
|
||||
main: {
|
||||
// [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
b1_from_main:
|
||||
// [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
// [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1
|
||||
ldy #0
|
||||
jmp b1
|
||||
// main::@1
|
||||
b1:
|
||||
// [6] if((byte) 0!=*((const byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
|
||||
lda #0
|
||||
cmp MESSAGE,y
|
||||
bne b2
|
||||
jmp breturn
|
||||
// main::@return
|
||||
breturn:
|
||||
// [7] return
|
||||
rts
|
||||
// main::@2
|
||||
b2:
|
||||
// [8] if(*((const byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@4 -- pbuc1_derefidx_vbuyy_eq_vbuc2_then_la1
|
||||
lda MESSAGE,y
|
||||
cmp #' '
|
||||
beq b4_from_b2
|
||||
jmp b3
|
||||
// main::@3
|
||||
b3:
|
||||
// [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← *((const byte[]) MESSAGE#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
||||
lda MESSAGE,y
|
||||
sta SCREEN,x
|
||||
// [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
// [11] phi from main::@2 main::@3 to main::@4 [phi:main::@2/main::@3->main::@4]
|
||||
b4_from_b2:
|
||||
b4_from_b3:
|
||||
// [11] phi (byte) main::idx#5 = (byte) main::idx#2 [phi:main::@2/main::@3->main::@4#0] -- register_copy
|
||||
jmp b4
|
||||
// main::@4
|
||||
b4:
|
||||
// [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
// [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
|
||||
b1_from_b4:
|
||||
// [5] phi (byte) main::idx#2 = (byte) main::idx#5 [phi:main::@4->main::@1#0] -- register_copy
|
||||
// [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@1#1] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
// File Data
|
||||
MESSAGE: .text "hello brave new world!"
|
||||
.byte 0
|
||||
|
||||
ASSEMBLER OPTIMIZATIONS
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp bend
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp breturn
|
||||
Removing instruction jmp b3
|
||||
Removing instruction jmp b4
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing label b4_from_b2 with b4
|
||||
Removing instruction b1_from_bbegin:
|
||||
Removing instruction b1:
|
||||
Removing instruction main_from_b1:
|
||||
Removing instruction bend_from_b1:
|
||||
Removing instruction b4_from_b2:
|
||||
Removing instruction b4_from_b3:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction bend:
|
||||
Removing instruction b1_from_main:
|
||||
Removing instruction breturn:
|
||||
Removing instruction b3:
|
||||
Removing instruction b1_from_b4:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Updating BasicUpstart to call main directly
|
||||
Removing instruction jsr main
|
||||
Succesful ASM optimization Pass5SkipBegin
|
||||
Removing instruction bbegin:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte[]) MESSAGE
|
||||
(const byte[]) MESSAGE#0 MESSAGE = (string) "hello brave new world!"
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@4
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte y 22.0
|
||||
(byte) main::i#2 reg byte y 9.166666666666666
|
||||
(byte) main::idx
|
||||
(byte) main::idx#1 reg byte x 22.0
|
||||
(byte) main::idx#2 reg byte x 11.0
|
||||
(byte) main::idx#5 reg byte x 16.5
|
||||
|
||||
reg byte y [ main::i#2 main::i#1 ]
|
||||
reg byte x [ main::idx#2 main::idx#5 main::idx#1 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
Score: 391
|
||||
|
||||
// File Comments
|
||||
// Tests continue statement in a simple for()-loop
|
||||
// Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
// Global Constants & labels
|
||||
.label SCREEN = $400
|
||||
// @begin
|
||||
// [1] phi from @begin to @1 [phi:@begin->@1]
|
||||
// @1
|
||||
// [2] call main
|
||||
// [4] phi from @1 to main [phi:@1->main]
|
||||
// [3] phi from @1 to @end [phi:@1->@end]
|
||||
// @end
|
||||
// main
|
||||
main: {
|
||||
// [5] phi from main to main::@1 [phi:main->main::@1]
|
||||
// [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
// [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1
|
||||
ldy #0
|
||||
// main::@1
|
||||
b1:
|
||||
// for( char i =0; MESSAGE[i]; i++)
|
||||
// [6] if((byte) 0!=*((const byte[]) MESSAGE#0 + (byte) main::i#2)) goto main::@2 -- vbuc1_neq_pbuc2_derefidx_vbuyy_then_la1
|
||||
lda #0
|
||||
cmp MESSAGE,y
|
||||
bne b2
|
||||
// main::@return
|
||||
// }
|
||||
// [7] return
|
||||
rts
|
||||
// main::@2
|
||||
b2:
|
||||
// if(MESSAGE[i]==' ')
|
||||
// [8] if(*((const byte[]) MESSAGE#0 + (byte) main::i#2)==(byte) ' ') goto main::@4 -- pbuc1_derefidx_vbuyy_eq_vbuc2_then_la1
|
||||
lda MESSAGE,y
|
||||
cmp #' '
|
||||
beq b4
|
||||
// main::@3
|
||||
// SCREEN[idx++] = MESSAGE[i]
|
||||
// [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← *((const byte[]) MESSAGE#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuyy
|
||||
lda MESSAGE,y
|
||||
sta SCREEN,x
|
||||
// SCREEN[idx++] = MESSAGE[i];
|
||||
// [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
// [11] phi from main::@2 main::@3 to main::@4 [phi:main::@2/main::@3->main::@4]
|
||||
// [11] phi (byte) main::idx#5 = (byte) main::idx#2 [phi:main::@2/main::@3->main::@4#0] -- register_copy
|
||||
// main::@4
|
||||
b4:
|
||||
// for( char i =0; MESSAGE[i]; i++)
|
||||
// [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuyy=_inc_vbuyy
|
||||
iny
|
||||
// [5] phi from main::@4 to main::@1 [phi:main::@4->main::@1]
|
||||
// [5] phi (byte) main::idx#2 = (byte) main::idx#5 [phi:main::@4->main::@1#0] -- register_copy
|
||||
// [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@1#1] -- register_copy
|
||||
jmp b1
|
||||
}
|
||||
// File Data
|
||||
MESSAGE: .text "hello brave new world!"
|
||||
.byte 0
|
||||
|
23
src/test/ref/loop-for-continue.sym
Normal file
23
src/test/ref/loop-for-continue.sym
Normal file
@ -0,0 +1,23 @@
|
||||
(label) @1
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte[]) MESSAGE
|
||||
(const byte[]) MESSAGE#0 MESSAGE = (string) "hello brave new world!"
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@4
|
||||
(label) main::@return
|
||||
(byte) main::i
|
||||
(byte) main::i#1 reg byte y 22.0
|
||||
(byte) main::i#2 reg byte y 9.166666666666666
|
||||
(byte) main::idx
|
||||
(byte) main::idx#1 reg byte x 22.0
|
||||
(byte) main::idx#2 reg byte x 11.0
|
||||
(byte) main::idx#5 reg byte x 16.5
|
||||
|
||||
reg byte y [ main::i#2 main::i#1 ]
|
||||
reg byte x [ main::idx#2 main::idx#5 main::idx#1 ]
|
@ -226,11 +226,11 @@ Print: {
|
||||
}
|
||||
// myprintf(byte* zeropage(6) str, word zeropage(2) w1, word zeropage(4) w2, word zeropage($17) w3)
|
||||
myprintf: {
|
||||
.label str = 6
|
||||
.label bDigits = $d
|
||||
.label bLen = $e
|
||||
.label b = $c
|
||||
.label bArg = 9
|
||||
.label str = 6
|
||||
.label w1 = 2
|
||||
.label w2 = 4
|
||||
.label w3 = $17
|
||||
@ -269,6 +269,11 @@ myprintf: {
|
||||
bne b5
|
||||
lda #1
|
||||
sta.z bLeadZero
|
||||
b32:
|
||||
inc.z str
|
||||
bne !+
|
||||
inc.z str+1
|
||||
!:
|
||||
jmp b1
|
||||
b5:
|
||||
cpx #'1'
|
||||
@ -285,7 +290,7 @@ myprintf: {
|
||||
bne b7
|
||||
lda #1
|
||||
sta.z bTrailing
|
||||
jmp b1
|
||||
jmp b32
|
||||
b7:
|
||||
cpx #'c'
|
||||
bne !b8+
|
||||
@ -300,7 +305,7 @@ myprintf: {
|
||||
b3:
|
||||
lda #0
|
||||
sta.z bFormat
|
||||
jmp b1
|
||||
jmp b32
|
||||
b31:
|
||||
lda.z w
|
||||
lsr
|
||||
@ -422,23 +427,23 @@ myprintf: {
|
||||
txa
|
||||
axs #'0'
|
||||
stx.z bDigits
|
||||
jmp b1
|
||||
jmp b32
|
||||
b4:
|
||||
cpx #'%'
|
||||
bne b32
|
||||
bne b33
|
||||
// default format
|
||||
//w = (bArg == 0) ? w1 : ((bArg == 1) ? w2 : w3); -- "?" is the normal way, but error "sequence does not contain all blocks" -- https://gitlab.com/camelot/kickc/issues/185 [FIXED]
|
||||
lda.z bArg
|
||||
cmp #0
|
||||
beq b33
|
||||
beq b34
|
||||
lda #1
|
||||
cmp.z bArg
|
||||
beq b34
|
||||
beq b35
|
||||
lda.z w3
|
||||
sta.z w
|
||||
lda.z w3+1
|
||||
sta.z w+1
|
||||
b35:
|
||||
b36:
|
||||
inc.z bArg
|
||||
lda #0
|
||||
sta.z bLeadZero
|
||||
@ -448,37 +453,33 @@ myprintf: {
|
||||
sta.z bTrailing
|
||||
lda #1
|
||||
sta.z bFormat
|
||||
jmp b1
|
||||
b34:
|
||||
jmp b32
|
||||
b35:
|
||||
lda.z w2
|
||||
sta.z w
|
||||
lda.z w2+1
|
||||
sta.z w+1
|
||||
jmp b35
|
||||
b33:
|
||||
jmp b36
|
||||
b34:
|
||||
lda.z w1
|
||||
sta.z w
|
||||
lda.z w1+1
|
||||
sta.z w+1
|
||||
jmp b35
|
||||
b32:
|
||||
jmp b36
|
||||
b33:
|
||||
cpx #$41
|
||||
bcc b36
|
||||
bcc b37
|
||||
cpx #$5a+1
|
||||
bcs b36
|
||||
bcs b37
|
||||
txa
|
||||
axs #-[$20]
|
||||
b36:
|
||||
b37:
|
||||
// swap 0x41 / 0x61 when in lower case mode
|
||||
ldy.z bLen
|
||||
txa
|
||||
sta strTemp,y
|
||||
inc.z bLen
|
||||
inc.z str
|
||||
bne !+
|
||||
inc.z str+1
|
||||
!:
|
||||
jmp b1
|
||||
jmp b32
|
||||
buf6: .fill 6, 0
|
||||
}
|
||||
// utoa(word zeropage($11) value, byte* zeropage($13) dst)
|
||||
|
@ -155,15 +155,15 @@ myprintf: scope:[myprintf] from main::@11 main::@6
|
||||
[78] (word) myprintf::w1#7 ← phi( main::@11/(word) myprintf::w1#1 main::@6/(word) myprintf::w1#0 )
|
||||
[78] (byte*) myprintf::str#6 ← phi( main::@11/(const string) main::str1 main::@6/(const string) main::str )
|
||||
to:myprintf::@1
|
||||
myprintf::@1: scope:[myprintf] from myprintf myprintf::@27 myprintf::@28 myprintf::@35 myprintf::@36 myprintf::@37 myprintf::@6
|
||||
[79] (byte) myprintf::bLeadZero#11 ← phi( myprintf/(byte) 0 myprintf::@27/(byte) myprintf::bLeadZero#11 myprintf::@28/(byte) myprintf::bLeadZero#11 myprintf::@6/(byte) myprintf::bLeadZero#11 myprintf::@35/(byte) 0 myprintf::@36/(byte) myprintf::bLeadZero#11 myprintf::@37/(byte) 1 )
|
||||
[79] (byte) myprintf::bDigits#16 ← phi( myprintf/(byte) 0 myprintf::@27/(byte) myprintf::bDigits#28 myprintf::@28/(byte) myprintf::bDigits#1 myprintf::@6/(byte) myprintf::bDigits#16 myprintf::@35/(byte) 1 myprintf::@36/(byte) myprintf::bDigits#16 myprintf::@37/(byte) myprintf::bDigits#16 )
|
||||
[79] (byte) myprintf::bTrailing#11 ← phi( myprintf/(byte) 0 myprintf::@27/(byte) myprintf::bTrailing#11 myprintf::@28/(byte) myprintf::bTrailing#11 myprintf::@6/(byte) 1 myprintf::@35/(byte) 0 myprintf::@36/(byte) myprintf::bTrailing#11 myprintf::@37/(byte) myprintf::bTrailing#11 )
|
||||
[79] (word) myprintf::w#10 ← phi( myprintf/(word) 0 myprintf::@27/(word) myprintf::w#10 myprintf::@28/(word) myprintf::w#10 myprintf::@6/(word) myprintf::w#10 myprintf::@35/(word) myprintf::w#21 myprintf::@36/(word) myprintf::w#10 myprintf::@37/(word) myprintf::w#10 )
|
||||
[79] (byte) myprintf::bArg#10 ← phi( myprintf/(byte) 0 myprintf::@27/(byte) myprintf::bArg#10 myprintf::@28/(byte) myprintf::bArg#10 myprintf::@6/(byte) myprintf::bArg#10 myprintf::@35/(byte) myprintf::bArg#1 myprintf::@36/(byte) myprintf::bArg#10 myprintf::@37/(byte) myprintf::bArg#10 )
|
||||
[79] (byte) myprintf::bLen#10 ← phi( myprintf/(byte) 0 myprintf::@27/(byte) myprintf::bLen#28 myprintf::@28/(byte) myprintf::bLen#10 myprintf::@6/(byte) myprintf::bLen#10 myprintf::@35/(byte) myprintf::bLen#10 myprintf::@36/(byte) myprintf::bLen#7 myprintf::@37/(byte) myprintf::bLen#10 )
|
||||
[79] (byte) myprintf::bFormat#10 ← phi( myprintf/(byte) 0 myprintf::@27/(byte) 0 myprintf::@28/(byte) myprintf::bFormat#10 myprintf::@6/(byte) myprintf::bFormat#10 myprintf::@35/(byte) 1 myprintf::@36/(byte) myprintf::bFormat#10 myprintf::@37/(byte) myprintf::bFormat#10 )
|
||||
[79] (byte*) myprintf::str#10 ← phi( myprintf/(byte*) myprintf::str#6 myprintf::@27/(byte*) myprintf::str#10 myprintf::@28/(byte*) myprintf::str#10 myprintf::@6/(byte*) myprintf::str#10 myprintf::@35/(byte*) myprintf::str#10 myprintf::@36/(byte*) myprintf::str#0 myprintf::@37/(byte*) myprintf::str#10 )
|
||||
myprintf::@1: scope:[myprintf] from myprintf myprintf::@32
|
||||
[79] (byte) myprintf::bLeadZero#11 ← phi( myprintf/(byte) 0 myprintf::@32/(byte) myprintf::bLeadZero#20 )
|
||||
[79] (byte) myprintf::bDigits#16 ← phi( myprintf/(byte) 0 myprintf::@32/(byte) myprintf::bDigits#28 )
|
||||
[79] (byte) myprintf::bTrailing#11 ← phi( myprintf/(byte) 0 myprintf::@32/(byte) myprintf::bTrailing#24 )
|
||||
[79] (word) myprintf::w#10 ← phi( myprintf/(word) 0 myprintf::@32/(word) myprintf::w#18 )
|
||||
[79] (byte) myprintf::bArg#10 ← phi( myprintf/(byte) 0 myprintf::@32/(byte) myprintf::bArg#11 )
|
||||
[79] (byte) myprintf::bLen#10 ← phi( myprintf/(byte) 0 myprintf::@32/(byte) myprintf::bLen#28 )
|
||||
[79] (byte) myprintf::bFormat#10 ← phi( myprintf/(byte) 0 myprintf::@32/(byte) myprintf::bFormat#5 )
|
||||
[79] (byte*) myprintf::str#10 ← phi( myprintf/(byte*) myprintf::str#6 myprintf::@32/(byte*) myprintf::str#0 )
|
||||
[80] if(*((byte*) myprintf::str#10)!=(byte) 0) goto myprintf::@2
|
||||
to:myprintf::@3
|
||||
myprintf::@3: scope:[myprintf] from myprintf::@1
|
||||
@ -175,282 +175,291 @@ myprintf::@return: scope:[myprintf] from myprintf::@3
|
||||
myprintf::@2: scope:[myprintf] from myprintf::@1
|
||||
[83] (byte) myprintf::b#1 ← *((byte*) myprintf::str#10)
|
||||
[84] if((byte) myprintf::bFormat#10==(byte) 0) goto myprintf::@4
|
||||
to:myprintf::@37
|
||||
myprintf::@37: scope:[myprintf] from myprintf::@2
|
||||
to:myprintf::@38
|
||||
myprintf::@38: scope:[myprintf] from myprintf::@2
|
||||
[85] if((byte) myprintf::b#1!=(byte) '0') goto myprintf::@5
|
||||
to:myprintf::@32
|
||||
myprintf::@32: scope:[myprintf] from myprintf::@27 myprintf::@28 myprintf::@36 myprintf::@37 myprintf::@38 myprintf::@6
|
||||
[86] (byte) myprintf::bLeadZero#20 ← phi( myprintf::@27/(byte) myprintf::bLeadZero#11 myprintf::@28/(byte) myprintf::bLeadZero#11 myprintf::@6/(byte) myprintf::bLeadZero#11 myprintf::@36/(byte) 0 myprintf::@37/(byte) myprintf::bLeadZero#11 myprintf::@38/(byte) 1 )
|
||||
[86] (byte) myprintf::bDigits#28 ← phi( myprintf::@27/(byte) myprintf::bDigits#29 myprintf::@28/(byte) myprintf::bDigits#1 myprintf::@6/(byte) myprintf::bDigits#16 myprintf::@36/(byte) 1 myprintf::@37/(byte) myprintf::bDigits#16 myprintf::@38/(byte) myprintf::bDigits#16 )
|
||||
[86] (byte) myprintf::bTrailing#24 ← phi( myprintf::@27/(byte) myprintf::bTrailing#11 myprintf::@28/(byte) myprintf::bTrailing#11 myprintf::@6/(byte) 1 myprintf::@36/(byte) 0 myprintf::@37/(byte) myprintf::bTrailing#11 myprintf::@38/(byte) myprintf::bTrailing#11 )
|
||||
[86] (word) myprintf::w#18 ← phi( myprintf::@27/(word) myprintf::w#10 myprintf::@28/(word) myprintf::w#10 myprintf::@6/(word) myprintf::w#10 myprintf::@36/(word) myprintf::w#22 myprintf::@37/(word) myprintf::w#10 myprintf::@38/(word) myprintf::w#10 )
|
||||
[86] (byte) myprintf::bArg#11 ← phi( myprintf::@27/(byte) myprintf::bArg#10 myprintf::@28/(byte) myprintf::bArg#10 myprintf::@6/(byte) myprintf::bArg#10 myprintf::@36/(byte) myprintf::bArg#1 myprintf::@37/(byte) myprintf::bArg#10 myprintf::@38/(byte) myprintf::bArg#10 )
|
||||
[86] (byte) myprintf::bLen#28 ← phi( myprintf::@27/(byte) myprintf::bLen#36 myprintf::@28/(byte) myprintf::bLen#10 myprintf::@6/(byte) myprintf::bLen#10 myprintf::@36/(byte) myprintf::bLen#10 myprintf::@37/(byte) myprintf::bLen#7 myprintf::@38/(byte) myprintf::bLen#10 )
|
||||
[86] (byte) myprintf::bFormat#5 ← phi( myprintf::@27/(byte) 0 myprintf::@28/(byte) myprintf::bFormat#10 myprintf::@6/(byte) myprintf::bFormat#10 myprintf::@36/(byte) 1 myprintf::@37/(byte) myprintf::bFormat#10 myprintf::@38/(byte) myprintf::bFormat#10 )
|
||||
[87] (byte*) myprintf::str#0 ← ++ (byte*) myprintf::str#10
|
||||
to:myprintf::@1
|
||||
myprintf::@5: scope:[myprintf] from myprintf::@37
|
||||
[86] if((byte) myprintf::b#1<(byte) '1') goto myprintf::@6
|
||||
to:myprintf::@42
|
||||
myprintf::@42: scope:[myprintf] from myprintf::@5
|
||||
[87] if((byte) myprintf::b#1<=(byte) '9') goto myprintf::@28
|
||||
myprintf::@5: scope:[myprintf] from myprintf::@38
|
||||
[88] if((byte) myprintf::b#1<(byte) '1') goto myprintf::@6
|
||||
to:myprintf::@43
|
||||
myprintf::@43: scope:[myprintf] from myprintf::@5
|
||||
[89] if((byte) myprintf::b#1<=(byte) '9') goto myprintf::@28
|
||||
to:myprintf::@6
|
||||
myprintf::@6: scope:[myprintf] from myprintf::@42 myprintf::@5
|
||||
[88] if((byte) myprintf::b#1!=(byte) '-') goto myprintf::@7
|
||||
to:myprintf::@1
|
||||
myprintf::@6: scope:[myprintf] from myprintf::@43 myprintf::@5
|
||||
[90] if((byte) myprintf::b#1!=(byte) '-') goto myprintf::@7
|
||||
to:myprintf::@32
|
||||
myprintf::@7: scope:[myprintf] from myprintf::@6
|
||||
[89] if((byte) myprintf::b#1==(byte) 'c') goto myprintf::@8
|
||||
[91] if((byte) myprintf::b#1==(byte) 'c') goto myprintf::@8
|
||||
to:myprintf::@29
|
||||
myprintf::@29: scope:[myprintf] from myprintf::@7
|
||||
[90] if((byte) myprintf::b#1==(byte) 'd') goto myprintf::@9
|
||||
[92] if((byte) myprintf::b#1==(byte) 'd') goto myprintf::@9
|
||||
to:myprintf::@30
|
||||
myprintf::@30: scope:[myprintf] from myprintf::@29
|
||||
[91] if((byte) myprintf::b#1==(byte) 'x') goto myprintf::@31
|
||||
to:myprintf::@43
|
||||
myprintf::@43: scope:[myprintf] from myprintf::@30
|
||||
[92] if((byte) myprintf::b#1==(byte) 'X') goto myprintf::@31
|
||||
[93] if((byte) myprintf::b#1==(byte) 'x') goto myprintf::@31
|
||||
to:myprintf::@44
|
||||
myprintf::@44: scope:[myprintf] from myprintf::@30
|
||||
[94] if((byte) myprintf::b#1==(byte) 'X') goto myprintf::@31
|
||||
to:myprintf::@27
|
||||
myprintf::@27: scope:[myprintf] from myprintf::@13 myprintf::@24 myprintf::@25 myprintf::@43 myprintf::@45 myprintf::@8
|
||||
[93] (byte) myprintf::bDigits#28 ← phi( myprintf::@13/(byte) myprintf::bDigits#16 myprintf::@24/(byte) myprintf::bDigits#18 myprintf::@25/(byte) myprintf::bDigits#10 myprintf::@43/(byte) myprintf::bDigits#16 myprintf::@8/(byte) myprintf::bDigits#16 )
|
||||
[93] (byte) myprintf::bLen#28 ← phi( myprintf::@13/(byte) myprintf::bLen#3 myprintf::@24/(byte) myprintf::bLen#13 myprintf::@25/(byte) myprintf::bLen#14 myprintf::@43/(byte) myprintf::bLen#10 myprintf::@8/(byte) myprintf::bLen#1 )
|
||||
to:myprintf::@1
|
||||
myprintf::@31: scope:[myprintf] from myprintf::@30 myprintf::@43
|
||||
[94] (byte~) myprintf::$18 ← (byte)(word) myprintf::w#10
|
||||
[95] (byte~) myprintf::$19 ← (byte~) myprintf::$18 >> (byte) 4
|
||||
[96] (byte) myprintf::b#15 ← (byte~) myprintf::$19 & (byte) $f
|
||||
[97] if((byte) myprintf::b#15<(byte) $a) goto myprintf::@10
|
||||
myprintf::@27: scope:[myprintf] from myprintf::@13 myprintf::@24 myprintf::@25 myprintf::@44 myprintf::@46 myprintf::@8
|
||||
[95] (byte) myprintf::bDigits#29 ← phi( myprintf::@13/(byte) myprintf::bDigits#16 myprintf::@24/(byte) myprintf::bDigits#18 myprintf::@25/(byte) myprintf::bDigits#10 myprintf::@44/(byte) myprintf::bDigits#16 myprintf::@8/(byte) myprintf::bDigits#16 )
|
||||
[95] (byte) myprintf::bLen#36 ← phi( myprintf::@13/(byte) myprintf::bLen#3 myprintf::@24/(byte) myprintf::bLen#13 myprintf::@25/(byte) myprintf::bLen#14 myprintf::@44/(byte) myprintf::bLen#10 myprintf::@8/(byte) myprintf::bLen#1 )
|
||||
to:myprintf::@32
|
||||
myprintf::@31: scope:[myprintf] from myprintf::@30 myprintf::@44
|
||||
[96] (byte~) myprintf::$18 ← (byte)(word) myprintf::w#10
|
||||
[97] (byte~) myprintf::$19 ← (byte~) myprintf::$18 >> (byte) 4
|
||||
[98] (byte) myprintf::b#15 ← (byte~) myprintf::$19 & (byte) $f
|
||||
[99] if((byte) myprintf::b#15<(byte) $a) goto myprintf::@10
|
||||
to:myprintf::@11
|
||||
myprintf::@10: scope:[myprintf] from myprintf::@31
|
||||
[98] phi()
|
||||
[100] phi()
|
||||
to:myprintf::@11
|
||||
myprintf::@11: scope:[myprintf] from myprintf::@10 myprintf::@31
|
||||
[99] (byte~) myprintf::$24 ← phi( myprintf::@10/(byte) '0' myprintf::@31/(byte) $57 )
|
||||
[100] (byte~) myprintf::$25 ← (byte~) myprintf::$24 + (byte) myprintf::b#15
|
||||
[101] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#10) ← (byte~) myprintf::$25
|
||||
[102] (byte) myprintf::bLen#11 ← ++ (byte) myprintf::bLen#10
|
||||
[103] (byte~) myprintf::$26 ← (byte)(word) myprintf::w#10
|
||||
[104] (byte) myprintf::b#16 ← (byte~) myprintf::$26 & (byte) $f
|
||||
[105] if((byte) myprintf::b#16<(byte) $a) goto myprintf::@12
|
||||
[101] (byte~) myprintf::$24 ← phi( myprintf::@10/(byte) '0' myprintf::@31/(byte) $57 )
|
||||
[102] (byte~) myprintf::$25 ← (byte~) myprintf::$24 + (byte) myprintf::b#15
|
||||
[103] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#10) ← (byte~) myprintf::$25
|
||||
[104] (byte) myprintf::bLen#11 ← ++ (byte) myprintf::bLen#10
|
||||
[105] (byte~) myprintf::$26 ← (byte)(word) myprintf::w#10
|
||||
[106] (byte) myprintf::b#16 ← (byte~) myprintf::$26 & (byte) $f
|
||||
[107] if((byte) myprintf::b#16<(byte) $a) goto myprintf::@12
|
||||
to:myprintf::@13
|
||||
myprintf::@12: scope:[myprintf] from myprintf::@11
|
||||
[106] phi()
|
||||
[108] phi()
|
||||
to:myprintf::@13
|
||||
myprintf::@13: scope:[myprintf] from myprintf::@11 myprintf::@12
|
||||
[107] (byte~) myprintf::$31 ← phi( myprintf::@12/(byte) '0' myprintf::@11/(byte) $57 )
|
||||
[108] (byte~) myprintf::$32 ← (byte~) myprintf::$31 + (byte) myprintf::b#16
|
||||
[109] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#11) ← (byte~) myprintf::$32
|
||||
[110] (byte) myprintf::bLen#3 ← ++ (byte) myprintf::bLen#11
|
||||
[109] (byte~) myprintf::$31 ← phi( myprintf::@12/(byte) '0' myprintf::@11/(byte) $57 )
|
||||
[110] (byte~) myprintf::$32 ← (byte~) myprintf::$31 + (byte) myprintf::b#16
|
||||
[111] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#11) ← (byte~) myprintf::$32
|
||||
[112] (byte) myprintf::bLen#3 ← ++ (byte) myprintf::bLen#11
|
||||
to:myprintf::@27
|
||||
myprintf::@9: scope:[myprintf] from myprintf::@29
|
||||
[111] (word) utoa::value#4 ← (word) myprintf::w#10
|
||||
[112] call utoa
|
||||
[113] (word) utoa::value#4 ← (word) myprintf::w#10
|
||||
[114] call utoa
|
||||
to:myprintf::@14
|
||||
myprintf::@14: scope:[myprintf] from myprintf::@15 myprintf::@9
|
||||
[113] (byte) myprintf::b#17 ← phi( myprintf::@15/(byte) myprintf::b#5 myprintf::@9/(byte) 1 )
|
||||
[114] if(*((const byte[6]) myprintf::buf6#0 + (byte) myprintf::b#17)!=(byte) 0) goto myprintf::@15
|
||||
[115] (byte) myprintf::b#17 ← phi( myprintf::@15/(byte) myprintf::b#5 myprintf::@9/(byte) 1 )
|
||||
[116] if(*((const byte[6]) myprintf::buf6#0 + (byte) myprintf::b#17)!=(byte) 0) goto myprintf::@15
|
||||
to:myprintf::@16
|
||||
myprintf::@16: scope:[myprintf] from myprintf::@14
|
||||
[115] if((byte) myprintf::bTrailing#11!=(byte) 0) goto myprintf::@17
|
||||
to:myprintf::@44
|
||||
myprintf::@44: scope:[myprintf] from myprintf::@16
|
||||
[116] if((byte) myprintf::bDigits#16<=(byte) myprintf::b#17) goto myprintf::@17
|
||||
[117] if((byte) myprintf::bTrailing#11!=(byte) 0) goto myprintf::@17
|
||||
to:myprintf::@45
|
||||
myprintf::@45: scope:[myprintf] from myprintf::@16
|
||||
[118] if((byte) myprintf::bDigits#16<=(byte) myprintf::b#17) goto myprintf::@17
|
||||
to:myprintf::@18
|
||||
myprintf::@18: scope:[myprintf] from myprintf::@21 myprintf::@44
|
||||
[117] (byte) myprintf::bLen#12 ← phi( myprintf::@44/(byte) myprintf::bLen#10 myprintf::@21/(byte) myprintf::bLen#4 )
|
||||
[117] (byte) myprintf::bDigits#12 ← phi( myprintf::@44/(byte) myprintf::bDigits#16 myprintf::@21/(byte) myprintf::bDigits#2 )
|
||||
[118] if((byte) myprintf::bDigits#12>(byte) myprintf::b#17) goto myprintf::@19
|
||||
myprintf::@18: scope:[myprintf] from myprintf::@21 myprintf::@45
|
||||
[119] (byte) myprintf::bLen#12 ← phi( myprintf::@45/(byte) myprintf::bLen#10 myprintf::@21/(byte) myprintf::bLen#4 )
|
||||
[119] (byte) myprintf::bDigits#12 ← phi( myprintf::@45/(byte) myprintf::bDigits#16 myprintf::@21/(byte) myprintf::bDigits#2 )
|
||||
[120] if((byte) myprintf::bDigits#12>(byte) myprintf::b#17) goto myprintf::@19
|
||||
to:myprintf::@17
|
||||
myprintf::@17: scope:[myprintf] from myprintf::@16 myprintf::@18 myprintf::@44
|
||||
[119] (byte) myprintf::bDigits#18 ← phi( myprintf::@16/(byte) myprintf::bDigits#16 myprintf::@18/(byte) myprintf::bDigits#12 )
|
||||
[119] (byte) myprintf::bLen#36 ← phi( myprintf::@16/(byte) myprintf::bLen#10 myprintf::@18/(byte) myprintf::bLen#12 )
|
||||
myprintf::@17: scope:[myprintf] from myprintf::@16 myprintf::@18 myprintf::@45
|
||||
[121] (byte) myprintf::bDigits#18 ← phi( myprintf::@16/(byte) myprintf::bDigits#16 myprintf::@18/(byte) myprintf::bDigits#12 )
|
||||
[121] (byte) myprintf::bLen#32 ← phi( myprintf::@16/(byte) myprintf::bLen#10 myprintf::@18/(byte) myprintf::bLen#12 )
|
||||
to:myprintf::@22
|
||||
myprintf::@22: scope:[myprintf] from myprintf::@17 myprintf::@23
|
||||
[120] (byte) myprintf::bLen#13 ← phi( myprintf::@17/(byte) myprintf::bLen#36 myprintf::@23/(byte) myprintf::bLen#5 )
|
||||
[120] (byte) myprintf::digit#3 ← phi( myprintf::@17/(byte) 0 myprintf::@23/(byte) myprintf::digit#2 )
|
||||
[121] if((byte) myprintf::digit#3<(byte) myprintf::b#17) goto myprintf::@23
|
||||
[122] (byte) myprintf::bLen#13 ← phi( myprintf::@17/(byte) myprintf::bLen#32 myprintf::@23/(byte) myprintf::bLen#5 )
|
||||
[122] (byte) myprintf::digit#3 ← phi( myprintf::@17/(byte) 0 myprintf::@23/(byte) myprintf::digit#2 )
|
||||
[123] if((byte) myprintf::digit#3<(byte) myprintf::b#17) goto myprintf::@23
|
||||
to:myprintf::@24
|
||||
myprintf::@24: scope:[myprintf] from myprintf::@22
|
||||
[122] if((byte) myprintf::bTrailing#11==(byte) 0) goto myprintf::@27
|
||||
to:myprintf::@45
|
||||
myprintf::@45: scope:[myprintf] from myprintf::@24
|
||||
[123] if((byte) myprintf::bDigits#18<=(byte) myprintf::b#17) goto myprintf::@27
|
||||
[124] if((byte) myprintf::bTrailing#11==(byte) 0) goto myprintf::@27
|
||||
to:myprintf::@46
|
||||
myprintf::@46: scope:[myprintf] from myprintf::@24
|
||||
[125] if((byte) myprintf::bDigits#18<=(byte) myprintf::b#17) goto myprintf::@27
|
||||
to:myprintf::@25
|
||||
myprintf::@25: scope:[myprintf] from myprintf::@26 myprintf::@45
|
||||
[124] (byte) myprintf::bLen#14 ← phi( myprintf::@45/(byte) myprintf::bLen#13 myprintf::@26/(byte) myprintf::bLen#6 )
|
||||
[124] (byte) myprintf::bDigits#10 ← phi( myprintf::@45/(byte) myprintf::bDigits#18 myprintf::@26/(byte) myprintf::bDigits#3 )
|
||||
[125] if((byte) myprintf::bDigits#10>(byte) myprintf::b#17) goto myprintf::@26
|
||||
myprintf::@25: scope:[myprintf] from myprintf::@26 myprintf::@46
|
||||
[126] (byte) myprintf::bLen#14 ← phi( myprintf::@46/(byte) myprintf::bLen#13 myprintf::@26/(byte) myprintf::bLen#6 )
|
||||
[126] (byte) myprintf::bDigits#10 ← phi( myprintf::@46/(byte) myprintf::bDigits#18 myprintf::@26/(byte) myprintf::bDigits#3 )
|
||||
[127] if((byte) myprintf::bDigits#10>(byte) myprintf::b#17) goto myprintf::@26
|
||||
to:myprintf::@27
|
||||
myprintf::@26: scope:[myprintf] from myprintf::@25
|
||||
[126] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#14) ← (byte) ' '
|
||||
[127] (byte) myprintf::bLen#6 ← ++ (byte) myprintf::bLen#14
|
||||
[128] (byte) myprintf::bDigits#3 ← -- (byte) myprintf::bDigits#10
|
||||
[128] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#14) ← (byte) ' '
|
||||
[129] (byte) myprintf::bLen#6 ← ++ (byte) myprintf::bLen#14
|
||||
[130] (byte) myprintf::bDigits#3 ← -- (byte) myprintf::bDigits#10
|
||||
to:myprintf::@25
|
||||
myprintf::@23: scope:[myprintf] from myprintf::@22
|
||||
[129] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#13) ← *((const byte[6]) myprintf::buf6#0 + (byte) myprintf::digit#3)
|
||||
[130] (byte) myprintf::bLen#5 ← ++ (byte) myprintf::bLen#13
|
||||
[131] (byte) myprintf::digit#2 ← ++ (byte) myprintf::digit#3
|
||||
[131] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#13) ← *((const byte[6]) myprintf::buf6#0 + (byte) myprintf::digit#3)
|
||||
[132] (byte) myprintf::bLen#5 ← ++ (byte) myprintf::bLen#13
|
||||
[133] (byte) myprintf::digit#2 ← ++ (byte) myprintf::digit#3
|
||||
to:myprintf::@22
|
||||
myprintf::@19: scope:[myprintf] from myprintf::@18
|
||||
[132] if((byte) myprintf::bLeadZero#11==(byte) 0) goto myprintf::@20
|
||||
[134] if((byte) myprintf::bLeadZero#11==(byte) 0) goto myprintf::@20
|
||||
to:myprintf::@21
|
||||
myprintf::@20: scope:[myprintf] from myprintf::@19
|
||||
[133] phi()
|
||||
[135] phi()
|
||||
to:myprintf::@21
|
||||
myprintf::@21: scope:[myprintf] from myprintf::@19 myprintf::@20
|
||||
[134] (byte~) myprintf::$43 ← phi( myprintf::@20/(byte) ' ' myprintf::@19/(byte) '0' )
|
||||
[135] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#12) ← (byte~) myprintf::$43
|
||||
[136] (byte) myprintf::bLen#4 ← ++ (byte) myprintf::bLen#12
|
||||
[137] (byte) myprintf::bDigits#2 ← -- (byte) myprintf::bDigits#12
|
||||
[136] (byte~) myprintf::$43 ← phi( myprintf::@20/(byte) ' ' myprintf::@19/(byte) '0' )
|
||||
[137] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#12) ← (byte~) myprintf::$43
|
||||
[138] (byte) myprintf::bLen#4 ← ++ (byte) myprintf::bLen#12
|
||||
[139] (byte) myprintf::bDigits#2 ← -- (byte) myprintf::bDigits#12
|
||||
to:myprintf::@18
|
||||
myprintf::@15: scope:[myprintf] from myprintf::@14
|
||||
[138] (byte) myprintf::b#5 ← ++ (byte) myprintf::b#17
|
||||
[140] (byte) myprintf::b#5 ← ++ (byte) myprintf::b#17
|
||||
to:myprintf::@14
|
||||
myprintf::@8: scope:[myprintf] from myprintf::@7
|
||||
[139] (byte~) myprintf::$50 ← (byte)(word) myprintf::w#10
|
||||
[140] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#10) ← (byte~) myprintf::$50
|
||||
[141] (byte) myprintf::bLen#1 ← ++ (byte) myprintf::bLen#10
|
||||
[141] (byte~) myprintf::$50 ← (byte)(word) myprintf::w#10
|
||||
[142] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#10) ← (byte~) myprintf::$50
|
||||
[143] (byte) myprintf::bLen#1 ← ++ (byte) myprintf::bLen#10
|
||||
to:myprintf::@27
|
||||
myprintf::@28: scope:[myprintf] from myprintf::@42
|
||||
[142] (byte) myprintf::bDigits#1 ← (byte) myprintf::b#1 - (byte) '0'
|
||||
to:myprintf::@1
|
||||
myprintf::@28: scope:[myprintf] from myprintf::@43
|
||||
[144] (byte) myprintf::bDigits#1 ← (byte) myprintf::b#1 - (byte) '0'
|
||||
to:myprintf::@32
|
||||
myprintf::@4: scope:[myprintf] from myprintf::@2
|
||||
[143] if((byte) myprintf::b#1!=(byte) '%') goto myprintf::@32
|
||||
to:myprintf::@38
|
||||
myprintf::@38: scope:[myprintf] from myprintf::@4
|
||||
[144] if((byte) myprintf::bArg#10==(byte) 0) goto myprintf::@33
|
||||
[145] if((byte) myprintf::b#1!=(byte) '%') goto myprintf::@33
|
||||
to:myprintf::@39
|
||||
myprintf::@39: scope:[myprintf] from myprintf::@38
|
||||
[145] if((byte) myprintf::bArg#10==(byte) 1) goto myprintf::@34
|
||||
myprintf::@39: scope:[myprintf] from myprintf::@4
|
||||
[146] if((byte) myprintf::bArg#10==(byte) 0) goto myprintf::@34
|
||||
to:myprintf::@40
|
||||
myprintf::@40: scope:[myprintf] from myprintf::@39
|
||||
[146] (word~) myprintf::w#53 ← (word) myprintf::w3#8
|
||||
to:myprintf::@35
|
||||
myprintf::@35: scope:[myprintf] from myprintf::@33 myprintf::@34 myprintf::@40
|
||||
[147] (word) myprintf::w#21 ← phi( myprintf::@33/(word~) myprintf::w#51 myprintf::@34/(word~) myprintf::w#52 myprintf::@40/(word~) myprintf::w#53 )
|
||||
[148] (byte) myprintf::bArg#1 ← ++ (byte) myprintf::bArg#10
|
||||
to:myprintf::@1
|
||||
myprintf::@34: scope:[myprintf] from myprintf::@39
|
||||
[149] (word~) myprintf::w#52 ← (word) myprintf::w2#8
|
||||
to:myprintf::@35
|
||||
myprintf::@33: scope:[myprintf] from myprintf::@38
|
||||
[150] (word~) myprintf::w#51 ← (word) myprintf::w1#7
|
||||
to:myprintf::@35
|
||||
myprintf::@32: scope:[myprintf] from myprintf::@4
|
||||
[151] if((byte) myprintf::b#1<(byte) $41) goto myprintf::@36
|
||||
to:myprintf::@46
|
||||
myprintf::@46: scope:[myprintf] from myprintf::@32
|
||||
[152] if((byte) myprintf::b#1>=(byte) $5a+(byte) 1) goto myprintf::@36
|
||||
[147] if((byte) myprintf::bArg#10==(byte) 1) goto myprintf::@35
|
||||
to:myprintf::@41
|
||||
myprintf::@41: scope:[myprintf] from myprintf::@46
|
||||
[153] (byte) myprintf::b#6 ← (byte) myprintf::b#1 + (byte) $20
|
||||
myprintf::@41: scope:[myprintf] from myprintf::@40
|
||||
[148] (word~) myprintf::w#55 ← (word) myprintf::w3#8
|
||||
to:myprintf::@36
|
||||
myprintf::@36: scope:[myprintf] from myprintf::@32 myprintf::@41 myprintf::@46
|
||||
[154] (byte) myprintf::b#25 ← phi( myprintf::@32/(byte) myprintf::b#1 myprintf::@41/(byte) myprintf::b#6 )
|
||||
[155] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#10) ← (byte) myprintf::b#25
|
||||
[156] (byte) myprintf::bLen#7 ← ++ (byte) myprintf::bLen#10
|
||||
[157] (byte*) myprintf::str#0 ← ++ (byte*) myprintf::str#10
|
||||
to:myprintf::@1
|
||||
myprintf::@36: scope:[myprintf] from myprintf::@34 myprintf::@35 myprintf::@41
|
||||
[149] (word) myprintf::w#22 ← phi( myprintf::@34/(word~) myprintf::w#53 myprintf::@35/(word~) myprintf::w#54 myprintf::@41/(word~) myprintf::w#55 )
|
||||
[150] (byte) myprintf::bArg#1 ← ++ (byte) myprintf::bArg#10
|
||||
to:myprintf::@32
|
||||
myprintf::@35: scope:[myprintf] from myprintf::@40
|
||||
[151] (word~) myprintf::w#54 ← (word) myprintf::w2#8
|
||||
to:myprintf::@36
|
||||
myprintf::@34: scope:[myprintf] from myprintf::@39
|
||||
[152] (word~) myprintf::w#53 ← (word) myprintf::w1#7
|
||||
to:myprintf::@36
|
||||
myprintf::@33: scope:[myprintf] from myprintf::@4
|
||||
[153] if((byte) myprintf::b#1<(byte) $41) goto myprintf::@37
|
||||
to:myprintf::@47
|
||||
myprintf::@47: scope:[myprintf] from myprintf::@33
|
||||
[154] if((byte) myprintf::b#1>=(byte) $5a+(byte) 1) goto myprintf::@37
|
||||
to:myprintf::@42
|
||||
myprintf::@42: scope:[myprintf] from myprintf::@47
|
||||
[155] (byte) myprintf::b#6 ← (byte) myprintf::b#1 + (byte) $20
|
||||
to:myprintf::@37
|
||||
myprintf::@37: scope:[myprintf] from myprintf::@33 myprintf::@42 myprintf::@47
|
||||
[156] (byte) myprintf::b#25 ← phi( myprintf::@33/(byte) myprintf::b#1 myprintf::@42/(byte) myprintf::b#6 )
|
||||
[157] *((const byte[$64]) strTemp#0 + (byte) myprintf::bLen#10) ← (byte) myprintf::b#25
|
||||
[158] (byte) myprintf::bLen#7 ← ++ (byte) myprintf::bLen#10
|
||||
to:myprintf::@32
|
||||
utoa: scope:[utoa] from myprintf::@9
|
||||
[158] phi()
|
||||
[159] phi()
|
||||
to:utoa::@13
|
||||
utoa::@13: scope:[utoa] from utoa
|
||||
[159] if((word) utoa::value#4>=(word) $2710) goto utoa::@5
|
||||
[160] if((word) utoa::value#4>=(word) $2710) goto utoa::@5
|
||||
to:utoa::@1
|
||||
utoa::@1: scope:[utoa] from utoa::@13 utoa::@9
|
||||
[160] (byte*) utoa::dst#16 ← phi( utoa::@13/(const byte[6]) myprintf::buf6#0 utoa::@9/++(const byte[6]) myprintf::buf6#0 )
|
||||
[160] (word) utoa::value#6 ← phi( utoa::@13/(word) utoa::value#4 utoa::@9/(word) utoa::value#0 )
|
||||
[160] (byte) utoa::bStarted#5 ← phi( utoa::@13/(byte) 0 utoa::@9/(byte) 1 )
|
||||
[161] if((byte) utoa::bStarted#5==(byte) 1) goto utoa::@6
|
||||
[161] (byte*) utoa::dst#16 ← phi( utoa::@13/(const byte[6]) myprintf::buf6#0 utoa::@9/++(const byte[6]) myprintf::buf6#0 )
|
||||
[161] (word) utoa::value#6 ← phi( utoa::@13/(word) utoa::value#4 utoa::@9/(word) utoa::value#0 )
|
||||
[161] (byte) utoa::bStarted#5 ← phi( utoa::@13/(byte) 0 utoa::@9/(byte) 1 )
|
||||
[162] if((byte) utoa::bStarted#5==(byte) 1) goto utoa::@6
|
||||
to:utoa::@14
|
||||
utoa::@14: scope:[utoa] from utoa::@1
|
||||
[162] if((word) utoa::value#6>=(word) $3e8) goto utoa::@6
|
||||
[163] if((word) utoa::value#6>=(word) $3e8) goto utoa::@6
|
||||
to:utoa::@2
|
||||
utoa::@2: scope:[utoa] from utoa::@10 utoa::@14
|
||||
[163] (byte*) utoa::dst#10 ← phi( utoa::@14/(byte*) utoa::dst#16 utoa::@10/(byte*) utoa::dst#1 )
|
||||
[163] (word) utoa::value#11 ← phi( utoa::@14/(word) utoa::value#6 utoa::@10/(word) utoa::value#1 )
|
||||
[163] (byte) utoa::bStarted#6 ← phi( utoa::@14/(byte) utoa::bStarted#5 utoa::@10/(byte) 1 )
|
||||
[164] if((byte) utoa::bStarted#6==(byte) 1) goto utoa::@7
|
||||
[164] (byte*) utoa::dst#10 ← phi( utoa::@14/(byte*) utoa::dst#16 utoa::@10/(byte*) utoa::dst#1 )
|
||||
[164] (word) utoa::value#11 ← phi( utoa::@14/(word) utoa::value#6 utoa::@10/(word) utoa::value#1 )
|
||||
[164] (byte) utoa::bStarted#6 ← phi( utoa::@14/(byte) utoa::bStarted#5 utoa::@10/(byte) 1 )
|
||||
[165] if((byte) utoa::bStarted#6==(byte) 1) goto utoa::@7
|
||||
to:utoa::@15
|
||||
utoa::@15: scope:[utoa] from utoa::@2
|
||||
[165] if((word) utoa::value#11>=(byte) $64) goto utoa::@7
|
||||
[166] if((word) utoa::value#11>=(byte) $64) goto utoa::@7
|
||||
to:utoa::@3
|
||||
utoa::@3: scope:[utoa] from utoa::@11 utoa::@15
|
||||
[166] (byte*) utoa::dst#13 ← phi( utoa::@11/(byte*) utoa::dst#2 utoa::@15/(byte*) utoa::dst#10 )
|
||||
[166] (word) utoa::value#10 ← phi( utoa::@11/(word) utoa::value#2 utoa::@15/(word) utoa::value#11 )
|
||||
[166] (byte) utoa::bStarted#7 ← phi( utoa::@11/(byte) 1 utoa::@15/(byte) utoa::bStarted#6 )
|
||||
[167] if((byte) utoa::bStarted#7==(byte) 1) goto utoa::@8
|
||||
[167] (byte*) utoa::dst#13 ← phi( utoa::@11/(byte*) utoa::dst#2 utoa::@15/(byte*) utoa::dst#10 )
|
||||
[167] (word) utoa::value#10 ← phi( utoa::@11/(word) utoa::value#2 utoa::@15/(word) utoa::value#11 )
|
||||
[167] (byte) utoa::bStarted#7 ← phi( utoa::@11/(byte) 1 utoa::@15/(byte) utoa::bStarted#6 )
|
||||
[168] if((byte) utoa::bStarted#7==(byte) 1) goto utoa::@8
|
||||
to:utoa::@16
|
||||
utoa::@16: scope:[utoa] from utoa::@3
|
||||
[168] if((word) utoa::value#10>=(byte) $a) goto utoa::@8
|
||||
[169] if((word) utoa::value#10>=(byte) $a) goto utoa::@8
|
||||
to:utoa::@4
|
||||
utoa::@4: scope:[utoa] from utoa::@12 utoa::@16
|
||||
[169] (byte*) utoa::dst#12 ← phi( utoa::@12/(byte*) utoa::dst#4 utoa::@16/(byte*) utoa::dst#13 )
|
||||
[169] (word) utoa::value#12 ← phi( utoa::@12/(word) utoa::value#3 utoa::@16/(word) utoa::value#10 )
|
||||
[170] (byte~) utoa::$16 ← (byte)(word) utoa::value#12
|
||||
[171] (byte~) utoa::$17 ← (byte) '0' + (byte~) utoa::$16
|
||||
[172] *((byte*) utoa::dst#12) ← (byte~) utoa::$17
|
||||
[173] (byte*) utoa::dst#3 ← ++ (byte*) utoa::dst#12
|
||||
[174] *((byte*) utoa::dst#3) ← (byte) 0
|
||||
[170] (byte*) utoa::dst#12 ← phi( utoa::@12/(byte*) utoa::dst#4 utoa::@16/(byte*) utoa::dst#13 )
|
||||
[170] (word) utoa::value#12 ← phi( utoa::@12/(word) utoa::value#3 utoa::@16/(word) utoa::value#10 )
|
||||
[171] (byte~) utoa::$16 ← (byte)(word) utoa::value#12
|
||||
[172] (byte~) utoa::$17 ← (byte) '0' + (byte~) utoa::$16
|
||||
[173] *((byte*) utoa::dst#12) ← (byte~) utoa::$17
|
||||
[174] (byte*) utoa::dst#3 ← ++ (byte*) utoa::dst#12
|
||||
[175] *((byte*) utoa::dst#3) ← (byte) 0
|
||||
to:utoa::@return
|
||||
utoa::@return: scope:[utoa] from utoa::@4
|
||||
[175] return
|
||||
[176] return
|
||||
to:@return
|
||||
utoa::@8: scope:[utoa] from utoa::@16 utoa::@3
|
||||
[176] (byte*) append::dst#3 ← (byte*) utoa::dst#13
|
||||
[177] (word) append::value#4 ← (word) utoa::value#10
|
||||
[178] call append
|
||||
[179] (word) append::return#10 ← (word) append::value#5
|
||||
[177] (byte*) append::dst#3 ← (byte*) utoa::dst#13
|
||||
[178] (word) append::value#4 ← (word) utoa::value#10
|
||||
[179] call append
|
||||
[180] (word) append::return#10 ← (word) append::value#5
|
||||
to:utoa::@12
|
||||
utoa::@12: scope:[utoa] from utoa::@8
|
||||
[180] (word) utoa::value#3 ← (word) append::return#10
|
||||
[181] (byte*) utoa::dst#4 ← ++ (byte*) utoa::dst#13
|
||||
[181] (word) utoa::value#3 ← (word) append::return#10
|
||||
[182] (byte*) utoa::dst#4 ← ++ (byte*) utoa::dst#13
|
||||
to:utoa::@4
|
||||
utoa::@7: scope:[utoa] from utoa::@15 utoa::@2
|
||||
[182] (byte*) append::dst#2 ← (byte*) utoa::dst#10
|
||||
[183] (word) append::value#3 ← (word) utoa::value#11
|
||||
[184] call append
|
||||
[185] (word) append::return#4 ← (word) append::value#5
|
||||
[183] (byte*) append::dst#2 ← (byte*) utoa::dst#10
|
||||
[184] (word) append::value#3 ← (word) utoa::value#11
|
||||
[185] call append
|
||||
[186] (word) append::return#4 ← (word) append::value#5
|
||||
to:utoa::@11
|
||||
utoa::@11: scope:[utoa] from utoa::@7
|
||||
[186] (word) utoa::value#2 ← (word) append::return#4
|
||||
[187] (byte*) utoa::dst#2 ← ++ (byte*) utoa::dst#10
|
||||
[187] (word) utoa::value#2 ← (word) append::return#4
|
||||
[188] (byte*) utoa::dst#2 ← ++ (byte*) utoa::dst#10
|
||||
to:utoa::@3
|
||||
utoa::@6: scope:[utoa] from utoa::@1 utoa::@14
|
||||
[188] (byte*) append::dst#1 ← (byte*) utoa::dst#16
|
||||
[189] (word) append::value#2 ← (word) utoa::value#6
|
||||
[190] call append
|
||||
[191] (word) append::return#3 ← (word) append::value#5
|
||||
[189] (byte*) append::dst#1 ← (byte*) utoa::dst#16
|
||||
[190] (word) append::value#2 ← (word) utoa::value#6
|
||||
[191] call append
|
||||
[192] (word) append::return#3 ← (word) append::value#5
|
||||
to:utoa::@10
|
||||
utoa::@10: scope:[utoa] from utoa::@6
|
||||
[192] (word) utoa::value#1 ← (word) append::return#3
|
||||
[193] (byte*) utoa::dst#1 ← ++ (byte*) utoa::dst#16
|
||||
[193] (word) utoa::value#1 ← (word) append::return#3
|
||||
[194] (byte*) utoa::dst#1 ← ++ (byte*) utoa::dst#16
|
||||
to:utoa::@2
|
||||
utoa::@5: scope:[utoa] from utoa::@13
|
||||
[194] (word) append::value#1 ← (word) utoa::value#4
|
||||
[195] call append
|
||||
[196] (word) append::return#2 ← (word) append::value#5
|
||||
[195] (word) append::value#1 ← (word) utoa::value#4
|
||||
[196] call append
|
||||
[197] (word) append::return#2 ← (word) append::value#5
|
||||
to:utoa::@9
|
||||
utoa::@9: scope:[utoa] from utoa::@5
|
||||
[197] (word) utoa::value#0 ← (word) append::return#2
|
||||
[198] (word) utoa::value#0 ← (word) append::return#2
|
||||
to:utoa::@1
|
||||
append: scope:[append] from utoa::@5 utoa::@6 utoa::@7 utoa::@8
|
||||
[198] (word) append::sub#6 ← phi( utoa::@5/(word) $2710 utoa::@6/(word) $3e8 utoa::@7/(byte) $64 utoa::@8/(byte) $a )
|
||||
[198] (word) append::value#8 ← phi( utoa::@5/(word) append::value#1 utoa::@6/(word) append::value#2 utoa::@7/(word) append::value#3 utoa::@8/(word) append::value#4 )
|
||||
[198] (byte*) append::dst#4 ← phi( utoa::@5/(const byte[6]) myprintf::buf6#0 utoa::@6/(byte*) append::dst#1 utoa::@7/(byte*) append::dst#2 utoa::@8/(byte*) append::dst#3 )
|
||||
[199] *((byte*) append::dst#4) ← (byte) '0'
|
||||
[199] (word) append::sub#6 ← phi( utoa::@5/(word) $2710 utoa::@6/(word) $3e8 utoa::@7/(byte) $64 utoa::@8/(byte) $a )
|
||||
[199] (word) append::value#8 ← phi( utoa::@5/(word) append::value#1 utoa::@6/(word) append::value#2 utoa::@7/(word) append::value#3 utoa::@8/(word) append::value#4 )
|
||||
[199] (byte*) append::dst#4 ← phi( utoa::@5/(const byte[6]) myprintf::buf6#0 utoa::@6/(byte*) append::dst#1 utoa::@7/(byte*) append::dst#2 utoa::@8/(byte*) append::dst#3 )
|
||||
[200] *((byte*) append::dst#4) ← (byte) '0'
|
||||
to:append::@1
|
||||
append::@1: scope:[append] from append append::@2
|
||||
[200] (word) append::value#5 ← phi( append/(word) append::value#8 append::@2/(word) append::value#0 )
|
||||
[201] if((word) append::value#5>=(word) append::sub#6) goto append::@2
|
||||
[201] (word) append::value#5 ← phi( append/(word) append::value#8 append::@2/(word) append::value#0 )
|
||||
[202] if((word) append::value#5>=(word) append::sub#6) goto append::@2
|
||||
to:append::@return
|
||||
append::@return: scope:[append] from append::@1
|
||||
[202] return
|
||||
[203] return
|
||||
to:@return
|
||||
append::@2: scope:[append] from append::@1
|
||||
[203] *((byte*) append::dst#4) ← ++ *((byte*) append::dst#4)
|
||||
[204] (word) append::value#0 ← (word) append::value#5 - (word) append::sub#6
|
||||
[204] *((byte*) append::dst#4) ← ++ *((byte*) append::dst#4)
|
||||
[205] (word) append::value#0 ← (word) append::value#5 - (word) append::sub#6
|
||||
to:append::@1
|
||||
div10: scope:[div10] from main::@10
|
||||
[205] (word~) div10::$0 ← (word) div10::val#4 >> (byte) 1
|
||||
[206] (word) div10::val#0 ← (word~) div10::$0 + (byte) 1
|
||||
[207] (word~) div10::$2 ← (word) div10::val#0 << (byte) 1
|
||||
[208] (word) div10::val#1 ← (word) div10::val#0 + (word~) div10::$2
|
||||
[209] (word~) div10::$3 ← (word) div10::val#1 >> (byte) 4
|
||||
[210] (word) div10::val#2 ← (word) div10::val#1 + (word~) div10::$3
|
||||
[211] (word~) div10::$4 ← (word) div10::val#2 >> (byte) 8
|
||||
[212] (word) div10::val#3 ← (word) div10::val#2 + (word~) div10::$4
|
||||
[213] (word) div10::return#0 ← (word) div10::val#3 >> (byte) 4
|
||||
[206] (word~) div10::$0 ← (word) div10::val#4 >> (byte) 1
|
||||
[207] (word) div10::val#0 ← (word~) div10::$0 + (byte) 1
|
||||
[208] (word~) div10::$2 ← (word) div10::val#0 << (byte) 1
|
||||
[209] (word) div10::val#1 ← (word) div10::val#0 + (word~) div10::$2
|
||||
[210] (word~) div10::$3 ← (word) div10::val#1 >> (byte) 4
|
||||
[211] (word) div10::val#2 ← (word) div10::val#1 + (word~) div10::$3
|
||||
[212] (word~) div10::$4 ← (word) div10::val#2 >> (byte) 8
|
||||
[213] (word) div10::val#3 ← (word) div10::val#2 + (word~) div10::$4
|
||||
[214] (word) div10::return#0 ← (word) div10::val#3 >> (byte) 4
|
||||
to:div10::@return
|
||||
div10::@return: scope:[div10] from div10
|
||||
[214] return
|
||||
[215] return
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -180,6 +180,7 @@
|
||||
(label) myprintf::@44
|
||||
(label) myprintf::@45
|
||||
(label) myprintf::@46
|
||||
(label) myprintf::@47
|
||||
(label) myprintf::@5
|
||||
(label) myprintf::@6
|
||||
(label) myprintf::@7
|
||||
@ -196,36 +197,42 @@
|
||||
(byte) myprintf::b#6 reg byte x 202.0
|
||||
(byte) myprintf::bArg
|
||||
(byte) myprintf::bArg#1 bArg zp ZP_BYTE:9 202.0
|
||||
(byte) myprintf::bArg#10 bArg zp ZP_BYTE:9 18.60526315789474
|
||||
(byte) myprintf::bArg#10 bArg zp ZP_BYTE:9 12.120000000000001
|
||||
(byte) myprintf::bArg#11 bArg zp ZP_BYTE:9 353.5
|
||||
(byte) myprintf::bDigits
|
||||
(byte) myprintf::bDigits#1 bDigits zp ZP_BYTE:13 202.0
|
||||
(byte) myprintf::bDigits#10 bDigits zp ZP_BYTE:13 1026.25
|
||||
(byte) myprintf::bDigits#12 bDigits zp ZP_BYTE:13 586.4285714285714
|
||||
(byte) myprintf::bDigits#16 bDigits zp ZP_BYTE:13 30.085106382978733
|
||||
(byte) myprintf::bDigits#16 bDigits zp ZP_BYTE:13 21.956521739130434
|
||||
(byte) myprintf::bDigits#18 bDigits zp ZP_BYTE:13 175.625
|
||||
(byte) myprintf::bDigits#2 bDigits zp ZP_BYTE:13 2002.0
|
||||
(byte) myprintf::bDigits#28 bDigits zp ZP_BYTE:13 1506.0
|
||||
(byte) myprintf::bDigits#28 bDigits zp ZP_BYTE:13 303.0
|
||||
(byte) myprintf::bDigits#29 bDigits zp ZP_BYTE:13 1506.0
|
||||
(byte) myprintf::bDigits#3 bDigits zp ZP_BYTE:13 2002.0
|
||||
(byte) myprintf::bFormat
|
||||
(byte) myprintf::bFormat#10 bFormat zp ZP_BYTE:8 53.470588235294116
|
||||
(byte) myprintf::bFormat#10 bFormat zp ZP_BYTE:8 37.875
|
||||
(byte) myprintf::bFormat#5 bFormat zp ZP_BYTE:8 252.5
|
||||
(byte) myprintf::bLeadZero
|
||||
(byte) myprintf::bLeadZero#11 bLeadZero zp ZP_BYTE:11 25.84285714285714
|
||||
(byte) myprintf::bLeadZero#11 bLeadZero zp ZP_BYTE:11 21.82608695652174
|
||||
(byte) myprintf::bLeadZero#20 bLeadZero zp ZP_BYTE:11 252.5
|
||||
(byte) myprintf::bLen
|
||||
(byte) myprintf::bLen#1 bLen zp ZP_BYTE:14 202.0
|
||||
(byte) myprintf::bLen#10 bLen zp ZP_BYTE:14 44.67441860465115
|
||||
(byte) myprintf::bLen#10 bLen zp ZP_BYTE:14 32.93023255813953
|
||||
(byte) myprintf::bLen#11 reg byte y 37.875
|
||||
(byte) myprintf::bLen#12 bLen zp ZP_BYTE:14 684.1666666666667
|
||||
(byte) myprintf::bLen#13 bLen zp ZP_BYTE:14 661.2
|
||||
(byte) myprintf::bLen#14 bLen zp ZP_BYTE:14 1368.3333333333335
|
||||
(byte) myprintf::bLen#28 bLen zp ZP_BYTE:14 1506.0
|
||||
(byte) myprintf::bLen#28 bLen zp ZP_BYTE:14 353.5
|
||||
(byte) myprintf::bLen#3 bLen zp ZP_BYTE:14 202.0
|
||||
(byte) myprintf::bLen#36 bLen zp ZP_BYTE:14 1203.0
|
||||
(byte) myprintf::bLen#32 bLen zp ZP_BYTE:14 1203.0
|
||||
(byte) myprintf::bLen#36 bLen zp ZP_BYTE:14 1506.0
|
||||
(byte) myprintf::bLen#4 bLen zp ZP_BYTE:14 1001.0
|
||||
(byte) myprintf::bLen#5 bLen zp ZP_BYTE:14 1001.0
|
||||
(byte) myprintf::bLen#6 bLen zp ZP_BYTE:14 1001.0
|
||||
(byte) myprintf::bLen#7 bLen zp ZP_BYTE:14 101.0
|
||||
(byte) myprintf::bLen#7 bLen zp ZP_BYTE:14 202.0
|
||||
(byte) myprintf::bTrailing
|
||||
(byte) myprintf::bTrailing#11 bTrailing zp ZP_BYTE:10 14.428571428571429
|
||||
(byte) myprintf::bTrailing#11 bTrailing zp ZP_BYTE:10 10.246376811594203
|
||||
(byte) myprintf::bTrailing#24 bTrailing zp ZP_BYTE:10 252.5
|
||||
(byte[6]) myprintf::buf6
|
||||
(const byte[6]) myprintf::buf6#0 buf6 = { fill( 6, 0) }
|
||||
(byte) myprintf::digit
|
||||
@ -235,26 +242,27 @@
|
||||
(byte) myprintf::return
|
||||
(byte*) myprintf::str
|
||||
(byte*) myprintf::str#0 str zp ZP_WORD:6 202.0
|
||||
(byte*) myprintf::str#10 str zp ZP_WORD:6 18.631578947368425
|
||||
(byte*) myprintf::str#10 str zp ZP_WORD:6 5.272727272727273
|
||||
(byte*) myprintf::str#6 str zp ZP_WORD:6 2.0
|
||||
(word) myprintf::w
|
||||
(word) myprintf::w#10 w zp ZP_WORD:15 17.314285714285713
|
||||
(word) myprintf::w#21 w zp ZP_WORD:15 202.0
|
||||
(word~) myprintf::w#51 w zp ZP_WORD:15 202.0
|
||||
(word~) myprintf::w#52 w zp ZP_WORD:15 202.0
|
||||
(word) myprintf::w#10 w zp ZP_WORD:15 10.246376811594203
|
||||
(word) myprintf::w#18 w zp ZP_WORD:15 353.5
|
||||
(word) myprintf::w#22 w zp ZP_WORD:15 202.0
|
||||
(word~) myprintf::w#53 w zp ZP_WORD:15 202.0
|
||||
(word~) myprintf::w#54 w zp ZP_WORD:15 202.0
|
||||
(word~) myprintf::w#55 w zp ZP_WORD:15 202.0
|
||||
(word) myprintf::w1
|
||||
(word) myprintf::w1#0 w1 zp ZP_WORD:2 11.0
|
||||
(word) myprintf::w1#1 w1 zp ZP_WORD:2 11.0
|
||||
(word) myprintf::w1#7 w1 zp ZP_WORD:2 1.576923076923077
|
||||
(word) myprintf::w1#7 w1 zp ZP_WORD:2 1.5569620253164556
|
||||
(word) myprintf::w2
|
||||
(word) myprintf::w2#0 w2 zp ZP_WORD:4 22.0
|
||||
(word) myprintf::w2#1 w2 zp ZP_WORD:4 22.0
|
||||
(word) myprintf::w2#8 w2 zp ZP_WORD:4 1.576923076923077
|
||||
(word) myprintf::w2#8 w2 zp ZP_WORD:4 1.5569620253164556
|
||||
(word) myprintf::w3
|
||||
(word) myprintf::w3#0 w3 zp ZP_WORD:23 7.333333333333333
|
||||
(word) myprintf::w3#1 w3 zp ZP_WORD:23 7.333333333333333
|
||||
(word) myprintf::w3#8 w3 zp ZP_WORD:23 1.576923076923077
|
||||
(word) myprintf::w3#8 w3 zp ZP_WORD:23 1.5569620253164556
|
||||
(byte[$64]) strTemp
|
||||
(const byte[$64]) strTemp#0 strTemp = { fill( $64, 0) }
|
||||
(void()) utoa((word) utoa::value , (byte*) utoa::dst)
|
||||
@ -309,20 +317,20 @@ zp ZP_WORD:2 [ main::u#15 main::u#3 myprintf::w1#7 myprintf::w1#1 myprintf::w1#0
|
||||
zp ZP_WORD:4 [ main::v#10 main::v#12 main::v#11 main::v#13 main::v#2 main::v#1 myprintf::w2#8 myprintf::w2#1 myprintf::w2#0 div10::return#2 div16u::return#2 div16u::return#0 div10::return#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 div10::$4 div10::val#3 ]
|
||||
reg byte x [ divr16u::i#2 divr16u::i#1 ]
|
||||
zp ZP_WORD:6 [ myprintf::str#10 myprintf::str#6 myprintf::str#0 divr16u::dividend#2 divr16u::dividend#1 divr16u::dividend#0 ]
|
||||
zp ZP_BYTE:8 [ myprintf::bFormat#10 ]
|
||||
zp ZP_BYTE:9 [ myprintf::bArg#10 myprintf::bArg#1 ]
|
||||
zp ZP_BYTE:10 [ myprintf::bTrailing#11 ]
|
||||
zp ZP_BYTE:11 [ myprintf::bLeadZero#11 ]
|
||||
zp ZP_BYTE:8 [ myprintf::bFormat#10 myprintf::bFormat#5 ]
|
||||
zp ZP_BYTE:9 [ myprintf::bArg#10 myprintf::bArg#11 myprintf::bArg#1 ]
|
||||
zp ZP_BYTE:10 [ myprintf::bTrailing#11 myprintf::bTrailing#24 ]
|
||||
zp ZP_BYTE:11 [ myprintf::bLeadZero#11 myprintf::bLeadZero#20 ]
|
||||
reg byte a [ myprintf::$24 ]
|
||||
reg byte a [ myprintf::$31 ]
|
||||
zp ZP_BYTE:12 [ myprintf::b#17 myprintf::b#5 ]
|
||||
zp ZP_BYTE:13 [ myprintf::bDigits#12 myprintf::bDigits#16 myprintf::bDigits#28 myprintf::bDigits#1 myprintf::bDigits#18 myprintf::bDigits#10 myprintf::bDigits#2 myprintf::bDigits#3 ]
|
||||
zp ZP_BYTE:14 [ myprintf::bLen#36 myprintf::bLen#12 myprintf::bLen#10 myprintf::bLen#28 myprintf::bLen#7 myprintf::bLen#3 myprintf::bLen#13 myprintf::bLen#14 myprintf::bLen#1 myprintf::bLen#4 myprintf::bLen#5 myprintf::bLen#6 ]
|
||||
zp ZP_BYTE:13 [ myprintf::bDigits#12 myprintf::bDigits#16 myprintf::bDigits#28 myprintf::bDigits#29 myprintf::bDigits#1 myprintf::bDigits#18 myprintf::bDigits#10 myprintf::bDigits#2 myprintf::bDigits#3 ]
|
||||
zp ZP_BYTE:14 [ myprintf::bLen#32 myprintf::bLen#12 myprintf::bLen#10 myprintf::bLen#28 myprintf::bLen#36 myprintf::bLen#7 myprintf::bLen#3 myprintf::bLen#13 myprintf::bLen#14 myprintf::bLen#1 myprintf::bLen#4 myprintf::bLen#5 myprintf::bLen#6 ]
|
||||
reg byte x [ myprintf::digit#3 myprintf::digit#2 ]
|
||||
reg byte a [ myprintf::$43 ]
|
||||
reg byte x [ myprintf::b#25 myprintf::b#1 myprintf::b#6 ]
|
||||
reg byte x [ utoa::bStarted#7 utoa::bStarted#6 utoa::bStarted#5 ]
|
||||
zp ZP_WORD:15 [ main::$14 myprintf::w#10 myprintf::w#21 myprintf::w#51 myprintf::w#52 myprintf::w#53 ]
|
||||
zp ZP_WORD:15 [ main::$14 myprintf::w#10 myprintf::w#18 myprintf::w#22 myprintf::w#53 myprintf::w#54 myprintf::w#55 ]
|
||||
zp ZP_WORD:17 [ main::$5 utoa::value#12 utoa::value#3 utoa::value#10 utoa::value#2 utoa::value#11 utoa::value#6 utoa::value#4 utoa::value#0 utoa::value#1 append::value#5 append::value#8 append::value#1 append::value#2 append::value#3 append::value#4 append::value#0 append::return#10 append::return#4 append::return#3 append::return#2 ]
|
||||
reg byte a [ divr16u::$1 ]
|
||||
reg byte a [ divr16u::$2 ]
|
||||
|
Loading…
Reference in New Issue
Block a user