mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-03-08 17:30:33 +00:00
Added test data.
This commit is contained in:
parent
bf17d4af93
commit
fb22cad755
1980
src/test/ref/atarixl-md5c.asm
Normal file
1980
src/test/ref/atarixl-md5c.asm
Normal file
File diff suppressed because it is too large
Load Diff
822
src/test/ref/atarixl-md5c.cfg
Normal file
822
src/test/ref/atarixl-md5c.cfg
Normal file
@ -0,0 +1,822 @@
|
||||
|
||||
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::@17 md5::@20 md5::@38 md5::@40 md5::@52 md5::@54 printf_number_buffer::@4
|
||||
[8] cputs::s#12 = phi( main/main::s, md5::@10/md5::s1, md5::@16/md5::s4, md5::@17/md5::s7, md5::@20/md5::s, md5::@38/md5::s2, md5::@40/md5::s3, md5::@52/md5::s5, md5::@54/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#11 = phi( cputs/cputs::s#12, cputs::@2/cputs::s#0 )
|
||||
[10] cputs::c#1 = *cputs::s#11
|
||||
[11] cputs::s#0 = ++ cputs::s#11
|
||||
[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::$89 = (byte*)md5::msg#1 + md5::initial_len#0
|
||||
[35] *md5::$89 = $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#0 = phi( md5::@19/$10325476, md5::@5/h3#3 )
|
||||
[41] h2#0 = phi( md5::@19/$98badcfe, md5::@5/h2#3 )
|
||||
[41] h1#0 = phi( md5::@19/$efcdab89, md5::@5/h1#3 )
|
||||
[41] h0#0 = phi( md5::@19/$67452301, md5::@5/h0#3 )
|
||||
[41] md5::offset#10 = phi( md5::@19/0, md5::@5/md5::offset#1 )
|
||||
[42] if(md5::offset#10<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#10
|
||||
[45] md5::a#0 = h0#0
|
||||
[46] md5::b#0 = h1#0
|
||||
[47] md5::c#0 = h2#0
|
||||
[48] md5::d#0 = h3#0
|
||||
to:md5::@3
|
||||
md5::@3: scope:[md5] from md5::@11 md5::@2
|
||||
[49] md5::d#10 = phi( md5::@11/md5::d#62, md5::@2/md5::d#0 )
|
||||
[49] md5::d#1 = phi( md5::@11/md5::d#64, md5::@2/md5::c#0 )
|
||||
[49] md5::b#10 = phi( md5::@11/md5::b#62, md5::@2/md5::b#0 )
|
||||
[49] md5::a#11 = phi( md5::@11/md5::a#59, md5::@2/md5::a#0 )
|
||||
[49] md5::i#13 = phi( md5::@11/md5::i#1, md5::@2/0 )
|
||||
[50] if(md5::i#13<$40) goto md5::@4
|
||||
to:md5::@5
|
||||
md5::@5: scope:[md5] from md5::@3
|
||||
[51] h0#3 = h0#0 + md5::a#11
|
||||
[52] h1#3 = h1#0 + md5::b#10
|
||||
[53] h2#3 = h2#0 + md5::d#1
|
||||
[54] h3#3 = h3#0 + md5::d#10
|
||||
[55] md5::offset#1 = md5::offset#10 + (signed byte)$200/8
|
||||
to:md5::@1
|
||||
md5::@4: scope:[md5] from md5::@3
|
||||
[56] printf_uchar::uvalue#4 = md5::i#13
|
||||
[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::d#1
|
||||
[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::d#10
|
||||
[73] call print32
|
||||
to:md5::@28
|
||||
md5::@28: scope:[md5] from md5::@27
|
||||
[74] phi()
|
||||
[75] call cputln
|
||||
to:md5::@29
|
||||
md5::@29: scope:[md5] from md5::@28
|
||||
[76] phi()
|
||||
[77] call waitFrames
|
||||
to:md5::BREAK1
|
||||
md5::BREAK1: scope:[md5] from md5::@29
|
||||
kickasm() {{ .break }}
|
||||
to:md5::@15
|
||||
md5::@15: scope:[md5] from md5::BREAK1
|
||||
[79] md5::$25 = md5::i#13 >> 4
|
||||
[80] md5::$26 = md5::$25 & 3
|
||||
[81] if(md5::$26==0) goto md5::@6
|
||||
to:md5::@12
|
||||
md5::@12: scope:[md5] from md5::@15
|
||||
[82] if(md5::$26==1) goto md5::@7
|
||||
to:md5::@13
|
||||
md5::@13: scope:[md5] from md5::@12
|
||||
[83] if(md5::$26==2) goto md5::@8
|
||||
to:md5::@14
|
||||
md5::@14: scope:[md5] from md5::@13
|
||||
[84] if(md5::$26==3) goto md5::@9
|
||||
to:md5::@59
|
||||
md5::@59: scope:[md5] from md5::@14
|
||||
[85] md5::i#62 = md5::i#13
|
||||
[86] md5::temp#19 = md5::d#10
|
||||
to:md5::@10
|
||||
md5::@10: scope:[md5] from md5::@31 md5::@33 md5::@35 md5::@59 md5::@6
|
||||
[87] md5::i#10 = phi( md5::@59/md5::i#62, md5::@31/md5::i#63, md5::@33/md5::i#64, md5::@35/md5::i#65, md5::@6/md5::i#66 )
|
||||
[87] md5::temp#0 = phi( md5::@59/md5::temp#19, md5::@31/md5::temp#20, md5::@33/md5::temp#21, md5::@35/md5::temp#22, md5::@6/md5::temp#23 )
|
||||
[87] md5::g#10 = phi( md5::@59/0, md5::@31/md5::g#2, md5::@33/md5::g#3, md5::@35/md5::g#4, md5::@6/md5::g#38 )
|
||||
[87] md5::f#10 = phi( md5::@59/0, md5::@31/md5::f#12, md5::@33/md5::f#13, md5::@35/md5::f#14, md5::@6/md5::f#1 )
|
||||
[88] call cputs
|
||||
to:md5::@36
|
||||
md5::@36: scope:[md5] from md5::@10
|
||||
[89] print32::l = md5::f#10
|
||||
[90] call print32
|
||||
to:md5::@37
|
||||
md5::@37: scope:[md5] from md5::@36
|
||||
[91] cputc::c = ' 'at
|
||||
[92] call cputc
|
||||
to:md5::@38
|
||||
md5::@38: scope:[md5] from md5::@37
|
||||
[93] phi()
|
||||
[94] call cputs
|
||||
to:md5::@39
|
||||
md5::@39: scope:[md5] from md5::@38
|
||||
[95] printf_uchar::uvalue#5 = md5::g#10
|
||||
[96] call printf_uchar
|
||||
to:md5::@40
|
||||
md5::@40: scope:[md5] from md5::@39
|
||||
[97] phi()
|
||||
[98] call cputs
|
||||
to:md5::@41
|
||||
md5::@41: scope:[md5] from md5::@40
|
||||
[99] md5::$84 = md5::g#10 << 2
|
||||
[100] print32::l = ((dword*)md5::w#0)[md5::$84]
|
||||
[101] call print32
|
||||
to:md5::@42
|
||||
md5::@42: scope:[md5] from md5::@41
|
||||
[102] phi()
|
||||
[103] call cputln
|
||||
to:md5::@43
|
||||
md5::@43: scope:[md5] from md5::@42
|
||||
[104] phi()
|
||||
[105] call waitFrames
|
||||
to:md5::BREAK2
|
||||
md5::BREAK2: scope:[md5] from md5::@43
|
||||
kickasm() {{ .break }}
|
||||
to:md5::@16
|
||||
md5::@16: scope:[md5] from md5::BREAK2
|
||||
[107] phi()
|
||||
[108] call cputs
|
||||
to:md5::@44
|
||||
md5::@44: scope:[md5] from md5::@16
|
||||
[109] print32::l = md5::a#11
|
||||
[110] call print32
|
||||
to:md5::@45
|
||||
md5::@45: scope:[md5] from md5::@44
|
||||
[111] cputc::c = ' 'at
|
||||
[112] call cputc
|
||||
to:md5::@46
|
||||
md5::@46: scope:[md5] from md5::@45
|
||||
[113] print32::l = md5::f#10
|
||||
[114] call print32
|
||||
to:md5::@47
|
||||
md5::@47: scope:[md5] from md5::@46
|
||||
[115] cputc::c = ' 'at
|
||||
[116] call cputc
|
||||
to:md5::@48
|
||||
md5::@48: scope:[md5] from md5::@47
|
||||
[117] md5::$87 = md5::i#10 << 2
|
||||
[118] print32::l = md5::k[md5::$87]
|
||||
[119] call print32
|
||||
to:md5::@49
|
||||
md5::@49: scope:[md5] from md5::@48
|
||||
[120] cputc::c = ' 'at
|
||||
[121] call cputc
|
||||
to:md5::@50
|
||||
md5::@50: scope:[md5] from md5::@49
|
||||
[122] print32::l = ((dword*)md5::w#0)[md5::$84]
|
||||
[123] call print32
|
||||
to:md5::@51
|
||||
md5::@51: scope:[md5] from md5::@50
|
||||
[124] cputc::c = ' 'at
|
||||
[125] call cputc
|
||||
to:md5::@52
|
||||
md5::@52: scope:[md5] from md5::@51
|
||||
[126] phi()
|
||||
[127] call cputs
|
||||
to:md5::@53
|
||||
md5::@53: scope:[md5] from md5::@52
|
||||
[128] printf_uchar::uvalue#6 = md5::r[md5::i#10]
|
||||
[129] call printf_uchar
|
||||
to:md5::@54
|
||||
md5::@54: scope:[md5] from md5::@53
|
||||
[130] phi()
|
||||
[131] call cputs
|
||||
to:md5::@55
|
||||
md5::@55: scope:[md5] from md5::@54
|
||||
[132] phi()
|
||||
[133] call waitFrames
|
||||
to:md5::BREAK3
|
||||
md5::BREAK3: scope:[md5] from md5::@55
|
||||
kickasm() {{ .break }}
|
||||
to:md5::@17
|
||||
md5::@17: scope:[md5] from md5::BREAK3
|
||||
[135] md5::$72 = md5::a#11 + md5::f#10
|
||||
[136] md5::$69 = md5::$72 + md5::k[md5::$87]
|
||||
[137] md5::$70 = md5::$69 + ((dword*)md5::w#0)[md5::$84]
|
||||
[138] md5::$71 = md5::$70 << md5::r[md5::i#10]
|
||||
[139] md5::$73 = md5::$72 + md5::k[md5::$87]
|
||||
[140] md5::$74 = md5::$73 + ((dword*)md5::w#0)[md5::$84]
|
||||
[141] md5::$75 = $20 - md5::r[md5::i#10]
|
||||
[142] md5::$76 = md5::$74 >> md5::$75
|
||||
[143] md5::lr#0 = md5::$71 | md5::$76
|
||||
[144] call cputs
|
||||
to:md5::@56
|
||||
md5::@56: scope:[md5] from md5::@17
|
||||
[145] print32::l = md5::lr#0
|
||||
[146] call print32
|
||||
to:md5::@57
|
||||
md5::@57: scope:[md5] from md5::@56
|
||||
[147] phi()
|
||||
[148] call cputln
|
||||
to:md5::@58
|
||||
md5::@58: scope:[md5] from md5::@57
|
||||
[149] md5::b#1 = md5::b#10 + md5::lr#0
|
||||
to:md5::@11
|
||||
md5::@11: scope:[md5] from md5::@58
|
||||
[150] md5::i#1 = ++ md5::i#10
|
||||
[151] md5::d#62 = md5::d#1
|
||||
[152] md5::d#64 = md5::b#10
|
||||
[153] md5::b#62 = md5::b#1
|
||||
[154] md5::a#59 = md5::temp#0
|
||||
to:md5::@3
|
||||
md5::@9: scope:[md5] from md5::@14
|
||||
[155] md5::$43 = ~ md5::d#10
|
||||
[156] md5::$44 = md5::b#10 | md5::$43
|
||||
[157] md5::f#14 = md5::d#1 ^ md5::$44
|
||||
[158] mul7::a#0 = md5::i#13
|
||||
[159] call mul7
|
||||
[160] mul7::return#2 = mul7::return#0
|
||||
to:md5::@34
|
||||
md5::@34: scope:[md5] from md5::@9
|
||||
[161] mod16::a#2 = mul7::return#2
|
||||
[162] call mod16
|
||||
[163] mod16::return#4 = mod16::return#0
|
||||
to:md5::@35
|
||||
md5::@35: scope:[md5] from md5::@34
|
||||
[164] md5::g#4 = mod16::return#4
|
||||
[165] md5::i#65 = md5::i#13
|
||||
[166] md5::temp#22 = md5::d#10
|
||||
to:md5::@10
|
||||
md5::@8: scope:[md5] from md5::@13
|
||||
[167] md5::$38 = md5::b#10 ^ md5::d#1
|
||||
[168] md5::f#13 = md5::$38 ^ md5::d#10
|
||||
[169] mul3::a#0 = md5::i#13
|
||||
[170] call mul3
|
||||
[171] mul3::return#2 = mul3::return#0
|
||||
to:md5::@32
|
||||
md5::@32: scope:[md5] from md5::@8
|
||||
[172] md5::$40 = mul3::return#2
|
||||
[173] mod16::a#1 = md5::$40 + 5
|
||||
[174] call mod16
|
||||
[175] mod16::return#3 = mod16::return#0
|
||||
to:md5::@33
|
||||
md5::@33: scope:[md5] from md5::@32
|
||||
[176] md5::g#3 = mod16::return#3
|
||||
[177] md5::i#64 = md5::i#13
|
||||
[178] md5::temp#21 = md5::d#10
|
||||
to:md5::@10
|
||||
md5::@7: scope:[md5] from md5::@12
|
||||
[179] md5::$31 = md5::d#10 & md5::b#10
|
||||
[180] md5::$32 = ~ md5::d#10
|
||||
[181] md5::$33 = md5::$32 & md5::d#1
|
||||
[182] md5::f#12 = md5::$31 | md5::$33
|
||||
[183] mul5::a#0 = md5::i#13
|
||||
[184] call mul5
|
||||
[185] mul5::return#2 = mul5::return#0
|
||||
to:md5::@30
|
||||
md5::@30: scope:[md5] from md5::@7
|
||||
[186] md5::$35 = mul5::return#2
|
||||
[187] mod16::a#0 = md5::$35 + 1
|
||||
[188] call mod16
|
||||
[189] mod16::return#2 = mod16::return#0
|
||||
to:md5::@31
|
||||
md5::@31: scope:[md5] from md5::@30
|
||||
[190] md5::g#2 = mod16::return#2
|
||||
[191] md5::i#63 = md5::i#13
|
||||
[192] md5::temp#20 = md5::d#10
|
||||
to:md5::@10
|
||||
md5::@6: scope:[md5] from md5::@15
|
||||
[193] md5::$27 = md5::b#10 & md5::d#1
|
||||
[194] md5::$28 = ~ md5::b#10
|
||||
[195] md5::$29 = md5::$28 & md5::d#10
|
||||
[196] md5::f#1 = md5::$27 | md5::$29
|
||||
[197] md5::i#66 = md5::i#13
|
||||
[198] md5::temp#23 = md5::d#10
|
||||
[199] md5::g#38 = md5::i#13
|
||||
to:md5::@10
|
||||
|
||||
void cputc(volatile byte cputc::c)
|
||||
cputc: scope:[cputc] from cputs::@2 md5::@22 md5::@24 md5::@26 md5::@37 md5::@45 md5::@47 md5::@49 md5::@51 printf_number_buffer::@8 printf_padding::@2
|
||||
[200] if(cputc::c=='
'at) goto cputc::@1
|
||||
to:cputc::@3
|
||||
cputc::@3: scope:[cputc] from cputc
|
||||
[201] if(cputc::c=='
|
||||
'at) goto cputc::@2
|
||||
to:cputc::@8
|
||||
cputc::@8: scope:[cputc] from cputc::@3
|
||||
[202] if(cputc::c==$9b) goto cputc::@2
|
||||
to:cputc::convertToScreenCode1
|
||||
cputc::convertToScreenCode1: scope:[cputc] from cputc::@8
|
||||
[203] cputc::convertToScreenCode1_return#0 = rawmap[*cputc::convertToScreenCode1_v#0]
|
||||
to:cputc::@6
|
||||
cputc::@6: scope:[cputc] from cputc::convertToScreenCode1
|
||||
[204] phi()
|
||||
[205] call putchar
|
||||
to:cputc::@7
|
||||
cputc::@7: scope:[cputc] from cputc::@6
|
||||
[206] *COLCRS = ++ *COLCRS
|
||||
[207] if(*COLCRS==$28) goto cputc::@5
|
||||
to:cputc::@4
|
||||
cputc::@4: scope:[cputc] from cputc::@7
|
||||
[208] phi()
|
||||
[209] call setcursor
|
||||
to:cputc::@return
|
||||
cputc::@return: scope:[cputc] from cputc::@1 cputc::@2 cputc::@4 cputc::@5
|
||||
[210] return
|
||||
to:@return
|
||||
cputc::@5: scope:[cputc] from cputc::@7
|
||||
[211] *COLCRS = 0
|
||||
[212] call newline
|
||||
to:cputc::@return
|
||||
cputc::@2: scope:[cputc] from cputc::@3 cputc::@8
|
||||
[213] *COLCRS = 0
|
||||
[214] call newline
|
||||
to:cputc::@return
|
||||
cputc::@1: scope:[cputc] from cputc
|
||||
[215] *COLCRS = 0
|
||||
[216] call setcursor
|
||||
to:cputc::@return
|
||||
|
||||
void* calloc(word calloc::nitems , word calloc::size)
|
||||
calloc: scope:[calloc] from md5
|
||||
[217] malloc::size#0 = calloc::nitems#0
|
||||
[218] call malloc
|
||||
to:calloc::@1
|
||||
calloc::@1: scope:[calloc] from calloc
|
||||
[219] calloc::return#0 = (void*)malloc::mem#0
|
||||
[220] memset::num#0 = calloc::nitems#0
|
||||
[221] memset::str#0 = calloc::return#0
|
||||
[222] call memset
|
||||
to:calloc::@return
|
||||
calloc::@return: scope:[calloc] from calloc::@1
|
||||
[223] return
|
||||
to:@return
|
||||
|
||||
void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num)
|
||||
memcpy: scope:[memcpy] from md5::@18 md5::@19 newline::@2
|
||||
[224] memcpy::num#3 = phi( md5::@18/memcpy::num#1, md5::@19/4, newline::@2/(word)$28*$17 )
|
||||
[224] memcpy::destination#3 = phi( md5::@18/memcpy::destination#7, md5::@19/memcpy::destination#8, newline::@2/memcpy::destination#0 )
|
||||
[224] memcpy::source#3 = phi( md5::@18/(void*)main::message, md5::@19/(void*)&md5::bits_len, newline::@2/memcpy::source#4 )
|
||||
[225] memcpy::src_end#0 = (byte*)memcpy::source#3 + memcpy::num#3
|
||||
[226] memcpy::dst#4 = (byte*)memcpy::destination#3
|
||||
[227] memcpy::src#4 = (byte*)memcpy::source#3
|
||||
to:memcpy::@1
|
||||
memcpy::@1: scope:[memcpy] from memcpy memcpy::@2
|
||||
[228] memcpy::dst#2 = phi( memcpy/memcpy::dst#4, memcpy::@2/memcpy::dst#1 )
|
||||
[228] memcpy::src#2 = phi( memcpy/memcpy::src#4, memcpy::@2/memcpy::src#1 )
|
||||
[229] if(memcpy::src#2!=memcpy::src_end#0) goto memcpy::@2
|
||||
to:memcpy::@return
|
||||
memcpy::@return: scope:[memcpy] from memcpy::@1
|
||||
[230] return
|
||||
to:@return
|
||||
memcpy::@2: scope:[memcpy] from memcpy::@1
|
||||
[231] *memcpy::dst#2 = *memcpy::src#2
|
||||
[232] memcpy::dst#1 = ++ memcpy::dst#2
|
||||
[233] 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::@39 md5::@4 md5::@53 print32 print32::@1 print32::@2 print32::@3
|
||||
[234] printf_uchar::format_zero_padding#10 = phi( md5::@4/0, md5::@39/0, md5::@53/0, print32/1, print32::@1/1, print32::@2/1, print32::@3/1 )
|
||||
[234] printf_uchar::uvalue#10 = phi( md5::@4/printf_uchar::uvalue#4, md5::@39/printf_uchar::uvalue#5, md5::@53/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
|
||||
[235] *((byte*)&printf_buffer) = 0
|
||||
[236] uctoa::value#1 = printf_uchar::uvalue#10
|
||||
[237] call uctoa
|
||||
to:printf_uchar::@2
|
||||
printf_uchar::@2: scope:[printf_uchar] from printf_uchar::@1
|
||||
[238] printf_number_buffer::buffer_sign#0 = *((byte*)&printf_buffer)
|
||||
[239] printf_number_buffer::format_zero_padding#0 = printf_uchar::format_zero_padding#10
|
||||
[240] call printf_number_buffer
|
||||
to:printf_uchar::@return
|
||||
printf_uchar::@return: scope:[printf_uchar] from printf_uchar::@2
|
||||
[241] return
|
||||
to:@return
|
||||
|
||||
void print32(volatile dword print32::l)
|
||||
print32: scope:[print32] from md5::@21 md5::@23 md5::@25 md5::@27 md5::@36 md5::@41 md5::@44 md5::@46 md5::@48 md5::@50 md5::@56
|
||||
[242] printf_uchar::uvalue#0 = *print32::dp#1
|
||||
[243] call printf_uchar
|
||||
to:print32::@1
|
||||
print32::@1: scope:[print32] from print32
|
||||
[244] printf_uchar::uvalue#1 = *(print32::dp#1+1)
|
||||
[245] call printf_uchar
|
||||
to:print32::@2
|
||||
print32::@2: scope:[print32] from print32::@1
|
||||
[246] printf_uchar::uvalue#2 = *(print32::dp#1+2)
|
||||
[247] call printf_uchar
|
||||
to:print32::@3
|
||||
print32::@3: scope:[print32] from print32::@2
|
||||
[248] printf_uchar::uvalue#3 = *(print32::dp#1+3)
|
||||
[249] call printf_uchar
|
||||
to:print32::@return
|
||||
print32::@return: scope:[print32] from print32::@3
|
||||
[250] return
|
||||
to:@return
|
||||
|
||||
void cputln()
|
||||
cputln: scope:[cputln] from md5::@28 md5::@42 md5::@57
|
||||
[251] *COLCRS = 0
|
||||
[252] call newline
|
||||
to:cputln::@return
|
||||
cputln::@return: scope:[cputln] from cputln
|
||||
[253] return
|
||||
to:@return
|
||||
|
||||
void waitFrames(signed byte waitFrames::frames)
|
||||
waitFrames: scope:[waitFrames] from md5::@29 md5::@43 md5::@55
|
||||
[254] phi()
|
||||
to:waitFrames::@1
|
||||
waitFrames::@1: scope:[waitFrames] from waitFrames waitFrames::@2
|
||||
[255] waitFrames::frames#4 = phi( waitFrames/2, waitFrames::@2/waitFrames::frames#0 )
|
||||
[256] if(waitFrames::frames#4>0) goto waitFrames::waitFrame1
|
||||
to:waitFrames::@return
|
||||
waitFrames::@return: scope:[waitFrames] from waitFrames::@1
|
||||
[257] return
|
||||
to:@return
|
||||
waitFrames::waitFrame1: scope:[waitFrames] from waitFrames::@1
|
||||
asm { ldaRTCLOK+2 !: cmpRTCLOK+2 beq!- }
|
||||
to:waitFrames::@2
|
||||
waitFrames::@2: scope:[waitFrames] from waitFrames::waitFrame1
|
||||
[259] waitFrames::frames#0 = -- waitFrames::frames#4
|
||||
to:waitFrames::@1
|
||||
|
||||
word mul7(byte mul7::a)
|
||||
mul7: scope:[mul7] from md5::@9
|
||||
[260] mul7::$1 = (word)mul7::a#0
|
||||
[261] mul7::$2 = mul7::$1 << 1
|
||||
[262] mul7::$3 = mul7::$2 + mul7::$1
|
||||
[263] mul7::$4 = mul7::$3 << 1
|
||||
[264] mul7::return#0 = mul7::$4 + mul7::$1
|
||||
to:mul7::@return
|
||||
mul7::@return: scope:[mul7] from mul7
|
||||
[265] return
|
||||
to:@return
|
||||
|
||||
byte mod16(word mod16::a)
|
||||
mod16: scope:[mod16] from md5::@30 md5::@32 md5::@34
|
||||
[266] mod16::a#3 = phi( md5::@30/mod16::a#0, md5::@32/mod16::a#1, md5::@34/mod16::a#2 )
|
||||
[267] mod16::t#0 = mod16::a#3 & $10-1
|
||||
[268] mod16::return#0 = mod16::t#0 & $ff
|
||||
to:mod16::@return
|
||||
mod16::@return: scope:[mod16] from mod16
|
||||
[269] return
|
||||
to:@return
|
||||
|
||||
word mul3(byte mul3::a)
|
||||
mul3: scope:[mul3] from md5::@8
|
||||
[270] mul3::$1 = (word)mul3::a#0
|
||||
[271] mul3::$2 = mul3::$1 << 1
|
||||
[272] mul3::return#0 = mul3::$2 + mul3::$1
|
||||
to:mul3::@return
|
||||
mul3::@return: scope:[mul3] from mul3
|
||||
[273] return
|
||||
to:@return
|
||||
|
||||
word mul5(byte mul5::a)
|
||||
mul5: scope:[mul5] from md5::@7
|
||||
[274] mul5::$1 = (word)mul5::a#0
|
||||
[275] mul5::$2 = mul5::$1 << 2
|
||||
[276] mul5::return#0 = mul5::$2 + mul5::$1
|
||||
to:mul5::@return
|
||||
mul5::@return: scope:[mul5] from mul5
|
||||
[277] return
|
||||
to:@return
|
||||
|
||||
void putchar(byte putchar::code)
|
||||
putchar: scope:[putchar] from cputc::@6
|
||||
[278] *(*OLDADR) = *OLDCHR
|
||||
[279] call cursorLocation
|
||||
[280] cursorLocation::return#0 = cursorLocation::return#1
|
||||
to:putchar::@1
|
||||
putchar::@1: scope:[putchar] from putchar
|
||||
[281] putchar::loc#0 = cursorLocation::return#0
|
||||
[282] putchar::newChar#0 = cputc::convertToScreenCode1_return#0
|
||||
[283] *putchar::loc#0 = putchar::newChar#0
|
||||
[284] *OLDCHR = putchar::newChar#0
|
||||
[285] call setcursor
|
||||
to:putchar::@return
|
||||
putchar::@return: scope:[putchar] from putchar::@1
|
||||
[286] return
|
||||
to:@return
|
||||
|
||||
void setcursor()
|
||||
setcursor: scope:[setcursor] from cputc::@1 cputc::@4 newline::@1 putchar::@1
|
||||
[287] *(*OLDADR) = *OLDCHR
|
||||
[288] call cursorLocation
|
||||
[289] cursorLocation::return#3 = cursorLocation::return#1
|
||||
to:setcursor::@3
|
||||
setcursor::@3: scope:[setcursor] from setcursor
|
||||
[290] setcursor::loc#0 = cursorLocation::return#3
|
||||
[291] setcursor::c#0 = *setcursor::loc#0
|
||||
[292] *OLDCHR = setcursor::c#0
|
||||
[293] *OLDADR = setcursor::loc#0
|
||||
to:setcursor::@2
|
||||
setcursor::@2: scope:[setcursor] from setcursor::@3
|
||||
[294] *CRSINH = 0
|
||||
[295] setcursor::c#1 = setcursor::c#0 ^ $80
|
||||
to:setcursor::@1
|
||||
setcursor::@1: scope:[setcursor] from setcursor::@2
|
||||
[296] *(*OLDADR) = setcursor::c#1
|
||||
to:setcursor::@return
|
||||
setcursor::@return: scope:[setcursor] from setcursor::@1
|
||||
[297] return
|
||||
to:@return
|
||||
|
||||
void newline()
|
||||
newline: scope:[newline] from cputc::@2 cputc::@5 cputln
|
||||
[298] *ROWCRS = ++ *ROWCRS
|
||||
[299] if(*ROWCRS!=$18) goto newline::@1
|
||||
to:newline::@3
|
||||
newline::@3: scope:[newline] from newline
|
||||
[300] *(*OLDADR) = *(*OLDADR) ^ $80
|
||||
to:newline::@2
|
||||
newline::@2: scope:[newline] from newline::@3
|
||||
[301] newline::start#0 = *SAVMSC
|
||||
[302] memcpy::source#0 = newline::start#0 + $28
|
||||
[303] memcpy::destination#0 = (void*)newline::start#0
|
||||
[304] memcpy::source#4 = (void*)memcpy::source#0
|
||||
[305] call memcpy
|
||||
to:newline::@4
|
||||
newline::@4: scope:[newline] from newline::@2
|
||||
[306] memset::str#1 = newline::start#0 + (word)$28*$17
|
||||
[307] memset::str#8 = (void*)memset::str#1
|
||||
[308] call memset
|
||||
to:newline::@5
|
||||
newline::@5: scope:[newline] from newline::@4
|
||||
[309] *ROWCRS = (byte)$18-1
|
||||
to:newline::@1
|
||||
newline::@1: scope:[newline] from newline newline::@5
|
||||
[310] phi()
|
||||
[311] call setcursor
|
||||
to:newline::@return
|
||||
newline::@return: scope:[newline] from newline::@1
|
||||
[312] return
|
||||
to:@return
|
||||
|
||||
void* malloc(word malloc::size)
|
||||
malloc: scope:[malloc] from calloc
|
||||
[313] malloc::mem#0 = HEAP_TOP - malloc::size#0
|
||||
to:malloc::@return
|
||||
malloc::@return: scope:[malloc] from malloc
|
||||
[314] return
|
||||
to:@return
|
||||
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
memset: scope:[memset] from calloc::@1 newline::@4
|
||||
[315] memset::str#3 = phi( calloc::@1/memset::str#0, newline::@4/memset::str#8 )
|
||||
[315] memset::num#2 = phi( calloc::@1/memset::num#0, newline::@4/$28 )
|
||||
[316] if(memset::num#2<=0) goto memset::@return
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset
|
||||
[317] memset::end#0 = (byte*)memset::str#3 + memset::num#2
|
||||
[318] memset::dst#4 = (byte*)memset::str#3
|
||||
to:memset::@2
|
||||
memset::@2: scope:[memset] from memset::@1 memset::@3
|
||||
[319] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 )
|
||||
[320] if(memset::dst#2!=memset::end#0) goto memset::@3
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset memset::@2
|
||||
[321] return
|
||||
to:@return
|
||||
memset::@3: scope:[memset] from memset::@2
|
||||
[322] *memset::dst#2 = 0
|
||||
[323] 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
|
||||
[324] phi()
|
||||
to:uctoa::@1
|
||||
uctoa::@1: scope:[uctoa] from uctoa uctoa::@4
|
||||
[325] uctoa::buffer#11 = phi( uctoa::@4/uctoa::buffer#14, uctoa/(byte*)&printf_buffer+OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS )
|
||||
[325] uctoa::started#2 = phi( uctoa::@4/uctoa::started#4, uctoa/0 )
|
||||
[325] uctoa::value#2 = phi( uctoa::@4/uctoa::value#6, uctoa/uctoa::value#1 )
|
||||
[325] uctoa::digit#2 = phi( uctoa::@4/uctoa::digit#1, uctoa/0 )
|
||||
[326] if(uctoa::digit#2<2-1) goto uctoa::@2
|
||||
to:uctoa::@3
|
||||
uctoa::@3: scope:[uctoa] from uctoa::@1
|
||||
[327] *uctoa::buffer#11 = DIGITS[uctoa::value#2]
|
||||
[328] uctoa::buffer#3 = ++ uctoa::buffer#11
|
||||
[329] *uctoa::buffer#3 = 0
|
||||
to:uctoa::@return
|
||||
uctoa::@return: scope:[uctoa] from uctoa::@3
|
||||
[330] return
|
||||
to:@return
|
||||
uctoa::@2: scope:[uctoa] from uctoa::@1
|
||||
[331] uctoa::digit_value#0 = RADIX_HEXADECIMAL_VALUES_CHAR[uctoa::digit#2]
|
||||
[332] if(0!=uctoa::started#2) goto uctoa::@5
|
||||
to:uctoa::@7
|
||||
uctoa::@7: scope:[uctoa] from uctoa::@2
|
||||
[333] if(uctoa::value#2>=uctoa::digit_value#0) goto uctoa::@5
|
||||
to:uctoa::@4
|
||||
uctoa::@4: scope:[uctoa] from uctoa::@6 uctoa::@7
|
||||
[334] uctoa::buffer#14 = phi( uctoa::@7/uctoa::buffer#11, uctoa::@6/uctoa::buffer#4 )
|
||||
[334] uctoa::started#4 = phi( uctoa::@7/uctoa::started#2, uctoa::@6/1 )
|
||||
[334] uctoa::value#6 = phi( uctoa::@7/uctoa::value#2, uctoa::@6/uctoa::value#0 )
|
||||
[335] uctoa::digit#1 = ++ uctoa::digit#2
|
||||
to:uctoa::@1
|
||||
uctoa::@5: scope:[uctoa] from uctoa::@2 uctoa::@7
|
||||
[336] uctoa_append::buffer#0 = uctoa::buffer#11
|
||||
[337] uctoa_append::value#0 = uctoa::value#2
|
||||
[338] uctoa_append::sub#0 = uctoa::digit_value#0
|
||||
[339] call uctoa_append
|
||||
[340] uctoa_append::return#0 = uctoa_append::value#2
|
||||
to:uctoa::@6
|
||||
uctoa::@6: scope:[uctoa] from uctoa::@5
|
||||
[341] uctoa::value#0 = uctoa_append::return#0
|
||||
[342] 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
|
||||
[343] phi()
|
||||
to:printf_number_buffer::@5
|
||||
printf_number_buffer::@5: scope:[printf_number_buffer] from printf_number_buffer
|
||||
[344] phi()
|
||||
[345] call strlen
|
||||
[346] strlen::return#2 = strlen::len#2
|
||||
to:printf_number_buffer::@11
|
||||
printf_number_buffer::@11: scope:[printf_number_buffer] from printf_number_buffer::@5
|
||||
[347] printf_number_buffer::$19 = strlen::return#2
|
||||
[348] printf_number_buffer::len#0 = (signed byte)printf_number_buffer::$19
|
||||
[349] 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
|
||||
[350] 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
|
||||
[351] printf_number_buffer::len#2 = phi( printf_number_buffer::@11/printf_number_buffer::len#0, printf_number_buffer::@6/printf_number_buffer::len#1 )
|
||||
[352] printf_number_buffer::padding#1 = (signed byte)printf_number_buffer::format_min_length#0 - printf_number_buffer::len#2
|
||||
[353] 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
|
||||
[354] phi()
|
||||
to:printf_number_buffer::@1
|
||||
printf_number_buffer::@1: scope:[printf_number_buffer] from printf_number_buffer::@10 printf_number_buffer::@15
|
||||
[355] 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
|
||||
[356] 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
|
||||
[357] 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
|
||||
[358] printf_padding::length#0 = (byte)printf_number_buffer::padding#10
|
||||
[359] 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
|
||||
[360] 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
|
||||
[361] cputc::c = printf_number_buffer::buffer_sign#0
|
||||
[362] call cputc
|
||||
to:printf_number_buffer::@3
|
||||
printf_number_buffer::@3: scope:[printf_number_buffer] from printf_number_buffer::@2 printf_number_buffer::@8
|
||||
[363] 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
|
||||
[364] 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
|
||||
[365] printf_padding::length#1 = (byte)printf_number_buffer::padding#10
|
||||
[366] 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
|
||||
[367] phi()
|
||||
[368] call cputs
|
||||
to:printf_number_buffer::@return
|
||||
printf_number_buffer::@return: scope:[printf_number_buffer] from printf_number_buffer::@4
|
||||
[369] return
|
||||
to:@return
|
||||
|
||||
byte* cursorLocation()
|
||||
cursorLocation: scope:[cursorLocation] from putchar setcursor
|
||||
[370] cursorLocation::$3 = (word)*ROWCRS
|
||||
[371] cursorLocation::$4 = cursorLocation::$3 << 2
|
||||
[372] cursorLocation::$5 = cursorLocation::$4 + cursorLocation::$3
|
||||
[373] cursorLocation::$0 = cursorLocation::$5 << 3
|
||||
[374] cursorLocation::$1 = *SAVMSC + cursorLocation::$0
|
||||
[375] cursorLocation::return#1 = cursorLocation::$1 + *COLCRS
|
||||
to:cursorLocation::@return
|
||||
cursorLocation::@return: scope:[cursorLocation] from cursorLocation
|
||||
[376] 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
|
||||
[377] phi()
|
||||
to:uctoa_append::@1
|
||||
uctoa_append::@1: scope:[uctoa_append] from uctoa_append uctoa_append::@2
|
||||
[378] uctoa_append::digit#2 = phi( uctoa_append/0, uctoa_append::@2/uctoa_append::digit#1 )
|
||||
[378] uctoa_append::value#2 = phi( uctoa_append/uctoa_append::value#0, uctoa_append::@2/uctoa_append::value#1 )
|
||||
[379] 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
|
||||
[380] *uctoa_append::buffer#0 = DIGITS[uctoa_append::digit#2]
|
||||
to:uctoa_append::@return
|
||||
uctoa_append::@return: scope:[uctoa_append] from uctoa_append::@3
|
||||
[381] return
|
||||
to:@return
|
||||
uctoa_append::@2: scope:[uctoa_append] from uctoa_append::@1
|
||||
[382] uctoa_append::digit#1 = ++ uctoa_append::digit#2
|
||||
[383] 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
|
||||
[384] printf_padding::pad#3 = phi( printf_number_buffer::@9/'0'at, printf_number_buffer::@7/' 'at )
|
||||
[384] printf_padding::length#3 = 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
|
||||
[385] printf_padding::i#2 = phi( printf_padding/0, printf_padding::@3/printf_padding::i#1 )
|
||||
[386] if(printf_padding::i#2<printf_padding::length#3) goto printf_padding::@2
|
||||
to:printf_padding::@return
|
||||
printf_padding::@return: scope:[printf_padding] from printf_padding::@1
|
||||
[387] return
|
||||
to:@return
|
||||
printf_padding::@2: scope:[printf_padding] from printf_padding::@1
|
||||
[388] cputc::c = printf_padding::pad#3
|
||||
[389] call cputc
|
||||
to:printf_padding::@3
|
||||
printf_padding::@3: scope:[printf_padding] from printf_padding::@2
|
||||
[390] printf_padding::i#1 = ++ printf_padding::i#2
|
||||
to:printf_padding::@1
|
15296
src/test/ref/atarixl-md5c.log
Normal file
15296
src/test/ref/atarixl-md5c.log
Normal file
File diff suppressed because one or more lines are too long
442
src/test/ref/atarixl-md5c.sym
Normal file
442
src/test/ref/atarixl-md5c.sym
Normal file
@ -0,0 +1,442 @@
|
||||
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* RTCLOK = (byte*) 18
|
||||
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]:217 53.25
|
||||
void* calloc::return
|
||||
void* calloc::return#0 return zp[2]:186 35.5
|
||||
void* calloc::return#2 return zp[2]:186 22.0
|
||||
word calloc::size
|
||||
void cputc(volatile byte cputc::c)
|
||||
volatile byte cputc::c loadstore zp[1]:183 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]:188 5.00000005E7
|
||||
to_nomodify byte* cputs::s#11 s zp[2]:188 1.55000002E8
|
||||
to_nomodify byte* cputs::s#12 s zp[2]:188 1.0000001E7
|
||||
byte* cursorLocation()
|
||||
word~ cursorLocation::$0 zp[2]:214 2.00000000000002E14
|
||||
byte*~ cursorLocation::$1 zp[2]:214 2.00000000000002E14
|
||||
word~ cursorLocation::$3 zp[2]:214 1.500000000000015E14
|
||||
word~ cursorLocation::$4 zp[2]:217 2.00000000000002E14
|
||||
word~ cursorLocation::$5 zp[2]:214 2.00000000000002E14
|
||||
byte* cursorLocation::return
|
||||
byte* cursorLocation::return#0 return zp[2]:214 2.000000000002E12
|
||||
byte* cursorLocation::return#1 return zp[2]:214 2.775000000000075E13
|
||||
byte* cursorLocation::return#3 return zp[2]:214 2.0000000000002E13
|
||||
dword h0
|
||||
dword h0#0 h0 zp[4]:132 1.9803921568627452
|
||||
dword h0#3 h0 zp[4]:132 40.4
|
||||
dword h1
|
||||
dword h1#0 h1 zp[4]:136 1.9675324675324677
|
||||
dword h1#3 h1 zp[4]:136 50.5
|
||||
dword h2
|
||||
dword h2#0 h2 zp[4]:140 1.9548387096774194
|
||||
dword h2#3 h2 zp[4]:140 67.33333333333333
|
||||
dword h3
|
||||
dword h3#0 h3 zp[4]:144 1.9423076923076925
|
||||
dword h3#3 h3 zp[4]:144 101.0
|
||||
byte* heap_head
|
||||
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]:186 333.6666666666667
|
||||
void* malloc::return
|
||||
word malloc::size
|
||||
word malloc::size#0 size zp[2]:186 1102.0
|
||||
void md5(byte* md5::initial_msg , word md5::initial_len)
|
||||
word~ md5::$0 zp[2]:184 22.0
|
||||
word~ md5::$1 zp[2]:184 22.0
|
||||
word~ md5::$2 zp[2]:184 22.0
|
||||
byte~ md5::$25 reg byte a 2002.0
|
||||
byte~ md5::$26 reg byte a 1251.25
|
||||
dword~ md5::$27 zp[4]:165 667.3333333333334
|
||||
dword~ md5::$28 zp[4]:209 2002.0
|
||||
dword~ md5::$29 zp[4]:209 2002.0
|
||||
word~ md5::$3 zp[2]:184 22.0
|
||||
dword~ md5::$31 zp[4]:165 667.3333333333334
|
||||
dword~ md5::$32 zp[4]:205 2002.0
|
||||
dword~ md5::$33 zp[4]:205 2002.0
|
||||
word~ md5::$35 zp[2]:176 2002.0
|
||||
dword~ md5::$38 zp[4]:165 2002.0
|
||||
word~ md5::$40 zp[2]:176 2002.0
|
||||
dword~ md5::$43 zp[4]:165 2002.0
|
||||
dword~ md5::$44 zp[4]:165 2002.0
|
||||
dword~ md5::$69 zp[4]:201 2002.0
|
||||
dword~ md5::$70 zp[4]:201 2002.0
|
||||
dword~ md5::$71 zp[4]:201 400.4
|
||||
dword~ md5::$72 zp[4]:149 750.75
|
||||
dword~ md5::$73 zp[4]:149 2002.0
|
||||
dword~ md5::$74 zp[4]:149 1001.0
|
||||
byte~ md5::$75 reg byte a 2002.0
|
||||
dword~ md5::$76 zp[4]:149 2002.0
|
||||
word~ md5::$8 zp[2]:128 22.0
|
||||
byte~ md5::$84 zp[1]:169 122.07317073170731
|
||||
byte~ md5::$87 zp[1]:200 182.0
|
||||
byte*~ md5::$89 zp[2]:188 22.0
|
||||
dword md5::a
|
||||
dword md5::a#0 a zp[4]:149 50.5
|
||||
dword md5::a#11 a zp[4]:149 33.38095238095238
|
||||
dword md5::a#59 a zp[4]:149 2002.0
|
||||
dword md5::b
|
||||
dword md5::b#0 b zp[4]:153 67.33333333333333
|
||||
dword md5::b#1 b_1 zp[4]:201 500.5
|
||||
dword md5::b#10 b zp[4]:153 63.96527777777777
|
||||
dword md5::b#62 b zp[4]:153 1001.0
|
||||
volatile dword md5::bits_len loadstore zp[4]:190 110.0
|
||||
dword md5::c
|
||||
dword md5::c#0 c zp[4]:157 101.0
|
||||
dword md5::d
|
||||
dword md5::d#0 d zp[4]:161 202.0
|
||||
dword md5::d#1 d_1 zp[4]:157 50.0625
|
||||
dword md5::d#10 d zp[4]:161 162.85333333333332
|
||||
dword md5::d#62 d zp[4]:161 500.5
|
||||
dword md5::d#64 d_1 zp[4]:157 667.3333333333334
|
||||
dword md5::f
|
||||
dword md5::f#1 f zp[4]:165 500.5
|
||||
dword md5::f#10 f zp[4]:165 145.97916666666669
|
||||
dword md5::f#12 f zp[4]:165 182.0
|
||||
dword md5::f#13 f zp[4]:165 182.0
|
||||
dword md5::f#14 f zp[4]:165 200.2
|
||||
byte md5::g
|
||||
byte md5::g#10 g zp[1]:169 500.50000000000006
|
||||
byte md5::g#2 g zp[1]:169 667.3333333333334
|
||||
byte md5::g#3 g zp[1]:169 667.3333333333334
|
||||
byte md5::g#38 g zp[1]:169 2002.0
|
||||
byte md5::g#4 g zp[1]:169 667.3333333333334
|
||||
byte md5::i
|
||||
byte md5::i#1 i zp[1]:148 400.4
|
||||
byte md5::i#10 i_1 zp[1]:174 158.88888888888889
|
||||
byte md5::i#13 i zp[1]:148 188.59420289855072
|
||||
byte md5::i#62 i_1 zp[1]:174 1001.0
|
||||
byte md5::i#63 i_1 zp[1]:174 1001.0
|
||||
byte md5::i#64 i_1 zp[1]:174 1001.0
|
||||
byte md5::i#65 i_1 zp[1]:174 1001.0
|
||||
byte md5::i#66 i_1 zp[1]:174 667.3333333333334
|
||||
word md5::initial_len
|
||||
word md5::initial_len#0 initial_len zp[2]:128 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]:201 500.5
|
||||
byte* md5::msg
|
||||
void* md5::msg#1 msg zp[2]:186 0.0650887573964497
|
||||
word md5::new_len
|
||||
word md5::new_len#0 new_len zp[2]:184 0.7745664739884393
|
||||
signed word md5::offset
|
||||
signed word md5::offset#1 offset zp[2]:130 202.0
|
||||
signed word md5::offset#10 offset zp[2]:130 2.573248407643312
|
||||
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
|
||||
const byte* md5::s7[5] = "lr: "at
|
||||
dword md5::temp
|
||||
dword md5::temp#0 temp zp[4]:170 89.64179104477613
|
||||
dword md5::temp#19 temp zp[4]:170 2002.0
|
||||
dword md5::temp#20 temp zp[4]:170 2002.0
|
||||
dword md5::temp#21 temp zp[4]:170 2002.0
|
||||
dword md5::temp#22 temp zp[4]:170 2002.0
|
||||
dword md5::temp#23 temp zp[4]:170 1001.0
|
||||
dword* md5::w
|
||||
byte* md5::w#0 w zp[2]:194 0.6688741721854304
|
||||
void* memcpy(void* memcpy::destination , void* memcpy::source , word memcpy::num)
|
||||
void* memcpy::destination
|
||||
void* memcpy::destination#0 destination zp[2]:217 1.000000000001E12
|
||||
byte* memcpy::destination#2 destination zp[2]:217 11.0
|
||||
void* memcpy::destination#3 destination zp[2]:217 5.000000000115E11
|
||||
void* memcpy::destination#7 destination zp[2]:217 22.0
|
||||
void* memcpy::destination#8 destination zp[2]:217 22.0
|
||||
byte* memcpy::dst
|
||||
byte* memcpy::dst#1 dst zp[2]:217 1.0E16
|
||||
byte* memcpy::dst#2 dst zp[2]:217 1.0003333333333334E16
|
||||
byte* memcpy::dst#4 dst zp[2]:217 1.0000000000001E13
|
||||
word memcpy::num
|
||||
word memcpy::num#1 num zp[2]:128 11.0
|
||||
word memcpy::num#3 num zp[2]:128 1.0000000000012E13
|
||||
void* memcpy::return
|
||||
void* memcpy::source
|
||||
byte* memcpy::source#0 source zp[2]:176 5.000000000005E11
|
||||
void* memcpy::source#3 source zp[2]:176 3.333333333336667E11
|
||||
void* memcpy::source#4 source zp[2]:176 2.000000000002E12
|
||||
byte* memcpy::src
|
||||
byte* memcpy::src#1 src zp[2]:176 2.0E16
|
||||
byte* memcpy::src#2 src zp[2]:176 1.00025E16
|
||||
byte* memcpy::src#4 src zp[2]:176 2.0000000000002E13
|
||||
byte* memcpy::src_end
|
||||
byte* memcpy::src_end#0 src_end zp[2]:214 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]:178 2.0E16
|
||||
byte* memset::dst#2 dst zp[2]:178 1.3336666666666668E16
|
||||
byte* memset::dst#4 dst zp[2]:178 2.0000000000002E13
|
||||
byte* memset::end
|
||||
byte* memset::end#0 end zp[2]:217 1.6683333333333335E15
|
||||
word memset::num
|
||||
word memset::num#0 num zp[2]:217 101.0
|
||||
word memset::num#2 num zp[2]:217 1.00000000000515E13
|
||||
void* memset::return
|
||||
void* memset::str
|
||||
void* memset::str#0 str zp[2]:178 202.0
|
||||
byte* memset::str#1 str zp[2]:178 1.000000000001E12
|
||||
void* memset::str#3 str zp[2]:178 3.333333333673334E11
|
||||
void* memset::str#8 str zp[2]:178 2.000000000002E12
|
||||
byte mod16(word mod16::a)
|
||||
word mod16::a
|
||||
word mod16::a#0 a zp[2]:176 2002.0
|
||||
word mod16::a#1 a zp[2]:176 2002.0
|
||||
word mod16::a#2 a zp[2]:176 2002.0
|
||||
word mod16::a#3 a zp[2]:176 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]:176 20002.0
|
||||
word mul3(byte mul3::a)
|
||||
word~ mul3::$1 zp[2]:176 15001.5
|
||||
word~ mul3::$2 zp[2]:217 20002.0
|
||||
byte mul3::a
|
||||
byte mul3::a#0 reg byte a 1001.0
|
||||
word mul3::return
|
||||
word mul3::return#0 return zp[2]:176 3667.333333333333
|
||||
word mul3::return#2 return zp[2]:176 2002.0
|
||||
word mul5(byte mul5::a)
|
||||
word~ mul5::$1 zp[2]:176 15001.5
|
||||
word~ mul5::$2 zp[2]:217 20002.0
|
||||
byte mul5::a
|
||||
byte mul5::a#0 reg byte a 1001.0
|
||||
word mul5::return
|
||||
word mul5::return#0 return zp[2]:176 3667.333333333333
|
||||
word mul5::return#2 return zp[2]:176 2002.0
|
||||
word mul7(byte mul7::a)
|
||||
word~ mul7::$1 zp[2]:176 10001.0
|
||||
word~ mul7::$2 zp[2]:214 20002.0
|
||||
word~ mul7::$3 zp[2]:214 20002.0
|
||||
word~ mul7::$4 zp[2]:214 20002.0
|
||||
byte mul7::a
|
||||
byte mul7::a#0 reg byte a 1001.0
|
||||
word mul7::return
|
||||
word mul7::return#0 return zp[2]:176 3667.333333333333
|
||||
word mul7::return#2 return zp[2]:176 2002.0
|
||||
void newline()
|
||||
byte* newline::start
|
||||
byte* newline::start#0 start zp[2]:178 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]:196 110110.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]:128 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]:213 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]:175 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]:180 1000001.0
|
||||
signed byte printf_number_buffer::padding#10 padding zp[1]:180 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]:182 2.0000000002E10
|
||||
byte printf_padding::i#2 i zp[1]:182 7.50000000075E9
|
||||
byte printf_padding::length
|
||||
byte printf_padding::length#0 length zp[1]:181 2000002.0
|
||||
byte printf_padding::length#1 length zp[1]:181 2000002.0
|
||||
byte printf_padding::length#3 length zp[1]:181 1.6670000005E9
|
||||
byte printf_padding::pad
|
||||
byte printf_padding::pad#3 pad zp[1]:216 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]:175 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]:214 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 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]:214 1.0000000000001E13
|
||||
word strlen(byte* strlen::str)
|
||||
word strlen::len
|
||||
word strlen::len#1 len zp[2]:128 1.00000001E8
|
||||
word strlen::len#2 len zp[2]:128 4.0200001E7
|
||||
word strlen::return
|
||||
word strlen::return#2 return zp[2]:128 2000002.0
|
||||
word strlen::return#3 return zp[2]:128 4.0
|
||||
byte* strlen::str
|
||||
byte* strlen::str#0 str zp[2]:188 2.00000002E8
|
||||
byte* strlen::str#3 str zp[2]:188 1.0333333466666667E8
|
||||
byte* strlen::str#5 str zp[2]:188 1.0000001E7
|
||||
void uctoa(byte uctoa::value , byte* uctoa::buffer , byte uctoa::radix)
|
||||
byte* uctoa::buffer
|
||||
byte* uctoa::buffer#11 buffer zp[2]:178 3.3350000050000006E8
|
||||
byte* uctoa::buffer#14 buffer zp[2]:178 1.5000000015E9
|
||||
byte* uctoa::buffer#3 buffer zp[2]:178 2000002.0
|
||||
byte* uctoa::buffer#4 buffer zp[2]:178 2.000000002E9
|
||||
byte uctoa::digit
|
||||
byte uctoa::digit#1 digit zp[1]:180 2.000000002E9
|
||||
byte uctoa::digit#2 digit zp[1]:180 3.07692308E8
|
||||
byte uctoa::digit_value
|
||||
byte uctoa::digit_value#0 digit_value zp[1]:216 6.000000005999999E8
|
||||
byte* uctoa::digit_values
|
||||
byte uctoa::max_digits
|
||||
byte uctoa::radix
|
||||
byte uctoa::started
|
||||
byte uctoa::started#2 started zp[1]:181 6.000000005999999E8
|
||||
byte uctoa::started#4 started zp[1]:181 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]:178 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]:216 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
|
||||
void waitFrames(signed byte waitFrames::frames)
|
||||
signed byte waitFrames::frames
|
||||
signed byte waitFrames::frames#0 reg byte x 2.0000002E7
|
||||
signed byte waitFrames::frames#4 reg byte x 1.0000001E7
|
||||
|
||||
zp[2]:128 [ 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]:130 [ md5::offset#10 md5::offset#1 ]
|
||||
zp[4]:132 [ h0#0 h0#3 ]
|
||||
zp[4]:136 [ h1#0 h1#3 ]
|
||||
zp[4]:140 [ h2#0 h2#3 ]
|
||||
zp[4]:144 [ h3#0 h3#3 ]
|
||||
zp[1]:148 [ md5::i#13 md5::i#1 ]
|
||||
zp[4]:149 [ md5::a#11 md5::a#59 md5::a#0 md5::$72 md5::$73 md5::$74 md5::$76 ]
|
||||
zp[4]:153 [ md5::b#10 md5::b#62 md5::b#0 ]
|
||||
zp[4]:157 [ md5::d#1 md5::d#64 md5::c#0 ]
|
||||
zp[4]:161 [ md5::d#10 md5::d#62 md5::d#0 ]
|
||||
zp[4]:165 [ md5::f#10 md5::f#12 md5::f#13 md5::f#14 md5::f#1 md5::$44 md5::$38 md5::$31 md5::$27 md5::$43 ]
|
||||
zp[1]:169 [ md5::g#10 md5::g#2 md5::g#3 md5::g#4 md5::g#38 md5::$84 ]
|
||||
zp[4]:170 [ md5::temp#0 md5::temp#19 md5::temp#20 md5::temp#21 md5::temp#22 md5::temp#23 ]
|
||||
zp[1]:174 [ md5::i#10 md5::i#62 md5::i#63 md5::i#64 md5::i#65 md5::i#66 ]
|
||||
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[1]:175 [ printf_uchar::format_zero_padding#10 printf_number_buffer::format_zero_padding#0 ]
|
||||
reg byte x [ waitFrames::frames#4 waitFrames::frames#0 ]
|
||||
zp[2]:176 [ mod16::a#3 mod16::a#0 mod16::a#1 mod16::a#2 mul7::return#2 md5::$40 md5::$35 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]:178 [ 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]:180 [ 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]:181 [ printf_padding::length#3 printf_padding::length#1 printf_padding::length#0 uctoa::started#2 uctoa::started#4 ]
|
||||
zp[1]:182 [ printf_padding::i#2 printf_padding::i#1 ]
|
||||
reg byte a [ cputs::c#1 ]
|
||||
zp[1]:183 [ cputc::c ]
|
||||
zp[2]:184 [ md5::$0 md5::$1 md5::$2 md5::$3 md5::new_len#0 ]
|
||||
zp[2]:186 [ calloc::return#2 md5::msg#1 calloc::return#0 malloc::size#0 malloc::mem#0 ]
|
||||
zp[2]:188 [ md5::$89 strlen::str#3 strlen::str#5 strlen::str#0 cputs::s#11 cputs::s#12 cputs::s#0 ]
|
||||
zp[4]:190 [ md5::bits_len ]
|
||||
zp[2]:194 [ md5::w#0 ]
|
||||
zp[4]:196 [ print32::l ]
|
||||
reg byte a [ md5::$25 ]
|
||||
reg byte a [ md5::$26 ]
|
||||
zp[1]:200 [ md5::$87 ]
|
||||
zp[4]:201 [ md5::$69 md5::$70 md5::$71 md5::lr#0 md5::b#1 ]
|
||||
reg byte a [ md5::$75 ]
|
||||
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]:205 [ md5::$32 md5::$33 ]
|
||||
reg byte a [ mul5::a#0 ]
|
||||
reg byte a [ mod16::return#2 ]
|
||||
zp[4]:209 [ md5::$28 md5::$29 ]
|
||||
reg byte x [ cputc::convertToScreenCode1_return#0 ]
|
||||
zp[1]:213 [ printf_number_buffer::buffer_sign#0 ]
|
||||
reg byte a [ mod16::return#0 ]
|
||||
zp[2]:214 [ cursorLocation::return#0 putchar::loc#0 cursorLocation::return#1 cursorLocation::return#3 setcursor::loc#0 cursorLocation::$0 cursorLocation::$1 cursorLocation::$3 cursorLocation::$5 mul7::$2 mul7::$3 mul7::$4 memcpy::src_end#0 ]
|
||||
reg byte a [ putchar::newChar#0 ]
|
||||
reg byte x [ setcursor::c#0 ]
|
||||
reg byte a [ setcursor::c#1 ]
|
||||
zp[1]:216 [ uctoa::digit_value#0 uctoa_append::sub#0 printf_padding::pad#3 ]
|
||||
reg byte x [ uctoa_append::return#0 ]
|
||||
zp[2]:217 [ cursorLocation::$4 mul5::$2 mul3::$2 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 ]
|
60
src/test/ref/memset-min.asm
Normal file
60
src/test/ref/memset-min.asm
Normal file
@ -0,0 +1,60 @@
|
||||
// Minimal memset usage
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.label SCREEN = $400
|
||||
.label COLS = $d800
|
||||
main: {
|
||||
// memset(SCREEN, '*', 1000)
|
||||
ldx #'*'
|
||||
lda #<SCREEN
|
||||
sta.z memset.str
|
||||
lda #>SCREEN
|
||||
sta.z memset.str+1
|
||||
jsr memset
|
||||
// memset(COLS, 0, 1000)
|
||||
ldx #0
|
||||
lda #<COLS
|
||||
sta.z memset.str
|
||||
lda #>COLS
|
||||
sta.z memset.str+1
|
||||
jsr memset
|
||||
// }
|
||||
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(2) str, byte register(X) c)
|
||||
memset: {
|
||||
.label end = 4
|
||||
.label dst = 2
|
||||
.label str = 2
|
||||
// end = (char*)str + num
|
||||
clc
|
||||
lda.z str
|
||||
adc #<$3e8
|
||||
sta.z end
|
||||
lda.z str+1
|
||||
adc #>$3e8
|
||||
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
|
||||
// }
|
||||
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
|
||||
}
|
34
src/test/ref/memset-min.cfg
Normal file
34
src/test/ref/memset-min.cfg
Normal file
@ -0,0 +1,34 @@
|
||||
|
||||
void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
[1] call memset
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[2] phi()
|
||||
[3] call memset
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[4] return
|
||||
to:@return
|
||||
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
memset: scope:[memset] from main main::@1
|
||||
[5] memset::c#2 = phi( main/'*', main::@1/0 )
|
||||
[5] memset::str#3 = phi( main/(void*)SCREEN, main::@1/(void*)COLS )
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset
|
||||
[6] memset::end#0 = (byte*)memset::str#3 + $3e8
|
||||
[7] memset::dst#4 = (byte*)memset::str#3
|
||||
to:memset::@2
|
||||
memset::@2: scope:[memset] from memset::@1 memset::@3
|
||||
[8] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 )
|
||||
[9] if(memset::dst#2!=memset::end#0) goto memset::@3
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset::@2
|
||||
[10] return
|
||||
to:@return
|
||||
memset::@3: scope:[memset] from memset::@2
|
||||
[11] *memset::dst#2 = memset::c#2
|
||||
[12] memset::dst#1 = ++ memset::dst#2
|
||||
to:memset::@2
|
550
src/test/ref/memset-min.log
Normal file
550
src/test/ref/memset-min.log
Normal file
@ -0,0 +1,550 @@
|
||||
|
||||
CONTROL FLOW GRAPH SSA
|
||||
|
||||
void main()
|
||||
main: scope:[main] from __start
|
||||
memset::str#0 = (void*)SCREEN
|
||||
memset::c#0 = '*'
|
||||
memset::num#0 = $3e8
|
||||
call memset
|
||||
memset::return#0 = memset::return#3
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
memset::str#1 = (void*)COLS
|
||||
memset::c#1 = 0
|
||||
memset::num#1 = $3e8
|
||||
call memset
|
||||
memset::return#1 = memset::return#3
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@2
|
||||
return
|
||||
to:@return
|
||||
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
memset: scope:[memset] from main main::@1
|
||||
memset::c#5 = phi( main/memset::c#0, main::@1/memset::c#1 )
|
||||
memset::str#4 = phi( main/memset::str#0, main::@1/memset::str#1 )
|
||||
memset::num#2 = phi( main/memset::num#0, main::@1/memset::num#1 )
|
||||
memset::$0 = memset::num#2 > 0
|
||||
memset::$1 = ! memset::$0
|
||||
if(memset::$1) goto memset::@1
|
||||
to:memset::@2
|
||||
memset::@1: scope:[memset] from memset memset::@3
|
||||
memset::str#2 = phi( memset/memset::str#4, memset::@3/memset::str#5 )
|
||||
memset::return#2 = memset::str#2
|
||||
to:memset::@return
|
||||
memset::@2: scope:[memset] from memset
|
||||
memset::c#4 = phi( memset/memset::c#5 )
|
||||
memset::num#3 = phi( memset/memset::num#2 )
|
||||
memset::str#3 = phi( memset/memset::str#4 )
|
||||
memset::$4 = (byte*)memset::str#3
|
||||
memset::$2 = memset::$4 + memset::num#3
|
||||
memset::end#0 = memset::$2
|
||||
memset::dst#0 = ((byte*)) memset::str#3
|
||||
to:memset::@3
|
||||
memset::@3: scope:[memset] from memset::@2 memset::@4
|
||||
memset::c#3 = phi( memset::@2/memset::c#4, memset::@4/memset::c#2 )
|
||||
memset::str#5 = phi( memset::@2/memset::str#3, memset::@4/memset::str#6 )
|
||||
memset::end#1 = phi( memset::@2/memset::end#0, memset::@4/memset::end#2 )
|
||||
memset::dst#2 = phi( memset::@2/memset::dst#0, memset::@4/memset::dst#1 )
|
||||
memset::$3 = memset::dst#2 != memset::end#1
|
||||
if(memset::$3) goto memset::@4
|
||||
to:memset::@1
|
||||
memset::@4: scope:[memset] from memset::@3
|
||||
memset::str#6 = phi( memset::@3/memset::str#5 )
|
||||
memset::end#2 = phi( memset::@3/memset::end#1 )
|
||||
memset::dst#3 = phi( memset::@3/memset::dst#2 )
|
||||
memset::c#2 = phi( memset::@3/memset::c#3 )
|
||||
*memset::dst#3 = memset::c#2
|
||||
memset::dst#1 = ++ memset::dst#3
|
||||
to:memset::@3
|
||||
memset::@return: scope:[memset] from memset::@1
|
||||
memset::return#4 = phi( memset::@1/memset::return#2 )
|
||||
memset::return#3 = memset::return#4
|
||||
return
|
||||
to:@return
|
||||
|
||||
void __start()
|
||||
__start: scope:[__start] from
|
||||
call main
|
||||
to:__start::@1
|
||||
__start::@1: scope:[__start] from __start
|
||||
to:__start::@return
|
||||
__start::@return: scope:[__start] from __start::@1
|
||||
return
|
||||
to:@return
|
||||
|
||||
SYMBOL TABLE SSA
|
||||
const nomodify byte* COLS = (byte*)$d800
|
||||
const nomodify byte* SCREEN = (byte*)$400
|
||||
void __start()
|
||||
void main()
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
bool~ memset::$0
|
||||
bool~ memset::$1
|
||||
byte*~ memset::$2
|
||||
bool~ memset::$3
|
||||
byte*~ memset::$4
|
||||
byte memset::c
|
||||
byte memset::c#0
|
||||
byte memset::c#1
|
||||
byte memset::c#2
|
||||
byte memset::c#3
|
||||
byte memset::c#4
|
||||
byte memset::c#5
|
||||
byte* memset::dst
|
||||
byte* memset::dst#0
|
||||
byte* memset::dst#1
|
||||
byte* memset::dst#2
|
||||
byte* memset::dst#3
|
||||
byte* memset::end
|
||||
byte* memset::end#0
|
||||
byte* memset::end#1
|
||||
byte* memset::end#2
|
||||
word memset::num
|
||||
word memset::num#0
|
||||
word memset::num#1
|
||||
word memset::num#2
|
||||
word memset::num#3
|
||||
void* memset::return
|
||||
void* memset::return#0
|
||||
void* memset::return#1
|
||||
void* memset::return#2
|
||||
void* memset::return#3
|
||||
void* memset::return#4
|
||||
void* memset::str
|
||||
void* memset::str#0
|
||||
void* memset::str#1
|
||||
void* memset::str#2
|
||||
void* memset::str#3
|
||||
void* memset::str#4
|
||||
void* memset::str#5
|
||||
void* memset::str#6
|
||||
|
||||
Adding number conversion cast (unumber) $3e8 in memset::num#0 = $3e8
|
||||
Adding number conversion cast (unumber) 0 in memset::c#1 = 0
|
||||
Adding number conversion cast (unumber) $3e8 in memset::num#1 = $3e8
|
||||
Adding number conversion cast (unumber) 0 in memset::$0 = memset::num#2 > 0
|
||||
Successful SSA optimization PassNAddNumberTypeConversions
|
||||
Inlining cast memset::num#0 = (unumber)$3e8
|
||||
Inlining cast memset::c#1 = (unumber)0
|
||||
Inlining cast memset::num#1 = (unumber)$3e8
|
||||
Inlining cast memset::dst#0 = (byte*)memset::str#3
|
||||
Successful SSA optimization Pass2InlineCast
|
||||
Simplifying constant pointer cast (byte*) 1024
|
||||
Simplifying constant pointer cast (byte*) 55296
|
||||
Simplifying constant integer cast $3e8
|
||||
Simplifying constant integer cast 0
|
||||
Simplifying constant integer cast $3e8
|
||||
Simplifying constant integer cast 0
|
||||
Successful SSA optimization PassNCastSimplification
|
||||
Finalized unsigned number type $3e8
|
||||
Finalized unsigned number type 0
|
||||
Finalized unsigned number type $3e8
|
||||
Finalized unsigned number type 0
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Inversing boolean not [13] memset::$1 = memset::num#2 <= 0 from [12] memset::$0 = memset::num#2 > 0
|
||||
Successful SSA optimization Pass2UnaryNotSimplification
|
||||
Alias memset::return#2 = memset::str#2 memset::return#4 memset::return#3
|
||||
Alias memset::str#3 = memset::str#4
|
||||
Alias memset::num#2 = memset::num#3
|
||||
Alias memset::c#4 = memset::c#5
|
||||
Alias memset::end#0 = memset::$2
|
||||
Alias memset::c#2 = memset::c#3
|
||||
Alias memset::dst#2 = memset::dst#3
|
||||
Alias memset::end#1 = memset::end#2
|
||||
Alias memset::str#5 = memset::str#6
|
||||
Successful SSA optimization Pass2AliasElimination
|
||||
Identical Phi Alias memset::end#0 = memset::end#1
|
||||
Identical Phi Alias memset::str#3 = memset::str#5
|
||||
Identical Phi Alias memset::c#2 = memset::c#4
|
||||
Successful SSA optimization Pass2IdenticalPhiElimination
|
||||
Identical Phi Alias memset::str#3 = memset::return#2
|
||||
Successful SSA optimization Pass2IdenticalPhiElimination
|
||||
Simple Condition memset::$1 [13] if(memset::num#2<=0) goto memset::@1
|
||||
Simple Condition memset::$3 [19] if(memset::dst#2!=memset::end#0) goto memset::@4
|
||||
Successful SSA optimization Pass2ConditionalJumpSimplification
|
||||
Constant memset::str#0 = (void*)SCREEN
|
||||
Constant memset::c#0 = '*'
|
||||
Constant memset::num#0 = $3e8
|
||||
Constant memset::str#1 = (void*)COLS
|
||||
Constant memset::c#1 = 0
|
||||
Constant memset::num#1 = $3e8
|
||||
Successful SSA optimization Pass2ConstantIdentification
|
||||
Eliminating unused variable memset::return#0 and assignment [1] memset::return#0 = memset::str#3
|
||||
Eliminating unused variable memset::return#1 and assignment [3] memset::return#1 = memset::str#3
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused procedure __start
|
||||
Removing unused procedure block __start
|
||||
Removing unused procedure block __start::@1
|
||||
Removing unused procedure block __start::@return
|
||||
Successful SSA optimization PassNEliminateEmptyStart
|
||||
Inlining Noop Cast [5] memset::$4 = (byte*)memset::str#3 keeping memset::str#3
|
||||
Inlining Noop Cast [7] memset::dst#0 = (byte*)memset::str#3 keeping memset::str#3
|
||||
Successful SSA optimization Pass2NopCastInlining
|
||||
Inlining constant with var siblings memset::str#0
|
||||
Inlining constant with var siblings memset::c#0
|
||||
Inlining constant with var siblings memset::num#0
|
||||
Inlining constant with var siblings memset::str#1
|
||||
Inlining constant with var siblings memset::c#1
|
||||
Inlining constant with var siblings memset::num#1
|
||||
Constant inlined memset::str#1 = (void*)COLS
|
||||
Constant inlined memset::str#0 = (void*)SCREEN
|
||||
Constant inlined memset::num#1 = $3e8
|
||||
Constant inlined memset::c#0 = '*'
|
||||
Constant inlined memset::num#0 = $3e8
|
||||
Constant inlined memset::c#1 = 0
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Identical Phi Const Values memset::num#2 $3e8
|
||||
Successful SSA optimization Pass2IdenticalPhiElimination
|
||||
if() condition always false - eliminating [4] if($3e8<=0) goto memset::@1
|
||||
Successful SSA optimization Pass2ConstantIfs
|
||||
Adding NOP phi() at start of main
|
||||
Adding NOP phi() at start of main::@1
|
||||
Adding NOP phi() at start of main::@2
|
||||
Adding NOP phi() at start of memset::@1
|
||||
CALL GRAPH
|
||||
Calls in [main] to memset:1 memset:3
|
||||
|
||||
Created 3 initial phi equivalence classes
|
||||
Coalesced [15] memset::dst#5 = memset::dst#1
|
||||
Coalesced down to 3 phi equivalence classes
|
||||
Culled Empty Block label main::@2
|
||||
Culled Empty Block label memset::@1
|
||||
Renumbering block memset::@2 to memset::@1
|
||||
Renumbering block memset::@3 to memset::@2
|
||||
Renumbering block memset::@4 to memset::@3
|
||||
Adding NOP phi() at start of main
|
||||
Adding NOP phi() at start of main::@1
|
||||
|
||||
FINAL CONTROL FLOW GRAPH
|
||||
|
||||
void main()
|
||||
main: scope:[main] from
|
||||
[0] phi()
|
||||
[1] call memset
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main
|
||||
[2] phi()
|
||||
[3] call memset
|
||||
to:main::@return
|
||||
main::@return: scope:[main] from main::@1
|
||||
[4] return
|
||||
to:@return
|
||||
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
memset: scope:[memset] from main main::@1
|
||||
[5] memset::c#2 = phi( main/'*', main::@1/0 )
|
||||
[5] memset::str#3 = phi( main/(void*)SCREEN, main::@1/(void*)COLS )
|
||||
to:memset::@1
|
||||
memset::@1: scope:[memset] from memset
|
||||
[6] memset::end#0 = (byte*)memset::str#3 + $3e8
|
||||
[7] memset::dst#4 = (byte*)memset::str#3
|
||||
to:memset::@2
|
||||
memset::@2: scope:[memset] from memset::@1 memset::@3
|
||||
[8] memset::dst#2 = phi( memset::@1/memset::dst#4, memset::@3/memset::dst#1 )
|
||||
[9] if(memset::dst#2!=memset::end#0) goto memset::@3
|
||||
to:memset::@return
|
||||
memset::@return: scope:[memset] from memset::@2
|
||||
[10] return
|
||||
to:@return
|
||||
memset::@3: scope:[memset] from memset::@2
|
||||
[11] *memset::dst#2 = memset::c#2
|
||||
[12] memset::dst#1 = ++ memset::dst#2
|
||||
to:memset::@2
|
||||
|
||||
|
||||
VARIABLE REGISTER WEIGHTS
|
||||
void main()
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
byte memset::c
|
||||
byte memset::c#2 14.428571428571429
|
||||
byte* memset::dst
|
||||
byte* memset::dst#1 202.0
|
||||
byte* memset::dst#2 138.33333333333331
|
||||
byte* memset::dst#4 22.0
|
||||
byte* memset::end
|
||||
byte* memset::end#0 18.666666666666664
|
||||
word memset::num
|
||||
void* memset::return
|
||||
void* memset::str
|
||||
void* memset::str#3
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ memset::str#3 ]
|
||||
[ memset::c#2 ]
|
||||
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
|
||||
Added variable memset::end#0 to live range equivalence class [ memset::end#0 ]
|
||||
Complete equivalence classes
|
||||
[ memset::str#3 ]
|
||||
[ memset::c#2 ]
|
||||
[ memset::dst#2 memset::dst#4 memset::dst#1 ]
|
||||
[ memset::end#0 ]
|
||||
Allocated zp[2]:2 [ memset::str#3 ]
|
||||
Allocated zp[1]:4 [ memset::c#2 ]
|
||||
Allocated zp[2]:5 [ memset::dst#2 memset::dst#4 memset::dst#1 ]
|
||||
Allocated zp[2]:7 [ memset::end#0 ]
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [6] memset::end#0 = (byte*)memset::str#3 + $3e8 [ memset::str#3 memset::c#2 memset::end#0 ] ( memset:1 [ memset::str#3 memset::c#2 memset::end#0 ] { } memset:3 [ memset::str#3 memset::c#2 memset::end#0 ] { } ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp[1]:4 [ memset::c#2 ]
|
||||
Statement [7] memset::dst#4 = (byte*)memset::str#3 [ memset::c#2 memset::end#0 memset::dst#4 ] ( memset:1 [ memset::c#2 memset::end#0 memset::dst#4 ] { } memset:3 [ memset::c#2 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
|
||||
Statement [9] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#2 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#2 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#2 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
|
||||
Statement [11] *memset::dst#2 = memset::c#2 [ memset::c#2 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#2 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#2 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
||||
Removing always clobbered register reg byte y as potential for zp[1]:4 [ memset::c#2 ]
|
||||
Statement [6] memset::end#0 = (byte*)memset::str#3 + $3e8 [ memset::str#3 memset::c#2 memset::end#0 ] ( memset:1 [ memset::str#3 memset::c#2 memset::end#0 ] { } memset:3 [ memset::str#3 memset::c#2 memset::end#0 ] { } ) always clobbers reg byte a
|
||||
Statement [7] memset::dst#4 = (byte*)memset::str#3 [ memset::c#2 memset::end#0 memset::dst#4 ] ( memset:1 [ memset::c#2 memset::end#0 memset::dst#4 ] { } memset:3 [ memset::c#2 memset::end#0 memset::dst#4 ] { } ) always clobbers reg byte a
|
||||
Statement [9] if(memset::dst#2!=memset::end#0) goto memset::@3 [ memset::c#2 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#2 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#2 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a
|
||||
Statement [11] *memset::dst#2 = memset::c#2 [ memset::c#2 memset::end#0 memset::dst#2 ] ( memset:1 [ memset::c#2 memset::end#0 memset::dst#2 ] { } memset:3 [ memset::c#2 memset::end#0 memset::dst#2 ] { } ) always clobbers reg byte a reg byte y
|
||||
Potential registers zp[2]:2 [ memset::str#3 ] : zp[2]:2 ,
|
||||
Potential registers zp[1]:4 [ memset::c#2 ] : zp[1]:4 , reg byte x ,
|
||||
Potential registers zp[2]:5 [ memset::dst#2 memset::dst#4 memset::dst#1 ] : zp[2]:5 ,
|
||||
Potential registers zp[2]:7 [ memset::end#0 ] : zp[2]:7 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [memset] 362.33: zp[2]:5 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 18.67: zp[2]:7 [ memset::end#0 ] 14.43: zp[1]:4 [ memset::c#2 ] 0: zp[2]:2 [ memset::str#3 ]
|
||||
Uplift Scope [main]
|
||||
Uplift Scope []
|
||||
|
||||
Uplifting [memset] best 599 combination zp[2]:5 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:7 [ memset::end#0 ] reg byte x [ memset::c#2 ] zp[2]:2 [ memset::str#3 ]
|
||||
Uplifting [main] best 599 combination
|
||||
Uplifting [] best 599 combination
|
||||
Coalescing zero page register [ zp[2]:2 [ memset::str#3 ] ] with [ zp[2]:5 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1
|
||||
Allocated (was zp[2]:7) zp[2]:4 [ memset::end#0 ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
// File Comments
|
||||
// Minimal memset usage
|
||||
// Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
// Global Constants & labels
|
||||
.label SCREEN = $400
|
||||
.label COLS = $d800
|
||||
// main
|
||||
main: {
|
||||
// [1] call memset
|
||||
// [5] phi from main to memset [phi:main->memset]
|
||||
memset_from_main:
|
||||
// [5] phi memset::c#2 = '*' [phi:main->memset#0] -- vbuxx=vbuc1
|
||||
ldx #'*'
|
||||
// [5] phi memset::str#3 = (void*)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1
|
||||
lda #<SCREEN
|
||||
sta.z memset.str
|
||||
lda #>SCREEN
|
||||
sta.z memset.str+1
|
||||
jsr memset
|
||||
// [2] phi from main to main::@1 [phi:main->main::@1]
|
||||
__b1_from_main:
|
||||
jmp __b1
|
||||
// main::@1
|
||||
__b1:
|
||||
// [3] call memset
|
||||
// [5] phi from main::@1 to memset [phi:main::@1->memset]
|
||||
memset_from___b1:
|
||||
// [5] phi memset::c#2 = 0 [phi:main::@1->memset#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
// [5] phi memset::str#3 = (void*)COLS [phi:main::@1->memset#1] -- pvoz1=pvoc1
|
||||
lda #<COLS
|
||||
sta.z memset.str
|
||||
lda #>COLS
|
||||
sta.z memset.str+1
|
||||
jsr memset
|
||||
jmp __breturn
|
||||
// main::@return
|
||||
__breturn:
|
||||
// [4] return
|
||||
rts
|
||||
}
|
||||
// memset
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
// memset(void* zp(2) str, byte register(X) c)
|
||||
memset: {
|
||||
.label end = 4
|
||||
.label dst = 2
|
||||
.label str = 2
|
||||
jmp __b1
|
||||
// memset::@1
|
||||
__b1:
|
||||
// [6] memset::end#0 = (byte*)memset::str#3 + $3e8 -- pbuz1=pbuz2_plus_vwuc1
|
||||
clc
|
||||
lda.z str
|
||||
adc #<$3e8
|
||||
sta.z end
|
||||
lda.z str+1
|
||||
adc #>$3e8
|
||||
sta.z end+1
|
||||
// [7] memset::dst#4 = (byte*)memset::str#3
|
||||
// [8] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
|
||||
__b2_from___b1:
|
||||
__b2_from___b3:
|
||||
// [8] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy
|
||||
jmp __b2
|
||||
// memset::@2
|
||||
__b2:
|
||||
// [9] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1
|
||||
lda.z dst+1
|
||||
cmp.z end+1
|
||||
bne __b3
|
||||
lda.z dst
|
||||
cmp.z end
|
||||
bne __b3
|
||||
jmp __breturn
|
||||
// memset::@return
|
||||
__breturn:
|
||||
// [10] return
|
||||
rts
|
||||
// memset::@3
|
||||
__b3:
|
||||
// [11] *memset::dst#2 = memset::c#2 -- _deref_pbuz1=vbuxx
|
||||
txa
|
||||
ldy #0
|
||||
sta (dst),y
|
||||
// [12] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
|
||||
inc.z dst
|
||||
bne !+
|
||||
inc.z dst+1
|
||||
!:
|
||||
jmp __b2_from___b3
|
||||
}
|
||||
// File Data
|
||||
|
||||
ASSEMBLER OPTIMIZATIONS
|
||||
Removing instruction jmp __b1
|
||||
Removing instruction jmp __breturn
|
||||
Removing instruction jmp __b1
|
||||
Removing instruction jmp __b2
|
||||
Removing instruction jmp __breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing label __b2_from___b3 with __b2
|
||||
Removing instruction __b1_from_main:
|
||||
Removing instruction memset_from___b1:
|
||||
Removing instruction __b2_from___b1:
|
||||
Removing instruction __b2_from___b3:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction memset_from_main:
|
||||
Removing instruction __b1:
|
||||
Removing instruction __breturn:
|
||||
Removing instruction __b1:
|
||||
Removing instruction __breturn:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
const nomodify byte* COLS = (byte*) 55296
|
||||
const nomodify byte* SCREEN = (byte*) 1024
|
||||
void main()
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
byte memset::c
|
||||
byte memset::c#2 reg byte x 14.428571428571429
|
||||
byte* memset::dst
|
||||
byte* memset::dst#1 dst zp[2]:2 202.0
|
||||
byte* memset::dst#2 dst zp[2]:2 138.33333333333331
|
||||
byte* memset::dst#4 dst zp[2]:2 22.0
|
||||
byte* memset::end
|
||||
byte* memset::end#0 end zp[2]:4 18.666666666666664
|
||||
word memset::num
|
||||
void* memset::return
|
||||
void* memset::str
|
||||
void* memset::str#3 str zp[2]:2
|
||||
|
||||
zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
|
||||
reg byte x [ memset::c#2 ]
|
||||
zp[2]:4 [ memset::end#0 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
Score: 491
|
||||
|
||||
// File Comments
|
||||
// Minimal memset usage
|
||||
// Upstart
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
// Global Constants & labels
|
||||
.label SCREEN = $400
|
||||
.label COLS = $d800
|
||||
// main
|
||||
main: {
|
||||
// memset(SCREEN, '*', 1000)
|
||||
// [1] call memset
|
||||
// [5] phi from main to memset [phi:main->memset]
|
||||
// [5] phi memset::c#2 = '*' [phi:main->memset#0] -- vbuxx=vbuc1
|
||||
ldx #'*'
|
||||
// [5] phi memset::str#3 = (void*)SCREEN [phi:main->memset#1] -- pvoz1=pvoc1
|
||||
lda #<SCREEN
|
||||
sta.z memset.str
|
||||
lda #>SCREEN
|
||||
sta.z memset.str+1
|
||||
jsr memset
|
||||
// [2] phi from main to main::@1 [phi:main->main::@1]
|
||||
// main::@1
|
||||
// memset(COLS, 0, 1000)
|
||||
// [3] call memset
|
||||
// [5] phi from main::@1 to memset [phi:main::@1->memset]
|
||||
// [5] phi memset::c#2 = 0 [phi:main::@1->memset#0] -- vbuxx=vbuc1
|
||||
ldx #0
|
||||
// [5] phi memset::str#3 = (void*)COLS [phi:main::@1->memset#1] -- pvoz1=pvoc1
|
||||
lda #<COLS
|
||||
sta.z memset.str
|
||||
lda #>COLS
|
||||
sta.z memset.str+1
|
||||
jsr memset
|
||||
// main::@return
|
||||
// }
|
||||
// [4] return
|
||||
rts
|
||||
}
|
||||
// memset
|
||||
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
|
||||
// memset(void* zp(2) str, byte register(X) c)
|
||||
memset: {
|
||||
.label end = 4
|
||||
.label dst = 2
|
||||
.label str = 2
|
||||
// memset::@1
|
||||
// end = (char*)str + num
|
||||
// [6] memset::end#0 = (byte*)memset::str#3 + $3e8 -- pbuz1=pbuz2_plus_vwuc1
|
||||
clc
|
||||
lda.z str
|
||||
adc #<$3e8
|
||||
sta.z end
|
||||
lda.z str+1
|
||||
adc #>$3e8
|
||||
sta.z end+1
|
||||
// [7] memset::dst#4 = (byte*)memset::str#3
|
||||
// [8] phi from memset::@1 memset::@3 to memset::@2 [phi:memset::@1/memset::@3->memset::@2]
|
||||
// [8] phi memset::dst#2 = memset::dst#4 [phi:memset::@1/memset::@3->memset::@2#0] -- register_copy
|
||||
// memset::@2
|
||||
__b2:
|
||||
// for(char* dst = str; dst!=end; dst++)
|
||||
// [9] if(memset::dst#2!=memset::end#0) goto memset::@3 -- pbuz1_neq_pbuz2_then_la1
|
||||
lda.z dst+1
|
||||
cmp.z end+1
|
||||
bne __b3
|
||||
lda.z dst
|
||||
cmp.z end
|
||||
bne __b3
|
||||
// memset::@return
|
||||
// }
|
||||
// [10] return
|
||||
rts
|
||||
// memset::@3
|
||||
__b3:
|
||||
// *dst = c
|
||||
// [11] *memset::dst#2 = memset::c#2 -- _deref_pbuz1=vbuxx
|
||||
txa
|
||||
ldy #0
|
||||
sta (dst),y
|
||||
// for(char* dst = str; dst!=end; dst++)
|
||||
// [12] memset::dst#1 = ++ memset::dst#2 -- pbuz1=_inc_pbuz1
|
||||
inc.z dst
|
||||
bne !+
|
||||
inc.z dst+1
|
||||
!:
|
||||
jmp __b2
|
||||
}
|
||||
// File Data
|
||||
|
20
src/test/ref/memset-min.sym
Normal file
20
src/test/ref/memset-min.sym
Normal file
@ -0,0 +1,20 @@
|
||||
const nomodify byte* COLS = (byte*) 55296
|
||||
const nomodify byte* SCREEN = (byte*) 1024
|
||||
void main()
|
||||
void* memset(void* memset::str , byte memset::c , word memset::num)
|
||||
byte memset::c
|
||||
byte memset::c#2 reg byte x 14.428571428571429
|
||||
byte* memset::dst
|
||||
byte* memset::dst#1 dst zp[2]:2 202.0
|
||||
byte* memset::dst#2 dst zp[2]:2 138.33333333333331
|
||||
byte* memset::dst#4 dst zp[2]:2 22.0
|
||||
byte* memset::end
|
||||
byte* memset::end#0 end zp[2]:4 18.666666666666664
|
||||
word memset::num
|
||||
void* memset::return
|
||||
void* memset::str
|
||||
void* memset::str#3 str zp[2]:2
|
||||
|
||||
zp[2]:2 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 ]
|
||||
reg byte x [ memset::c#2 ]
|
||||
zp[2]:4 [ memset::end#0 ]
|
Loading…
x
Reference in New Issue
Block a user