1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-26 12:49:21 +00:00

Added missing 32bit-fragments for @mark.j.fisher.See #553

This commit is contained in:
jespergravgaard 2020-10-30 10:43:01 +01:00
parent b79425ee48
commit 5c0009239e
16 changed files with 18870 additions and 0 deletions

View File

@ -0,0 +1,12 @@
lda {m2}
eor #$ff
sta {m1}
lda {m2}+1
eor #$ff
sta {m1}+1
lda {m2}+2
eor #$ff
sta {m1}+2
lda {m2}+3
eor #$ff
sta {m1}+3

View File

@ -0,0 +1,12 @@
lda {m1}
and {m2}
sta {m1}
lda {m1}+1
and {m2}+1
sta {m1}+1
lda {m1}+2
and {m2}+2
sta {m1}+2
lda {m1}+3
and {m2}+3
sta {m1}+3

View File

@ -0,0 +1,12 @@
lda {m1}
eor {m2}
sta {m1}
lda {m1}+1
eor {m2}+1
sta {m1}+1
lda {m1}+2
eor {m2}+2
sta {m1}+2
lda {m1}+3
eor {m2}+3
sta {m1}+3

View File

@ -0,0 +1,16 @@
lda {m1}
clc
adc ({z2}),y
sta {m1}
iny
lda {m1}+1
adc ({z2}),y
sta {m1}+1
iny
lda {m1}+2
adc ({z2}),y
sta {m1}+2
iny
lda {m1}+3
adc ({z2}),y
sta {m1}+3

View File

@ -0,0 +1,12 @@
lda {m2}
and {m3}
sta {m1}
lda {m2}+1
and {m3}+1
sta {m1}+1
lda {m2}+2
and {m3}+2
sta {m1}+2
lda {m2}+3
and {m3}+3
sta {m1}+3

View File

@ -0,0 +1,12 @@
lda {m2}
eor {m3}
sta {m1}
lda {m2}+1
eor {m3}+1
sta {m1}+1
lda {m2}+2
eor {m3}+2
sta {m1}+2
lda {m2}+3
eor {m3}+3
sta {m1}+3

View File

@ -0,0 +1,13 @@
lda {m2}
clc
adc {c1},x
sta {m1}
lda {m2}+1
adc {c1}+1,x
sta {m1}+1
lda {m2}+2
adc {c1}+2,x
sta {m1}+2
lda {m2}+3
adc {c1}+3,x
sta {m1}+3

View File

@ -0,0 +1,13 @@
lda {m2}
clc
adc {c1},y
sta {m1}
lda {m2}+1
adc {c1}+1,y
sta {m1}+1
lda {m2}+2
adc {c1}+2,y
sta {m1}+2
lda {m2}+3
adc {c1}+3,y
sta {m1}+3

View File

@ -0,0 +1,16 @@
lda {m2}
clc
adc ({z3}),y
sta {m1}
iny
lda {m2}+1
adc ({z3}),y
sta {m1}+1
iny
lda {m2}+2
adc ({z3}),y
sta {m1}+2
iny
lda {m2}+3
adc ({z3}),y
sta {m1}+3

View File

@ -0,0 +1,6 @@
lda {m2}
eor #$ff
sta {m1}
lda {m2}+1
eor #$ff
sta {m1}+1

View File

@ -44,6 +44,11 @@ public class TestPrograms {
public TestPrograms() {
}
@Test
public void testAtariXlMd5() throws IOException, URISyntaxException {
compileAndCompare("atarixl-md5.c");
}
@Test
public void testZpReserveCoalesceProblem() throws IOException, URISyntaxException {
compileAndCompare("zp-reserve-coalesce-problem.c");

229
src/test/kc/atarixl-md5.c Normal file
View File

@ -0,0 +1,229 @@
// 8 bit converted md5 calculator
#pragma target(atarixl)
#pragma encoding(atascii)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <printf.h>
#include <conio.h>
#include <6502.h>
#define ROUNDS 1
void main() {
uint32_t dr;
char *message = "The quick brown fox jumps over the lazy dog";
printf("Calculating MD5\n");
md5(message, strlen(message));
for(;;) ;
}
#define LEFTROTATE(x, c) (((x) << (c)) | ((x) >> (32 - (c))))
uint32_t h0, h1, h2, h3;
uint16_t mul3(uint8_t a) {
return ((uint16_t) a) * 3;
}
uint16_t mul5(uint8_t a) {
return ((uint16_t) a) * 5;
}
uint16_t mul7(uint8_t a) {
return ((uint16_t) a) * 7;
}
uint8_t mod16(uint16_t a) {
uint16_t t = a % 16;
return (uint8_t) (t & 0xff);
}
void print32(uint32_t l) {
uint8_t *dp;
dp = (uint8_t *) &l;
printf("%02x%02x%02x%02x", dp[0], dp[1], dp[2], dp[3]);
}
void move8Left(uint8_t *p) {
uint8_t t = *p;
*(p + 0) = *(p + 1);
*(p + 1) = *(p + 2);
*(p + 2) = *(p + 3);
*(p + 3) = t;
}
void move16Left(uint8_t *p) {
uint8_t s = *p;
uint8_t t = *(p + 1);
*(p + 0) = *(p + 2);
*(p + 1) = *(p + 3);
*(p + 2) = s;
*(p + 3) = t;
}
void rotateLeft(__ma uint8_t *p, __ma uint8_t r) {
kickasm(
clobbers "AX",
uses p,
uses r
) {{
ldx #r
!s:
asl p+3
rol p+2
rol p+1
rol p
bcc !+
lda p+3
adc #0
!:
dex
bne !s-
}}
}
uint32_t leftRotate(uint32_t a, uint8_t r) {
uint8_t *p;
p = (uint8_t *) &a;
if (r < 8) {
rotateLeft(p, r);
} else if (r == 8) {
move8Left(p);
} else if (r < 16) {
move8Left(p);
rotateLeft(p, r - 8);
} else if (r == 16) {
move16Left(p);
} else {
// in md5, everything is under 24 bits
move16Left(p);
rotateLeft(p, r - 16);
}
uint32_t *result = (uint32_t *)p;
return *result;
}
void md5(uint8_t *initial_msg, size_t initial_len) {
uint8_t *msg;
uint8_t r[] = {7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21};
uint32_t k[] = {
0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be,
0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821,
0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa,
0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8,
0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed,
0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a,
0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c,
0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70,
0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05,
0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665,
0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039,
0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1,
0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1,
0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391};
h0 = 0x67452301;
h1 = 0xefcdab89;
h2 = 0x98badcfe;
h3 = 0x10325476;
uint16_t new_len = ((((initial_len + 8) / 64) + 1) * 64) - 8;
msg = calloc(new_len + 64, 1);
memcpy(msg, initial_msg, initial_len);
msg[initial_len] = 128;
uint32_t bits_len = initial_len * 8;
memcpy(msg + new_len, &bits_len, 4);
for(int offset=0; offset<new_len; offset += (512/8)) {
uint32_t *w = (uint32_t *) (msg + offset);
uint32_t a = h0;
uint32_t b = h1;
uint32_t c = h2;
uint32_t d = h3;
for(uint8_t i = 0; i<64; i++) {
#ifdef ROUNDS
uint8_t *p;
printf("%2x: ", i);
print32(a); cputc(' ');
print32(b); cputc(' ');
print32(c); cputc(' ');
print32(d); cputln();
BREAK();
#endif
uint32_t f;
uint8_t g;
switch ((i >> 4) & 3)
{
case 0: // (i < 16)
f = (b & c) | ((~b) & d);
g = i;
break;
case 1: // (i < 32)
f = (d & b) | ((~d) & c);
g = mod16(mul5(i) + 1);
break;
case 2: // (i < 48)
f = b ^ c ^ d;
g = mod16(mul3(i) + 5);
break;
case 3: // other
f = c ^ (b | (~d));
g = mod16(mul7(i));
break;
}
#ifdef ROUNDS
printf("f: "); print32(f); cputc(' ');
printf("g:%2x w[g]:", g); print32(w[g]); cputln();
// printf("f=%x g=%d w[g]=%x\n", f, g, w[g]);
BREAK();
#endif
uint32_t temp = d;
d = c;
c = b;
cputs("L ");
print32(a); cputc(' ');
print32(f); cputc(' ');
print32(k[i]); cputc(' ');
print32(w[g]); cputc(' ');
printf("r: %2x\n", r[i]);
BREAK();
// printf("rotateLeft(%2x + %2x + %2x + %2x, %2x)\n", a, f, k[i], w[g], r[i]);
//b = b + LEFTROTATE((a + f + k[i] + w[g]), r[i]);
uint32_t lr = leftRotate((a + f + k[i] + w[g]), r[i]);
b += lr;
a = temp;
}
h0 += a;
h1 += b;
h2 += c;
h3 += d;
}
}

1952
src/test/ref/atarixl-md5.asm Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,866 @@
void main()
main: scope:[main] from
[0] phi()
[1] call cputs
to:main::@2
main::@2: scope:[main] from main
[2] phi()
[3] call strlen
[4] strlen::return#3 = strlen::len#2
to:main::@3
main::@3: scope:[main] from main::@2
[5] md5::initial_len#0 = strlen::return#3
[6] call md5
to:main::@1
main::@1: scope:[main] from main::@1 main::@3
[7] phi()
to:main::@1
void cputs(to_nomodify byte* cputs::s)
cputs: scope:[cputs] from main md5::@10 md5::@16 md5::@20 md5::@37 md5::@39 md5::@50 md5::@52 printf_number_buffer::@4
[8] cputs::s#11 = phi( main/main::s, md5::@10/md5::s1, md5::@16/md5::s4, md5::@20/md5::s, md5::@37/md5::s2, md5::@39/md5::s3, md5::@50/md5::s5, md5::@52/md5::s6, printf_number_buffer::@4/printf_number_buffer::buffer_digits#0 )
to:cputs::@1
cputs::@1: scope:[cputs] from cputs cputs::@2
[9] cputs::s#10 = phi( cputs/cputs::s#11, cputs::@2/cputs::s#0 )
[10] cputs::c#1 = *cputs::s#10
[11] cputs::s#0 = ++ cputs::s#10
[12] if(0!=cputs::c#1) goto cputs::@2
to:cputs::@return
cputs::@return: scope:[cputs] from cputs::@1
[13] return
to:@return
cputs::@2: scope:[cputs] from cputs::@1
[14] cputc::c = cputs::c#1
[15] call cputc
to:cputs::@1
word strlen(byte* strlen::str)
strlen: scope:[strlen] from main::@2 printf_number_buffer::@5
[16] strlen::str#5 = phi( main::@2/main::message, printf_number_buffer::@5/printf_number_buffer::buffer_digits#0 )
to:strlen::@1
strlen::@1: scope:[strlen] from strlen strlen::@2
[17] strlen::len#2 = phi( strlen/0, strlen::@2/strlen::len#1 )
[17] strlen::str#3 = phi( strlen/strlen::str#5, strlen::@2/strlen::str#0 )
[18] if(0!=*strlen::str#3) goto strlen::@2
to:strlen::@return
strlen::@return: scope:[strlen] from strlen::@1
[19] return
to:@return
strlen::@2: scope:[strlen] from strlen::@1
[20] strlen::len#1 = ++ strlen::len#2
[21] strlen::str#0 = ++ strlen::str#3
to:strlen::@1
void md5(byte* md5::initial_msg , word md5::initial_len)
md5: scope:[md5] from main::@3
[22] md5::$0 = md5::initial_len#0 + 8
[23] md5::$1 = md5::$0 >> 6
[24] md5::$2 = md5::$1 + 1
[25] md5::$3 = md5::$2 << 6
[26] md5::new_len#0 = md5::$3 - 8
[27] calloc::nitems#0 = md5::new_len#0 + $40
[28] call calloc
[29] calloc::return#2 = calloc::return#0
to:md5::@18
md5::@18: scope:[md5] from md5
[30] md5::msg#1 = calloc::return#2
[31] memcpy::num#1 = md5::initial_len#0
[32] memcpy::destination#7 = (void*)(byte*)md5::msg#1
[33] call memcpy
to:md5::@19
md5::@19: scope:[md5] from md5::@18
[34] md5::$74 = (byte*)md5::msg#1 + md5::initial_len#0
[35] *md5::$74 = $80
[36] md5::$8 = md5::initial_len#0 << 3
[37] md5::bits_len = md5::$8
[38] memcpy::destination#2 = (byte*)md5::msg#1 + md5::new_len#0
[39] memcpy::destination#8 = (void*)memcpy::destination#2
[40] call memcpy
to:md5::@1
md5::@1: scope:[md5] from md5::@19 md5::@5
[41] h3#10 = phi( md5::@19/$10325476, md5::@5/h3#3 )
[41] h2#10 = phi( md5::@19/$98badcfe, md5::@5/h2#3 )
[41] h1#10 = phi( md5::@19/$efcdab89, md5::@5/h1#3 )
[41] h0#10 = phi( md5::@19/$67452301, md5::@5/h0#3 )
[41] md5::offset#2 = phi( md5::@19/0, md5::@5/md5::offset#1 )
[42] if(md5::offset#2<md5::new_len#0) goto md5::@2
to:md5::@return
md5::@return: scope:[md5] from md5::@1
[43] return
to:@return
md5::@2: scope:[md5] from md5::@1
[44] md5::w#0 = (byte*)md5::msg#1 + md5::offset#2
[45] md5::a#0 = h0#10
[46] md5::b#0 = h1#10
[47] md5::c#0 = h2#10
[48] md5::d#0 = h3#10
to:md5::@3
md5::@3: scope:[md5] from md5::@11 md5::@2
[49] md5::temp#0 = phi( md5::@11/md5::temp#16, md5::@2/md5::d#0 )
[49] md5::c#10 = phi( md5::@11/md5::c#57, md5::@2/md5::c#0 )
[49] md5::b#10 = phi( md5::@11/md5::b#57, md5::@2/md5::b#0 )
[49] md5::a#11 = phi( md5::@11/md5::a#56, md5::@2/md5::a#0 )
[49] md5::i#10 = phi( md5::@11/md5::i#1, md5::@2/0 )
[50] if(md5::i#10<$40) goto md5::@4
to:md5::@5
md5::@5: scope:[md5] from md5::@3
[51] h0#3 = h0#10 + md5::a#11
[52] h1#3 = h1#10 + md5::b#10
[53] h2#3 = h2#10 + md5::c#10
[54] h3#3 = h3#10 + md5::temp#0
[55] md5::offset#1 = md5::offset#2 + (signed byte)$200/8
to:md5::@1
md5::@4: scope:[md5] from md5::@3
[56] printf_uchar::uvalue#4 = md5::i#10
[57] call printf_uchar
to:md5::@20
md5::@20: scope:[md5] from md5::@4
[58] phi()
[59] call cputs
to:md5::@21
md5::@21: scope:[md5] from md5::@20
[60] print32::l = md5::a#11
[61] call print32
to:md5::@22
md5::@22: scope:[md5] from md5::@21
[62] cputc::c = ' 'at
[63] call cputc
to:md5::@23
md5::@23: scope:[md5] from md5::@22
[64] print32::l = md5::b#10
[65] call print32
to:md5::@24
md5::@24: scope:[md5] from md5::@23
[66] cputc::c = ' 'at
[67] call cputc
to:md5::@25
md5::@25: scope:[md5] from md5::@24
[68] print32::l = md5::c#10
[69] call print32
to:md5::@26
md5::@26: scope:[md5] from md5::@25
[70] cputc::c = ' 'at
[71] call cputc
to:md5::@27
md5::@27: scope:[md5] from md5::@26
[72] print32::l = md5::temp#0
[73] call print32
to:md5::@28
md5::@28: scope:[md5] from md5::@27
[74] phi()
[75] call cputln
to:md5::BREAK1
md5::BREAK1: scope:[md5] from md5::@28
kickasm() {{ .break }}
to:md5::@15
md5::@15: scope:[md5] from md5::BREAK1
[77] md5::$24 = md5::i#10 >> 4
[78] md5::$25 = md5::$24 & 3
[79] if(md5::$25==0) goto md5::@6
to:md5::@12
md5::@12: scope:[md5] from md5::@15
[80] if(md5::$25==1) goto md5::@7
to:md5::@13
md5::@13: scope:[md5] from md5::@12
[81] if(md5::$25==2) goto md5::@8
to:md5::@14
md5::@14: scope:[md5] from md5::@13
[82] if(md5::$25==3) goto md5::@9
to:md5::@10
md5::@10: scope:[md5] from md5::@14 md5::@30 md5::@32 md5::@34 md5::@6
[83] md5::g#10 = phi( md5::@14/0, md5::@30/md5::g#2, md5::@32/md5::g#3, md5::@34/md5::g#4, md5::@6/md5::g#36 )
[83] md5::f#10 = phi( md5::@14/0, md5::@30/md5::f#12, md5::@32/md5::f#13, md5::@34/md5::f#14, md5::@6/md5::f#1 )
[84] call cputs
to:md5::@35
md5::@35: scope:[md5] from md5::@10
[85] print32::l = md5::f#10
[86] call print32
to:md5::@36
md5::@36: scope:[md5] from md5::@35
[87] cputc::c = ' 'at
[88] call cputc
to:md5::@37
md5::@37: scope:[md5] from md5::@36
[89] phi()
[90] call cputs
to:md5::@38
md5::@38: scope:[md5] from md5::@37
[91] printf_uchar::uvalue#5 = md5::g#10
[92] call printf_uchar
to:md5::@39
md5::@39: scope:[md5] from md5::@38
[93] phi()
[94] call cputs
to:md5::@40
md5::@40: scope:[md5] from md5::@39
[95] md5::$71 = md5::g#10 << 2
[96] print32::l = ((dword*)md5::w#0)[md5::$71]
[97] call print32
to:md5::@41
md5::@41: scope:[md5] from md5::@40
[98] phi()
[99] call cputln
to:md5::BREAK2
md5::BREAK2: scope:[md5] from md5::@41
kickasm() {{ .break }}
to:md5::@16
md5::@16: scope:[md5] from md5::BREAK2
[101] phi()
[102] call cputs
to:md5::@42
md5::@42: scope:[md5] from md5::@16
[103] print32::l = md5::a#11
[104] call print32
to:md5::@43
md5::@43: scope:[md5] from md5::@42
[105] cputc::c = ' 'at
[106] call cputc
to:md5::@44
md5::@44: scope:[md5] from md5::@43
[107] print32::l = md5::f#10
[108] call print32
to:md5::@45
md5::@45: scope:[md5] from md5::@44
[109] cputc::c = ' 'at
[110] call cputc
to:md5::@46
md5::@46: scope:[md5] from md5::@45
[111] md5::$72 = md5::i#10 << 2
[112] print32::l = md5::k[md5::$72]
[113] call print32
to:md5::@47
md5::@47: scope:[md5] from md5::@46
[114] cputc::c = ' 'at
[115] call cputc
to:md5::@48
md5::@48: scope:[md5] from md5::@47
[116] print32::l = ((dword*)md5::w#0)[md5::$71]
[117] call print32
to:md5::@49
md5::@49: scope:[md5] from md5::@48
[118] cputc::c = ' 'at
[119] call cputc
to:md5::@50
md5::@50: scope:[md5] from md5::@49
[120] phi()
[121] call cputs
to:md5::@51
md5::@51: scope:[md5] from md5::@50
[122] printf_uchar::uvalue#6 = md5::r[md5::i#10]
[123] call printf_uchar
to:md5::@52
md5::@52: scope:[md5] from md5::@51
[124] phi()
[125] call cputs
to:md5::BREAK3
md5::BREAK3: scope:[md5] from md5::@52
kickasm() {{ .break }}
to:md5::@17
md5::@17: scope:[md5] from md5::BREAK3
[127] md5::$65 = md5::a#11 + md5::f#10
[128] md5::$66 = md5::$65 + md5::k[md5::$72]
[129] md5::$67 = md5::$66 + ((dword*)md5::w#0)[md5::$71]
[130] leftRotate::a = md5::$67
[131] leftRotate::r#0 = md5::r[md5::i#10]
[132] call leftRotate
[133] leftRotate::return#2 = leftRotate::return#0
to:md5::@53
md5::@53: scope:[md5] from md5::@17
[134] md5::lr#0 = leftRotate::return#2
[135] md5::b#1 = md5::b#10 + md5::lr#0
to:md5::@11
md5::@11: scope:[md5] from md5::@53
[136] md5::i#1 = ++ md5::i#10
[137] md5::a#56 = md5::temp#0
[138] md5::b#57 = md5::b#1
[139] md5::c#57 = md5::b#10
[140] md5::temp#16 = md5::c#10
to:md5::@3
md5::@9: scope:[md5] from md5::@14
[141] md5::$42 = ~ md5::temp#0
[142] md5::$43 = md5::b#10 | md5::$42
[143] md5::f#14 = md5::c#10 ^ md5::$43
[144] mul7::a#0 = md5::i#10
[145] call mul7
[146] mul7::return#2 = mul7::return#0
to:md5::@33
md5::@33: scope:[md5] from md5::@9
[147] mod16::a#2 = mul7::return#2
[148] call mod16
[149] mod16::return#4 = mod16::return#0
to:md5::@34
md5::@34: scope:[md5] from md5::@33
[150] md5::g#4 = mod16::return#4
to:md5::@10
md5::@8: scope:[md5] from md5::@13
[151] md5::$37 = md5::b#10 ^ md5::c#10
[152] md5::f#13 = md5::$37 ^ md5::temp#0
[153] mul3::a#0 = md5::i#10
[154] call mul3
[155] mul3::return#2 = mul3::return#0
to:md5::@31
md5::@31: scope:[md5] from md5::@8
[156] md5::$39 = mul3::return#2
[157] mod16::a#1 = md5::$39 + 5
[158] call mod16
[159] mod16::return#3 = mod16::return#0
to:md5::@32
md5::@32: scope:[md5] from md5::@31
[160] md5::g#3 = mod16::return#3
to:md5::@10
md5::@7: scope:[md5] from md5::@12
[161] md5::$30 = md5::temp#0 & md5::b#10
[162] md5::$31 = ~ md5::temp#0
[163] md5::$32 = md5::$31 & md5::c#10
[164] md5::f#12 = md5::$30 | md5::$32
[165] mul5::a#0 = md5::i#10
[166] call mul5
[167] mul5::return#2 = mul5::return#0
to:md5::@29
md5::@29: scope:[md5] from md5::@7
[168] md5::$34 = mul5::return#2
[169] mod16::a#0 = md5::$34 + 1
[170] call mod16
[171] mod16::return#2 = mod16::return#0
to:md5::@30
md5::@30: scope:[md5] from md5::@29
[172] md5::g#2 = mod16::return#2
to:md5::@10
md5::@6: scope:[md5] from md5::@15
[173] md5::$26 = md5::b#10 & md5::c#10
[174] md5::$27 = ~ md5::b#10
[175] md5::$28 = md5::$27 & md5::temp#0
[176] md5::f#1 = md5::$26 | md5::$28
[177] md5::g#36 = md5::i#10
to:md5::@10
void cputc(volatile byte cputc::c)
cputc: scope:[cputc] from cputs::@2 md5::@22 md5::@24 md5::@26 md5::@36 md5::@43 md5::@45 md5::@47 md5::@49 printf_number_buffer::@8 printf_padding::@2
[178] if(cputc::c==' 'at) goto cputc::@1
to:cputc::@3
cputc::@3: scope:[cputc] from cputc
[179] if(cputc::c=='
'at) goto cputc::@2
to:cputc::@8
cputc::@8: scope:[cputc] from cputc::@3
[180] if(cputc::c==$9b) goto cputc::@2
to:cputc::convertToScreenCode1
cputc::convertToScreenCode1: scope:[cputc] from cputc::@8
[181] cputc::convertToScreenCode1_return#0 = rawmap[*cputc::convertToScreenCode1_v#0]
to:cputc::@6
cputc::@6: scope:[cputc] from cputc::convertToScreenCode1
[182] phi()
[183] call putchar
to:cputc::@7
cputc::@7: scope:[cputc] from cputc::@6
[184] *COLCRS = ++ *COLCRS
[185] if(*COLCRS==$28) goto cputc::@5
to:cputc::@4
cputc::@4: scope:[cputc] from cputc::@7
[186] phi()
[187] call setcursor
to:cputc::@return
cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@4 cputc::@5
[188] return
to:@return
cputc::@5: scope:[cputc] from cputc::@7
[189] *COLCRS = 0
[190] call newline
to:cputc::@return
cputc::@2: scope:[cputc] from cputc::@3 cputc::@8
[191] *COLCRS = 0
[192] call newline
to:cputc::@return
cputc::@1: scope:[cputc] from cputc
[193] *COLCRS = 0
[194] call setcursor
to:cputc::@return
void* calloc(word calloc::nitems , word calloc::size)
calloc: scope:[calloc] from md5
[195] malloc::size#0 = calloc::nitems#0
[196] call malloc
to:calloc::@1
calloc::@1: scope:[calloc] from calloc
[197] calloc::return#0 = (void*)malloc::mem#0
[198] memset::num#0 = calloc::nitems#0
[199] memset::str#0 = calloc::return#0
[200] call memset
to:calloc::@return
calloc::@return: scope:[calloc] from calloc::@1
[201] return
to:@return
void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num)
memcpy: scope:[memcpy] from md5::@18 md5::@19 newline::@2
[202] memcpy::num#3 = phi( md5::@18/memcpy::num#1, md5::@19/4, newline::@2/(word)$28*$17 )
[202] memcpy::destination#3 = phi( md5::@18/memcpy::destination#7, md5::@19/memcpy::destination#8, newline::@2/memcpy::destination#0 )
[202] memcpy::source#3 = phi( md5::@18/(void*)main::message, md5::@19/(void*)&md5::bits_len, newline::@2/memcpy::source#4 )
[203] memcpy::src_end#0 = (byte*)memcpy::source#3 + memcpy::num#3
[204] memcpy::src#4 = (byte*)memcpy::source#3
[205] memcpy::dst#4 = (byte*)memcpy::destination#3
to:memcpy::@1
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
[206] memcpy::dst#2 = phi( memcpy/memcpy::dst#4, memcpy::@2/memcpy::dst#1 )
[206] memcpy::src#2 = phi( memcpy/memcpy::src#4, memcpy::@2/memcpy::src#1 )
[207] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2
to:memcpy::@return
memcpy::@return: scope:[memcpy] from memcpy::@1
[208] return
to:@return
memcpy::@2: scope:[memcpy] from memcpy::@1
[209] *memcpy::dst#2 = *memcpy::src#2
[210] memcpy::dst#1 = ++ memcpy::dst#2
[211] memcpy::src#1 = ++ 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 md5::@38 md5::@4 md5::@51 print32 print32::@1 print32::@2 print32::@3
[212] printf_uchar::format_zero_padding#10 = phi( md5::@4/0, md5::@38/0, md5::@51/0, print32/1, print32::@1/1, print32::@2/1, print32::@3/1 )
[212] printf_uchar::uvalue#10 = phi( md5::@4/printf_uchar::uvalue#4, md5::@38/printf_uchar::uvalue#5, md5::@51/printf_uchar::uvalue#6, print32/printf_uchar::uvalue#0, print32::@1/printf_uchar::uvalue#1, print32::@2/printf_uchar::uvalue#2, print32::@3/printf_uchar::uvalue#3 )
to:printf_uchar::@1
printf_uchar::@1: scope:[printf_uchar] from printf_uchar
[213] *((byte*)&printf_buffer) = 0
[214] uctoa::value#1 = printf_uchar::uvalue#10
[215] call uctoa
to:printf_uchar::@2
printf_uchar::@2: scope:[printf_uchar] from printf_uchar::@1
[216] printf_number_buffer::buffer_sign#0 = *((byte*)&printf_buffer)
[217] printf_number_buffer::format_zero_padding#0 = printf_uchar::format_zero_padding#10
[218] call printf_number_buffer
to:printf_uchar::@return
printf_uchar::@return: scope:[printf_uchar] from printf_uchar::@2
[219] return
to:@return
void print32(volatile dword print32::l)
print32: scope:[print32] from md5::@21 md5::@23 md5::@25 md5::@27 md5::@35 md5::@40 md5::@42 md5::@44 md5::@46 md5::@48
[220] printf_uchar::uvalue#0 = *print32::dp#1
[221] call printf_uchar
to:print32::@1
print32::@1: scope:[print32] from print32
[222] printf_uchar::uvalue#1 = *(print32::dp#1+1)
[223] call printf_uchar
to:print32::@2
print32::@2: scope:[print32] from print32::@1
[224] printf_uchar::uvalue#2 = *(print32::dp#1+2)
[225] call printf_uchar
to:print32::@3
print32::@3: scope:[print32] from print32::@2
[226] printf_uchar::uvalue#3 = *(print32::dp#1+3)
[227] call printf_uchar
to:print32::@return
print32::@return: scope:[print32] from print32::@3
[228] return
to:@return
void cputln()
cputln: scope:[cputln] from md5::@28 md5::@41
[229] *COLCRS = 0
[230] call newline
to:cputln::@return
cputln::@return: scope:[cputln] from cputln
[231] return
to:@return
dword leftRotate(volatile dword leftRotate::a , byte leftRotate::r)
leftRotate: scope:[leftRotate] from md5::@17
[232] if(leftRotate::r#0<8) goto leftRotate::@1
to:leftRotate::@6
leftRotate::@6: scope:[leftRotate] from leftRotate
[233] if(leftRotate::r#0==8) goto leftRotate::@2
to:leftRotate::@7
leftRotate::@7: scope:[leftRotate] from leftRotate::@6
[234] if(leftRotate::r#0<$10) goto leftRotate::@3
to:leftRotate::@8
leftRotate::@8: scope:[leftRotate] from leftRotate::@7
[235] if(leftRotate::r#0==$10) goto leftRotate::@4
to:leftRotate::@9
leftRotate::@9: scope:[leftRotate] from leftRotate::@8
[236] phi()
[237] call move16Left
to:leftRotate::@11
leftRotate::@11: scope:[leftRotate] from leftRotate::@9
[238] leftRotate::$5 = leftRotate::r#0 - $10
[239] rotateLeft::p = leftRotate::p#1
[240] rotateLeft::r = leftRotate::$5
[241] call rotateLeft
to:leftRotate::@5
leftRotate::@5: scope:[leftRotate] from leftRotate::@1 leftRotate::@10 leftRotate::@11 leftRotate::@2 leftRotate::@4
[242] leftRotate::return#0 = *leftRotate::result#0
to:leftRotate::@return
leftRotate::@return: scope:[leftRotate] from leftRotate::@5
[243] return
to:@return
leftRotate::@4: scope:[leftRotate] from leftRotate::@8
[244] phi()
[245] call move16Left
to:leftRotate::@5
leftRotate::@3: scope:[leftRotate] from leftRotate::@7
[246] phi()
[247] call move8Left
to:leftRotate::@10
leftRotate::@10: scope:[leftRotate] from leftRotate::@3
[248] leftRotate::$9 = leftRotate::r#0 - 8
[249] rotateLeft::p = leftRotate::p#1
[250] rotateLeft::r = leftRotate::$9
[251] call rotateLeft
to:leftRotate::@5
leftRotate::@2: scope:[leftRotate] from leftRotate::@6
[252] phi()
[253] call move8Left
to:leftRotate::@5
leftRotate::@1: scope:[leftRotate] from leftRotate
[254] rotateLeft::p = leftRotate::p#1
[255] rotateLeft::r = leftRotate::r#0
[256] call rotateLeft
to:leftRotate::@5
word mul7(byte mul7::a)
mul7: scope:[mul7] from md5::@9
[257] mul7::$1 = (word)mul7::a#0
[258] mul7::$2 = mul7::$1 << 1
[259] mul7::$3 = mul7::$2 + mul7::$1
[260] mul7::$4 = mul7::$3 << 1
[261] mul7::return#0 = mul7::$4 + mul7::$1
to:mul7::@return
mul7::@return: scope:[mul7] from mul7
[262] return
to:@return
byte mod16(word mod16::a)
mod16: scope:[mod16] from md5::@29 md5::@31 md5::@33
[263] mod16::a#3 = phi( md5::@29/mod16::a#0, md5::@31/mod16::a#1, md5::@33/mod16::a#2 )
[264] mod16::t#0 = mod16::a#3 & $10-1
[265] mod16::return#0 = mod16::t#0 & $ff
to:mod16::@return
mod16::@return: scope:[mod16] from mod16
[266] return
to:@return
word mul3(byte mul3::a)
mul3: scope:[mul3] from md5::@8
[267] mul3::$1 = (word)mul3::a#0
[268] mul3::$2 = mul3::$1 << 1
[269] mul3::return#0 = mul3::$2 + mul3::$1
to:mul3::@return
mul3::@return: scope:[mul3] from mul3
[270] return
to:@return
word mul5(byte mul5::a)
mul5: scope:[mul5] from md5::@7
[271] mul5::$1 = (word)mul5::a#0
[272] mul5::$2 = mul5::$1 << 2
[273] mul5::return#0 = mul5::$2 + mul5::$1
to:mul5::@return
mul5::@return: scope:[mul5] from mul5
[274] return
to:@return
void putchar(byte putchar::code)
putchar: scope:[putchar] from cputc::@6
[275] *(*OLDADR) = *OLDCHR
[276] call cursorLocation
[277] cursorLocation::return#0 = cursorLocation::return#1
to:putchar::@1
putchar::@1: scope:[putchar] from putchar
[278] putchar::loc#0 = cursorLocation::return#0
[279] putchar::newChar#0 = cputc::convertToScreenCode1_return#0
[280] *putchar::loc#0 = putchar::newChar#0
[281] *OLDCHR = putchar::newChar#0
[282] call setcursor
to:putchar::@return
putchar::@return: scope:[putchar] from putchar::@1
[283] return
to:@return
void setcursor()
setcursor: scope:[setcursor] from cputc::@1 cputc::@4 newline::@1 putchar::@1
[284] *(*OLDADR) = *OLDCHR
[285] call cursorLocation
[286] cursorLocation::return#3 = cursorLocation::return#1
to:setcursor::@3
setcursor::@3: scope:[setcursor] from setcursor
[287] setcursor::loc#0 = cursorLocation::return#3
[288] setcursor::c#0 = *setcursor::loc#0
[289] *OLDCHR = setcursor::c#0
[290] *OLDADR = setcursor::loc#0
to:setcursor::@2
setcursor::@2: scope:[setcursor] from setcursor::@3
[291] *CRSINH = 0
[292] setcursor::c#1 = setcursor::c#0 ^ $80
to:setcursor::@1
setcursor::@1: scope:[setcursor] from setcursor::@2
[293] *(*OLDADR) = setcursor::c#1
to:setcursor::@return
setcursor::@return: scope:[setcursor] from setcursor::@1
[294] return
to:@return
void newline()
newline: scope:[newline] from cputc::@2 cputc::@5 cputln
[295] *ROWCRS = ++ *ROWCRS
[296] if(*ROWCRS!=$18) goto newline::@1
to:newline::@3
newline::@3: scope:[newline] from newline
[297] *(*OLDADR) = *(*OLDADR) ^ $80
to:newline::@2
newline::@2: scope:[newline] from newline::@3
[298] newline::start#0 = *SAVMSC
[299] memcpy::source#0 = newline::start#0 + $28
[300] memcpy::destination#0 = (void*)newline::start#0
[301] memcpy::source#4 = (void*)memcpy::source#0
[302] call memcpy
to:newline::@4
newline::@4: scope:[newline] from newline::@2
[303] memset::str#1 = newline::start#0 + (word)$28*$17
[304] memset::str#8 = (void*)memset::str#1
[305] call memset
to:newline::@5
newline::@5: scope:[newline] from newline::@4
[306] *ROWCRS = (byte)$18-1
to:newline::@1
newline::@1: scope:[newline] from newline newline::@5
[307] phi()
[308] call setcursor
to:newline::@return
newline::@return: scope:[newline] from newline::@1
[309] return
to:@return
void* malloc(word malloc::size)
malloc: scope:[malloc] from calloc
[310] malloc::mem#0 = HEAP_TOP - malloc::size#0
to:malloc::@return
malloc::@return: scope:[malloc] from malloc
[311] return
to:@return
void* memset(void* memset::str , byte memset::c , word memset::num)
memset: scope:[memset] from calloc::@1 newline::@4
[312] memset::str#3 = phi( calloc::@1/memset::str#0, newline::@4/memset::str#8 )
[312] memset::num#2 = phi( calloc::@1/memset::num#0, newline::@4/$28 )
[313] if(memset::num#2<=0) goto memset::@return
to:memset::@1
memset::@1: scope:[memset] from memset
[314] memset::end#0 = (byte*)memset::str#3 + memset::num#2
[315] memset::dst#4 = (byte*)memset::str#3
to:memset::@2
memset::@2: scope:[memset] from memset::@1 memset::@3
[316] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 )
[317] if(memset::dst#2!=memset::end#0) goto memset::@3
to:memset::@return
memset::@return: scope:[memset] from memset memset::@2
[318] return
to:@return
memset::@3: scope:[memset] from memset::@2
[319] *memset::dst#2 = 0
[320] memset::dst#1 = ++ memset::dst#2
to:memset::@2
void uctoa(byte uctoa::value , byte* uctoa::buffer , byte uctoa::radix)
uctoa: scope:[uctoa] from printf_uchar::@1
[321] phi()
to:uctoa::@1
uctoa::@1: scope:[uctoa] from uctoa uctoa::@4
[322] uctoa::buffer#11 = phi( uctoa::@4/uctoa::buffer#14, uctoa/(byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
[322] uctoa::started#2 = phi( uctoa::@4/uctoa::started#4, uctoa/0 )
[322] uctoa::value#2 = phi( uctoa::@4/uctoa::value#6, uctoa/uctoa::value#1 )
[322] uctoa::digit#2 = phi( uctoa::@4/uctoa::digit#1, uctoa/0 )
[323] if(uctoa::digit#2<2-1) goto uctoa::@2
to:uctoa::@3
uctoa::@3: scope:[uctoa] from uctoa::@1
[324] *uctoa::buffer#11 = DIGITS[uctoa::value#2]
[325] uctoa::buffer#3 = ++ uctoa::buffer#11
[326] *uctoa::buffer#3 = 0
to:uctoa::@return
uctoa::@return: scope:[uctoa] from uctoa::@3
[327] return
to:@return
uctoa::@2: scope:[uctoa] from uctoa::@1
[328] uctoa::digit_value#0 = RADIX_HEXADECIMAL_VALUES_CHAR[uctoa::digit#2]
[329] if(0!=uctoa::started#2) goto uctoa::@5
to:uctoa::@7
uctoa::@7: scope:[uctoa] from uctoa::@2
[330] if(uctoa::value#2>=uctoa::digit_value#0) goto uctoa::@5
to:uctoa::@4
uctoa::@4: scope:[uctoa] from uctoa::@6 uctoa::@7
[331] uctoa::buffer#14 = phi( uctoa::@7/uctoa::buffer#11, uctoa::@6/uctoa::buffer#4 )
[331] uctoa::started#4 = phi( uctoa::@7/uctoa::started#2, uctoa::@6/1 )
[331] uctoa::value#6 = phi( uctoa::@7/uctoa::value#2, uctoa::@6/uctoa::value#0 )
[332] uctoa::digit#1 = ++ uctoa::digit#2
to:uctoa::@1
uctoa::@5: scope:[uctoa] from uctoa::@2 uctoa::@7
[333] uctoa_append::buffer#0 = uctoa::buffer#11
[334] uctoa_append::value#0 = uctoa::value#2
[335] uctoa_append::sub#0 = uctoa::digit_value#0
[336] call uctoa_append
[337] uctoa_append::return#0 = uctoa_append::value#2
to:uctoa::@6
uctoa::@6: scope:[uctoa] from uctoa::@5
[338] uctoa::value#0 = uctoa_append::return#0
[339] uctoa::buffer#4 = ++ uctoa::buffer#11
to:uctoa::@4
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
[340] phi()
to:printf_number_buffer::@5
printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer
[341] phi()
[342] call strlen
[343] strlen::return#2 = strlen::len#2
to:printf_number_buffer::@11
printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@5
[344] printf_number_buffer::$19 = strlen::return#2
[345] printf_number_buffer::len#0 = (signed byte)printf_number_buffer::$19
[346] if(0==printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@10
to:printf_number_buffer::@6
printf_number_buffer::@6: scope:[printf_number_buffer] from printf_number_buffer::@11
[347] printf_number_buffer::len#1 = ++ printf_number_buffer::len#0
to:printf_number_buffer::@10
printf_number_buffer::@10: scope:[printf_number_buffer] from printf_number_buffer::@11 printf_number_buffer::@6
[348] printf_number_buffer::len#2 = phi( printf_number_buffer::@11/printf_number_buffer::len#0, printf_number_buffer::@6/printf_number_buffer::len#1 )
[349] printf_number_buffer::padding#1 = (signed byte)printf_number_buffer::format_min_length#0 - printf_number_buffer::len#2
[350] if(printf_number_buffer::padding#1>=0) goto printf_number_buffer::@15
to:printf_number_buffer::@1
printf_number_buffer::@15: scope:[printf_number_buffer] from printf_number_buffer::@10
[351] phi()
to:printf_number_buffer::@1
printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@15
[352] printf_number_buffer::padding#10 = phi( printf_number_buffer::@15/printf_number_buffer::padding#1, printf_number_buffer::@10/0 )
to:printf_number_buffer::@13
printf_number_buffer::@13: scope:[printf_number_buffer] from printf_number_buffer::@1
[353] if(0!=printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@2
to:printf_number_buffer::@12
printf_number_buffer::@12: scope:[printf_number_buffer] from printf_number_buffer::@13
[354] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@7
to:printf_number_buffer::@2
printf_number_buffer::@7: scope:[printf_number_buffer] from printf_number_buffer::@12
[355] printf_padding::length#0 = (byte)printf_number_buffer::padding#10
[356] call printf_padding
to:printf_number_buffer::@2
printf_number_buffer::@2: scope:[printf_number_buffer] from printf_number_buffer::@12 printf_number_buffer::@13 printf_number_buffer::@7
[357] if(0==printf_number_buffer::buffer_sign#0) goto printf_number_buffer::@3
to:printf_number_buffer::@8
printf_number_buffer::@8: scope:[printf_number_buffer] from printf_number_buffer::@2
[358] cputc::c = printf_number_buffer::buffer_sign#0
[359] call cputc
to:printf_number_buffer::@3
printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@8
[360] if(0==printf_number_buffer::format_zero_padding#0) goto printf_number_buffer::@4
to:printf_number_buffer::@14
printf_number_buffer::@14: scope:[printf_number_buffer] from printf_number_buffer::@3
[361] if(0!=printf_number_buffer::padding#10) goto printf_number_buffer::@9
to:printf_number_buffer::@4
printf_number_buffer::@9: scope:[printf_number_buffer] from printf_number_buffer::@14
[362] printf_padding::length#1 = (byte)printf_number_buffer::padding#10
[363] call printf_padding
to:printf_number_buffer::@4
printf_number_buffer::@4: scope:[printf_number_buffer] from printf_number_buffer::@14 printf_number_buffer::@3 printf_number_buffer::@9
[364] phi()
[365] call cputs
to:printf_number_buffer::@return
printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@4
[366] return
to:@return
void move16Left(byte* move16Left::p)
move16Left: scope:[move16Left] from leftRotate::@4 leftRotate::@9
[367] move16Left::s#0 = *leftRotate::p#1
[368] move16Left::t#0 = *(leftRotate::p#1+1)
[369] *leftRotate::p#1 = *(leftRotate::p#1+2)
[370] *(leftRotate::p#1+1) = *(leftRotate::p#1+3)
[371] *(leftRotate::p#1+2) = move16Left::s#0
[372] *(leftRotate::p#1+3) = move16Left::t#0
to:move16Left::@return
move16Left::@return: scope:[move16Left] from move16Left
[373] return
to:@return
void rotateLeft(byte* rotateLeft::p , byte rotateLeft::r)
rotateLeft: scope:[rotateLeft] from leftRotate::@1 leftRotate::@10 leftRotate::@11
kickasm( uses rotateLeft::p uses rotateLeft::r) {{ ldx #r
!s:
asl p+3
rol p+2
rol p+1
rol p
bcc !+
lda p+3
adc #0
!:
dex
bne !s-
}}
to:rotateLeft::@return
rotateLeft::@return: scope:[rotateLeft] from rotateLeft
[375] return
to:@return
void move8Left(byte* move8Left::p)
move8Left: scope:[move8Left] from leftRotate::@2 leftRotate::@3
[376] move8Left::t#0 = *leftRotate::p#1
[377] *leftRotate::p#1 = *(leftRotate::p#1+1)
[378] *(leftRotate::p#1+1) = *(leftRotate::p#1+2)
[379] *(leftRotate::p#1+2) = *(leftRotate::p#1+3)
[380] *(leftRotate::p#1+3) = move8Left::t#0
to:move8Left::@return
move8Left::@return: scope:[move8Left] from move8Left
[381] return
to:@return
byte* cursorLocation()
cursorLocation: scope:[cursorLocation] from putchar setcursor
[382] cursorLocation::$3 = (word)*ROWCRS
[383] cursorLocation::$4 = cursorLocation::$3 << 2
[384] cursorLocation::$5 = cursorLocation::$4 + cursorLocation::$3
[385] cursorLocation::$0 = cursorLocation::$5 << 3
[386] cursorLocation::$1 = *SAVMSC + cursorLocation::$0
[387] cursorLocation::return#1 = cursorLocation::$1 + *COLCRS
to:cursorLocation::@return
cursorLocation::@return: scope:[cursorLocation] from cursorLocation
[388] return
to:@return
byte uctoa_append(byte* uctoa_append::buffer , byte uctoa_append::value , byte uctoa_append::sub)
uctoa_append: scope:[uctoa_append] from uctoa::@5
[389] phi()
to:uctoa_append::@1
uctoa_append::@1: scope:[uctoa_append] from uctoa_append uctoa_append::@2
[390] uctoa_append::digit#2 = phi( uctoa_append/0, uctoa_append::@2/uctoa_append::digit#1 )
[390] uctoa_append::value#2 = phi( uctoa_append/uctoa_append::value#0, uctoa_append::@2/uctoa_append::value#1 )
[391] if(uctoa_append::value#2>=uctoa_append::sub#0) goto uctoa_append::@2
to:uctoa_append::@3
uctoa_append::@3: scope:[uctoa_append] from uctoa_append::@1
[392] *uctoa_append::buffer#0 = DIGITS[uctoa_append::digit#2]
to:uctoa_append::@return
uctoa_append::@return: scope:[uctoa_append] from uctoa_append::@3
[393] return
to:@return
uctoa_append::@2: scope:[uctoa_append] from uctoa_append::@1
[394] uctoa_append::digit#1 = ++ uctoa_append::digit#2
[395] uctoa_append::value#1 = uctoa_append::value#2 - uctoa_append::sub#0
to:uctoa_append::@1
void printf_padding(byte printf_padding::pad , byte printf_padding::length)
printf_padding: scope:[printf_padding] from printf_number_buffer::@7 printf_number_buffer::@9
[396] printf_padding::pad#5 = phi( printf_number_buffer::@9/'0'at, printf_number_buffer::@7/' 'at )
[396] printf_padding::length#4 = phi( printf_number_buffer::@9/printf_padding::length#1, printf_number_buffer::@7/printf_padding::length#0 )
to:printf_padding::@1
printf_padding::@1: scope:[printf_padding] from printf_padding printf_padding::@3
[397] printf_padding::i#2 = phi( printf_padding/0, printf_padding::@3/printf_padding::i#1 )
[398] if(printf_padding::i#2<printf_padding::length#4) goto printf_padding::@2
to:printf_padding::@return
printf_padding::@return: scope:[printf_padding] from printf_padding::@1
[399] return
to:@return
printf_padding::@2: scope:[printf_padding] from printf_padding::@1
[400] cputc::c = printf_padding::pad#5
[401] call cputc
to:printf_padding::@3
printf_padding::@3: scope:[printf_padding] from printf_padding::@2
[402] printf_padding::i#1 = ++ printf_padding::i#2
to:printf_padding::@1

15247
src/test/ref/atarixl-md5.log Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,447 @@
const word* COLCRS = (word*) 85
const nomodify byte* CRSINH = (byte*) 752
const byte* DIGITS[] = "0123456789abcdef"atz
const byte* HEAP_TOP = (byte*) 40960
const byte OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS = 1
const nomodify byte** OLDADR = (byte**) 94
const nomodify byte* OLDCHR = (byte*) 93
const byte RADIX::BINARY = 2
const byte RADIX::DECIMAL = $a
const byte RADIX::HEXADECIMAL = $10
const byte RADIX::OCTAL = 8
const byte* RADIX_HEXADECIMAL_VALUES_CHAR[] = { $10 }
const byte* ROWCRS = (byte*) 84
const nomodify byte** SAVMSC = (byte**) 88
const byte SIZEOF_STRUCT_PRINTF_BUFFER_NUMBER = $c
void* calloc(word calloc::nitems , word calloc::size)
void* calloc::mem
word calloc::nitems
word calloc::nitems#0 nitems zp[2]:90 53.25
void* calloc::return
void* calloc::return#0 return zp[2]:54 35.5
void* calloc::return#2 return zp[2]:54 22.0
word calloc::size
void cputc(volatile byte cputc::c)
volatile byte cputc::c loadstore zp[1]:51 2.3853923693384613E10
byte cputc::convertToScreenCode1_return
byte cputc::convertToScreenCode1_return#0 reg byte x 1.833333333336667E11
byte* cputc::convertToScreenCode1_v
const byte* cputc::convertToScreenCode1_v#0 convertToScreenCode1_v = &cputc::c
void cputln()
void cputs(to_nomodify byte* cputs::s)
byte cputs::c
byte cputs::c#1 reg byte a 1.00000001E8
to_nomodify byte* cputs::s
to_nomodify byte* cputs::s#0 s zp[2]:56 5.00000005E7
to_nomodify byte* cputs::s#10 s zp[2]:56 1.55000002E8
to_nomodify byte* cputs::s#11 s zp[2]:56 1.0000001E7
byte* cursorLocation()
word~ cursorLocation::$0 zp[2]:87 2.00000000000002E14
byte*~ cursorLocation::$1 zp[2]:87 2.00000000000002E14
word~ cursorLocation::$3 zp[2]:87 1.500000000000015E14
word~ cursorLocation::$4 zp[2]:90 2.00000000000002E14
word~ cursorLocation::$5 zp[2]:87 2.00000000000002E14
byte* cursorLocation::return
byte* cursorLocation::return#0 return zp[2]:87 2.000000000002E12
byte* cursorLocation::return#1 return zp[2]:87 2.775000000000075E13
byte* cursorLocation::return#3 return zp[2]:87 2.0000000000002E13
dword h0
dword h0#10 h0 zp[4]:6 2.312977099236641
dword h0#3 h0 zp[4]:6 40.4
dword h1
dword h1#10 h1 zp[4]:10 2.2954545454545454
dword h1#3 h1 zp[4]:10 50.5
dword h2
dword h2#10 h2 zp[4]:14 2.2781954887218046
dword h2#3 h2 zp[4]:14 67.33333333333333
dword h3
dword h3#10 h3 zp[4]:18 2.261194029850746
dword h3#3 h3 zp[4]:18 101.0
byte* heap_head
dword leftRotate(volatile dword leftRotate::a , byte leftRotate::r)
byte~ leftRotate::$5 reg byte x 10001.0
byte~ leftRotate::$9 reg byte x 10001.0
volatile dword leftRotate::a loadstore zp[4]:69 10010.0
byte* leftRotate::p
const byte* leftRotate::p#1 p = (byte*)&leftRotate::a
byte leftRotate::r
byte leftRotate::r#0 r zp[1]:73 7100.800000000001
dword* leftRotate::result
const dword* leftRotate::result#0 result = (dword*)leftRotate::p#1
dword leftRotate::return
dword leftRotate::return#0 return zp[4]:74 3667.333333333333
dword leftRotate::return#2 return zp[4]:74 2002.0
void main()
const byte* main::message = "The quick brown fox jumps over the lazy dog"at
const byte* main::s[$11] = "Calculating MD5
"at
void* malloc(word malloc::size)
byte* malloc::mem
byte* malloc::mem#0 mem zp[2]:54 333.6666666666667
void* malloc::return
word malloc::size
word malloc::size#0 size zp[2]:54 1102.0
void md5(byte* md5::initial_msg , word md5::initial_len)
word~ md5::$0 zp[2]:52 22.0
word~ md5::$1 zp[2]:52 22.0
word~ md5::$2 zp[2]:52 22.0
byte~ md5::$24 reg byte a 2002.0
byte~ md5::$25 reg byte a 1251.25
dword~ md5::$26 zp[4]:39 667.3333333333334
dword~ md5::$27 zp[4]:82 2002.0
dword~ md5::$28 zp[4]:82 2002.0
word~ md5::$3 zp[2]:52 22.0
dword~ md5::$30 zp[4]:39 667.3333333333334
dword~ md5::$31 zp[4]:78 2002.0
dword~ md5::$32 zp[4]:78 2002.0
word~ md5::$34 zp[2]:44 2002.0
dword~ md5::$37 zp[4]:39 2002.0
word~ md5::$39 zp[2]:44 2002.0
dword~ md5::$42 zp[4]:39 2002.0
dword~ md5::$43 zp[4]:39 2002.0
dword~ md5::$65 zp[4]:23 2002.0
dword~ md5::$66 zp[4]:23 2002.0
dword~ md5::$67 zp[4]:23 2002.0
byte~ md5::$71 zp[1]:43 117.76470588235294
byte~ md5::$72 zp[1]:68 176.64705882352942
byte*~ md5::$74 zp[2]:56 22.0
word~ md5::$8 zp[2]:2 22.0
dword md5::a
dword md5::a#0 a zp[4]:23 50.5
dword md5::a#11 a zp[4]:23 38.236363636363635
dword md5::a#56 a zp[4]:23 500.5
dword md5::b
dword md5::b#0 b zp[4]:27 67.33333333333333
dword md5::b#1 b_1 zp[4]:74 667.3333333333334
dword md5::b#10 b zp[4]:27 74.88617886178862
dword md5::b#57 b zp[4]:27 667.3333333333334
volatile dword md5::bits_len loadstore zp[4]:58 110.0
dword md5::c
dword md5::c#0 c zp[4]:31 101.0
dword md5::c#10 c zp[4]:31 57.67199999999998
dword md5::c#57 c zp[4]:31 1001.0
dword md5::d
dword md5::d#0 d zp[4]:35 202.0
dword md5::f
dword md5::f#1 f zp[4]:39 1001.0
dword md5::f#10 f zp[4]:39 159.25
dword md5::f#12 f zp[4]:39 222.44444444444446
dword md5::f#13 f zp[4]:39 222.44444444444446
dword md5::f#14 f zp[4]:39 250.25
byte md5::g
byte md5::g#10 g zp[1]:43 500.50000000000006
byte md5::g#2 g zp[1]:43 2002.0
byte md5::g#3 g zp[1]:43 2002.0
byte md5::g#36 g zp[1]:43 2002.0
byte md5::g#4 g zp[1]:43 2002.0
byte md5::i
byte md5::i#1 i zp[1]:22 400.4
byte md5::i#10 i zp[1]:22 100.94117647058822
word md5::initial_len
word md5::initial_len#0 initial_len zp[2]:2 3.0666666666666664
byte* md5::initial_msg
const dword* md5::k[] = { $d76aa478, $e8c7b756, $242070db, $c1bdceee, $f57c0faf, $4787c62a, $a8304613, $fd469501, $698098d8, $8b44f7af, $ffff5bb1, $895cd7be, $6b901122, $fd987193, $a679438e, $49b40821, $f61e2562, $c040b340, $265e5a51, $e9b6c7aa, $d62f105d, $2441453, $d8a1e681, $e7d3fbc8, $21e1cde6, $c33707d6, $f4d50d87, $455a14ed, $a9e3e905, $fcefa3f8, $676f02d9, $8d2a4c8a, $fffa3942, $8771f681, $6d9d6122, $fde5380c, $a4beea44, $4bdecfa9, $f6bb4b60, $bebfbc70, $289b7ec6, $eaa127fa, $d4ef3085, $4881d05, $d9d4d039, $e6db99e5, $1fa27cf8, $c4ac5665, $f4292244, $432aff97, $ab9423a7, $fc93a039, $655b59c3, $8f0ccc92, $ffeff47d, $85845dd1, $6fa87e4f, $fe2ce6e0, $a3014314, $4e0811a1, $f7537e82, $bd3af235, $2ad7d2bb, $eb86d391 }
dword md5::lr
dword md5::lr#0 lr zp[4]:74 2002.0
byte* md5::msg
void* md5::msg#1 msg zp[2]:54 0.07482993197278912
word md5::new_len
word md5::new_len#0 new_len zp[2]:52 0.8874172185430463
signed word md5::offset
signed word md5::offset#1 offset zp[2]:4 202.0
signed word md5::offset#2 offset zp[2]:4 2.9925925925925925
const byte* md5::r[] = { 7, $c, $11, $16, 7, $c, $11, $16, 7, $c, $11, $16, 7, $c, $11, $16, 5, 9, $e, $14, 5, 9, $e, $14, 5, 9, $e, $14, 5, 9, $e, $14, 4, $b, $10, $17, 4, $b, $10, $17, 4, $b, $10, $17, 4, $b, $10, $17, 6, $a, $f, $15, 6, $a, $f, $15, 6, $a, $f, $15, 6, $a, $f, $15 }
const byte* md5::s[3] = ": "at
const byte* md5::s1[4] = "f: "at
const byte* md5::s2[3] = "g:"at
const byte* md5::s3[7] = " w[g]:"at
const byte* md5::s4[3] = "L "at
const byte* md5::s5[4] = "r: "at
const byte* md5::s6[2] = "
"at
dword md5::temp
dword md5::temp#0 temp zp[4]:35 66.7479674796748
dword md5::temp#16 temp zp[4]:35 2002.0
dword* md5::w
byte* md5::w#0 w zp[2]:62 0.7829457364341085
void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num)
void* memcpy::destination
void* memcpy::destination#0 destination zp[2]:90 1.000000000001E12
byte* memcpy::destination#2 destination zp[2]:90 11.0
void* memcpy::destination#3 destination zp[2]:90 3.33333333341E11
void* memcpy::destination#7 destination zp[2]:90 22.0
void* memcpy::destination#8 destination zp[2]:90 22.0
byte* memcpy::dst
byte* memcpy::dst#1 dst zp[2]:90 1.0E16
byte* memcpy::dst#2 dst zp[2]:90 1.0003333333333334E16
byte* memcpy::dst#4 dst zp[2]:90 2.0000000000002E13
word memcpy::num
word memcpy::num#1 num zp[2]:2 11.0
word memcpy::num#3 num zp[2]:2 1.0000000000012E13
void* memcpy::return
void* memcpy::source
byte* memcpy::source#0 source zp[2]:44 5.000000000005E11
void* memcpy::source#3 source zp[2]:44 5.000000000005E11
void* memcpy::source#4 source zp[2]:44 2.000000000002E12
byte* memcpy::src
byte* memcpy::src#1 src zp[2]:44 2.0E16
byte* memcpy::src#2 src zp[2]:44 1.00025E16
byte* memcpy::src#4 src zp[2]:44 1.0000000000001E13
byte* memcpy::src_end
byte* memcpy::src_end#0 src_end zp[2]:87 1.25125E15
void* memset(void* memset::str , byte memset::c , word memset::num)
byte memset::c
byte* memset::dst
byte* memset::dst#1 dst zp[2]:46 2.0E16
byte* memset::dst#2 dst zp[2]:46 1.3336666666666668E16
byte* memset::dst#4 dst zp[2]:46 2.0000000000002E13
byte* memset::end
byte* memset::end#0 end zp[2]:90 1.6683333333333335E15
word memset::num
word memset::num#0 num zp[2]:90 101.0
word memset::num#2 num zp[2]:90 1.00000000000515E13
void* memset::return
void* memset::str
void* memset::str#0 str zp[2]:46 202.0
byte* memset::str#1 str zp[2]:46 1.000000000001E12
void* memset::str#3 str zp[2]:46 3.333333333673334E11
void* memset::str#8 str zp[2]:46 2.000000000002E12
byte mod16(word mod16::a)
word mod16::a
word mod16::a#0 a zp[2]:44 2002.0
word mod16::a#1 a zp[2]:44 2002.0
word mod16::a#2 a zp[2]:44 2002.0
word mod16::a#3 a zp[2]:44 13004.0
byte mod16::return
byte mod16::return#0 reg byte a 2600.8
byte mod16::return#2 reg byte a 2002.0
byte mod16::return#3 reg byte a 2002.0
byte mod16::return#4 reg byte a 2002.0
word mod16::t
word mod16::t#0 t zp[2]:44 20002.0
void move16Left(byte* move16Left::p)
byte* move16Left::p
byte move16Left::s
byte move16Left::s#0 reg byte y 50000.5
byte move16Left::t
byte move16Left::t#0 reg byte x 50000.5
void move8Left(byte* move8Left::p)
byte* move8Left::p
byte move8Left::t
byte move8Left::t#0 reg byte x 50000.5
word mul3(byte mul3::a)
word~ mul3::$1 zp[2]:44 15001.5
word~ mul3::$2 zp[2]:90 20002.0
byte mul3::a
byte mul3::a#0 reg byte a 1001.0
word mul3::return
word mul3::return#0 return zp[2]:44 3667.333333333333
word mul3::return#2 return zp[2]:44 2002.0
word mul5(byte mul5::a)
word~ mul5::$1 zp[2]:44 15001.5
word~ mul5::$2 zp[2]:87 20002.0
byte mul5::a
byte mul5::a#0 reg byte a 1001.0
word mul5::return
word mul5::return#0 return zp[2]:44 3667.333333333333
word mul5::return#2 return zp[2]:44 2002.0
word mul7(byte mul7::a)
word~ mul7::$1 zp[2]:44 10001.0
word~ mul7::$2 zp[2]:90 20002.0
word~ mul7::$3 zp[2]:90 20002.0
word~ mul7::$4 zp[2]:90 20002.0
byte mul7::a
byte mul7::a#0 reg byte a 1001.0
word mul7::return
word mul7::return#0 return zp[2]:44 3667.333333333333
word mul7::return#2 return zp[2]:44 2002.0
void newline()
byte* newline::start
byte* newline::start#0 start zp[2]:46 6.000000000006001E11
void print32(volatile dword print32::l)
byte* print32::dp
const byte* print32::dp#1 dp = (byte*)&print32::l
volatile dword print32::l loadstore zp[4]:64 100100.0
struct printf_buffer_number printf_buffer loadstore mem[12] = {}
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)
word~ printf_number_buffer::$19 zp[2]:2 1000001.0
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*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS
byte printf_number_buffer::buffer_sign
byte printf_number_buffer::buffer_sign#0 buffer_sign zp[1]:86 155000.2
struct printf_format_number printf_number_buffer::format
byte printf_number_buffer::format_justify_left
byte printf_number_buffer::format_min_length
const byte printf_number_buffer::format_min_length#0 format_min_length = 2
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
byte printf_number_buffer::format_zero_padding#0 format_zero_padding zp[1]:73 100000.14285714286
signed byte printf_number_buffer::len
signed byte printf_number_buffer::len#0 reg byte x 1500001.5
signed byte printf_number_buffer::len#1 reg byte x 2000002.0
signed byte printf_number_buffer::len#2 reg byte x 3000003.0
signed byte printf_number_buffer::padding
signed byte printf_number_buffer::padding#1 padding zp[1]:48 1000001.0
signed byte printf_number_buffer::padding#10 padding zp[1]:48 300000.30000000005
void printf_padding(byte printf_padding::pad , byte printf_padding::length)
byte printf_padding::i
byte printf_padding::i#1 i zp[1]:50 2.0000000002E10
byte printf_padding::i#2 i zp[1]:50 7.50000000075E9
byte printf_padding::length
byte printf_padding::length#0 length zp[1]:49 2000002.0
byte printf_padding::length#1 length zp[1]:49 2000002.0
byte printf_padding::length#4 length zp[1]:49 1.6670000005E9
byte printf_padding::pad
byte printf_padding::pad#5 pad zp[1]:89 1.6666666668333333E9
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)
struct printf_format_number printf_uchar::format
byte printf_uchar::format_justify_left
byte printf_uchar::format_min_length
byte printf_uchar::format_radix
byte printf_uchar::format_sign_always
byte printf_uchar::format_upper_case
byte printf_uchar::format_zero_padding
byte printf_uchar::format_zero_padding#10 format_zero_padding zp[1]:73 20000.2
byte printf_uchar::uvalue
byte printf_uchar::uvalue#0 reg byte x 20002.0
byte printf_uchar::uvalue#1 reg byte x 20002.0
byte printf_uchar::uvalue#10 reg byte x 71504.0
byte printf_uchar::uvalue#2 reg byte x 20002.0
byte printf_uchar::uvalue#3 reg byte x 20002.0
byte printf_uchar::uvalue#4 reg byte x 2002.0
byte printf_uchar::uvalue#5 reg byte x 2002.0
byte printf_uchar::uvalue#6 reg byte x 2002.0
void putchar(byte putchar::code)
byte putchar::code
byte* putchar::loc
byte* putchar::loc#0 loc zp[2]:87 1.000000000001E12
byte putchar::newChar
byte putchar::newChar#0 reg byte a 1.5000000000015E12
const byte* rawmap[$100] = kickasm {{ .var ht = Hashtable().put(0,64, 1,0, 2,32, 3,96) // the table for converting bit 6,7 into ora value
.for(var i=0; i<256; i++) {
.var idx = (i & $60) / 32
.var mask = i & $9f
.byte mask | ht.get(idx)
}
}}
void rotateLeft(byte* rotateLeft::p , byte rotateLeft::r)
byte* rotateLeft::p loadstore zp[2]:87 5000.5
byte rotateLeft::r loadstore zp[1]:73 10001.0
void setcursor()
byte setcursor::c
byte setcursor::c#0 reg byte x 7.50000000000075E12
byte setcursor::c#1 reg byte a 2.0000000000002E13
byte* setcursor::loc
byte* setcursor::loc#0 loc zp[2]:87 1.0000000000001E13
word strlen(byte* strlen::str)
word strlen::len
word strlen::len#1 len zp[2]:2 1.00000001E8
word strlen::len#2 len zp[2]:2 4.0200001E7
word strlen::return
word strlen::return#2 return zp[2]:2 2000002.0
word strlen::return#3 return zp[2]:2 4.0
byte* strlen::str
byte* strlen::str#0 str zp[2]:56 2.00000002E8
byte* strlen::str#3 str zp[2]:56 1.0333333466666667E8
byte* strlen::str#5 str zp[2]:56 1.0000001E7
void uctoa(byte uctoa::value , byte* uctoa::buffer , byte uctoa::radix)
byte* uctoa::buffer
byte* uctoa::buffer#11 buffer zp[2]:46 3.3350000050000006E8
byte* uctoa::buffer#14 buffer zp[2]:46 1.5000000015E9
byte* uctoa::buffer#3 buffer zp[2]:46 2000002.0
byte* uctoa::buffer#4 buffer zp[2]:46 2.000000002E9
byte uctoa::digit
byte uctoa::digit#1 digit zp[1]:48 2.000000002E9
byte uctoa::digit#2 digit zp[1]:48 3.07692308E8
byte uctoa::digit_value
byte uctoa::digit_value#0 digit_value zp[1]:89 6.000000005999999E8
byte* uctoa::digit_values
byte uctoa::max_digits
byte uctoa::radix
byte uctoa::started
byte uctoa::started#2 started zp[1]:49 6.000000005999999E8
byte uctoa::started#4 started zp[1]:49 1.000000001E9
byte uctoa::value
byte uctoa::value#0 reg byte x 1.000000001E9
byte uctoa::value#1 reg byte x 550001.0
byte uctoa::value#2 reg byte x 6.670000010000001E8
byte uctoa::value#6 reg byte x 1.5000000015E9
byte uctoa_append(byte* uctoa_append::buffer , byte uctoa_append::value , byte uctoa_append::sub)
byte* uctoa_append::buffer
byte* uctoa_append::buffer#0 buffer zp[2]:46 1.37500000025E9
byte uctoa_append::digit
byte uctoa_append::digit#1 reg byte y 1.00000000000001E14
byte uctoa_append::digit#2 reg byte y 1.000050000000015E14
byte uctoa_append::return
byte uctoa_append::return#0 reg byte x 2.000000002E9
byte uctoa_append::sub
byte uctoa_append::sub#0 sub zp[1]:89 3.33335000000005E13
byte uctoa_append::value
byte uctoa_append::value#0 reg byte x 3.666666667333333E9
byte uctoa_append::value#1 reg byte x 2.00000000000002E14
byte uctoa_append::value#2 reg byte x 5.000183333333417E13
zp[2]:2 [ strlen::len#2 strlen::len#1 strlen::return#3 strlen::return#2 memcpy::num#3 memcpy::num#1 md5::initial_len#0 printf_number_buffer::$19 md5::$8 ]
zp[2]:4 [ md5::offset#2 md5::offset#1 ]
zp[4]:6 [ h0#10 h0#3 ]
zp[4]:10 [ h1#10 h1#3 ]
zp[4]:14 [ h2#10 h2#3 ]
zp[4]:18 [ h3#10 h3#3 ]
zp[1]:22 [ md5::i#10 md5::i#1 ]
zp[4]:23 [ md5::a#11 md5::a#56 md5::a#0 md5::$65 md5::$66 md5::$67 ]
zp[4]:27 [ md5::b#10 md5::b#57 md5::b#0 ]
zp[4]:31 [ md5::c#10 md5::c#57 md5::c#0 ]
zp[4]:35 [ md5::temp#0 md5::temp#16 md5::d#0 ]
zp[4]:39 [ md5::f#10 md5::f#12 md5::f#13 md5::f#14 md5::f#1 md5::$43 md5::$37 md5::$30 md5::$26 md5::$42 ]
zp[1]:43 [ md5::g#10 md5::g#2 md5::g#3 md5::g#4 md5::g#36 md5::$71 ]
reg byte x [ printf_uchar::uvalue#10 printf_uchar::uvalue#4 printf_uchar::uvalue#5 printf_uchar::uvalue#6 printf_uchar::uvalue#0 printf_uchar::uvalue#1 printf_uchar::uvalue#2 printf_uchar::uvalue#3 ]
zp[2]:44 [ mod16::a#3 mod16::a#0 mod16::a#1 mod16::a#2 mul7::return#2 md5::$39 md5::$34 mod16::t#0 mul3::return#2 mul3::return#0 mul5::return#2 mul5::return#0 mul7::$1 mul7::return#0 mul3::$1 mul5::$1 memcpy::source#3 memcpy::source#4 memcpy::src#2 memcpy::src#4 memcpy::src#1 memcpy::source#0 ]
reg byte x [ uctoa::value#2 uctoa::value#6 uctoa::value#1 uctoa::value#0 ]
zp[2]:46 [ uctoa::buffer#11 uctoa::buffer#14 uctoa::buffer#4 uctoa::buffer#3 uctoa_append::buffer#0 memset::str#3 memset::str#0 memset::str#8 memset::dst#2 memset::dst#4 memset::dst#1 memset::str#1 newline::start#0 ]
reg byte x [ printf_number_buffer::len#2 printf_number_buffer::len#0 printf_number_buffer::len#1 ]
zp[1]:48 [ printf_number_buffer::padding#10 printf_number_buffer::padding#1 uctoa::digit#2 uctoa::digit#1 ]
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]:49 [ printf_padding::length#4 printf_padding::length#1 printf_padding::length#0 uctoa::started#2 uctoa::started#4 ]
zp[1]:50 [ printf_padding::i#2 printf_padding::i#1 ]
reg byte a [ cputs::c#1 ]
zp[1]:51 [ cputc::c ]
zp[2]:52 [ md5::$0 md5::$1 md5::$2 md5::$3 md5::new_len#0 ]
zp[2]:54 [ calloc::return#2 md5::msg#1 calloc::return#0 malloc::size#0 malloc::mem#0 ]
zp[2]:56 [ md5::$74 strlen::str#3 strlen::str#5 strlen::str#0 cputs::s#10 cputs::s#11 cputs::s#0 ]
zp[4]:58 [ md5::bits_len ]
zp[2]:62 [ md5::w#0 ]
zp[4]:64 [ print32::l ]
reg byte a [ md5::$24 ]
reg byte a [ md5::$25 ]
zp[1]:68 [ md5::$72 ]
zp[4]:69 [ leftRotate::a ]
zp[1]:73 [ leftRotate::r#0 rotateLeft::r printf_uchar::format_zero_padding#10 printf_number_buffer::format_zero_padding#0 ]
zp[4]:74 [ leftRotate::return#2 md5::lr#0 leftRotate::return#0 md5::b#1 ]
reg byte a [ mul7::a#0 ]
reg byte a [ mod16::return#4 ]
reg byte a [ mul3::a#0 ]
reg byte a [ mod16::return#3 ]
zp[4]:78 [ md5::$31 md5::$32 ]
reg byte a [ mul5::a#0 ]
reg byte a [ mod16::return#2 ]
zp[4]:82 [ md5::$27 md5::$28 ]
reg byte x [ cputc::convertToScreenCode1_return#0 ]
zp[1]:86 [ printf_number_buffer::buffer_sign#0 ]
reg byte x [ leftRotate::$5 ]
reg byte x [ leftRotate::$9 ]
reg byte a [ mod16::return#0 ]
zp[2]:87 [ cursorLocation::return#0 putchar::loc#0 cursorLocation::return#1 cursorLocation::return#3 setcursor::loc#0 cursorLocation::$0 cursorLocation::$1 cursorLocation::$3 cursorLocation::$5 mul5::$2 rotateLeft::p memcpy::src_end#0 ]
reg byte a [ putchar::newChar#0 ]
reg byte x [ setcursor::c#0 ]
reg byte a [ setcursor::c#1 ]
zp[1]:89 [ uctoa::digit_value#0 uctoa_append::sub#0 printf_padding::pad#5 ]
reg byte x [ uctoa_append::return#0 ]
reg byte y [ move16Left::s#0 ]
reg byte x [ move16Left::t#0 ]
reg byte x [ move8Left::t#0 ]
zp[2]:90 [ cursorLocation::$4 mul3::$2 mul7::$2 mul7::$3 mul7::$4 memset::num#2 memset::num#0 calloc::nitems#0 memset::end#0 memcpy::destination#3 memcpy::destination#7 memcpy::destination#8 memcpy::destination#0 memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 memcpy::destination#2 ]
mem[12] [ printf_buffer ]