mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-21 22:29:07 +00:00
Added atoi() and a test. optimized printf().
This commit is contained in:
parent
7069a8c17c
commit
ad76f3a9ed
@ -0,0 +1,7 @@
|
||||
clc
|
||||
lda {m2}
|
||||
adc {m3},x
|
||||
sta {m1}
|
||||
lda {m2}+1
|
||||
adc {m3}+1,x
|
||||
sta {m1}+1
|
@ -0,0 +1,7 @@
|
||||
clc
|
||||
lda {m2}
|
||||
adc {m3},y
|
||||
sta {m1}
|
||||
lda {m2}+1
|
||||
adc {m3}+1,y
|
||||
sta {m1}+1
|
@ -235,6 +235,8 @@ class AsmFragmentTemplateSynthesisRule {
|
||||
mapZ2M2.put("z2", "m2");
|
||||
Map<String, String> mapZ3M3 = new LinkedHashMap<>();
|
||||
mapZ3M3.put("z3", "m3");
|
||||
Map<String, String> mapZ4M4 = new LinkedHashMap<>();
|
||||
mapZ4M4.put("z4", "m4");
|
||||
|
||||
// C1 is replaced by something non-C - all above are moved down
|
||||
Map<String, String> mapC1 = new LinkedHashMap<>();
|
||||
@ -334,6 +336,14 @@ class AsmFragmentTemplateSynthesisRule {
|
||||
mapZM3Swap.put("m2", "m3");
|
||||
mapZM3Swap.put("zn", "z2");
|
||||
mapZM3Swap.put("mn", "m2");
|
||||
// Swap z3 and z4
|
||||
Map<String, String> mapZM4Swap = new LinkedHashMap<>();
|
||||
mapZM4Swap.put("z4", "zn");
|
||||
mapZM4Swap.put("m4", "mn");
|
||||
mapZM4Swap.put("z3", "z4");
|
||||
mapZM4Swap.put("m3", "m4");
|
||||
mapZM4Swap.put("zn", "z3");
|
||||
mapZM4Swap.put("mn", "m3");
|
||||
|
||||
// AA/XX/YY/Z1 is an RValue
|
||||
String rvalAa = ".*=.*aa.*|.*_.*aa.*|...aa_(lt|gt|le|ge|eq|neq)_.*";
|
||||
@ -360,10 +370,12 @@ class AsmFragmentTemplateSynthesisRule {
|
||||
String lvalZM1 = "...[zm]1=.*";
|
||||
String lvalZM2 = "...[zm]2=.*";
|
||||
String lvalZM3 = "...[zm]3=.*";
|
||||
String lvalZM4 = "...[zm]4=.*";
|
||||
// Multiple occurences of Z1/...
|
||||
String twoZM1 = ".*[zm]1.*[zm]1.*";
|
||||
String twoZM2 = ".*[zm]2.*[zm]2.*";
|
||||
String twoZM3 = ".*[zm]3.*[zm]3.*";
|
||||
String twoZM4 = ".*[zm]4.*[zm]4.*";
|
||||
String threeZM1 = ".*[zm]1.*[zm]1.*[zm]1.*";
|
||||
String threeZM2 = ".*[zm]2.*[zm]2.*[zm]2.*";
|
||||
String threeZM3 = ".*[zm]3.*[zm]3.*[zm]3.*";
|
||||
@ -458,6 +470,13 @@ class AsmFragmentTemplateSynthesisRule {
|
||||
// Replace three Z3 with M3
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z3(.*)z3(.*)z3(.*)", fourZM3, null, "$1m3$2m3$3m3$4", null, mapZ3M3));
|
||||
|
||||
// Replace Z4 with M4
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z4(.*)", twoZM4, null, "$1m4$2", null, mapZ4M4));
|
||||
// Replace two Z4 with M4
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z4(.*)z4(.*)", threeZM4, null, "$1m4$2m4$3", null, mapZ4M4));
|
||||
// Replace three Z4 with M4
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)z4(.*)z4(.*)z4(.*)", fourZM4, null, "$1m4$2m4$3m4$4", null, mapZ4M4));
|
||||
|
||||
// Replace M1 with AA (only one)
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)", lvalZM1+"|"+rvalAa+"|"+ twoZM1, "lda {m1}", "$1aa$2", null, mapZM1));
|
||||
// Replace two M1s with AA
|
||||
@ -491,6 +510,15 @@ class AsmFragmentTemplateSynthesisRule {
|
||||
// Replace second (of 2) M3 with AA
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalAa, "lda {m3}", "$1m3$2aa$3", null, null));
|
||||
|
||||
// Replace M4 with AA (only one)
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)", lvalZM4+"|"+rvalAa+"|"+twoZM4, "lda {m4}", "$1aa$2", null, mapZM4));
|
||||
// Replace two M4s with AA
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalAa+"|"+threeZM4, "lda {m4}", "$1aa$2aa$3", null, mapZM4));
|
||||
// Replace first (of 2) M4 with AA
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)m4(.*)", lvalZM4+"|"+rvalAa, "lda {m4}", "$1aa$2m4$3", null, null));
|
||||
// Replace second (of 2) M4 with AA
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalAa, "lda {m4}", "$1m4$2aa$3", null, null));
|
||||
|
||||
// Replace M1 with YY (only one)
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)", lvalZM1+"|"+rvalYy+"|"+ twoZM1, "ldy {m1}", "$1yy$2", null, mapZM1));
|
||||
// Replace two M1s with YY
|
||||
@ -524,6 +552,15 @@ class AsmFragmentTemplateSynthesisRule {
|
||||
// Replace second (of 2) M3 with YY
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalYy, "ldy {m3}", "$1m3$2yy$3", null, null));
|
||||
|
||||
// Replace M4 with YY (only one)
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)", lvalZM4+"|"+rvalYy+"|"+twoZM4, "ldy {m4}", "$1yy$2", null, mapZM4));
|
||||
// Replace two M4s with YY
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalYy+"|"+threeZM4, "ldy {m4}", "$1yy$2yy$3", null, mapZM4));
|
||||
// Replace first (of 2) M4 with YY
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)m4(.*)", lvalZM4+"|"+rvalYy, "ldy {m4}", "$1yy$2m4$3", null, null));
|
||||
// Replace second (of 2) M4 with YY
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalYy, "ldy {m4}", "$1m4$2yy$3", null, null));
|
||||
|
||||
// Replace M1 with XX (only one)
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m1(.*)", lvalZM1+"|"+rvalXx+"|"+ twoZM1, "ldx {m1}", "$1xx$2", null, mapZM1));
|
||||
// Replace two M1s with XX
|
||||
@ -557,10 +594,21 @@ class AsmFragmentTemplateSynthesisRule {
|
||||
// Replace second (of 2) M3 with XX
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m3(.*vb.)m3(.*)", lvalZM3+"|"+rvalXx, "ldx {m3}", "$1m3$2xx$3", null, null));
|
||||
|
||||
// Replace M4 with XX (only one)
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)", lvalZM4+"|"+rvalXx+"|"+twoZM4, "ldx {m4}", "$1xx$2", null, mapZM4));
|
||||
// Replace two M4s with XX
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalXx+"|"+threeZM4, "ldx {m4}", "$1xx$2xx$3", null, mapZM4));
|
||||
// Replace first (of 2) M4 with XX
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*vb.)m4(.*)m4(.*)", lvalZM4+"|"+rvalXx, "ldx {m4}", "$1xx$2m4$3", null, null));
|
||||
// Replace second (of 2) M4 with XX
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m4(.*vb.)m4(.*)", lvalZM4+"|"+rvalXx, "ldx {m4}", "$1m4$2xx$3", null, null));
|
||||
|
||||
// Correct wrong ordered Z2/Z1
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m2(.*)m1(.*)", twoZM1+"|"+twoZM2, null, "$1m1$2m2$3", null, mapZM2Swap, false));
|
||||
// Correct wrong ordered Z3/Z2
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m3(.*)m2(.*)", twoZM2+"|"+twoZM3, null, "$1m2$2m3$3", null, mapZM3Swap, false));
|
||||
// Correct wrong ordered Z4/Z3
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)m4(.*)m3(.*)", twoZM3+"|"+twoZM4, null, "$1m3$2m4$3", null, mapZM4Swap, false));
|
||||
// Correct wrong ordered C2/C1
|
||||
synths.add(new AsmFragmentTemplateSynthesisRule("(.*)c2(.*)c1(.*)", twoC1+"|"+twoC2, null, "$1c1$2c2$3", null, mapC2Swap, false));
|
||||
|
||||
|
@ -108,7 +108,7 @@ public class Pass1PrintfIntrinsicRewrite extends Pass2SsaOptimization {
|
||||
if(!fieldParamIdx && paramIdx > 1)
|
||||
throw new CompileError("Error! If any single printf() placeholder specifies a parameter, all the rest of the placeholders must also specify a parameter!", statement);
|
||||
fieldParamIdx = true;
|
||||
paramIdx = Integer.parseInt(paramField.substring(0, paramField.length()-1));
|
||||
paramIdx = Integer.parseInt(paramField.substring(0, paramField.length() - 1));
|
||||
}
|
||||
final String flagsField = matcher.group(2);
|
||||
long leftJustify = (flagsField != null && flagsField.contains("-")) ? 1 : 0;
|
||||
@ -121,7 +121,8 @@ public class Pass1PrintfIntrinsicRewrite extends Pass2SsaOptimization {
|
||||
|
||||
// First output the non-matching part before the pattern
|
||||
String prefix = formatString.substring(formatIdx, start);
|
||||
addPrintfCall(PRINTF_STR, Arrays.asList(new ConstantString(prefix, formatEncoding, true)), stmtIt, printfCall);
|
||||
if(prefix.length() > 0)
|
||||
addPrintfCall(PRINTF_STR, Arrays.asList(new ConstantString(prefix, formatEncoding, true)), stmtIt, printfCall);
|
||||
formatIdx = end;
|
||||
|
||||
if(typeField.equals("%")) {
|
||||
@ -236,7 +237,8 @@ public class Pass1PrintfIntrinsicRewrite extends Pass2SsaOptimization {
|
||||
}
|
||||
// Grab the rest
|
||||
String suffix = formatString.substring(formatIdx);
|
||||
addPrintfCall(PRINTF_STR, Arrays.asList(new ConstantString(suffix, formatEncoding, true)), stmtIt, printfCall);
|
||||
if(suffix.length() > 0)
|
||||
addPrintfCall(PRINTF_STR, Arrays.asList(new ConstantString(suffix, formatEncoding, true)), stmtIt, printfCall);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,9 @@ void utoa(unsigned int value, char* buffer, enum RADIX radix);
|
||||
// - radix : The radix to convert the number to (from the enum RADIX)
|
||||
void ultoa(unsigned long value, char* buffer, enum RADIX radix);
|
||||
|
||||
// Converts the string argument str to an integer.
|
||||
int atoi(const char *str);
|
||||
|
||||
// Returns the absolute value of int x.
|
||||
int abs(int x);
|
||||
|
||||
|
@ -249,6 +249,26 @@ unsigned long ultoa_append(char *buffer, unsigned long value, unsigned long sub)
|
||||
return value;
|
||||
}
|
||||
|
||||
// Converts the string argument str to an integer.
|
||||
int atoi(const char *str) {
|
||||
int res = 0; // Initialize result
|
||||
char negative = 0; // Initialize sign as positive
|
||||
char i = 0; // Initialize index of first digit
|
||||
|
||||
if (str[i] == '-') {
|
||||
negative = 1;
|
||||
i++;
|
||||
}
|
||||
// Iterate through all digits and update the result
|
||||
for (; str[i]; ++i)
|
||||
res = res * 10 + str[i] - '0';
|
||||
// Return result with sign
|
||||
if(negative)
|
||||
return -res;
|
||||
else
|
||||
return res;
|
||||
}
|
||||
|
||||
// Returns the absolute value of int x.
|
||||
inline int abs(int x) {
|
||||
if(x<0)
|
||||
|
@ -40,6 +40,11 @@ public class TestPrograms {
|
||||
public TestPrograms() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAtoi() throws IOException, URISyntaxException {
|
||||
compileAndCompare("atoi-1.c");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testToUpper1() throws IOException, URISyntaxException {
|
||||
compileAndCompare("toupper-1.c");
|
||||
|
10
src/test/kc/atoi-1.c
Normal file
10
src/test/kc/atoi-1.c
Normal file
@ -0,0 +1,10 @@
|
||||
// Test atoi()
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void main() {
|
||||
printf_cls();
|
||||
printf("%d\n", atoi("1234"));
|
||||
printf("%d\n", atoi("-5678"));
|
||||
}
|
556
src/test/ref/atoi-1.asm
Normal file
556
src/test/ref/atoi-1.asm
Normal file
@ -0,0 +1,556 @@
|
||||
// Test atoi()
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(__bbegin)
|
||||
.pc = $80d "Program"
|
||||
.const OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1
|
||||
.const SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c
|
||||
.label printf_cursor_x = 7
|
||||
.label printf_cursor_y = 8
|
||||
.label printf_cursor_ptr = 9
|
||||
__bbegin:
|
||||
// printf_cursor_x = 0
|
||||
// X-position of cursor
|
||||
lda #0
|
||||
sta.z printf_cursor_x
|
||||
// printf_cursor_y = 0
|
||||
// Y-position of cursor
|
||||
sta.z printf_cursor_y
|
||||
// printf_cursor_ptr = PRINTF_SCREEN_ADDRESS
|
||||
// Pointer to cursor address
|
||||
lda #<$400
|
||||
sta.z printf_cursor_ptr
|
||||
lda #>$400
|
||||
sta.z printf_cursor_ptr+1
|
||||
jsr main
|
||||
rts
|
||||
main: {
|
||||
// printf_cls()
|
||||
jsr printf_cls
|
||||
// atoi("1234")
|
||||
lda #<str
|
||||
sta.z atoi.str
|
||||
lda #>str
|
||||
sta.z atoi.str+1
|
||||
jsr atoi
|
||||
// atoi("1234")
|
||||
// printf("%d\n", atoi("1234"))
|
||||
jsr printf_sint
|
||||
// printf("%d\n", atoi("1234"))
|
||||
lda #<str1
|
||||
sta.z printf_str.str
|
||||
lda #>str1
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// atoi("-5678")
|
||||
lda #<str2
|
||||
sta.z atoi.str
|
||||
lda #>str2
|
||||
sta.z atoi.str+1
|
||||
jsr atoi
|
||||
// atoi("-5678")
|
||||
// printf("%d\n", atoi("-5678"))
|
||||
jsr printf_sint
|
||||
// printf("%d\n", atoi("-5678"))
|
||||
lda #<str1
|
||||
sta.z printf_str.str
|
||||
lda #>str1
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// }
|
||||
rts
|
||||
str: .text "1234"
|
||||
.byte 0
|
||||
str1: .text @"\n"
|
||||
.byte 0
|
||||
str2: .text "-5678"
|
||||
.byte 0
|
||||
}
|
||||
// Print a zero-terminated string
|
||||
// Handles escape codes such as newline
|
||||
// printf_str(byte* zp(2) str)
|
||||
printf_str: {
|
||||
.label str = 2
|
||||
__b2:
|
||||
// ch = *str++
|
||||
ldy #0
|
||||
lda (str),y
|
||||
inc.z str
|
||||
bne !+
|
||||
inc.z str+1
|
||||
!:
|
||||
// if(ch==0)
|
||||
cmp #0
|
||||
bne __b3
|
||||
// }
|
||||
rts
|
||||
__b3:
|
||||
// if(ch=='\n')
|
||||
cmp #'\n'
|
||||
beq __b4
|
||||
// printf_char(ch)
|
||||
jsr printf_char
|
||||
jmp __b2
|
||||
__b4:
|
||||
// printf_ln()
|
||||
jsr printf_ln
|
||||
jmp __b2
|
||||
}
|
||||
// Print a newline
|
||||
printf_ln: {
|
||||
.label __0 = 9
|
||||
.label __1 = 9
|
||||
// printf_cursor_ptr - printf_cursor_x
|
||||
sec
|
||||
lda.z __0
|
||||
sbc.z printf_cursor_x
|
||||
sta.z __0
|
||||
bcs !+
|
||||
dec.z __0+1
|
||||
!:
|
||||
// printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH
|
||||
lda #$28
|
||||
clc
|
||||
adc.z __1
|
||||
sta.z __1
|
||||
bcc !+
|
||||
inc.z __1+1
|
||||
!:
|
||||
// printf_cursor_ptr = printf_cursor_ptr - printf_cursor_x + PRINTF_SCREEN_WIDTH
|
||||
// printf_cursor_x = 0
|
||||
lda #0
|
||||
sta.z printf_cursor_x
|
||||
// printf_cursor_y++;
|
||||
inc.z printf_cursor_y
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Print a single char
|
||||
// If the end of the screen is reached scroll it up one char and place the cursor at the
|
||||
// printf_char(byte register(A) ch)
|
||||
printf_char: {
|
||||
.label __6 = 9
|
||||
// *(printf_cursor_ptr++) = ch
|
||||
ldy #0
|
||||
sta (printf_cursor_ptr),y
|
||||
// *(printf_cursor_ptr++) = ch;
|
||||
inc.z printf_cursor_ptr
|
||||
bne !+
|
||||
inc.z printf_cursor_ptr+1
|
||||
!:
|
||||
// if(++printf_cursor_x==PRINTF_SCREEN_WIDTH)
|
||||
inc.z printf_cursor_x
|
||||
lda #$28
|
||||
cmp.z printf_cursor_x
|
||||
bne __breturn
|
||||
// printf_cursor_x = 0
|
||||
lda #0
|
||||
sta.z printf_cursor_x
|
||||
// ++printf_cursor_y;
|
||||
inc.z printf_cursor_y
|
||||
// if(printf_cursor_y==PRINTF_SCREEN_HEIGHT)
|
||||
lda #$19
|
||||
cmp.z printf_cursor_y
|
||||
bne __breturn
|
||||
// memcpy(PRINTF_SCREEN_ADDRESS, PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_WIDTH, PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH)
|
||||
jsr memcpy
|
||||
// memset(PRINTF_SCREEN_ADDRESS+PRINTF_SCREEN_BYTES-PRINTF_SCREEN_WIDTH, ' ', PRINTF_SCREEN_WIDTH)
|
||||
ldx #' '
|
||||
lda #<$400+$28*$19-$28
|
||||
sta.z memset.str
|
||||
lda #>$400+$28*$19-$28
|
||||
sta.z memset.str+1
|
||||
lda #<$28
|
||||
sta.z memset.num
|
||||
lda #>$28
|
||||
sta.z memset.num+1
|
||||
jsr memset
|
||||
// printf_cursor_ptr-PRINTF_SCREEN_WIDTH
|
||||
lda.z __6
|
||||
sec
|
||||
sbc #<$28
|
||||
sta.z __6
|
||||
lda.z __6+1
|
||||
sbc #>$28
|
||||
sta.z __6+1
|
||||
// printf_cursor_ptr = printf_cursor_ptr-PRINTF_SCREEN_WIDTH
|
||||
// printf_cursor_y--;
|
||||
dec.z printf_cursor_y
|
||||
__breturn:
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
// memset(void* zp($b) str, byte register(X) c, word zp(5) num)
|
||||
memset: {
|
||||
.label end = 5
|
||||
.label dst = $b
|
||||
.label num = 5
|
||||
.label str = $b
|
||||
// if(num>0)
|
||||
lda.z num
|
||||
bne !+
|
||||
lda.z num+1
|
||||
beq __breturn
|
||||
!:
|
||||
// end = (char*)str + num
|
||||
lda.z end
|
||||
clc
|
||||
adc.z str
|
||||
sta.z end
|
||||
lda.z end+1
|
||||
adc.z str+1
|
||||
sta.z end+1
|
||||
__b2:
|
||||
// for(char* dst = str; dst!=end; dst++)
|
||||
lda.z dst+1
|
||||
cmp.z end+1
|
||||
bne __b3
|
||||
lda.z dst
|
||||
cmp.z end
|
||||
bne __b3
|
||||
__breturn:
|
||||
// }
|
||||
rts
|
||||
__b3:
|
||||
// *dst = c
|
||||
txa
|
||||
ldy #0
|
||||
sta (dst),y
|
||||
// for(char* dst = str; dst!=end; dst++)
|
||||
inc.z dst
|
||||
bne !+
|
||||
inc.z dst+1
|
||||
!:
|
||||
jmp __b2
|
||||
}
|
||||
// Copy block of memory (forwards)
|
||||
// Copies the values of num bytes from the location pointed to by source directly to the memory block pointed to by destination.
|
||||
memcpy: {
|
||||
.label destination = $400
|
||||
.label source = $400+$28
|
||||
.const num = $28*$19-$28
|
||||
.label src_end = source+num
|
||||
.label dst = $b
|
||||
.label src = 5
|
||||
lda #<destination
|
||||
sta.z dst
|
||||
lda #>destination
|
||||
sta.z dst+1
|
||||
lda #<source
|
||||
sta.z src
|
||||
lda #>source
|
||||
sta.z src+1
|
||||
__b1:
|
||||
// while(src!=src_end)
|
||||
lda.z src+1
|
||||
cmp #>src_end
|
||||
bne __b2
|
||||
lda.z src
|
||||
cmp #<src_end
|
||||
bne __b2
|
||||
// }
|
||||
rts
|
||||
__b2:
|
||||
// *dst++ = *src++
|
||||
ldy #0
|
||||
lda (src),y
|
||||
sta (dst),y
|
||||
// *dst++ = *src++;
|
||||
inc.z dst
|
||||
bne !+
|
||||
inc.z dst+1
|
||||
!:
|
||||
inc.z src
|
||||
bne !+
|
||||
inc.z src+1
|
||||
!:
|
||||
jmp __b1
|
||||
}
|
||||
// Print a signed integer using a specific format
|
||||
// printf_sint(signed word zp(2) value)
|
||||
printf_sint: {
|
||||
.label value = 2
|
||||
// printf_buffer.sign = 0
|
||||
// Handle any sign
|
||||
lda #0
|
||||
sta printf_buffer
|
||||
// if(value<0)
|
||||
lda.z value+1
|
||||
bmi __b1
|
||||
jmp __b2
|
||||
__b1:
|
||||
// value = -value
|
||||
sec
|
||||
lda #0
|
||||
sbc.z value
|
||||
sta.z value
|
||||
lda #0
|
||||
sbc.z value+1
|
||||
sta.z value+1
|
||||
// printf_buffer.sign = '-'
|
||||
lda #'-'
|
||||
sta printf_buffer
|
||||
__b2:
|
||||
// utoa(uvalue, printf_buffer.digits, format.radix)
|
||||
jsr utoa
|
||||
// printf_number_buffer(printf_buffer, format)
|
||||
lda printf_buffer
|
||||
// Print using format
|
||||
jsr printf_number_buffer
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Print the contents of the number buffer using a specific format.
|
||||
// This handles minimum length, zero-filling, and left/right justification from the format
|
||||
// printf_number_buffer(byte register(A) buffer_sign)
|
||||
printf_number_buffer: {
|
||||
.label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
||||
// if(buffer.sign)
|
||||
cmp #0
|
||||
beq __b2
|
||||
// printf_char(buffer.sign)
|
||||
jsr printf_char
|
||||
__b2:
|
||||
// printf_str(buffer.digits)
|
||||
lda #<buffer_digits
|
||||
sta.z printf_str.str
|
||||
lda #>buffer_digits
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Converts unsigned number value to a string representing it in RADIX format.
|
||||
// If the leading digits are zero they are not included in the string.
|
||||
// - value : The number to be converted to RADIX
|
||||
// - buffer : receives the string representing the number and zero-termination.
|
||||
// - radix : The radix to convert the number to (from the enum RADIX)
|
||||
// utoa(word zp(2) value, byte* zp(5) buffer)
|
||||
utoa: {
|
||||
.label digit_value = $b
|
||||
.label buffer = 5
|
||||
.label digit = 4
|
||||
.label value = 2
|
||||
lda #<printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
||||
sta.z buffer
|
||||
lda #>printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
||||
sta.z buffer+1
|
||||
ldx #0
|
||||
txa
|
||||
sta.z digit
|
||||
__b1:
|
||||
// for( char digit=0; digit<max_digits-1; digit++ )
|
||||
lda.z digit
|
||||
cmp #5-1
|
||||
bcc __b2
|
||||
// *buffer++ = DIGITS[(char)value]
|
||||
lda.z value
|
||||
tay
|
||||
lda DIGITS,y
|
||||
ldy #0
|
||||
sta (buffer),y
|
||||
// *buffer++ = DIGITS[(char)value];
|
||||
inc.z buffer
|
||||
bne !+
|
||||
inc.z buffer+1
|
||||
!:
|
||||
// *buffer = 0
|
||||
lda #0
|
||||
tay
|
||||
sta (buffer),y
|
||||
// }
|
||||
rts
|
||||
__b2:
|
||||
// digit_value = digit_values[digit]
|
||||
lda.z digit
|
||||
asl
|
||||
tay
|
||||
lda RADIX_DECIMAL_VALUES,y
|
||||
sta.z digit_value
|
||||
lda RADIX_DECIMAL_VALUES+1,y
|
||||
sta.z digit_value+1
|
||||
// if (started || value >= digit_value)
|
||||
cpx #0
|
||||
bne __b5
|
||||
cmp.z value+1
|
||||
bne !+
|
||||
lda.z digit_value
|
||||
cmp.z value
|
||||
beq __b5
|
||||
!:
|
||||
bcc __b5
|
||||
__b4:
|
||||
// for( char digit=0; digit<max_digits-1; digit++ )
|
||||
inc.z digit
|
||||
jmp __b1
|
||||
__b5:
|
||||
// utoa_append(buffer++, value, digit_value)
|
||||
jsr utoa_append
|
||||
// utoa_append(buffer++, value, digit_value)
|
||||
// value = utoa_append(buffer++, value, digit_value)
|
||||
// value = utoa_append(buffer++, value, digit_value);
|
||||
inc.z buffer
|
||||
bne !+
|
||||
inc.z buffer+1
|
||||
!:
|
||||
ldx #1
|
||||
jmp __b4
|
||||
}
|
||||
// Used to convert a single digit of an unsigned number value to a string representation
|
||||
// Counts a single digit up from '0' as long as the value is larger than sub.
|
||||
// Each time the digit is increased sub is subtracted from value.
|
||||
// - buffer : pointer to the char that receives the digit
|
||||
// - value : The value where the digit will be derived from
|
||||
// - sub : the value of a '1' in the digit. Subtracted continually while the digit is increased.
|
||||
// (For decimal the subs used are 10000, 1000, 100, 10, 1)
|
||||
// returns : the value reduced by sub * digit so that it is less than sub.
|
||||
// utoa_append(byte* zp(5) buffer, word zp(2) value, word zp($b) sub)
|
||||
utoa_append: {
|
||||
.label buffer = 5
|
||||
.label value = 2
|
||||
.label sub = $b
|
||||
.label return = 2
|
||||
ldx #0
|
||||
__b1:
|
||||
// while (value >= sub)
|
||||
lda.z sub+1
|
||||
cmp.z value+1
|
||||
bne !+
|
||||
lda.z sub
|
||||
cmp.z value
|
||||
beq __b2
|
||||
!:
|
||||
bcc __b2
|
||||
// *buffer = DIGITS[digit]
|
||||
lda DIGITS,x
|
||||
ldy #0
|
||||
sta (buffer),y
|
||||
// }
|
||||
rts
|
||||
__b2:
|
||||
// digit++;
|
||||
inx
|
||||
// value -= sub
|
||||
lda.z value
|
||||
sec
|
||||
sbc.z sub
|
||||
sta.z value
|
||||
lda.z value+1
|
||||
sbc.z sub+1
|
||||
sta.z value+1
|
||||
jmp __b1
|
||||
}
|
||||
// Converts the string argument str to an integer.
|
||||
// atoi(byte* zp(5) str)
|
||||
atoi: {
|
||||
.label __3 = 2
|
||||
.label __4 = 2
|
||||
.label res = 2
|
||||
.label return = 2
|
||||
.label str = 5
|
||||
.label __8 = $b
|
||||
.label __9 = 2
|
||||
// if (str[i] == '-')
|
||||
ldy #0
|
||||
lda (str),y
|
||||
cmp #'-'
|
||||
bne __b2
|
||||
ldx #1
|
||||
tya
|
||||
sta.z res
|
||||
sta.z res+1
|
||||
ldy #1
|
||||
jmp __b3
|
||||
// Iterate through all digits and update the result
|
||||
__b2:
|
||||
ldx #0
|
||||
txa
|
||||
sta.z res
|
||||
sta.z res+1
|
||||
tay
|
||||
__b3:
|
||||
// for (; str[i]; ++i)
|
||||
lda (str),y
|
||||
cmp #0
|
||||
bne __b4
|
||||
// if(negative)
|
||||
// Return result with sign
|
||||
cpx #0
|
||||
bne __b1
|
||||
rts
|
||||
__b1:
|
||||
// return -res;
|
||||
sec
|
||||
lda #0
|
||||
sbc.z return
|
||||
sta.z return
|
||||
lda #0
|
||||
sbc.z return+1
|
||||
sta.z return+1
|
||||
// }
|
||||
rts
|
||||
__b4:
|
||||
// res * 10
|
||||
lda.z res
|
||||
asl
|
||||
sta.z __8
|
||||
lda.z res+1
|
||||
rol
|
||||
sta.z __8+1
|
||||
asl.z __8
|
||||
rol.z __8+1
|
||||
lda.z __9
|
||||
clc
|
||||
adc.z __8
|
||||
sta.z __9
|
||||
lda.z __9+1
|
||||
adc.z __8+1
|
||||
sta.z __9+1
|
||||
asl.z __3
|
||||
rol.z __3+1
|
||||
// res * 10 + str[i]
|
||||
.assert "Missing ASM fragment Fragment not found vwsz1=vwsz1_plus_pbuz2_derefidx_vbuyy. Attempted variations vwsz1=vwsz1_plus_pbuz2_derefidx_vbuyy ", 0, 1
|
||||
// res = res * 10 + str[i] - '0'
|
||||
sec
|
||||
lda.z res
|
||||
sbc #'0'
|
||||
sta.z res
|
||||
bcs !+
|
||||
dec.z res+1
|
||||
!:
|
||||
// for (; str[i]; ++i)
|
||||
iny
|
||||
jmp __b3
|
||||
}
|
||||
// Clear the screen. Also resets current line/char cursor.
|
||||
printf_cls: {
|
||||
// memset(PRINTF_SCREEN_ADDRESS, ' ', PRINTF_SCREEN_BYTES)
|
||||
ldx #' '
|
||||
lda #<$400
|
||||
sta.z memset.str
|
||||
lda #>$400
|
||||
sta.z memset.str+1
|
||||
lda #<$28*$19
|
||||
sta.z memset.num
|
||||
lda #>$28*$19
|
||||
sta.z memset.num+1
|
||||
jsr memset
|
||||
// printf_cursor_ptr = PRINTF_SCREEN_ADDRESS
|
||||
lda #<$400
|
||||
sta.z printf_cursor_ptr
|
||||
lda #>$400
|
||||
sta.z printf_cursor_ptr+1
|
||||
// printf_cursor_x = 0
|
||||
lda #0
|
||||
sta.z printf_cursor_x
|
||||
// printf_cursor_y = 0
|
||||
sta.z printf_cursor_y
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// The digits used for numbers
|
||||
DIGITS: .text "0123456789abcdef"
|
||||
// Values of decimal digits
|
||||
RADIX_DECIMAL_VALUES: .word $2710, $3e8, $64, $a
|
||||
// Buffer used for stringified number being printed
|
||||
printf_buffer: .fill SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER, 0
|
315
src/test/ref/atoi-1.cfg
Normal file
315
src/test/ref/atoi-1.cfg
Normal file
@ -0,0 +1,315 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi()
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
[1] (byte) printf_cursor_x ← (byte) 0
|
||||
[2] (byte) printf_cursor_y ← (byte) 0
|
||||
[3] (byte*) printf_cursor_ptr ← (byte*) 1024
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
[4] phi()
|
||||
[5] call main
|
||||
to:@end
|
||||
@end: scope:[] from @2
|
||||
[6] phi()
|
||||
|
||||
(void()) main()
|
||||
main: scope:[main] from @2
|
||||
[7] phi()
|
||||
[8] call printf_cls
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[9] phi()
|
||||
[10] call atoi
|
||||
[11] (signed word) atoi::return#3 ← (signed word) atoi::return#2
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[12] (signed word) printf_sint::value#1 ← (signed word) atoi::return#3
|
||||
[13] call printf_sint
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[14] phi()
|
||||
[15] call printf_str
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
[16] phi()
|
||||
[17] call atoi
|
||||
[18] (signed word) atoi::return#4 ← (signed word) atoi::return#2
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@4
|
||||
[19] (signed word) printf_sint::value#2 ← (signed word) atoi::return#4
|
||||
[20] call printf_sint
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
[21] phi()
|
||||
[22] call printf_str
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@6
|
||||
[23] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_str((byte*) printf_str::str)
|
||||
printf_str: scope:[printf_str] from main::@3 main::@6 printf_number_buffer::@2
|
||||
[24] (byte*) printf_str::str#6 ← phi( main::@3/(const byte*) main::str1 main::@6/(const byte*) main::str1 printf_number_buffer::@2/(const byte*) printf_number_buffer::buffer_digits#0 )
|
||||
to:printf_str::@1
|
||||
printf_str::@1: scope:[printf_str] from printf_str printf_str::@4 printf_str::@5
|
||||
[25] (byte*) printf_str::str#4 ← phi( printf_str/(byte*) printf_str::str#6 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 )
|
||||
to:printf_str::@2
|
||||
printf_str::@2: scope:[printf_str] from printf_str::@1
|
||||
[26] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#4)
|
||||
[27] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#4
|
||||
[28] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3
|
||||
to:printf_str::@return
|
||||
printf_str::@return: scope:[printf_str] from printf_str::@2
|
||||
[29] return
|
||||
to:@return
|
||||
printf_str::@3: scope:[printf_str] from printf_str::@2
|
||||
[30] if((byte) printf_str::ch#0==(byte) '
|
||||
') goto printf_str::@4
|
||||
to:printf_str::@5
|
||||
printf_str::@5: scope:[printf_str] from printf_str::@3
|
||||
[31] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0
|
||||
[32] call printf_char
|
||||
to:printf_str::@1
|
||||
printf_str::@4: scope:[printf_str] from printf_str::@3
|
||||
[33] phi()
|
||||
[34] call printf_ln
|
||||
to:printf_str::@1
|
||||
|
||||
(void()) printf_ln()
|
||||
printf_ln: scope:[printf_ln] from printf_str::@4
|
||||
[35] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x
|
||||
[36] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28
|
||||
[37] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1
|
||||
[38] (byte) printf_cursor_x ← (byte) 0
|
||||
[39] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
to:printf_ln::@return
|
||||
printf_ln::@return: scope:[printf_ln] from printf_ln
|
||||
[40] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_char((byte) printf_char::ch)
|
||||
printf_char: scope:[printf_char] from printf_number_buffer::@3 printf_str::@5
|
||||
[41] (byte) printf_char::ch#3 ← phi( printf_number_buffer::@3/(byte) printf_char::ch#2 printf_str::@5/(byte) printf_char::ch#1 )
|
||||
[42] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3
|
||||
[43] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr
|
||||
[44] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x
|
||||
[45] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return
|
||||
to:printf_char::@1
|
||||
printf_char::@1: scope:[printf_char] from printf_char
|
||||
[46] (byte) printf_cursor_x ← (byte) 0
|
||||
[47] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
[48] if((byte) printf_cursor_y!=(byte) $19) goto printf_char::@return
|
||||
to:printf_char::@2
|
||||
printf_char::@2: scope:[printf_char] from printf_char::@1
|
||||
[49] phi()
|
||||
[50] call memcpy
|
||||
to:printf_char::@3
|
||||
printf_char::@3: scope:[printf_char] from printf_char::@2
|
||||
[51] phi()
|
||||
[52] call memset
|
||||
to:printf_char::@4
|
||||
printf_char::@4: scope:[printf_char] from printf_char::@3
|
||||
[53] (byte*~) printf_char::$6 ← (byte*) printf_cursor_ptr - (byte) $28
|
||||
[54] (byte*) printf_cursor_ptr ← (byte*~) printf_char::$6
|
||||
[55] (byte) printf_cursor_y ← -- (byte) printf_cursor_y
|
||||
to:printf_char::@return
|
||||
printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 printf_char::@4
|
||||
[56] return
|
||||
to:@return
|
||||
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
memset: scope:[memset] from printf_char::@3 printf_cls
|
||||
[57] (byte) memset::c#4 ← phi( printf_char::@3/(byte) ' ' printf_cls/(byte) ' ' )
|
||||
[57] (void*) memset::str#3 ← phi( printf_char::@3/(void*)(number) $400+(number) $28*(number) $19-(number) $28 printf_cls/(void*) 1024 )
|
||||
[57] (word) memset::num#2 ← phi( printf_char::@3/(byte) $28 printf_cls/(word)(number) $28*(number) $19 )
|
||||
[58] if((word) memset::num#2<=(byte) 0) goto memset::@return
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset
|
||||
[59] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2
|
||||
[60] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
|
||||
to:memset::@2
|
||||
memset::@2: scope:[memset] from memset::@1 memset::@3
|
||||
[61] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
|
||||
[62] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset memset::@2
|
||||
[63] return
|
||||
to:@return
|
||||
memset::@3: scope:[memset] from memset::@2
|
||||
[64] *((byte*) memset::dst#2) ← (byte) memset::c#4
|
||||
[65] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
to:memset::@2
|
||||
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
memcpy: scope:[memcpy] from printf_char::@2
|
||||
[66] phi()
|
||||
to:memcpy::@1
|
||||
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
||||
[67] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
||||
[67] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 )
|
||||
[68] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2
|
||||
to:memcpy::@return
|
||||
memcpy::@return: scope:[memcpy] from memcpy::@1
|
||||
[69] return
|
||||
to:@return
|
||||
memcpy::@2: scope:[memcpy] from memcpy::@1
|
||||
[70] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
|
||||
[71] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
||||
[72] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
|
||||
to:memcpy::@1
|
||||
|
||||
(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix)
|
||||
printf_sint: scope:[printf_sint] from main::@2 main::@5
|
||||
[73] (signed word) printf_sint::value#3 ← phi( main::@2/(signed word) printf_sint::value#1 main::@5/(signed word) printf_sint::value#2 )
|
||||
[74] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0
|
||||
[75] if((signed word) printf_sint::value#3<(signed byte) 0) goto printf_sint::@1
|
||||
to:printf_sint::@2
|
||||
printf_sint::@1: scope:[printf_sint] from printf_sint
|
||||
[76] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#3
|
||||
[77] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-'
|
||||
to:printf_sint::@2
|
||||
printf_sint::@2: scope:[printf_sint] from printf_sint printf_sint::@1
|
||||
[78] (signed word) printf_sint::value#5 ← phi( printf_sint::@1/(signed word) printf_sint::value#0 printf_sint/(signed word) printf_sint::value#3 )
|
||||
[79] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#5
|
||||
[80] call utoa
|
||||
to:printf_sint::@3
|
||||
printf_sint::@3: scope:[printf_sint] from printf_sint::@2
|
||||
[81] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer)
|
||||
[82] call printf_number_buffer
|
||||
to:printf_sint::@return
|
||||
printf_sint::@return: scope:[printf_sint] from printf_sint::@3
|
||||
[83] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix)
|
||||
printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@3
|
||||
[84] phi()
|
||||
to:printf_number_buffer::@1
|
||||
printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer
|
||||
[85] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2
|
||||
to:printf_number_buffer::@3
|
||||
printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@1
|
||||
[86] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#0
|
||||
[87] call printf_char
|
||||
to:printf_number_buffer::@2
|
||||
printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@3
|
||||
[88] phi()
|
||||
[89] call printf_str
|
||||
to:printf_number_buffer::@return
|
||||
printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@2
|
||||
[90] return
|
||||
to:@return
|
||||
|
||||
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
||||
utoa: scope:[utoa] from printf_sint::@2
|
||||
[91] phi()
|
||||
to:utoa::@1
|
||||
utoa::@1: scope:[utoa] from utoa utoa::@4
|
||||
[92] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
|
||||
[92] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 )
|
||||
[92] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 )
|
||||
[92] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 )
|
||||
[93] if((byte) utoa::digit#2<(byte) 5-(byte) 1) goto utoa::@2
|
||||
to:utoa::@3
|
||||
utoa::@3: scope:[utoa] from utoa::@1
|
||||
[94] (byte~) utoa::$11 ← (byte)(word) utoa::value#2
|
||||
[95] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11)
|
||||
[96] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11
|
||||
[97] *((byte*) utoa::buffer#3) ← (byte) 0
|
||||
to:utoa::@return
|
||||
utoa::@return: scope:[utoa] from utoa::@3
|
||||
[98] return
|
||||
to:@return
|
||||
utoa::@2: scope:[utoa] from utoa::@1
|
||||
[99] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1
|
||||
[100] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10)
|
||||
[101] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5
|
||||
to:utoa::@7
|
||||
utoa::@7: scope:[utoa] from utoa::@2
|
||||
[102] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5
|
||||
to:utoa::@4
|
||||
utoa::@4: scope:[utoa] from utoa::@6 utoa::@7
|
||||
[103] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 )
|
||||
[103] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 )
|
||||
[103] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 )
|
||||
[104] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2
|
||||
to:utoa::@1
|
||||
utoa::@5: scope:[utoa] from utoa::@2 utoa::@7
|
||||
[105] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11
|
||||
[106] (word) utoa_append::value#0 ← (word) utoa::value#2
|
||||
[107] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0
|
||||
[108] call utoa_append
|
||||
[109] (word) utoa_append::return#0 ← (word) utoa_append::value#2
|
||||
to:utoa::@6
|
||||
utoa::@6: scope:[utoa] from utoa::@5
|
||||
[110] (word) utoa::value#0 ← (word) utoa_append::return#0
|
||||
[111] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11
|
||||
to:utoa::@4
|
||||
|
||||
(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub)
|
||||
utoa_append: scope:[utoa_append] from utoa::@5
|
||||
[112] phi()
|
||||
to:utoa_append::@1
|
||||
utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2
|
||||
[113] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 )
|
||||
[113] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 )
|
||||
[114] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2
|
||||
to:utoa_append::@3
|
||||
utoa_append::@3: scope:[utoa_append] from utoa_append::@1
|
||||
[115] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2)
|
||||
to:utoa_append::@return
|
||||
utoa_append::@return: scope:[utoa_append] from utoa_append::@3
|
||||
[116] return
|
||||
to:@return
|
||||
utoa_append::@2: scope:[utoa_append] from utoa_append::@1
|
||||
[117] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2
|
||||
[118] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0
|
||||
to:utoa_append::@1
|
||||
|
||||
(signed word()) atoi((to_nomodify byte*) atoi::str)
|
||||
atoi: scope:[atoi] from main::@1 main::@4
|
||||
[119] (to_nomodify byte*) atoi::str#2 ← phi( main::@1/(const byte*) main::str main::@4/(const byte*) main::str2 )
|
||||
[120] if(*((to_nomodify byte*) atoi::str#2)!=(byte) '-') goto atoi::@3
|
||||
to:atoi::@2
|
||||
atoi::@2: scope:[atoi] from atoi
|
||||
[121] phi()
|
||||
to:atoi::@3
|
||||
atoi::@3: scope:[atoi] from atoi atoi::@2 atoi::@4
|
||||
[122] (byte) atoi::negative#2 ← phi( atoi/(byte) 0 atoi::@2/(byte) 1 atoi::@4/(byte) atoi::negative#2 )
|
||||
[122] (signed word) atoi::res#2 ← phi( atoi/(signed word) 0 atoi::@2/(signed word) 0 atoi::@4/(signed word) atoi::res#1 )
|
||||
[122] (byte) atoi::i#4 ← phi( atoi/(byte) 0 atoi::@2/(byte) 1 atoi::@4/(byte) atoi::i#2 )
|
||||
[123] if((byte) 0!=*((to_nomodify byte*) atoi::str#2 + (byte) atoi::i#4)) goto atoi::@4
|
||||
to:atoi::@5
|
||||
atoi::@5: scope:[atoi] from atoi::@3
|
||||
[124] if((byte) 0!=(byte) atoi::negative#2) goto atoi::@1
|
||||
to:atoi::@return
|
||||
atoi::@1: scope:[atoi] from atoi::@5
|
||||
[125] (signed word) atoi::return#0 ← - (signed word) atoi::res#2
|
||||
to:atoi::@return
|
||||
atoi::@return: scope:[atoi] from atoi::@1 atoi::@5
|
||||
[126] (signed word) atoi::return#2 ← phi( atoi::@1/(signed word) atoi::return#0 atoi::@5/(signed word) atoi::res#2 )
|
||||
[127] return
|
||||
to:@return
|
||||
atoi::@4: scope:[atoi] from atoi::@3
|
||||
[128] (signed word~) atoi::$8 ← (signed word) atoi::res#2 << (byte) 2
|
||||
[129] (signed word~) atoi::$9 ← (signed word~) atoi::$8 + (signed word) atoi::res#2
|
||||
[130] (signed word~) atoi::$3 ← (signed word~) atoi::$9 << (byte) 1
|
||||
[131] (signed word~) atoi::$4 ← (signed word~) atoi::$3 + *((to_nomodify byte*) atoi::str#2 + (byte) atoi::i#4)
|
||||
[132] (signed word) atoi::res#1 ← (signed word~) atoi::$4 - (byte) '0'
|
||||
[133] (byte) atoi::i#2 ← ++ (byte) atoi::i#4
|
||||
to:atoi::@3
|
||||
|
||||
(void()) printf_cls()
|
||||
printf_cls: scope:[printf_cls] from main
|
||||
[134] phi()
|
||||
[135] call memset
|
||||
to:printf_cls::@1
|
||||
printf_cls::@1: scope:[printf_cls] from printf_cls
|
||||
[136] (byte*) printf_cursor_ptr ← (byte*) 1024
|
||||
[137] (byte) printf_cursor_x ← (byte) 0
|
||||
[138] (byte) printf_cursor_y ← (byte) 0
|
||||
to:printf_cls::@return
|
||||
printf_cls::@return: scope:[printf_cls] from printf_cls::@1
|
||||
[139] return
|
||||
to:@return
|
6761
src/test/ref/atoi-1.log
Normal file
6761
src/test/ref/atoi-1.log
Normal file
File diff suppressed because it is too large
Load Diff
239
src/test/ref/atoi-1.sym
Normal file
239
src/test/ref/atoi-1.sym
Normal file
@ -0,0 +1,239 @@
|
||||
(label) @1
|
||||
(label) @2
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(const byte*) DIGITS[] = (byte*) "0123456789abcdef"z
|
||||
(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = (byte) 1
|
||||
(const byte) RADIX::BINARY = (number) 2
|
||||
(const byte) RADIX::DECIMAL = (number) $a
|
||||
(const byte) RADIX::HEXADECIMAL = (number) $10
|
||||
(const byte) RADIX::OCTAL = (number) 8
|
||||
(const word*) RADIX_DECIMAL_VALUES[] = { (word) $2710, (word) $3e8, (word) $64, (word) $a }
|
||||
(const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c
|
||||
(signed word()) atoi((to_nomodify byte*) atoi::str)
|
||||
(signed word~) atoi::$3 zp[2]:2 2002.0
|
||||
(signed word~) atoi::$4 zp[2]:2 2002.0
|
||||
(signed word~) atoi::$8 zp[2]:11 2002.0
|
||||
(signed word~) atoi::$9 zp[2]:2 2002.0
|
||||
(label) atoi::@1
|
||||
(label) atoi::@2
|
||||
(label) atoi::@3
|
||||
(label) atoi::@4
|
||||
(label) atoi::@5
|
||||
(label) atoi::@return
|
||||
(byte) atoi::i
|
||||
(byte) atoi::i#2 reg byte y 2002.0
|
||||
(byte) atoi::i#4 reg byte y 572.0
|
||||
(byte) atoi::negative
|
||||
(byte) atoi::negative#2 reg byte x 262.875
|
||||
(signed word) atoi::res
|
||||
(signed word) atoi::res#1 res zp[2]:2 1001.0
|
||||
(signed word) atoi::res#2 res zp[2]:2 801.25
|
||||
(signed word) atoi::return
|
||||
(signed word) atoi::return#0 return zp[2]:2 202.0
|
||||
(signed word) atoi::return#2 return zp[2]:2 56.0
|
||||
(signed word) atoi::return#3 return zp[2]:2 22.0
|
||||
(signed word) atoi::return#4 return zp[2]:2 22.0
|
||||
(to_nomodify byte*) atoi::str
|
||||
(to_nomodify byte*) atoi::str#2 str zp[2]:5 191.1818181818182
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@4
|
||||
(label) main::@5
|
||||
(label) main::@6
|
||||
(label) main::@return
|
||||
(const byte*) main::str[(byte) 5] = (byte*) "1234"
|
||||
(const byte*) main::str1[(byte) 2] = (byte*) "
|
||||
"
|
||||
(const byte*) main::str2[(byte) 6] = (byte*) "-5678"
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
(label) memcpy::@1
|
||||
(label) memcpy::@2
|
||||
(label) memcpy::@return
|
||||
(void*) memcpy::destination
|
||||
(const void*) memcpy::destination#0 destination = (void*) 1024
|
||||
(byte*) memcpy::dst
|
||||
(byte*) memcpy::dst#1 dst zp[2]:11 1.000000001E9
|
||||
(byte*) memcpy::dst#2 dst zp[2]:11 1.000000001E9
|
||||
(word) memcpy::num
|
||||
(const word) memcpy::num#0 num = (word)(number) $28*(number) $19-(number) $28
|
||||
(void*) memcpy::return
|
||||
(void*) memcpy::source
|
||||
(const void*) memcpy::source#0 source = (void*)(number) $400+(number) $28
|
||||
(byte*) memcpy::src
|
||||
(byte*) memcpy::src#1 src zp[2]:5 2.000000002E9
|
||||
(byte*) memcpy::src#2 src zp[2]:5 1.000000001E9
|
||||
(byte*) memcpy::src_end
|
||||
(const byte*) memcpy::src_end#0 src_end = (byte*)(const void*) memcpy::source#0+(const word) memcpy::num#0
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
(label) memset::@1
|
||||
(label) memset::@2
|
||||
(label) memset::@3
|
||||
(label) memset::@return
|
||||
(byte) memset::c
|
||||
(byte) memset::c#4 reg byte x 1.25000000125E8
|
||||
(byte*) memset::dst
|
||||
(byte*) memset::dst#1 dst zp[2]:11 2.000000002E9
|
||||
(byte*) memset::dst#2 dst zp[2]:11 1.3366666683333335E9
|
||||
(byte*) memset::dst#4 dst zp[2]:11 2.0000002E7
|
||||
(byte*) memset::end
|
||||
(byte*) memset::end#0 end zp[2]:5 1.683333336666667E8
|
||||
(word) memset::num
|
||||
(word) memset::num#2 num zp[2]:5 1.0000001E7
|
||||
(void*) memset::return
|
||||
(void*) memset::str
|
||||
(void*) memset::str#3 str zp[2]:11
|
||||
(struct printf_buffer_number) printf_buffer loadstore mem[12] = {}
|
||||
(const byte*) printf_buffer_number::digits[(number) $b] = { fill( $b, 0) }
|
||||
(byte) printf_buffer_number::sign
|
||||
(void()) printf_char((byte) printf_char::ch)
|
||||
(byte*~) printf_char::$6 zp[2]:9 2000002.0
|
||||
(label) printf_char::@1
|
||||
(label) printf_char::@2
|
||||
(label) printf_char::@3
|
||||
(label) printf_char::@4
|
||||
(label) printf_char::@return
|
||||
(byte) printf_char::ch
|
||||
(byte) printf_char::ch#1 reg byte a 200002.0
|
||||
(byte) printf_char::ch#2 reg byte a 2002.0
|
||||
(byte) printf_char::ch#3 reg byte a 1101003.0
|
||||
(void()) printf_cls()
|
||||
(label) printf_cls::@1
|
||||
(label) printf_cls::@return
|
||||
(byte*) printf_cursor_ptr loadstore zp[2]:9 106062.27272727274
|
||||
(byte) printf_cursor_x loadstore zp[1]:7 92309.36923076924
|
||||
(byte) printf_cursor_y loadstore zp[1]:8 104479.25373134328
|
||||
(byte) printf_format_number::justify_left
|
||||
(byte) printf_format_number::min_length
|
||||
(byte) printf_format_number::radix
|
||||
(byte) printf_format_number::sign_always
|
||||
(byte) printf_format_number::upper_case
|
||||
(byte) printf_format_number::zero_padding
|
||||
(byte) printf_format_string::justify_left
|
||||
(byte) printf_format_string::min_length
|
||||
(void()) printf_ln()
|
||||
(byte*~) printf_ln::$0 zp[2]:9 2000002.0
|
||||
(byte*~) printf_ln::$1 zp[2]:9 2000002.0
|
||||
(label) printf_ln::@return
|
||||
(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix)
|
||||
(label) printf_number_buffer::@1
|
||||
(label) printf_number_buffer::@2
|
||||
(label) printf_number_buffer::@3
|
||||
(label) printf_number_buffer::@return
|
||||
(struct printf_buffer_number) printf_number_buffer::buffer
|
||||
(byte*) printf_number_buffer::buffer_digits
|
||||
(const byte*) printf_number_buffer::buffer_digits#0 buffer_digits = (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
||||
(byte) printf_number_buffer::buffer_sign
|
||||
(byte) printf_number_buffer::buffer_sign#0 reg byte a 701.0
|
||||
(struct printf_format_number) printf_number_buffer::format
|
||||
(byte) printf_number_buffer::format_justify_left
|
||||
(byte) printf_number_buffer::format_min_length
|
||||
(byte) printf_number_buffer::format_radix
|
||||
(byte) printf_number_buffer::format_sign_always
|
||||
(byte) printf_number_buffer::format_upper_case
|
||||
(byte) printf_number_buffer::format_zero_padding
|
||||
(signed byte) printf_number_buffer::len
|
||||
(signed byte) printf_number_buffer::padding
|
||||
(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix)
|
||||
(label) printf_sint::@1
|
||||
(label) printf_sint::@2
|
||||
(label) printf_sint::@3
|
||||
(label) printf_sint::@return
|
||||
(struct printf_format_number) printf_sint::format
|
||||
(byte) printf_sint::format_justify_left
|
||||
(byte) printf_sint::format_min_length
|
||||
(byte) printf_sint::format_radix
|
||||
(byte) printf_sint::format_sign_always
|
||||
(byte) printf_sint::format_upper_case
|
||||
(byte) printf_sint::format_zero_padding
|
||||
(word) printf_sint::uvalue
|
||||
(signed word) printf_sint::value
|
||||
(signed word) printf_sint::value#0 value zp[2]:2 101.0
|
||||
(signed word) printf_sint::value#1 value zp[2]:2 22.0
|
||||
(signed word) printf_sint::value#2 value zp[2]:2 22.0
|
||||
(signed word) printf_sint::value#3 value zp[2]:2 108.33333333333331
|
||||
(signed word) printf_sint::value#5 value zp[2]:2 202.0
|
||||
(void()) printf_str((byte*) printf_str::str)
|
||||
(label) printf_str::@1
|
||||
(label) printf_str::@2
|
||||
(label) printf_str::@3
|
||||
(label) printf_str::@4
|
||||
(label) printf_str::@5
|
||||
(label) printf_str::@return
|
||||
(byte) printf_str::ch
|
||||
(byte) printf_str::ch#0 reg byte a 100001.0
|
||||
(byte*) printf_str::str
|
||||
(byte*) printf_str::str#0 str zp[2]:2 42857.57142857143
|
||||
(byte*) printf_str::str#4 str zp[2]:2 205002.5
|
||||
(byte*) printf_str::str#6 str zp[2]:2 10001.0
|
||||
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
||||
(byte~) utoa::$10 reg byte a 20002.0
|
||||
(byte~) utoa::$11 reg byte a 2002.0
|
||||
(label) utoa::@1
|
||||
(label) utoa::@2
|
||||
(label) utoa::@3
|
||||
(label) utoa::@4
|
||||
(label) utoa::@5
|
||||
(label) utoa::@6
|
||||
(label) utoa::@7
|
||||
(label) utoa::@return
|
||||
(byte*) utoa::buffer
|
||||
(byte*) utoa::buffer#11 buffer zp[2]:5 3000.4285714285716
|
||||
(byte*) utoa::buffer#14 buffer zp[2]:5 15001.5
|
||||
(byte*) utoa::buffer#3 buffer zp[2]:5 2002.0
|
||||
(byte*) utoa::buffer#4 buffer zp[2]:5 20002.0
|
||||
(byte) utoa::digit
|
||||
(byte) utoa::digit#1 digit zp[1]:4 20002.0
|
||||
(byte) utoa::digit#2 digit zp[1]:4 2857.4285714285716
|
||||
(word) utoa::digit_value
|
||||
(word) utoa::digit_value#0 digit_value zp[2]:11 6000.6
|
||||
(word*) utoa::digit_values
|
||||
(byte) utoa::max_digits
|
||||
(byte) utoa::radix
|
||||
(byte) utoa::started
|
||||
(byte) utoa::started#2 reg byte x 5000.5
|
||||
(byte) utoa::started#4 reg byte x 10001.0
|
||||
(word) utoa::value
|
||||
(word) utoa::value#0 value zp[2]:2 10001.0
|
||||
(word) utoa::value#1 value zp[2]:2 551.0
|
||||
(word) utoa::value#2 value zp[2]:2 5857.857142857143
|
||||
(word) utoa::value#6 value zp[2]:2 15001.5
|
||||
(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub)
|
||||
(label) utoa_append::@1
|
||||
(label) utoa_append::@2
|
||||
(label) utoa_append::@3
|
||||
(label) utoa_append::@return
|
||||
(byte*) utoa_append::buffer
|
||||
(byte*) utoa_append::buffer#0 buffer zp[2]:5 13750.25
|
||||
(byte) utoa_append::digit
|
||||
(byte) utoa_append::digit#1 reg byte x 1.0000001E7
|
||||
(byte) utoa_append::digit#2 reg byte x 1.00500015E7
|
||||
(word) utoa_append::return
|
||||
(word) utoa_append::return#0 return zp[2]:2 20002.0
|
||||
(word) utoa_append::sub
|
||||
(word) utoa_append::sub#0 sub zp[2]:11 3335000.5
|
||||
(word) utoa_append::value
|
||||
(word) utoa_append::value#0 value zp[2]:2 36667.33333333333
|
||||
(word) utoa_append::value#1 value zp[2]:2 2.0000002E7
|
||||
(word) utoa_append::value#2 value zp[2]:2 5018334.166666666
|
||||
|
||||
reg byte a [ printf_char::ch#3 printf_char::ch#2 printf_char::ch#1 ]
|
||||
reg byte x [ memset::c#4 ]
|
||||
zp[2]:2 [ printf_sint::value#5 printf_sint::value#0 printf_sint::value#3 printf_sint::value#1 printf_sint::value#2 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 atoi::return#3 atoi::return#4 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 atoi::return#2 atoi::return#0 atoi::res#2 atoi::res#1 atoi::$9 atoi::$4 atoi::$3 printf_str::str#4 printf_str::str#6 printf_str::str#0 ]
|
||||
zp[1]:4 [ utoa::digit#2 utoa::digit#1 ]
|
||||
reg byte x [ utoa::started#2 utoa::started#4 ]
|
||||
reg byte x [ utoa_append::digit#2 utoa_append::digit#1 ]
|
||||
zp[2]:5 [ atoi::str#2 utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ]
|
||||
reg byte y [ atoi::i#4 atoi::i#2 ]
|
||||
reg byte x [ atoi::negative#2 ]
|
||||
zp[1]:7 [ printf_cursor_x ]
|
||||
zp[1]:8 [ printf_cursor_y ]
|
||||
zp[2]:9 [ printf_cursor_ptr printf_char::$6 printf_ln::$0 printf_ln::$1 ]
|
||||
reg byte a [ printf_str::ch#0 ]
|
||||
reg byte a [ printf_number_buffer::buffer_sign#0 ]
|
||||
reg byte a [ utoa::$11 ]
|
||||
reg byte a [ utoa::$10 ]
|
||||
zp[2]:11 [ atoi::$8 utoa::digit_value#0 utoa_append::sub#0 memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
|
||||
mem[12] [ printf_buffer ]
|
@ -32,160 +32,142 @@ main: {
|
||||
// printf_cls()
|
||||
jsr printf_cls
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str1
|
||||
sta.z printf_str.str
|
||||
sta.z printf_string.str
|
||||
lda #>str1
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
sta.z printf_string.str+1
|
||||
lda #0
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str2
|
||||
sta.z printf_string.str
|
||||
sta.z printf_str.str
|
||||
lda #>str2
|
||||
sta.z printf_string.str+1
|
||||
lda #0
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str4
|
||||
lda #<str3
|
||||
sta.z printf_string.str
|
||||
lda #>str4
|
||||
lda #>str3
|
||||
sta.z printf_string.str+1
|
||||
lda #0
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str6
|
||||
lda #<str5
|
||||
sta.z printf_string.str
|
||||
lda #>str6
|
||||
lda #>str5
|
||||
sta.z printf_string.str+1
|
||||
lda #0
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str7
|
||||
sta.z printf_string.str
|
||||
lda #>str7
|
||||
sta.z printf_string.str+1
|
||||
lda #0
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str8
|
||||
sta.z printf_string.str
|
||||
sta.z printf_str.str
|
||||
lda #>str8
|
||||
sta.z printf_string.str+1
|
||||
lda #0
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%3s '%3s' '%3s' '%3s' '%3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str9
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str11
|
||||
sta.z printf_str.str
|
||||
lda #>str11
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str2
|
||||
sta.z printf_string.str
|
||||
lda #>str2
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str4
|
||||
sta.z printf_string.str
|
||||
lda #>str4
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str6
|
||||
sta.z printf_string.str
|
||||
lda #>str6
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str8
|
||||
sta.z printf_string.str
|
||||
lda #>str8
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str9
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str1
|
||||
sta.z printf_string.str
|
||||
lda #>str1
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str3
|
||||
sta.z printf_string.str
|
||||
lda #>str3
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str5
|
||||
sta.z printf_string.str
|
||||
lda #>str5
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str7
|
||||
sta.z printf_string.str
|
||||
lda #>str7
|
||||
sta.z printf_string.str+1
|
||||
lda #1
|
||||
sta.z printf_string.format_justify_left
|
||||
jsr printf_string
|
||||
// printf("%%-3s '%-3s' '%-3s' '%-3s' '%-3s'\n", "x", "xx", "xxx", "xxxx")
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str21
|
||||
lda #<str18
|
||||
sta.z printf_str.str
|
||||
lda #>str21
|
||||
lda #>str18
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -199,9 +181,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -215,9 +197,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -231,9 +213,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -247,24 +229,18 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%3d '%3d' '%3d' '%3d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str9
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
lda #<str27
|
||||
lda #<str23
|
||||
sta.z printf_str.str
|
||||
lda #>str27
|
||||
lda #>str23
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
@ -279,9 +255,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
@ -296,9 +272,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
@ -313,9 +289,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
@ -330,24 +306,18 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%-3d '%-3d' '%-3d' '%-3d' '%-3d'\n", -2, -22, -222, -2222)
|
||||
lda #<str9
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
lda #<str33
|
||||
lda #<str28
|
||||
sta.z printf_str.str
|
||||
lda #>str33
|
||||
lda #>str28
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
@ -361,9 +331,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
@ -377,9 +347,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
@ -393,9 +363,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
@ -409,24 +379,18 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%+3d '%+3d' '%+3d' '%+3d' '%+3d'\n", 3, -44, 555, -6666)
|
||||
lda #<str9
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str39
|
||||
lda #<str33
|
||||
sta.z printf_str.str
|
||||
lda #>str39
|
||||
lda #>str33
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -441,9 +405,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -458,9 +422,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -475,9 +439,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
@ -491,24 +455,18 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%03d '%03d' '%03d' '%03d' '%3d'\n", 1, 11, 111, 1111)
|
||||
lda #<str9
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
lda #<str45
|
||||
lda #<str38
|
||||
sta.z printf_str.str
|
||||
lda #>str45
|
||||
lda #>str38
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
@ -521,9 +479,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
@ -536,9 +494,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
@ -551,9 +509,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
@ -566,24 +524,18 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%o '%o' '%o' '%o' '%o'\n", 1, 11, 111, 1111)
|
||||
lda #<str9
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
lda #<str51
|
||||
lda #<str43
|
||||
sta.z printf_str.str
|
||||
lda #>str51
|
||||
lda #>str43
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
@ -596,9 +548,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
@ -611,9 +563,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
@ -626,9 +578,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
@ -641,24 +593,18 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%x '%x' '%x' '%x' '%x'\n", 1, 11, 111, 1111)
|
||||
lda #<str9
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
lda #<str57
|
||||
lda #<str48
|
||||
sta.z printf_str.str
|
||||
lda #>str57
|
||||
lda #>str48
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
@ -670,9 +616,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
@ -685,9 +631,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
@ -700,9 +646,9 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
@ -715,44 +661,42 @@ main: {
|
||||
sta.z printf_uint.uvalue+1
|
||||
jsr printf_uint
|
||||
// printf("%%X '%X' '%X' '%X' '%X'\n", 1, 11, 111, 1111)
|
||||
lda #<str9
|
||||
lda #<str8
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
lda #>str8
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// }
|
||||
rts
|
||||
str: .text ""
|
||||
str: .text "3s '"
|
||||
.byte 0
|
||||
str1: .text "3s '"
|
||||
str1: .text "x"
|
||||
.byte 0
|
||||
str2: .text "x"
|
||||
str2: .text "' '"
|
||||
.byte 0
|
||||
str3: .text "' '"
|
||||
str3: .text "xx"
|
||||
.byte 0
|
||||
str4: .text "xx"
|
||||
str5: .text "xxx"
|
||||
.byte 0
|
||||
str6: .text "xxx"
|
||||
str7: .text "xxxx"
|
||||
.byte 0
|
||||
str8: .text "xxxx"
|
||||
str8: .text @"'\n"
|
||||
.byte 0
|
||||
str9: .text @"'\n"
|
||||
str9: .text "-3s '"
|
||||
.byte 0
|
||||
str11: .text "-3s '"
|
||||
str18: .text "3d '"
|
||||
.byte 0
|
||||
str21: .text "3d '"
|
||||
str23: .text "-3d '"
|
||||
.byte 0
|
||||
str27: .text "-3d '"
|
||||
str28: .text "+3d '"
|
||||
.byte 0
|
||||
str33: .text "+3d '"
|
||||
str33: .text "03d '"
|
||||
.byte 0
|
||||
str39: .text "03d '"
|
||||
str38: .text "o '"
|
||||
.byte 0
|
||||
str45: .text "o '"
|
||||
str43: .text "x '"
|
||||
.byte 0
|
||||
str51: .text "x '"
|
||||
.byte 0
|
||||
str57: .text "X '"
|
||||
str48: .text "X '"
|
||||
.byte 0
|
||||
}
|
||||
// Print a zero-terminated string
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -108,33 +108,23 @@
|
||||
(label) main::@89
|
||||
(label) main::@9
|
||||
(label) main::@90
|
||||
(label) main::@91
|
||||
(label) main::@92
|
||||
(label) main::@93
|
||||
(label) main::@94
|
||||
(label) main::@95
|
||||
(label) main::@96
|
||||
(label) main::@97
|
||||
(label) main::@98
|
||||
(label) main::@99
|
||||
(label) main::@return
|
||||
(const byte*) main::str[(byte) 1] = (byte*) ""
|
||||
(const byte*) main::str1[(byte) 6] = (byte*) "3s '"
|
||||
(const byte*) main::str11[(byte) 6] = (byte*) "-3s '"
|
||||
(const byte*) main::str2[(byte) 2] = (byte*) "x"
|
||||
(const byte*) main::str21[(byte) 6] = (byte*) "3d '"
|
||||
(const byte*) main::str27[(byte) 6] = (byte*) "-3d '"
|
||||
(const byte*) main::str3[(byte) 4] = (byte*) "' '"
|
||||
(const byte*) main::str33[(byte) 7] = (byte*) "+3d '"
|
||||
(const byte*) main::str39[(byte) 6] = (byte*) "03d '"
|
||||
(const byte*) main::str4[(byte) 3] = (byte*) "xx"
|
||||
(const byte*) main::str45[(byte) 6] = (byte*) "o '"
|
||||
(const byte*) main::str51[(byte) 6] = (byte*) "x '"
|
||||
(const byte*) main::str57[(byte) 6] = (byte*) "X '"
|
||||
(const byte*) main::str6[(byte) 4] = (byte*) "xxx"
|
||||
(const byte*) main::str8[(byte) 5] = (byte*) "xxxx"
|
||||
(const byte*) main::str9[(byte) 3] = (byte*) "'
|
||||
(const byte*) main::str[(byte) 6] = (byte*) "3s '"
|
||||
(const byte*) main::str1[(byte) 2] = (byte*) "x"
|
||||
(const byte*) main::str18[(byte) 6] = (byte*) "3d '"
|
||||
(const byte*) main::str2[(byte) 4] = (byte*) "' '"
|
||||
(const byte*) main::str23[(byte) 6] = (byte*) "-3d '"
|
||||
(const byte*) main::str28[(byte) 7] = (byte*) "+3d '"
|
||||
(const byte*) main::str3[(byte) 3] = (byte*) "xx"
|
||||
(const byte*) main::str33[(byte) 6] = (byte*) "03d '"
|
||||
(const byte*) main::str38[(byte) 6] = (byte*) "o '"
|
||||
(const byte*) main::str43[(byte) 6] = (byte*) "x '"
|
||||
(const byte*) main::str48[(byte) 6] = (byte*) "X '"
|
||||
(const byte*) main::str5[(byte) 4] = (byte*) "xxx"
|
||||
(const byte*) main::str7[(byte) 5] = (byte*) "xxxx"
|
||||
(const byte*) main::str8[(byte) 3] = (byte*) "'
|
||||
"
|
||||
(const byte*) main::str9[(byte) 6] = (byte*) "-3s '"
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
(label) memcpy::@1
|
||||
(label) memcpy::@2
|
||||
@ -190,9 +180,9 @@
|
||||
(void()) printf_cls()
|
||||
(label) printf_cls::@1
|
||||
(label) printf_cls::@return
|
||||
(byte*) printf_cursor_ptr loadstore zp[2]:18 21807.196261682246
|
||||
(byte) printf_cursor_x loadstore zp[1]:16 18750.340624999997
|
||||
(byte) printf_cursor_y loadstore zp[1]:17 21739.47204968944
|
||||
(byte*) printf_cursor_ptr loadstore zp[2]:18 23102.67326732673
|
||||
(byte) printf_cursor_x loadstore zp[1]:16 19867.910596026493
|
||||
(byte) printf_cursor_y loadstore zp[1]:17 23026.677631578947
|
||||
(byte) printf_format_number::justify_left
|
||||
(byte) printf_format_number::min_length
|
||||
(byte) printf_format_number::radix
|
||||
@ -309,8 +299,8 @@
|
||||
(byte*) printf_str::str#0 str zp[2]:2 42857.57142857143
|
||||
(byte*) printf_str::str#1 str zp[2]:2 2002.0
|
||||
(byte*) printf_str::str#2 str zp[2]:2 202.0
|
||||
(byte*) printf_str::str#57 str zp[2]:2 205002.5
|
||||
(byte*) printf_str::str#59 str zp[2]:2 11103.0
|
||||
(byte*) printf_str::str#48 str zp[2]:2 205002.5
|
||||
(byte*) printf_str::str#50 str zp[2]:2 11103.0
|
||||
(void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left)
|
||||
(word~) printf_string::$9 zp[2]:9 101.0
|
||||
(label) printf_string::@1
|
||||
@ -457,7 +447,7 @@
|
||||
|
||||
reg byte a [ printf_char::ch#12 printf_char::ch#2 printf_char::ch#0 printf_char::ch#1 ]
|
||||
reg byte x [ memset::c#4 ]
|
||||
zp[2]:2 [ printf_uint::uvalue#12 utoa::value#3 utoa::value#7 utoa::value#10 utoa::value#1 utoa::value#2 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 printf_sint::value#19 printf_sint::value#0 printf_sint::value#17 printf_str::str#57 printf_str::str#59 printf_str::str#1 printf_str::str#2 printf_str::str#0 printf_number_buffer::buffer_digits#10 printf_string::str#10 ]
|
||||
zp[2]:2 [ printf_uint::uvalue#12 utoa::value#3 utoa::value#7 utoa::value#10 utoa::value#1 utoa::value#2 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 printf_sint::value#19 printf_sint::value#0 printf_sint::value#17 printf_str::str#48 printf_str::str#50 printf_str::str#1 printf_str::str#2 printf_str::str#0 printf_number_buffer::buffer_digits#10 printf_string::str#10 ]
|
||||
reg byte x [ printf_uint::format_radix#12 ]
|
||||
zp[1]:4 [ printf_number_buffer::format_zero_padding#10 printf_number_buffer::format_zero_padding#0 printf_sint::format_zero_padding#16 ]
|
||||
reg byte x [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ]
|
||||
|
@ -29,29 +29,51 @@ main: {
|
||||
// printf_cls()
|
||||
jsr printf_cls
|
||||
// printf("%u", c)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%u", c)
|
||||
jsr printf_uchar
|
||||
// printf("%u", c)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Print an unsigned char using a specific format
|
||||
printf_uchar: {
|
||||
// printf_buffer.sign = format.sign_always?'+':0
|
||||
// Handle any sign
|
||||
lda #0
|
||||
sta printf_buffer
|
||||
// uctoa(uvalue, printf_buffer.digits, format.radix)
|
||||
// Format number into buffer
|
||||
jsr uctoa
|
||||
// printf_number_buffer(printf_buffer, format)
|
||||
lda printf_buffer
|
||||
// Print using format
|
||||
jsr printf_number_buffer
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Print the contents of the number buffer using a specific format.
|
||||
// This handles minimum length, zero-filling, and left/right justification from the format
|
||||
// printf_number_buffer(byte register(A) buffer_sign)
|
||||
printf_number_buffer: {
|
||||
.label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
||||
// if(buffer.sign)
|
||||
cmp #0
|
||||
beq __b2
|
||||
// printf_char(buffer.sign)
|
||||
jsr printf_char
|
||||
__b2:
|
||||
// printf_str(buffer.digits)
|
||||
jsr printf_str
|
||||
// }
|
||||
rts
|
||||
str: .text ""
|
||||
.byte 0
|
||||
}
|
||||
// Print a zero-terminated string
|
||||
// Handles escape codes such as newline
|
||||
// printf_str(byte* zp(8) str)
|
||||
printf_str: {
|
||||
.label str = 8
|
||||
lda #<printf_number_buffer.buffer_digits
|
||||
sta.z str
|
||||
lda #>printf_number_buffer.buffer_digits
|
||||
sta.z str+1
|
||||
__b2:
|
||||
// ch = *str++
|
||||
ldy #0
|
||||
@ -248,42 +270,6 @@ memcpy: {
|
||||
!:
|
||||
jmp __b1
|
||||
}
|
||||
// Print an unsigned char using a specific format
|
||||
printf_uchar: {
|
||||
// printf_buffer.sign = format.sign_always?'+':0
|
||||
// Handle any sign
|
||||
lda #0
|
||||
sta printf_buffer
|
||||
// uctoa(uvalue, printf_buffer.digits, format.radix)
|
||||
// Format number into buffer
|
||||
jsr uctoa
|
||||
// printf_number_buffer(printf_buffer, format)
|
||||
lda printf_buffer
|
||||
// Print using format
|
||||
jsr printf_number_buffer
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Print the contents of the number buffer using a specific format.
|
||||
// This handles minimum length, zero-filling, and left/right justification from the format
|
||||
// printf_number_buffer(byte register(A) buffer_sign)
|
||||
printf_number_buffer: {
|
||||
.label buffer_digits = printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
|
||||
// if(buffer.sign)
|
||||
cmp #0
|
||||
beq __b2
|
||||
// printf_char(buffer.sign)
|
||||
jsr printf_char
|
||||
__b2:
|
||||
// printf_str(buffer.digits)
|
||||
lda #<buffer_digits
|
||||
sta.z printf_str.str
|
||||
lda #>buffer_digits
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// }
|
||||
rts
|
||||
}
|
||||
// Converts unsigned number value to a string representing it in RADIX format.
|
||||
// If the leading digits are zero they are not included in the string.
|
||||
// - value : The number to be converted to RADIX
|
||||
|
@ -20,240 +20,232 @@ main: scope:[main] from @2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[9] phi()
|
||||
[10] call printf_str
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[11] phi()
|
||||
[12] call printf_uchar
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] phi()
|
||||
[14] call printf_str
|
||||
[10] call printf_uchar
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@3
|
||||
[15] return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[11] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_str((byte*) printf_str::str)
|
||||
printf_str: scope:[printf_str] from main::@1 main::@3 printf_number_buffer::@2
|
||||
[16] (byte*) printf_str::str#6 ← phi( main::@1/(const byte*) main::str main::@3/(const byte*) main::str printf_number_buffer::@2/(const byte*) printf_number_buffer::buffer_digits#0 )
|
||||
to:printf_str::@1
|
||||
printf_str::@1: scope:[printf_str] from printf_str printf_str::@4 printf_str::@5
|
||||
[17] (byte*) printf_str::str#4 ← phi( printf_str/(byte*) printf_str::str#6 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 )
|
||||
to:printf_str::@2
|
||||
printf_str::@2: scope:[printf_str] from printf_str::@1
|
||||
[18] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#4)
|
||||
[19] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#4
|
||||
[20] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3
|
||||
to:printf_str::@return
|
||||
printf_str::@return: scope:[printf_str] from printf_str::@2
|
||||
[21] return
|
||||
to:@return
|
||||
printf_str::@3: scope:[printf_str] from printf_str::@2
|
||||
[22] if((byte) printf_str::ch#0==(byte) '
|
||||
') goto printf_str::@4
|
||||
to:printf_str::@5
|
||||
printf_str::@5: scope:[printf_str] from printf_str::@3
|
||||
[23] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0
|
||||
[24] call printf_char
|
||||
to:printf_str::@1
|
||||
printf_str::@4: scope:[printf_str] from printf_str::@3
|
||||
[25] phi()
|
||||
[26] call printf_ln
|
||||
to:printf_str::@1
|
||||
|
||||
(void()) printf_ln()
|
||||
printf_ln: scope:[printf_ln] from printf_str::@4
|
||||
[27] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x
|
||||
[28] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28
|
||||
[29] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1
|
||||
[30] (byte) printf_cursor_x ← (byte) 0
|
||||
[31] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
to:printf_ln::@return
|
||||
printf_ln::@return: scope:[printf_ln] from printf_ln
|
||||
[32] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_char((byte) printf_char::ch)
|
||||
printf_char: scope:[printf_char] from printf_number_buffer::@3 printf_str::@5
|
||||
[33] (byte) printf_char::ch#3 ← phi( printf_number_buffer::@3/(byte) printf_char::ch#2 printf_str::@5/(byte) printf_char::ch#1 )
|
||||
[34] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3
|
||||
[35] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr
|
||||
[36] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x
|
||||
[37] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return
|
||||
to:printf_char::@1
|
||||
printf_char::@1: scope:[printf_char] from printf_char
|
||||
[38] (byte) printf_cursor_x ← (byte) 0
|
||||
[39] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
[40] if((byte) printf_cursor_y!=(byte) $19) goto printf_char::@return
|
||||
to:printf_char::@2
|
||||
printf_char::@2: scope:[printf_char] from printf_char::@1
|
||||
[41] phi()
|
||||
[42] call memcpy
|
||||
to:printf_char::@3
|
||||
printf_char::@3: scope:[printf_char] from printf_char::@2
|
||||
[43] phi()
|
||||
[44] call memset
|
||||
to:printf_char::@4
|
||||
printf_char::@4: scope:[printf_char] from printf_char::@3
|
||||
[45] (byte*~) printf_char::$6 ← (byte*) printf_cursor_ptr - (byte) $28
|
||||
[46] (byte*) printf_cursor_ptr ← (byte*~) printf_char::$6
|
||||
[47] (byte) printf_cursor_y ← -- (byte) printf_cursor_y
|
||||
to:printf_char::@return
|
||||
printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 printf_char::@4
|
||||
[48] return
|
||||
to:@return
|
||||
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
memset: scope:[memset] from printf_char::@3 printf_cls
|
||||
[49] (byte) memset::c#4 ← phi( printf_char::@3/(byte) ' ' printf_cls/(byte) ' ' )
|
||||
[49] (void*) memset::str#3 ← phi( printf_char::@3/(void*)(number) $400+(number) $28*(number) $19-(number) $28 printf_cls/(void*) 1024 )
|
||||
[49] (word) memset::num#2 ← phi( printf_char::@3/(byte) $28 printf_cls/(word)(number) $28*(number) $19 )
|
||||
[50] if((word) memset::num#2<=(byte) 0) goto memset::@return
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset
|
||||
[51] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2
|
||||
[52] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
|
||||
to:memset::@2
|
||||
memset::@2: scope:[memset] from memset::@1 memset::@3
|
||||
[53] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
|
||||
[54] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset memset::@2
|
||||
[55] return
|
||||
to:@return
|
||||
memset::@3: scope:[memset] from memset::@2
|
||||
[56] *((byte*) memset::dst#2) ← (byte) memset::c#4
|
||||
[57] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
to:memset::@2
|
||||
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
memcpy: scope:[memcpy] from printf_char::@2
|
||||
[58] phi()
|
||||
to:memcpy::@1
|
||||
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
||||
[59] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
||||
[59] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 )
|
||||
[60] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2
|
||||
to:memcpy::@return
|
||||
memcpy::@return: scope:[memcpy] from memcpy::@1
|
||||
[61] return
|
||||
to:@return
|
||||
memcpy::@2: scope:[memcpy] from memcpy::@1
|
||||
[62] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
|
||||
[63] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
||||
[64] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
|
||||
to:memcpy::@1
|
||||
|
||||
(void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix)
|
||||
printf_uchar: scope:[printf_uchar] from main::@2
|
||||
[65] phi()
|
||||
printf_uchar: scope:[printf_uchar] from main::@1
|
||||
[12] phi()
|
||||
to:printf_uchar::@1
|
||||
printf_uchar::@1: scope:[printf_uchar] from printf_uchar
|
||||
[66] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0
|
||||
[67] call uctoa
|
||||
[13] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0
|
||||
[14] call uctoa
|
||||
to:printf_uchar::@2
|
||||
printf_uchar::@2: scope:[printf_uchar] from printf_uchar::@1
|
||||
[68] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer)
|
||||
[69] call printf_number_buffer
|
||||
[15] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer)
|
||||
[16] call printf_number_buffer
|
||||
to:printf_uchar::@return
|
||||
printf_uchar::@return: scope:[printf_uchar] from printf_uchar::@2
|
||||
[70] return
|
||||
[17] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix)
|
||||
printf_number_buffer: scope:[printf_number_buffer] from printf_uchar::@2
|
||||
[71] phi()
|
||||
[18] phi()
|
||||
to:printf_number_buffer::@1
|
||||
printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer
|
||||
[72] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2
|
||||
[19] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2
|
||||
to:printf_number_buffer::@3
|
||||
printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@1
|
||||
[73] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#0
|
||||
[74] call printf_char
|
||||
[20] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#0
|
||||
[21] call printf_char
|
||||
to:printf_number_buffer::@2
|
||||
printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@3
|
||||
[75] phi()
|
||||
[76] call printf_str
|
||||
[22] phi()
|
||||
[23] call printf_str
|
||||
to:printf_number_buffer::@return
|
||||
printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@2
|
||||
[77] return
|
||||
[24] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_str((byte*) printf_str::str)
|
||||
printf_str: scope:[printf_str] from printf_number_buffer::@2
|
||||
[25] phi()
|
||||
to:printf_str::@1
|
||||
printf_str::@1: scope:[printf_str] from printf_str printf_str::@4 printf_str::@5
|
||||
[26] (byte*) printf_str::str#2 ← phi( printf_str/(const byte*) printf_number_buffer::buffer_digits#0 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 )
|
||||
to:printf_str::@2
|
||||
printf_str::@2: scope:[printf_str] from printf_str::@1
|
||||
[27] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#2)
|
||||
[28] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#2
|
||||
[29] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3
|
||||
to:printf_str::@return
|
||||
printf_str::@return: scope:[printf_str] from printf_str::@2
|
||||
[30] return
|
||||
to:@return
|
||||
printf_str::@3: scope:[printf_str] from printf_str::@2
|
||||
[31] if((byte) printf_str::ch#0==(byte) '
|
||||
') goto printf_str::@4
|
||||
to:printf_str::@5
|
||||
printf_str::@5: scope:[printf_str] from printf_str::@3
|
||||
[32] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0
|
||||
[33] call printf_char
|
||||
to:printf_str::@1
|
||||
printf_str::@4: scope:[printf_str] from printf_str::@3
|
||||
[34] phi()
|
||||
[35] call printf_ln
|
||||
to:printf_str::@1
|
||||
|
||||
(void()) printf_ln()
|
||||
printf_ln: scope:[printf_ln] from printf_str::@4
|
||||
[36] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x
|
||||
[37] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28
|
||||
[38] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1
|
||||
[39] (byte) printf_cursor_x ← (byte) 0
|
||||
[40] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
to:printf_ln::@return
|
||||
printf_ln::@return: scope:[printf_ln] from printf_ln
|
||||
[41] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_char((byte) printf_char::ch)
|
||||
printf_char: scope:[printf_char] from printf_number_buffer::@3 printf_str::@5
|
||||
[42] (byte) printf_char::ch#3 ← phi( printf_number_buffer::@3/(byte) printf_char::ch#2 printf_str::@5/(byte) printf_char::ch#1 )
|
||||
[43] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#3
|
||||
[44] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr
|
||||
[45] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x
|
||||
[46] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return
|
||||
to:printf_char::@1
|
||||
printf_char::@1: scope:[printf_char] from printf_char
|
||||
[47] (byte) printf_cursor_x ← (byte) 0
|
||||
[48] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
[49] if((byte) printf_cursor_y!=(byte) $19) goto printf_char::@return
|
||||
to:printf_char::@2
|
||||
printf_char::@2: scope:[printf_char] from printf_char::@1
|
||||
[50] phi()
|
||||
[51] call memcpy
|
||||
to:printf_char::@3
|
||||
printf_char::@3: scope:[printf_char] from printf_char::@2
|
||||
[52] phi()
|
||||
[53] call memset
|
||||
to:printf_char::@4
|
||||
printf_char::@4: scope:[printf_char] from printf_char::@3
|
||||
[54] (byte*~) printf_char::$6 ← (byte*) printf_cursor_ptr - (byte) $28
|
||||
[55] (byte*) printf_cursor_ptr ← (byte*~) printf_char::$6
|
||||
[56] (byte) printf_cursor_y ← -- (byte) printf_cursor_y
|
||||
to:printf_char::@return
|
||||
printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 printf_char::@4
|
||||
[57] return
|
||||
to:@return
|
||||
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
memset: scope:[memset] from printf_char::@3 printf_cls
|
||||
[58] (byte) memset::c#4 ← phi( printf_char::@3/(byte) ' ' printf_cls/(byte) ' ' )
|
||||
[58] (void*) memset::str#3 ← phi( printf_char::@3/(void*)(number) $400+(number) $28*(number) $19-(number) $28 printf_cls/(void*) 1024 )
|
||||
[58] (word) memset::num#2 ← phi( printf_char::@3/(byte) $28 printf_cls/(word)(number) $28*(number) $19 )
|
||||
[59] if((word) memset::num#2<=(byte) 0) goto memset::@return
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset
|
||||
[60] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2
|
||||
[61] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
|
||||
to:memset::@2
|
||||
memset::@2: scope:[memset] from memset::@1 memset::@3
|
||||
[62] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
|
||||
[63] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset memset::@2
|
||||
[64] return
|
||||
to:@return
|
||||
memset::@3: scope:[memset] from memset::@2
|
||||
[65] *((byte*) memset::dst#2) ← (byte) memset::c#4
|
||||
[66] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
to:memset::@2
|
||||
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
memcpy: scope:[memcpy] from printf_char::@2
|
||||
[67] phi()
|
||||
to:memcpy::@1
|
||||
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
||||
[68] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
||||
[68] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 )
|
||||
[69] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2
|
||||
to:memcpy::@return
|
||||
memcpy::@return: scope:[memcpy] from memcpy::@1
|
||||
[70] return
|
||||
to:@return
|
||||
memcpy::@2: scope:[memcpy] from memcpy::@1
|
||||
[71] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
|
||||
[72] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
||||
[73] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
|
||||
to:memcpy::@1
|
||||
|
||||
(void()) uctoa((byte) uctoa::value , (byte*) uctoa::buffer , (byte) uctoa::radix)
|
||||
uctoa: scope:[uctoa] from printf_uchar::@1
|
||||
[78] phi()
|
||||
[74] phi()
|
||||
to:uctoa::@1
|
||||
uctoa::@1: scope:[uctoa] from uctoa uctoa::@4
|
||||
[79] (byte*) uctoa::buffer#11 ← phi( uctoa::@4/(byte*) uctoa::buffer#14 uctoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
|
||||
[79] (byte) uctoa::started#2 ← phi( uctoa::@4/(byte) uctoa::started#4 uctoa/(byte) 0 )
|
||||
[79] (byte) uctoa::value#2 ← phi( uctoa::@4/(byte) uctoa::value#6 uctoa/(const byte) main::c )
|
||||
[79] (byte) uctoa::digit#2 ← phi( uctoa::@4/(byte) uctoa::digit#1 uctoa/(byte) 0 )
|
||||
[80] if((byte) uctoa::digit#2<(const byte) uctoa::max_digits#1-(byte) 1) goto uctoa::@2
|
||||
[75] (byte*) uctoa::buffer#11 ← phi( uctoa::@4/(byte*) uctoa::buffer#14 uctoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
|
||||
[75] (byte) uctoa::started#2 ← phi( uctoa::@4/(byte) uctoa::started#4 uctoa/(byte) 0 )
|
||||
[75] (byte) uctoa::value#2 ← phi( uctoa::@4/(byte) uctoa::value#6 uctoa/(const byte) main::c )
|
||||
[75] (byte) uctoa::digit#2 ← phi( uctoa::@4/(byte) uctoa::digit#1 uctoa/(byte) 0 )
|
||||
[76] if((byte) uctoa::digit#2<(const byte) uctoa::max_digits#1-(byte) 1) goto uctoa::@2
|
||||
to:uctoa::@3
|
||||
uctoa::@3: scope:[uctoa] from uctoa::@1
|
||||
[81] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2)
|
||||
[82] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11
|
||||
[83] *((byte*) uctoa::buffer#3) ← (byte) 0
|
||||
[77] *((byte*) uctoa::buffer#11) ← *((const byte*) DIGITS + (byte) uctoa::value#2)
|
||||
[78] (byte*) uctoa::buffer#3 ← ++ (byte*) uctoa::buffer#11
|
||||
[79] *((byte*) uctoa::buffer#3) ← (byte) 0
|
||||
to:uctoa::@return
|
||||
uctoa::@return: scope:[uctoa] from uctoa::@3
|
||||
[84] return
|
||||
[80] return
|
||||
to:@return
|
||||
uctoa::@2: scope:[uctoa] from uctoa::@1
|
||||
[85] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_DECIMAL_VALUES_CHAR + (byte) uctoa::digit#2)
|
||||
[86] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5
|
||||
[81] (byte) uctoa::digit_value#0 ← *((const byte*) RADIX_DECIMAL_VALUES_CHAR + (byte) uctoa::digit#2)
|
||||
[82] if((byte) 0!=(byte) uctoa::started#2) goto uctoa::@5
|
||||
to:uctoa::@7
|
||||
uctoa::@7: scope:[uctoa] from uctoa::@2
|
||||
[87] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5
|
||||
[83] if((byte) uctoa::value#2>=(byte) uctoa::digit_value#0) goto uctoa::@5
|
||||
to:uctoa::@4
|
||||
uctoa::@4: scope:[uctoa] from uctoa::@6 uctoa::@7
|
||||
[88] (byte*) uctoa::buffer#14 ← phi( uctoa::@7/(byte*) uctoa::buffer#11 uctoa::@6/(byte*) uctoa::buffer#4 )
|
||||
[88] (byte) uctoa::started#4 ← phi( uctoa::@7/(byte) uctoa::started#2 uctoa::@6/(byte) 1 )
|
||||
[88] (byte) uctoa::value#6 ← phi( uctoa::@7/(byte) uctoa::value#2 uctoa::@6/(byte) uctoa::value#0 )
|
||||
[89] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2
|
||||
[84] (byte*) uctoa::buffer#14 ← phi( uctoa::@7/(byte*) uctoa::buffer#11 uctoa::@6/(byte*) uctoa::buffer#4 )
|
||||
[84] (byte) uctoa::started#4 ← phi( uctoa::@7/(byte) uctoa::started#2 uctoa::@6/(byte) 1 )
|
||||
[84] (byte) uctoa::value#6 ← phi( uctoa::@7/(byte) uctoa::value#2 uctoa::@6/(byte) uctoa::value#0 )
|
||||
[85] (byte) uctoa::digit#1 ← ++ (byte) uctoa::digit#2
|
||||
to:uctoa::@1
|
||||
uctoa::@5: scope:[uctoa] from uctoa::@2 uctoa::@7
|
||||
[90] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11
|
||||
[91] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2
|
||||
[92] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0
|
||||
[93] call uctoa_append
|
||||
[94] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2
|
||||
[86] (byte*) uctoa_append::buffer#0 ← (byte*) uctoa::buffer#11
|
||||
[87] (byte) uctoa_append::value#0 ← (byte) uctoa::value#2
|
||||
[88] (byte) uctoa_append::sub#0 ← (byte) uctoa::digit_value#0
|
||||
[89] call uctoa_append
|
||||
[90] (byte) uctoa_append::return#0 ← (byte) uctoa_append::value#2
|
||||
to:uctoa::@6
|
||||
uctoa::@6: scope:[uctoa] from uctoa::@5
|
||||
[95] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0
|
||||
[96] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11
|
||||
[91] (byte) uctoa::value#0 ← (byte) uctoa_append::return#0
|
||||
[92] (byte*) uctoa::buffer#4 ← ++ (byte*) uctoa::buffer#11
|
||||
to:uctoa::@4
|
||||
|
||||
(byte()) uctoa_append((byte*) uctoa_append::buffer , (byte) uctoa_append::value , (byte) uctoa_append::sub)
|
||||
uctoa_append: scope:[uctoa_append] from uctoa::@5
|
||||
[97] phi()
|
||||
[93] phi()
|
||||
to:uctoa_append::@1
|
||||
uctoa_append::@1: scope:[uctoa_append] from uctoa_append uctoa_append::@2
|
||||
[98] (byte) uctoa_append::digit#2 ← phi( uctoa_append/(byte) 0 uctoa_append::@2/(byte) uctoa_append::digit#1 )
|
||||
[98] (byte) uctoa_append::value#2 ← phi( uctoa_append/(byte) uctoa_append::value#0 uctoa_append::@2/(byte) uctoa_append::value#1 )
|
||||
[99] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2
|
||||
[94] (byte) uctoa_append::digit#2 ← phi( uctoa_append/(byte) 0 uctoa_append::@2/(byte) uctoa_append::digit#1 )
|
||||
[94] (byte) uctoa_append::value#2 ← phi( uctoa_append/(byte) uctoa_append::value#0 uctoa_append::@2/(byte) uctoa_append::value#1 )
|
||||
[95] if((byte) uctoa_append::value#2>=(byte) uctoa_append::sub#0) goto uctoa_append::@2
|
||||
to:uctoa_append::@3
|
||||
uctoa_append::@3: scope:[uctoa_append] from uctoa_append::@1
|
||||
[100] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2)
|
||||
[96] *((byte*) uctoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) uctoa_append::digit#2)
|
||||
to:uctoa_append::@return
|
||||
uctoa_append::@return: scope:[uctoa_append] from uctoa_append::@3
|
||||
[101] return
|
||||
[97] return
|
||||
to:@return
|
||||
uctoa_append::@2: scope:[uctoa_append] from uctoa_append::@1
|
||||
[102] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2
|
||||
[103] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0
|
||||
[98] (byte) uctoa_append::digit#1 ← ++ (byte) uctoa_append::digit#2
|
||||
[99] (byte) uctoa_append::value#1 ← (byte) uctoa_append::value#2 - (byte) uctoa_append::sub#0
|
||||
to:uctoa_append::@1
|
||||
|
||||
(void()) printf_cls()
|
||||
printf_cls: scope:[printf_cls] from main
|
||||
[104] phi()
|
||||
[105] call memset
|
||||
[100] phi()
|
||||
[101] call memset
|
||||
to:printf_cls::@1
|
||||
printf_cls::@1: scope:[printf_cls] from printf_cls
|
||||
[106] (byte*) printf_cursor_ptr ← (byte*) 1024
|
||||
[107] (byte) printf_cursor_x ← (byte) 0
|
||||
[108] (byte) printf_cursor_y ← (byte) 0
|
||||
[102] (byte*) printf_cursor_ptr ← (byte*) 1024
|
||||
[103] (byte) printf_cursor_x ← (byte) 0
|
||||
[104] (byte) printf_cursor_y ← (byte) 0
|
||||
to:printf_cls::@return
|
||||
printf_cls::@return: scope:[printf_cls] from printf_cls::@1
|
||||
[109] return
|
||||
[105] return
|
||||
to:@return
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -12,11 +12,8 @@
|
||||
(const byte) SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = (byte) $c
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@return
|
||||
(const byte) main::c = (byte) 7
|
||||
(const byte*) main::str[(byte) 1] = (byte*) ""
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
(label) memcpy::@1
|
||||
(label) memcpy::@2
|
||||
@ -42,13 +39,13 @@
|
||||
(label) memset::@3
|
||||
(label) memset::@return
|
||||
(byte) memset::c
|
||||
(byte) memset::c#4 reg byte x 1.25000000125E8
|
||||
(byte) memset::c#4 reg byte x 1.2500000125E7
|
||||
(byte*) memset::dst
|
||||
(byte*) memset::dst#1 dst zp[2]:4 2.000000002E9
|
||||
(byte*) memset::dst#2 dst zp[2]:4 1.3366666683333335E9
|
||||
(byte*) memset::dst#1 dst zp[2]:4 2.00000002E8
|
||||
(byte*) memset::dst#2 dst zp[2]:4 1.3666666833333334E8
|
||||
(byte*) memset::dst#4 dst zp[2]:4 2.0000002E7
|
||||
(byte*) memset::end
|
||||
(byte*) memset::end#0 end zp[2]:2 1.683333336666667E8
|
||||
(byte*) memset::end#0 end zp[2]:2 1.8333333666666668E7
|
||||
(word) memset::num
|
||||
(word) memset::num#2 num zp[2]:2 1.0000001E7
|
||||
(void*) memset::return
|
||||
@ -71,9 +68,9 @@
|
||||
(void()) printf_cls()
|
||||
(label) printf_cls::@1
|
||||
(label) printf_cls::@return
|
||||
(byte*) printf_cursor_ptr loadstore zp[2]:12 132077.54716981133
|
||||
(byte) printf_cursor_x loadstore zp[1]:10 115386.71153846156
|
||||
(byte) printf_cursor_y loadstore zp[1]:11 129631.66666666666
|
||||
(byte*) printf_cursor_ptr loadstore zp[2]:12 159093.4090909091
|
||||
(byte) printf_cursor_x loadstore zp[1]:10 139537.41860465117
|
||||
(byte) printf_cursor_y loadstore zp[1]:11 155558.00000000003
|
||||
(byte) printf_format_number::justify_left
|
||||
(byte) printf_format_number::min_length
|
||||
(byte) printf_format_number::radix
|
||||
@ -116,8 +113,7 @@
|
||||
(byte) printf_str::ch#0 reg byte a 100001.0
|
||||
(byte*) printf_str::str
|
||||
(byte*) printf_str::str#0 str zp[2]:8 42857.57142857143
|
||||
(byte*) printf_str::str#4 str zp[2]:8 205002.5
|
||||
(byte*) printf_str::str#6 str zp[2]:8 10001.0
|
||||
(byte*) printf_str::str#2 str zp[2]:8 200002.0
|
||||
(void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix)
|
||||
(label) printf_uchar::@1
|
||||
(label) printf_uchar::@2
|
||||
@ -186,14 +182,14 @@ zp[2]:4 [ memcpy::dst#2 memcpy::dst#1 memset::str#3 memset::dst#2 memset::dst#4
|
||||
zp[1]:6 [ uctoa::digit#2 uctoa::digit#1 ]
|
||||
reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#0 ]
|
||||
zp[1]:7 [ uctoa::started#2 uctoa::started#4 ]
|
||||
zp[2]:8 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_str::str#4 printf_str::str#6 printf_str::str#0 ]
|
||||
zp[2]:8 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 printf_str::str#2 printf_str::str#0 ]
|
||||
reg byte x [ uctoa_append::value#2 uctoa_append::value#0 uctoa_append::value#1 ]
|
||||
reg byte y [ uctoa_append::digit#2 uctoa_append::digit#1 ]
|
||||
zp[1]:10 [ printf_cursor_x ]
|
||||
zp[1]:11 [ printf_cursor_y ]
|
||||
zp[2]:12 [ printf_cursor_ptr printf_char::$6 printf_ln::$0 printf_ln::$1 ]
|
||||
reg byte a [ printf_str::ch#0 ]
|
||||
reg byte a [ printf_number_buffer::buffer_sign#0 ]
|
||||
reg byte a [ printf_str::ch#0 ]
|
||||
zp[1]:14 [ uctoa::digit_value#0 uctoa_append::sub#0 ]
|
||||
reg byte x [ uctoa_append::return#0 ]
|
||||
mem[12] [ printf_buffer ]
|
||||
|
@ -28,6 +28,9 @@ main: {
|
||||
// printf_cls()
|
||||
jsr printf_cls
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
@ -43,8 +46,11 @@ main: {
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
lda #<1
|
||||
sta.z printf_sint.value
|
||||
lda #>1
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
@ -52,9 +58,9 @@ main: {
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
lda #<1
|
||||
lda #<2
|
||||
sta.z printf_sint.value
|
||||
lda #>1
|
||||
lda #>2
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
@ -63,40 +69,22 @@ main: {
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
lda #<2
|
||||
sta.z printf_sint.value
|
||||
lda #>2
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%d %%d: %d %d\n",1, 2)
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #<str4
|
||||
sta.z printf_str.str
|
||||
lda #>str4
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #<str6
|
||||
lda #<str5
|
||||
sta.z printf_str.str
|
||||
lda #>str6
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #<str7
|
||||
sta.z printf_str.str
|
||||
lda #>str7
|
||||
lda #>str5
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
@ -106,9 +94,9 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
@ -118,81 +106,81 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%1$d %%2$d: %1$d %2$d\n",1, 2)
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<str4
|
||||
sta.z printf_str.str
|
||||
lda #>str4
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<str6
|
||||
lda #<str9
|
||||
sta.z printf_str.str
|
||||
lda #>str6
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<1
|
||||
sta.z printf_sint.value
|
||||
lda #>1
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<1
|
||||
sta.z printf_sint.value
|
||||
lda #>1
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #<str12
|
||||
sta.z printf_str.str
|
||||
lda #>str12
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<1
|
||||
sta.z printf_sint.value
|
||||
lda #>1
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<1
|
||||
sta.z printf_sint.value
|
||||
lda #>1
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%1$d %%1$d: %1$d %1$d\n",1, 2)
|
||||
lda #<str4
|
||||
sta.z printf_str.str
|
||||
lda #>str4
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #<str16
|
||||
lda #<str5
|
||||
sta.z printf_str.str
|
||||
lda #>str16
|
||||
lda #>str5
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
lda #<2
|
||||
sta.z printf_sint.value
|
||||
lda #>2
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #<str7
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str7
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
@ -207,33 +195,6 @@ main: {
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #<2
|
||||
sta.z printf_sint.value
|
||||
lda #>2
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%2$d %%2$d: %2$d %2$d\n",1, 2)
|
||||
lda #<str4
|
||||
sta.z printf_str.str
|
||||
lda #>str4
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #<str
|
||||
sta.z printf_str.str
|
||||
lda #>str
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #<str16
|
||||
sta.z printf_str.str
|
||||
lda #>str16
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
@ -244,15 +205,24 @@ main: {
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #'%'
|
||||
jsr printf_char
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #<str9
|
||||
sta.z printf_str.str
|
||||
lda #>str9
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #<2
|
||||
sta.z printf_sint.value
|
||||
lda #>2
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #<str3
|
||||
lda #<str2
|
||||
sta.z printf_str.str
|
||||
lda #>str3
|
||||
lda #>str2
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
@ -262,30 +232,28 @@ main: {
|
||||
sta.z printf_sint.value+1
|
||||
jsr printf_sint
|
||||
// printf("%%2$d %%1$d: %2$d %1$d\n",1, 2)
|
||||
lda #<str4
|
||||
lda #<str3
|
||||
sta.z printf_str.str
|
||||
lda #>str4
|
||||
lda #>str3
|
||||
sta.z printf_str.str+1
|
||||
jsr printf_str
|
||||
// }
|
||||
rts
|
||||
str: .text ""
|
||||
str: .text "d "
|
||||
.byte 0
|
||||
str1: .text "d "
|
||||
str1: .text "d: "
|
||||
.byte 0
|
||||
str2: .text "d: "
|
||||
str2: .text " "
|
||||
.byte 0
|
||||
str3: .text " "
|
||||
str3: .text @"\n"
|
||||
.byte 0
|
||||
str4: .text @"\n"
|
||||
str4: .text "1$d "
|
||||
.byte 0
|
||||
str6: .text "1$d "
|
||||
str5: .text "2$d: "
|
||||
.byte 0
|
||||
str7: .text "2$d: "
|
||||
str9: .text "1$d: "
|
||||
.byte 0
|
||||
str12: .text "1$d: "
|
||||
.byte 0
|
||||
str16: .text "2$d "
|
||||
str12: .text "2$d "
|
||||
.byte 0
|
||||
}
|
||||
// Print a zero-terminated string
|
||||
|
@ -20,39 +20,39 @@ main: scope:[main] from @2
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[9] phi()
|
||||
[10] call printf_str
|
||||
[10] call printf_char
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[11] phi()
|
||||
[12] call printf_char
|
||||
[12] call printf_str
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] phi()
|
||||
[14] call printf_str
|
||||
[14] call printf_char
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
[15] phi()
|
||||
[16] call printf_char
|
||||
[16] call printf_str
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::@4
|
||||
[17] phi()
|
||||
[18] call printf_str
|
||||
[18] call printf_sint
|
||||
to:main::@6
|
||||
main::@6: scope:[main] from main::@5
|
||||
[19] phi()
|
||||
[20] call printf_sint
|
||||
[20] call printf_str
|
||||
to:main::@7
|
||||
main::@7: scope:[main] from main::@6
|
||||
[21] phi()
|
||||
[22] call printf_str
|
||||
[22] call printf_sint
|
||||
to:main::@8
|
||||
main::@8: scope:[main] from main::@7
|
||||
[23] phi()
|
||||
[24] call printf_sint
|
||||
[24] call printf_str
|
||||
to:main::@9
|
||||
main::@9: scope:[main] from main::@8
|
||||
[25] phi()
|
||||
[26] call printf_str
|
||||
[26] call printf_char
|
||||
to:main::@10
|
||||
main::@10: scope:[main] from main::@9
|
||||
[27] phi()
|
||||
@ -68,7 +68,7 @@ main::@12: scope:[main] from main::@11
|
||||
to:main::@13
|
||||
main::@13: scope:[main] from main::@12
|
||||
[33] phi()
|
||||
[34] call printf_char
|
||||
[34] call printf_sint
|
||||
to:main::@14
|
||||
main::@14: scope:[main] from main::@13
|
||||
[35] phi()
|
||||
@ -84,7 +84,7 @@ main::@16: scope:[main] from main::@15
|
||||
to:main::@17
|
||||
main::@17: scope:[main] from main::@16
|
||||
[41] phi()
|
||||
[42] call printf_sint
|
||||
[42] call printf_char
|
||||
to:main::@18
|
||||
main::@18: scope:[main] from main::@17
|
||||
[43] phi()
|
||||
@ -92,39 +92,39 @@ main::@18: scope:[main] from main::@17
|
||||
to:main::@19
|
||||
main::@19: scope:[main] from main::@18
|
||||
[45] phi()
|
||||
[46] call printf_str
|
||||
[46] call printf_char
|
||||
to:main::@20
|
||||
main::@20: scope:[main] from main::@19
|
||||
[47] phi()
|
||||
[48] call printf_char
|
||||
[48] call printf_str
|
||||
to:main::@21
|
||||
main::@21: scope:[main] from main::@20
|
||||
[49] phi()
|
||||
[50] call printf_str
|
||||
[50] call printf_sint
|
||||
to:main::@22
|
||||
main::@22: scope:[main] from main::@21
|
||||
[51] phi()
|
||||
[52] call printf_char
|
||||
[52] call printf_str
|
||||
to:main::@23
|
||||
main::@23: scope:[main] from main::@22
|
||||
[53] phi()
|
||||
[54] call printf_str
|
||||
[54] call printf_sint
|
||||
to:main::@24
|
||||
main::@24: scope:[main] from main::@23
|
||||
[55] phi()
|
||||
[56] call printf_sint
|
||||
[56] call printf_str
|
||||
to:main::@25
|
||||
main::@25: scope:[main] from main::@24
|
||||
[57] phi()
|
||||
[58] call printf_str
|
||||
[58] call printf_char
|
||||
to:main::@26
|
||||
main::@26: scope:[main] from main::@25
|
||||
[59] phi()
|
||||
[60] call printf_sint
|
||||
[60] call printf_str
|
||||
to:main::@27
|
||||
main::@27: scope:[main] from main::@26
|
||||
[61] phi()
|
||||
[62] call printf_str
|
||||
[62] call printf_char
|
||||
to:main::@28
|
||||
main::@28: scope:[main] from main::@27
|
||||
[63] phi()
|
||||
@ -132,7 +132,7 @@ main::@28: scope:[main] from main::@27
|
||||
to:main::@29
|
||||
main::@29: scope:[main] from main::@28
|
||||
[65] phi()
|
||||
[66] call printf_char
|
||||
[66] call printf_sint
|
||||
to:main::@30
|
||||
main::@30: scope:[main] from main::@29
|
||||
[67] phi()
|
||||
@ -140,7 +140,7 @@ main::@30: scope:[main] from main::@29
|
||||
to:main::@31
|
||||
main::@31: scope:[main] from main::@30
|
||||
[69] phi()
|
||||
[70] call printf_char
|
||||
[70] call printf_sint
|
||||
to:main::@32
|
||||
main::@32: scope:[main] from main::@31
|
||||
[71] phi()
|
||||
@ -148,7 +148,7 @@ main::@32: scope:[main] from main::@31
|
||||
to:main::@33
|
||||
main::@33: scope:[main] from main::@32
|
||||
[73] phi()
|
||||
[74] call printf_sint
|
||||
[74] call printf_char
|
||||
to:main::@34
|
||||
main::@34: scope:[main] from main::@33
|
||||
[75] phi()
|
||||
@ -156,7 +156,7 @@ main::@34: scope:[main] from main::@33
|
||||
to:main::@35
|
||||
main::@35: scope:[main] from main::@34
|
||||
[77] phi()
|
||||
[78] call printf_sint
|
||||
[78] call printf_char
|
||||
to:main::@36
|
||||
main::@36: scope:[main] from main::@35
|
||||
[79] phi()
|
||||
@ -164,273 +164,253 @@ main::@36: scope:[main] from main::@35
|
||||
to:main::@37
|
||||
main::@37: scope:[main] from main::@36
|
||||
[81] phi()
|
||||
[82] call printf_str
|
||||
[82] call printf_sint
|
||||
to:main::@38
|
||||
main::@38: scope:[main] from main::@37
|
||||
[83] phi()
|
||||
[84] call printf_char
|
||||
[84] call printf_str
|
||||
to:main::@39
|
||||
main::@39: scope:[main] from main::@38
|
||||
[85] phi()
|
||||
[86] call printf_str
|
||||
[86] call printf_sint
|
||||
to:main::@40
|
||||
main::@40: scope:[main] from main::@39
|
||||
[87] phi()
|
||||
[88] call printf_char
|
||||
to:main::@41
|
||||
main::@41: scope:[main] from main::@40
|
||||
[89] phi()
|
||||
[90] call printf_str
|
||||
to:main::@42
|
||||
main::@42: scope:[main] from main::@41
|
||||
[91] phi()
|
||||
[92] call printf_sint
|
||||
to:main::@43
|
||||
main::@43: scope:[main] from main::@42
|
||||
[93] phi()
|
||||
[94] call printf_str
|
||||
to:main::@44
|
||||
main::@44: scope:[main] from main::@43
|
||||
[95] phi()
|
||||
[96] call printf_sint
|
||||
to:main::@45
|
||||
main::@45: scope:[main] from main::@44
|
||||
[97] phi()
|
||||
[98] call printf_str
|
||||
[88] call printf_str
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@45
|
||||
[99] return
|
||||
main::@return: scope:[main] from main::@40
|
||||
[89] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_str((byte*) printf_str::str)
|
||||
printf_str: scope:[printf_str] from main::@1 main::@10 main::@12 main::@14 main::@16 main::@18 main::@19 main::@21 main::@23 main::@25 main::@27 main::@28 main::@3 main::@30 main::@32 main::@34 main::@36 main::@37 main::@39 main::@41 main::@43 main::@45 main::@5 main::@7 main::@9 printf_number_buffer::@2
|
||||
[100] (byte*) printf_str::str#29 ← phi( main::@1/(const byte*) main::str main::@10/(const byte*) main::str main::@12/(const byte*) main::str6 main::@14/(const byte*) main::str7 main::@16/(const byte*) main::str3 main::@18/(const byte*) main::str4 main::@19/(const byte*) main::str main::@21/(const byte*) main::str6 main::@23/(const byte*) main::str12 main::@25/(const byte*) main::str3 main::@27/(const byte*) main::str4 main::@28/(const byte*) main::str main::@3/(const byte*) main::str1 main::@30/(const byte*) main::str16 main::@32/(const byte*) main::str7 main::@34/(const byte*) main::str3 main::@36/(const byte*) main::str4 main::@37/(const byte*) main::str main::@39/(const byte*) main::str16 main::@41/(const byte*) main::str12 main::@43/(const byte*) main::str3 main::@45/(const byte*) main::str4 main::@5/(const byte*) main::str2 main::@7/(const byte*) main::str3 main::@9/(const byte*) main::str4 printf_number_buffer::@2/(const byte*) printf_number_buffer::buffer_digits#0 )
|
||||
printf_str: scope:[printf_str] from main::@10 main::@12 main::@14 main::@16 main::@18 main::@2 main::@20 main::@22 main::@24 main::@26 main::@28 main::@30 main::@32 main::@34 main::@36 main::@38 main::@4 main::@40 main::@6 main::@8 printf_number_buffer::@2
|
||||
[90] (byte*) printf_str::str#24 ← phi( main::@10/(const byte*) main::str4 main::@12/(const byte*) main::str5 main::@14/(const byte*) main::str2 main::@16/(const byte*) main::str3 main::@18/(const byte*) main::str4 main::@2/(const byte*) main::str main::@20/(const byte*) main::str9 main::@22/(const byte*) main::str2 main::@24/(const byte*) main::str3 main::@26/(const byte*) main::str12 main::@28/(const byte*) main::str5 main::@30/(const byte*) main::str2 main::@32/(const byte*) main::str3 main::@34/(const byte*) main::str12 main::@36/(const byte*) main::str9 main::@38/(const byte*) main::str2 main::@4/(const byte*) main::str1 main::@40/(const byte*) main::str3 main::@6/(const byte*) main::str2 main::@8/(const byte*) main::str3 printf_number_buffer::@2/(const byte*) printf_number_buffer::buffer_digits#0 )
|
||||
to:printf_str::@1
|
||||
printf_str::@1: scope:[printf_str] from printf_str printf_str::@4 printf_str::@5
|
||||
[101] (byte*) printf_str::str#27 ← phi( printf_str/(byte*) printf_str::str#29 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 )
|
||||
[91] (byte*) printf_str::str#22 ← phi( printf_str/(byte*) printf_str::str#24 printf_str::@4/(byte*) printf_str::str#0 printf_str::@5/(byte*) printf_str::str#0 )
|
||||
to:printf_str::@2
|
||||
printf_str::@2: scope:[printf_str] from printf_str::@1
|
||||
[102] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#27)
|
||||
[103] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#27
|
||||
[104] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3
|
||||
[92] (byte) printf_str::ch#0 ← *((byte*) printf_str::str#22)
|
||||
[93] (byte*) printf_str::str#0 ← ++ (byte*) printf_str::str#22
|
||||
[94] if((byte) printf_str::ch#0!=(byte) 0) goto printf_str::@3
|
||||
to:printf_str::@return
|
||||
printf_str::@return: scope:[printf_str] from printf_str::@2
|
||||
[105] return
|
||||
[95] return
|
||||
to:@return
|
||||
printf_str::@3: scope:[printf_str] from printf_str::@2
|
||||
[106] if((byte) printf_str::ch#0==(byte) '
|
||||
[96] if((byte) printf_str::ch#0==(byte) '
|
||||
') goto printf_str::@4
|
||||
to:printf_str::@5
|
||||
printf_str::@5: scope:[printf_str] from printf_str::@3
|
||||
[107] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0
|
||||
[108] call printf_char
|
||||
[97] (byte) printf_char::ch#1 ← (byte) printf_str::ch#0
|
||||
[98] call printf_char
|
||||
to:printf_str::@1
|
||||
printf_str::@4: scope:[printf_str] from printf_str::@3
|
||||
[109] phi()
|
||||
[110] call printf_ln
|
||||
[99] phi()
|
||||
[100] call printf_ln
|
||||
to:printf_str::@1
|
||||
|
||||
(void()) printf_ln()
|
||||
printf_ln: scope:[printf_ln] from printf_str::@4
|
||||
[111] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x
|
||||
[112] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28
|
||||
[113] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1
|
||||
[114] (byte) printf_cursor_x ← (byte) 0
|
||||
[115] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
[101] (byte*~) printf_ln::$0 ← (byte*) printf_cursor_ptr - (byte) printf_cursor_x
|
||||
[102] (byte*~) printf_ln::$1 ← (byte*~) printf_ln::$0 + (byte) $28
|
||||
[103] (byte*) printf_cursor_ptr ← (byte*~) printf_ln::$1
|
||||
[104] (byte) printf_cursor_x ← (byte) 0
|
||||
[105] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
to:printf_ln::@return
|
||||
printf_ln::@return: scope:[printf_ln] from printf_ln
|
||||
[116] return
|
||||
[106] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_char((byte) printf_char::ch)
|
||||
printf_char: scope:[printf_char] from main::@11 main::@13 main::@2 main::@20 main::@22 main::@29 main::@31 main::@38 main::@4 main::@40 printf_number_buffer::@3 printf_str::@5
|
||||
[117] (byte) printf_char::ch#13 ← phi( main::@11/(byte) '%' main::@13/(byte) '%' main::@2/(byte) '%' main::@20/(byte) '%' main::@22/(byte) '%' main::@29/(byte) '%' main::@31/(byte) '%' main::@38/(byte) '%' main::@4/(byte) '%' main::@40/(byte) '%' printf_number_buffer::@3/(byte) printf_char::ch#2 printf_str::@5/(byte) printf_char::ch#1 )
|
||||
[118] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#13
|
||||
[119] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr
|
||||
[120] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x
|
||||
[121] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return
|
||||
printf_char: scope:[printf_char] from main::@1 main::@11 main::@17 main::@19 main::@25 main::@27 main::@3 main::@33 main::@35 main::@9 printf_number_buffer::@3 printf_str::@5
|
||||
[107] (byte) printf_char::ch#13 ← phi( main::@1/(byte) '%' main::@11/(byte) '%' main::@17/(byte) '%' main::@19/(byte) '%' main::@25/(byte) '%' main::@27/(byte) '%' main::@3/(byte) '%' main::@33/(byte) '%' main::@35/(byte) '%' main::@9/(byte) '%' printf_number_buffer::@3/(byte) printf_char::ch#2 printf_str::@5/(byte) printf_char::ch#1 )
|
||||
[108] *((byte*) printf_cursor_ptr) ← (byte) printf_char::ch#13
|
||||
[109] (byte*) printf_cursor_ptr ← ++ (byte*) printf_cursor_ptr
|
||||
[110] (byte) printf_cursor_x ← ++ (byte) printf_cursor_x
|
||||
[111] if((byte) printf_cursor_x!=(byte) $28) goto printf_char::@return
|
||||
to:printf_char::@1
|
||||
printf_char::@1: scope:[printf_char] from printf_char
|
||||
[122] (byte) printf_cursor_x ← (byte) 0
|
||||
[123] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
[124] if((byte) printf_cursor_y!=(byte) $19) goto printf_char::@return
|
||||
[112] (byte) printf_cursor_x ← (byte) 0
|
||||
[113] (byte) printf_cursor_y ← ++ (byte) printf_cursor_y
|
||||
[114] if((byte) printf_cursor_y!=(byte) $19) goto printf_char::@return
|
||||
to:printf_char::@2
|
||||
printf_char::@2: scope:[printf_char] from printf_char::@1
|
||||
[125] phi()
|
||||
[126] call memcpy
|
||||
[115] phi()
|
||||
[116] call memcpy
|
||||
to:printf_char::@3
|
||||
printf_char::@3: scope:[printf_char] from printf_char::@2
|
||||
[127] phi()
|
||||
[128] call memset
|
||||
[117] phi()
|
||||
[118] call memset
|
||||
to:printf_char::@4
|
||||
printf_char::@4: scope:[printf_char] from printf_char::@3
|
||||
[129] (byte*~) printf_char::$6 ← (byte*) printf_cursor_ptr - (byte) $28
|
||||
[130] (byte*) printf_cursor_ptr ← (byte*~) printf_char::$6
|
||||
[131] (byte) printf_cursor_y ← -- (byte) printf_cursor_y
|
||||
[119] (byte*~) printf_char::$6 ← (byte*) printf_cursor_ptr - (byte) $28
|
||||
[120] (byte*) printf_cursor_ptr ← (byte*~) printf_char::$6
|
||||
[121] (byte) printf_cursor_y ← -- (byte) printf_cursor_y
|
||||
to:printf_char::@return
|
||||
printf_char::@return: scope:[printf_char] from printf_char printf_char::@1 printf_char::@4
|
||||
[132] return
|
||||
[122] return
|
||||
to:@return
|
||||
|
||||
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
|
||||
memset: scope:[memset] from printf_char::@3 printf_cls
|
||||
[133] (byte) memset::c#4 ← phi( printf_char::@3/(byte) ' ' printf_cls/(byte) ' ' )
|
||||
[133] (void*) memset::str#3 ← phi( printf_char::@3/(void*)(number) $400+(number) $28*(number) $19-(number) $28 printf_cls/(void*) 1024 )
|
||||
[133] (word) memset::num#2 ← phi( printf_char::@3/(byte) $28 printf_cls/(word)(number) $28*(number) $19 )
|
||||
[134] if((word) memset::num#2<=(byte) 0) goto memset::@return
|
||||
[123] (byte) memset::c#4 ← phi( printf_char::@3/(byte) ' ' printf_cls/(byte) ' ' )
|
||||
[123] (void*) memset::str#3 ← phi( printf_char::@3/(void*)(number) $400+(number) $28*(number) $19-(number) $28 printf_cls/(void*) 1024 )
|
||||
[123] (word) memset::num#2 ← phi( printf_char::@3/(byte) $28 printf_cls/(word)(number) $28*(number) $19 )
|
||||
[124] if((word) memset::num#2<=(byte) 0) goto memset::@return
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset
|
||||
[135] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2
|
||||
[136] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
|
||||
[125] (byte*) memset::end#0 ← (byte*)(void*) memset::str#3 + (word) memset::num#2
|
||||
[126] (byte*) memset::dst#4 ← (byte*)(void*) memset::str#3
|
||||
to:memset::@2
|
||||
memset::@2: scope:[memset] from memset::@1 memset::@3
|
||||
[137] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
|
||||
[138] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
|
||||
[127] (byte*) memset::dst#2 ← phi( memset::@1/(byte*) memset::dst#4 memset::@3/(byte*) memset::dst#1 )
|
||||
[128] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@3
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset memset::@2
|
||||
[139] return
|
||||
[129] return
|
||||
to:@return
|
||||
memset::@3: scope:[memset] from memset::@2
|
||||
[140] *((byte*) memset::dst#2) ← (byte) memset::c#4
|
||||
[141] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
[130] *((byte*) memset::dst#2) ← (byte) memset::c#4
|
||||
[131] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
|
||||
to:memset::@2
|
||||
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
memcpy: scope:[memcpy] from printf_char::@2
|
||||
[142] phi()
|
||||
[132] phi()
|
||||
to:memcpy::@1
|
||||
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
||||
[143] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
||||
[143] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 )
|
||||
[144] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2
|
||||
[133] (byte*) memcpy::dst#2 ← phi( memcpy/(byte*)(const void*) memcpy::destination#0 memcpy::@2/(byte*) memcpy::dst#1 )
|
||||
[133] (byte*) memcpy::src#2 ← phi( memcpy/(byte*)(const void*) memcpy::source#0 memcpy::@2/(byte*) memcpy::src#1 )
|
||||
[134] if((byte*) memcpy::src#2!=(const byte*) memcpy::src_end#0) goto memcpy::@2
|
||||
to:memcpy::@return
|
||||
memcpy::@return: scope:[memcpy] from memcpy::@1
|
||||
[145] return
|
||||
[135] return
|
||||
to:@return
|
||||
memcpy::@2: scope:[memcpy] from memcpy::@1
|
||||
[146] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
|
||||
[147] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
||||
[148] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
|
||||
[136] *((byte*) memcpy::dst#2) ← *((byte*) memcpy::src#2)
|
||||
[137] (byte*) memcpy::dst#1 ← ++ (byte*) memcpy::dst#2
|
||||
[138] (byte*) memcpy::src#1 ← ++ (byte*) memcpy::src#2
|
||||
to:memcpy::@1
|
||||
|
||||
(void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix)
|
||||
printf_sint: scope:[printf_sint] from main::@15 main::@17 main::@24 main::@26 main::@33 main::@35 main::@42 main::@44 main::@6 main::@8
|
||||
[149] (signed word) printf_sint::value#11 ← phi( main::@15/(signed byte) 1 main::@17/(signed byte) 2 main::@24/(signed byte) 1 main::@26/(signed byte) 1 main::@33/(signed byte) 2 main::@35/(signed byte) 2 main::@42/(signed byte) 2 main::@44/(signed byte) 1 main::@6/(signed byte) 1 main::@8/(signed byte) 2 )
|
||||
[150] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0
|
||||
[151] if((signed word) printf_sint::value#11<(signed byte) 0) goto printf_sint::@1
|
||||
printf_sint: scope:[printf_sint] from main::@13 main::@15 main::@21 main::@23 main::@29 main::@31 main::@37 main::@39 main::@5 main::@7
|
||||
[139] (signed word) printf_sint::value#11 ← phi( main::@13/(signed byte) 1 main::@15/(signed byte) 2 main::@21/(signed byte) 1 main::@23/(signed byte) 1 main::@29/(signed byte) 2 main::@31/(signed byte) 2 main::@37/(signed byte) 2 main::@39/(signed byte) 1 main::@5/(signed byte) 1 main::@7/(signed byte) 2 )
|
||||
[140] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) 0
|
||||
[141] if((signed word) printf_sint::value#11<(signed byte) 0) goto printf_sint::@1
|
||||
to:printf_sint::@2
|
||||
printf_sint::@1: scope:[printf_sint] from printf_sint
|
||||
[152] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#11
|
||||
[153] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-'
|
||||
[142] (signed word) printf_sint::value#0 ← - (signed word) printf_sint::value#11
|
||||
[143] *((byte*)&(struct printf_buffer_number) printf_buffer) ← (byte) '-'
|
||||
to:printf_sint::@2
|
||||
printf_sint::@2: scope:[printf_sint] from printf_sint printf_sint::@1
|
||||
[154] (signed word) printf_sint::value#13 ← phi( printf_sint::@1/(signed word) printf_sint::value#0 printf_sint/(signed word) printf_sint::value#11 )
|
||||
[155] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#13
|
||||
[156] call utoa
|
||||
[144] (signed word) printf_sint::value#13 ← phi( printf_sint::@1/(signed word) printf_sint::value#0 printf_sint/(signed word) printf_sint::value#11 )
|
||||
[145] (word) utoa::value#1 ← (word)(signed word) printf_sint::value#13
|
||||
[146] call utoa
|
||||
to:printf_sint::@3
|
||||
printf_sint::@3: scope:[printf_sint] from printf_sint::@2
|
||||
[157] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer)
|
||||
[158] call printf_number_buffer
|
||||
[147] (byte) printf_number_buffer::buffer_sign#0 ← *((byte*)&(struct printf_buffer_number) printf_buffer)
|
||||
[148] call printf_number_buffer
|
||||
to:printf_sint::@return
|
||||
printf_sint::@return: scope:[printf_sint] from printf_sint::@3
|
||||
[159] return
|
||||
[149] return
|
||||
to:@return
|
||||
|
||||
(void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix)
|
||||
printf_number_buffer: scope:[printf_number_buffer] from printf_sint::@3
|
||||
[160] phi()
|
||||
[150] phi()
|
||||
to:printf_number_buffer::@1
|
||||
printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer
|
||||
[161] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2
|
||||
[151] if((byte) 0==(byte) printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@2
|
||||
to:printf_number_buffer::@3
|
||||
printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@1
|
||||
[162] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#0
|
||||
[163] call printf_char
|
||||
[152] (byte) printf_char::ch#2 ← (byte) printf_number_buffer::buffer_sign#0
|
||||
[153] call printf_char
|
||||
to:printf_number_buffer::@2
|
||||
printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@1 printf_number_buffer::@3
|
||||
[164] phi()
|
||||
[165] call printf_str
|
||||
[154] phi()
|
||||
[155] call printf_str
|
||||
to:printf_number_buffer::@return
|
||||
printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@2
|
||||
[166] return
|
||||
[156] return
|
||||
to:@return
|
||||
|
||||
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
||||
utoa: scope:[utoa] from printf_sint::@2
|
||||
[167] phi()
|
||||
[157] phi()
|
||||
to:utoa::@1
|
||||
utoa::@1: scope:[utoa] from utoa utoa::@4
|
||||
[168] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
|
||||
[168] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 )
|
||||
[168] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 )
|
||||
[168] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 )
|
||||
[169] if((byte) utoa::digit#2<(byte) 5-(byte) 1) goto utoa::@2
|
||||
[158] (byte*) utoa::buffer#11 ← phi( utoa::@4/(byte*) utoa::buffer#14 utoa/(byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
|
||||
[158] (byte) utoa::started#2 ← phi( utoa::@4/(byte) utoa::started#4 utoa/(byte) 0 )
|
||||
[158] (word) utoa::value#2 ← phi( utoa::@4/(word) utoa::value#6 utoa/(word) utoa::value#1 )
|
||||
[158] (byte) utoa::digit#2 ← phi( utoa::@4/(byte) utoa::digit#1 utoa/(byte) 0 )
|
||||
[159] if((byte) utoa::digit#2<(byte) 5-(byte) 1) goto utoa::@2
|
||||
to:utoa::@3
|
||||
utoa::@3: scope:[utoa] from utoa::@1
|
||||
[170] (byte~) utoa::$11 ← (byte)(word) utoa::value#2
|
||||
[171] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11)
|
||||
[172] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11
|
||||
[173] *((byte*) utoa::buffer#3) ← (byte) 0
|
||||
[160] (byte~) utoa::$11 ← (byte)(word) utoa::value#2
|
||||
[161] *((byte*) utoa::buffer#11) ← *((const byte*) DIGITS + (byte~) utoa::$11)
|
||||
[162] (byte*) utoa::buffer#3 ← ++ (byte*) utoa::buffer#11
|
||||
[163] *((byte*) utoa::buffer#3) ← (byte) 0
|
||||
to:utoa::@return
|
||||
utoa::@return: scope:[utoa] from utoa::@3
|
||||
[174] return
|
||||
[164] return
|
||||
to:@return
|
||||
utoa::@2: scope:[utoa] from utoa::@1
|
||||
[175] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1
|
||||
[176] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10)
|
||||
[177] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5
|
||||
[165] (byte~) utoa::$10 ← (byte) utoa::digit#2 << (byte) 1
|
||||
[166] (word) utoa::digit_value#0 ← *((const word*) RADIX_DECIMAL_VALUES + (byte~) utoa::$10)
|
||||
[167] if((byte) 0!=(byte) utoa::started#2) goto utoa::@5
|
||||
to:utoa::@7
|
||||
utoa::@7: scope:[utoa] from utoa::@2
|
||||
[178] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5
|
||||
[168] if((word) utoa::value#2>=(word) utoa::digit_value#0) goto utoa::@5
|
||||
to:utoa::@4
|
||||
utoa::@4: scope:[utoa] from utoa::@6 utoa::@7
|
||||
[179] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 )
|
||||
[179] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 )
|
||||
[179] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 )
|
||||
[180] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2
|
||||
[169] (byte*) utoa::buffer#14 ← phi( utoa::@7/(byte*) utoa::buffer#11 utoa::@6/(byte*) utoa::buffer#4 )
|
||||
[169] (byte) utoa::started#4 ← phi( utoa::@7/(byte) utoa::started#2 utoa::@6/(byte) 1 )
|
||||
[169] (word) utoa::value#6 ← phi( utoa::@7/(word) utoa::value#2 utoa::@6/(word) utoa::value#0 )
|
||||
[170] (byte) utoa::digit#1 ← ++ (byte) utoa::digit#2
|
||||
to:utoa::@1
|
||||
utoa::@5: scope:[utoa] from utoa::@2 utoa::@7
|
||||
[181] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11
|
||||
[182] (word) utoa_append::value#0 ← (word) utoa::value#2
|
||||
[183] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0
|
||||
[184] call utoa_append
|
||||
[185] (word) utoa_append::return#0 ← (word) utoa_append::value#2
|
||||
[171] (byte*) utoa_append::buffer#0 ← (byte*) utoa::buffer#11
|
||||
[172] (word) utoa_append::value#0 ← (word) utoa::value#2
|
||||
[173] (word) utoa_append::sub#0 ← (word) utoa::digit_value#0
|
||||
[174] call utoa_append
|
||||
[175] (word) utoa_append::return#0 ← (word) utoa_append::value#2
|
||||
to:utoa::@6
|
||||
utoa::@6: scope:[utoa] from utoa::@5
|
||||
[186] (word) utoa::value#0 ← (word) utoa_append::return#0
|
||||
[187] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11
|
||||
[176] (word) utoa::value#0 ← (word) utoa_append::return#0
|
||||
[177] (byte*) utoa::buffer#4 ← ++ (byte*) utoa::buffer#11
|
||||
to:utoa::@4
|
||||
|
||||
(word()) utoa_append((byte*) utoa_append::buffer , (word) utoa_append::value , (word) utoa_append::sub)
|
||||
utoa_append: scope:[utoa_append] from utoa::@5
|
||||
[188] phi()
|
||||
[178] phi()
|
||||
to:utoa_append::@1
|
||||
utoa_append::@1: scope:[utoa_append] from utoa_append utoa_append::@2
|
||||
[189] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 )
|
||||
[189] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 )
|
||||
[190] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2
|
||||
[179] (byte) utoa_append::digit#2 ← phi( utoa_append/(byte) 0 utoa_append::@2/(byte) utoa_append::digit#1 )
|
||||
[179] (word) utoa_append::value#2 ← phi( utoa_append/(word) utoa_append::value#0 utoa_append::@2/(word) utoa_append::value#1 )
|
||||
[180] if((word) utoa_append::value#2>=(word) utoa_append::sub#0) goto utoa_append::@2
|
||||
to:utoa_append::@3
|
||||
utoa_append::@3: scope:[utoa_append] from utoa_append::@1
|
||||
[191] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2)
|
||||
[181] *((byte*) utoa_append::buffer#0) ← *((const byte*) DIGITS + (byte) utoa_append::digit#2)
|
||||
to:utoa_append::@return
|
||||
utoa_append::@return: scope:[utoa_append] from utoa_append::@3
|
||||
[192] return
|
||||
[182] return
|
||||
to:@return
|
||||
utoa_append::@2: scope:[utoa_append] from utoa_append::@1
|
||||
[193] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2
|
||||
[194] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0
|
||||
[183] (byte) utoa_append::digit#1 ← ++ (byte) utoa_append::digit#2
|
||||
[184] (word) utoa_append::value#1 ← (word) utoa_append::value#2 - (word) utoa_append::sub#0
|
||||
to:utoa_append::@1
|
||||
|
||||
(void()) printf_cls()
|
||||
printf_cls: scope:[printf_cls] from main
|
||||
[195] phi()
|
||||
[196] call memset
|
||||
[185] phi()
|
||||
[186] call memset
|
||||
to:printf_cls::@1
|
||||
printf_cls::@1: scope:[printf_cls] from printf_cls
|
||||
[197] (byte*) printf_cursor_ptr ← (byte*) 1024
|
||||
[198] (byte) printf_cursor_x ← (byte) 0
|
||||
[199] (byte) printf_cursor_y ← (byte) 0
|
||||
[187] (byte*) printf_cursor_ptr ← (byte*) 1024
|
||||
[188] (byte) printf_cursor_x ← (byte) 0
|
||||
[189] (byte) printf_cursor_y ← (byte) 0
|
||||
to:printf_cls::@return
|
||||
printf_cls::@return: scope:[printf_cls] from printf_cls::@1
|
||||
[200] return
|
||||
[190] return
|
||||
to:@return
|
||||
|
File diff suppressed because one or more lines are too long
@ -46,27 +46,21 @@
|
||||
(label) main::@39
|
||||
(label) main::@4
|
||||
(label) main::@40
|
||||
(label) main::@41
|
||||
(label) main::@42
|
||||
(label) main::@43
|
||||
(label) main::@44
|
||||
(label) main::@45
|
||||
(label) main::@5
|
||||
(label) main::@6
|
||||
(label) main::@7
|
||||
(label) main::@8
|
||||
(label) main::@9
|
||||
(label) main::@return
|
||||
(const byte*) main::str[(byte) 1] = (byte*) ""
|
||||
(const byte*) main::str1[(byte) 3] = (byte*) "d "
|
||||
(const byte*) main::str12[(byte) 6] = (byte*) "1$d: "
|
||||
(const byte*) main::str16[(byte) 5] = (byte*) "2$d "
|
||||
(const byte*) main::str2[(byte) 8] = (byte*) "d: "
|
||||
(const byte*) main::str3[(byte) 2] = (byte*) " "
|
||||
(const byte*) main::str4[(byte) 2] = (byte*) "
|
||||
(const byte*) main::str[(byte) 3] = (byte*) "d "
|
||||
(const byte*) main::str1[(byte) 8] = (byte*) "d: "
|
||||
(const byte*) main::str12[(byte) 5] = (byte*) "2$d "
|
||||
(const byte*) main::str2[(byte) 2] = (byte*) " "
|
||||
(const byte*) main::str3[(byte) 2] = (byte*) "
|
||||
"
|
||||
(const byte*) main::str6[(byte) 5] = (byte*) "1$d "
|
||||
(const byte*) main::str7[(byte) 6] = (byte*) "2$d: "
|
||||
(const byte*) main::str4[(byte) 5] = (byte*) "1$d "
|
||||
(const byte*) main::str5[(byte) 6] = (byte*) "2$d: "
|
||||
(const byte*) main::str9[(byte) 6] = (byte*) "1$d: "
|
||||
(void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num)
|
||||
(label) memcpy::@1
|
||||
(label) memcpy::@2
|
||||
@ -121,9 +115,9 @@
|
||||
(void()) printf_cls()
|
||||
(label) printf_cls::@1
|
||||
(label) printf_cls::@return
|
||||
(byte*) printf_cursor_ptr loadstore zp[2]:9 49296.54929577465
|
||||
(byte) printf_cursor_x loadstore zp[1]:7 42553.96453900709
|
||||
(byte) printf_cursor_y loadstore zp[1]:8 48951.818181818184
|
||||
(byte*) printf_cursor_ptr loadstore zp[2]:9 53031.13636363637
|
||||
(byte) printf_cursor_x loadstore zp[1]:7 45802.35877862595
|
||||
(byte) printf_cursor_y loadstore zp[1]:8 52632.4060150376
|
||||
(byte) printf_format_number::justify_left
|
||||
(byte) printf_format_number::min_length
|
||||
(byte) printf_format_number::radix
|
||||
@ -183,8 +177,8 @@
|
||||
(byte) printf_str::ch#0 reg byte a 100001.0
|
||||
(byte*) printf_str::str
|
||||
(byte*) printf_str::str#0 str zp[2]:2 42857.57142857143
|
||||
(byte*) printf_str::str#27 str zp[2]:2 205002.5
|
||||
(byte*) printf_str::str#29 str zp[2]:2 10001.0
|
||||
(byte*) printf_str::str#22 str zp[2]:2 205002.5
|
||||
(byte*) printf_str::str#24 str zp[2]:2 10001.0
|
||||
(void()) utoa((word) utoa::value , (byte*) utoa::buffer , (byte) utoa::radix)
|
||||
(byte~) utoa::$10 reg byte a 20002.0
|
||||
(byte~) utoa::$11 reg byte a 2002.0
|
||||
@ -238,7 +232,7 @@
|
||||
|
||||
reg byte a [ printf_char::ch#13 printf_char::ch#2 printf_char::ch#1 ]
|
||||
reg byte x [ memset::c#4 ]
|
||||
zp[2]:2 [ printf_sint::value#13 printf_sint::value#0 printf_sint::value#11 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 printf_str::str#27 printf_str::str#29 printf_str::str#0 ]
|
||||
zp[2]:2 [ printf_sint::value#13 printf_sint::value#0 printf_sint::value#11 utoa::value#2 utoa::value#6 utoa::value#1 utoa::value#0 utoa_append::value#2 utoa_append::value#0 utoa_append::value#1 utoa_append::return#0 printf_str::str#22 printf_str::str#24 printf_str::str#0 ]
|
||||
zp[1]:4 [ utoa::digit#2 utoa::digit#1 ]
|
||||
reg byte x [ utoa::started#2 utoa::started#4 ]
|
||||
zp[2]:5 [ utoa::buffer#11 utoa::buffer#14 utoa::buffer#4 utoa::buffer#3 utoa_append::buffer#0 memcpy::src#2 memcpy::src#1 memset::num#2 memset::end#0 ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user