Created
October 10, 2019 08:34
-
-
Save MrSmith33/4bc52e8081b628dc71ce8d9f80c9f540 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
intervals formatInt | |
p 0 rax [rax]: [40; 41) [86; 88) [108; 112) | |
p 1 rcx [rcx]: [1; 2) [30; 41) | |
p 2 rdx [rdx]: [1; 4) [32; 41) [84; 90) [106; 110) | |
p 4 rsp [rsp]: [36; 44) | |
p 8 r8 [r8]: [1; 6) [34; 41) | |
p 9 r9 [r9]: [1; 8) [36; 41) | |
p 10 r10 [r10]: [40; 41) | |
p 11 r11 [r11]: [40; 41) | |
v 16 v0 [no reg]: minSize [24; 48) (28 instr) (48 phi) | |
v 17 v1 [no reg]: i [62; 66) (64 instr) (66 phi) | |
v 18 v2 [no reg]: i [72; 74) (74 phi) | |
v 19 v3 [no reg]: numDigits [76; 96) [116; 118) (96 instr) (118 phi) | |
v 20 v4 [no reg]: i [76; 104) (78 instr) (82 instr) (104 instr) | |
v 21 v5 [no reg]: numDigits [120; 126) [136; 142) (122 instr) (126 instr) (138 phi) (142 instr) | |
v 22 v6 [no reg]: numDigits [152; 166) (154 phi) (166 phi) | |
v 23 v7 [no reg]: numDigits [168; 182) (174 instr) (182 instr) | |
v 24 v8 [no reg]: i [2; 14) [50; 58) (2 instr) (14 instr) (52 instr) (54 phi) (58 instr) | |
v 25 v9 [no reg]: output [4; 172) (4 instr) (26 instr) (44 instr) (100 instr) (130 instr) (146 instr) (158 instr) (172 instr) | |
v 26 v10 [no reg]: minSize [6; 18) [50; 134) (6 instr) (18 instr) (18 phi) (122 instr) | |
v 27 v11 [no reg]: result [8; 180) (8 instr) (170 instr) (180 instr) | |
v 28 v12 [no reg]: neg [52; 138) (52 instr) (54 instr) (138 instr) | |
v 29 v13 [no reg]: (*output).ptr [26; 30) (26 instr) (30 instr) | |
v 30 v14 [no reg]: 21 - minSize [28; 32) (28 instr) (32 instr) | |
v 31 v15 [no reg]: (*output)[20] [44; 46) (44 instr) (46 instr) | |
v 32 v16 [no reg]: -i [58; 60) (58 instr) (60 phi) | |
v 33 v17 [no reg]: overflow [64; 154) (64 instr) (66 instr) (154 instr) | |
v 34 v18 [no reg]: 10 [86; 88) (86 instr) (88 instr) | |
v 35 v19 [no reg]: i % 10 [90; 92) (90 instr) (92 instr) | |
v 36 v20 [no reg]: '0' + i % 10 [92; 94) (92 instr) (94 instr) | |
v 37 v21 [no reg]: cast(u8)('0' + i % 10) [94; 102) (94 instr) (102 instr) | |
v 38 v22 [no reg]: numDigits [96; 114) (96 instr) (98 instr) (114 phi) | |
v 39 v23 [no reg]: 21 - ++numDigits [98; 100) (98 instr) (100 instr) | |
v 40 v24 [no reg]: (*output)[21 - ++numDigits] [100; 102) (100 instr) (102 instr) | |
v 41 v25 [no reg]: 10 [108; 110) (108 instr) (110 instr) | |
v 42 v26 [no reg]: i [112; 114) (112 instr) (114 phi) | |
v 43 v27 [no reg]: numDigits [126; 134) (126 instr) (128 instr) (134 phi) | |
v 44 v28 [no reg]: 21 - ++numDigits [128; 130) (128 instr) (130 instr) | |
v 45 v29 [no reg]: (*output)[21 - ++numDigits] [130; 132) (130 instr) (132 instr) | |
v 46 v30 [no reg]: numDigits [142; 150) (142 instr) (144 instr) (150 phi) | |
v 47 v31 [no reg]: 21 - ++numDigits [144; 146) (144 instr) (146 instr) | |
v 48 v32 [no reg]: (*output)[21 - ++numDigits] [146; 148) (146 instr) (148 instr) | |
v 49 v33 [no reg]: (*output)[20] [158; 164) (158 instr) (160 instr) (164 instr) | |
v 50 v34 [no reg]: load (*output)[20] [160; 162) (160 instr) (162 instr) | |
v 51 v35 [no reg]: (*output)[20] + 1 [162; 164) (162 instr) (164 instr) | |
v 52 v36 [no reg]: (*result).ptr [170; 178) (170 instr) (178 instr) | |
v 53 v37 [no reg]: (*output).ptr [172; 176) (172 instr) (176 instr) | |
v 54 v38 [no reg]: 21 - numDigits [174; 176) (174 instr) (176 instr) | |
v 55 v39 [no reg]: (*output).ptr + (21 - numDigits) [176; 178) (176 instr) (178 instr) | |
v 56 v40 [no reg]: (*result).length [180; 182) (180 instr) (182 instr) | |
intervals formatInt | |
p 0 rax [rax]: [40; 41) [86; 88) [108; 112) | |
p 1 rcx [rcx]: [1; 2) [30; 41) | |
p 2 rdx [rdx]: [1; 4) [32; 41) [84; 90) [106; 110) | |
p 4 rsp [rsp]: [36; 44) | |
p 8 r8 [r8]: [1; 6) [34; 41) | |
p 9 r9 [r9]: [1; 8) [36; 41) | |
p 10 r10 [r10]: [40; 41) | |
p 11 r11 [r11]: [40; 41) | |
v 16 v0 [r8d]: [24; 33) (28 instr) child: v it59 | |
v 17 v1 [rcx]: [62; 66) (64 instr) (66 phi) | |
v 18 v2 [rcx]: [72; 74) (74 phi) | |
v 19 v3 [r8d]: [76; 96) [116; 118) (96 instr) (118 phi) | |
v 20 v4 [rcx]: [76; 85) (78 instr) (82 instr) child: v it68 | |
v 21 v5 [eax]: [120; 126) [136; 142) (122 instr) (126 instr) (138 phi) (142 instr) | |
v 22 v6 [eax]: [152; 166) (154 phi) (166 phi) | |
v 23 v7 [eax]: [168; 182) (174 instr) (182 instr) | |
v 24 v8 [rcx]: [2; 14) [50; 58) (2 instr) (14 instr) (52 instr) (54 phi) (58 instr) | |
v 25 v9 [rax]: [4; 39) (4 instr) (26 instr) child: v it57 | |
v 26 v10 [r8d]: [6; 18) [50; 75) (6 instr) (18 instr) (18 phi) child: v it65 | |
v 27 v11 [r9]: [8; 35) (8 instr) child: v it58 | |
v 28 v12 [al]: [52; 85) (52 instr) (54 instr) child: v it63 | |
v 29 v13 [rcx]: [26; 30) (26 instr) (30 instr) | |
v 30 v14 [edx]: [28; 32) (28 instr) (32 instr) | |
v 31 v15 [rax]: [44; 46) (44 instr) (46 instr) | |
v 32 v16 [rcx]: [58; 60) (58 instr) (60 phi) | |
v 33 v17 [dl]: [64; 83) (64 instr) (66 instr) child: v it64 | |
v 34 v18 [rcx]: [86; 88) (86 instr) (88 instr) | |
v 35 v19 [rdx]: [90; 92) (90 instr) (92 instr) | |
v 36 v20 [rax]: [92; 94) (92 instr) (94 instr) | |
v 37 v21 [al]: [94; 102) (94 instr) (102 instr) | |
v 38 v22 [ecx]: [96; 114) (96 instr) (98 instr) (114 phi) | |
v 39 v23 [edx]: [98; 100) (98 instr) (100 instr) | |
v 40 v24 [rdx]: [100; 102) (100 instr) (102 instr) | |
v 41 v25 [r8]: [108; 110) (108 instr) (110 instr) | |
v 42 v26 [rax]: [112; 114) (112 instr) (114 phi) | |
v 43 v27 [eax]: [126; 134) (126 instr) (128 instr) (134 phi) | |
v 44 v28 [edx]: [128; 130) (128 instr) (130 instr) | |
v 45 v29 [rdx]: [130; 132) (130 instr) (132 instr) | |
v 46 v30 [eax]: [142; 150) (142 instr) (144 instr) (150 phi) | |
v 47 v31 [ecx]: [144; 146) (144 instr) (146 instr) | |
v 48 v32 [rcx]: [146; 148) (146 instr) (148 instr) | |
v 49 v33 [rcx]: [158; 164) (158 instr) (160 instr) (164 instr) | |
v 50 v34 [dl]: [160; 162) (160 instr) (162 instr) | |
v 51 v35 [dl]: [162; 164) (162 instr) (164 instr) | |
v 52 v36 [rcx]: [170; 178) (170 instr) (178 instr) | |
v 53 v37 [r8]: [172; 176) (172 instr) (176 instr) | |
v 54 v38 [r9d]: [174; 176) (174 instr) (176 instr) | |
v 55 v39 [r8]: [176; 178) (176 instr) (178 instr) | |
v 56 v40 [rcx]: [180; 182) (180 instr) (182 instr) | |
v 57 v9 [s2]: [40; 43) parent: v it25 child: v it62 | |
v 58 v11 [s1]: [36; 169) parent: v it27 child: v it61 | |
v 59 v0 [s0]: [34; 47) parent: v it16 child: v it60 | |
v 60 v0 [eax]: [48; 48) (48 phi) parent: v it59 | |
v 61 v11 [rdx]: [170; 180) (170 instr) (180 instr) parent: v it58 | |
v 62 v9 [r9]: [44; 172) (44 instr) (100 instr) (130 instr) (146 instr) (158 instr) (172 instr) parent: v it57 | |
v 63 v12 [s6]: [86; 137) parent: v it28 child: v it70 | |
v 64 v17 [s4]: [84; 153) parent: v it33 child: v it67 | |
v 65 v10 [s3]: [76; 121) parent: v it26 child: v it66 | |
v 66 v10 [ecx]: [122; 134) (122 instr) parent: v it65 | |
v 67 v17 [cl]: [154; 154) (154 instr) parent: v it64 | |
v 68 v4 [s5]: [86; 103) parent: v it20 child: v it69 | |
v 69 v4 [rax]: [104; 104) (104 instr) parent: v it68 | |
v 70 v12 [cl]: [138; 138) (138 instr) parent: v it63 | |
rax 71F5AFECA1 output | |
rcx 1 i | |
rdx 71F5AFECA1 output | |
r8d 0 minSize | |
r9d 00000071F5AFEBD0 result | |
void formatInt(i64 i, u8[21]* output, u32 minSize, u8[]* result) | |
// 0| | @0 SF. | |
// 2| 0| v8 i64 = mov rcx users [phi1, i5, i7, i22] // i | |
// 4| 1| v9 [21 x i8]* = mov rdx users [i66, i60, i56, i50, i10, i19, i38] // output | |
// 6| 2| v10 i32 = mov r8d users [i6, phi0, i47] // minSize | |
// 8| 3| v11 {i64, i8*}* = mov r9 users [i65, i70] // result | |
// 10| 4| jmp @2 | |
{ | |
u32 numDigits = 0; | |
// 12| | @2 SF. in(@0) | |
// 14| 5| if i64 v8 != i64 0 then @4 else @3 // i == 0 | |
if (i == 0) | |
{ | |
// 16| | @3 SF. in(@2) | |
// 18| 6| if i32 v10 == i32 0 then @5 else @6 // minSize v10 | |
if (minSize == 0) | |
// 20| | @5 SF. in(@3) | |
// 22| 9| jmp @6 | |
minSize = 1; | |
// 24| | @6 SF. in(@3, @5) | |
// 24| | v0 i32 = phi0(@3 i32 v10, @5 i32 1) users [i11, phi7] | |
// 26| 10| v13 i8* = mov [21 x i8]* v9 users [i12] | |
// 28| 11| v14 i32 = sub i32 21, i32 v0 users [i13] | |
// 30| 12| rcx = mov i8* v13 | |
// 32| 13| edx = mov i32 v14 | |
// 34| 14| r8 = mov i64 21 | |
// 36| 15| r9b = mov i8 48 | |
// 38| 16| rsp = sub rsp, i8 32 | |
// 40| 17| call setRangeu8, rcx, edx, r8, r9b | |
// 42| 18| rsp = add rsp, i8 32 | |
// 44| 19| v15 i8* = add [21 x i8]* v9, i8 20 users [i20] | |
// 46| 20| store i8* v15, i8 48 | |
// 48| 21| jmp @20 | |
setRangeu8((*output).ptr, 21 - minSize, 21, '0'); | |
(*output)[20] = '0'; | |
numDigits = minSize; | |
} | |
else | |
{ | |
// 50| | @4 SF. in(@2) | |
// 52| 7| v12 i8 = set_binary_cond i64 v8, i64 0 users [i8, i53] // neg = i < 0 | |
// 54| 8| if not i8 v12 then @7 else @8 | |
bool neg = i < 0; | |
if (neg) { | |
i = -i; | |
// 56| | @7 SF. in(@4) | |
// 58| 22| v16 i64 = neg i64 v8 users [phi1] | |
// 60| 23| jmp @8 | |
} | |
// 62| | @8 SF. in(@4, @7) | |
// 62| | v1 i64 = phi1(@4 i64 v8, @7 i64 v16) users [i24, phi2] | |
// 64| 24| v17 i8 = set_binary_cond i64 v1, i64 0 users [i25, i59] // overflow = i < 0 | |
// 66| 25| if i8 v17 then @10 else @9 | |
bool overflow = i < 0; | |
if (overflow) | |
// 68| | @9 SF. in(@8) | |
// 70| 26| jmp @10 | |
i = i64.max; | |
// 72| | @10 SF. in(@8, @9) | |
// 72| | v2 i64 = phi2(@8 i64 v1, @9 i64 9223372036854775807) users [phi4] | |
// 74| 27| jmp @11 | |
while (i) | |
// 76| | @11 SFL in(@10, @12) | |
// 76| | v4 i64 = phi4(@10 i64 v2, @12 i64 v26) users [i28, i29, i40] // v4 v2 v26 i | |
// 76| | v3 i32 = phi3(@10 i32 0, @12 i32 v22) users [i36, phi5] // v3 v22 numDigits | |
// 78| 28| if i64 v4 then @13 else @12 | |
{ | |
// 80| | @12 SF. in(@11) | |
// 82| 29| rax = mov i64 v4 | |
// 84| 30| divsx | |
// 86| 31| v18 i64 = mov i64 10 users [i32] // 10 | |
// 88| 32| rdx = idiv rdx, rax, i64 v18 // i % 10 | |
// 90| 33| v19 i64 = mov rdx users [i34] | |
// 92| 34| v20 i64 = add i64 48, i64 v19 users [i35] // '0' + i % 10 | |
// 94| 35| v21 i8 = mov i64 v20 users [i39] // cast(u8)('0' + i % 10) | |
u8 c = cast(u8)('0' + i % 10); | |
// 96| 36| v22 i32 = add i32 v3, i16 1 users [phi3, i37] // ++numDigits | |
// 98| 37| v23 i32 = sub i32 21, i32 v22 users [i38] // 21 - ++numDigits | |
// 100| 38| v24 i8* = add [21 x i8]* v9, i32 v23 users [i39] | |
// 102| 39| store i8* v24, i8 v21 | |
// 104| 40| rax = mov i64 v4 | |
// 106| 41| divsx | |
// 108| 42| v25 i64 = mov i64 10 users [i43] | |
// 110| 43| rax = idiv rdx, rax, i64 v25 | |
// 112| 44| v26 i64 = mov rax users [phi4] | |
// 114| 45| jmp @11 | |
(*output)[21 - ++numDigits] = c; | |
i /= 10; | |
} | |
// 116| | @13 SF. in(@11) | |
// 118| 46| jmp @14 | |
// 120| | @14 SFL in(@13, @15) | |
// 120| | v5 i32 = phi5(@13 i32 v3, @15 i32 v27) users [phi6, i47, i48, i54] | |
// 122| 47| if i32 v5 >= i32 v10 then @16 else @15 // numDigits < minSize | |
while (numDigits < minSize) { | |
// 124| | @15 SF. in(@14) | |
// 126| 48| v27 i32 = add i32 v5, i16 1 users [phi5, i49] | |
// 128| 49| v28 i32 = sub i32 21, i32 v27 users [i50] | |
// 130| 50| v29 i8* = add [21 x i8]* v9, i32 v28 users [i51] | |
// 132| 51| store i8* v29, i8 48 // = '0' | |
// 134| 52| jmp @14 | |
(*output)[21 - ++numDigits] = '0'; | |
} | |
// 136| | @16 SF. in(@14) | |
// 138| 53| if i8 v12 then @18 else @17 | |
if (neg) { | |
// 140| | @17 SF. in(@16) | |
// 142| 54| v30 i32 = add i32 v5, i16 1 users [i55, phi6] | |
// 144| 55| v31 i32 = sub i32 21, i32 v30 users [i56] | |
// 146| 56| v32 i8* = add [21 x i8]* v9, i32 v31 users [i57] | |
// 148| 57| store i8* v32, i8 45 | |
// 150| 58| jmp @18 | |
(*output)[21 - ++numDigits] = '-'; | |
} | |
// 152| | @18 SF. in(@16, @17) | |
// 152| | v6 i32 = phi6(@16 i32 v5, @17 i32 v30) users [phi7, phi7] | |
// 154| 59| if i8 v17 then @20 else @19 | |
if (overflow) { | |
// 156| | @19 SF. in(@18) | |
// 158| 60| v33 i8* = add [21 x i8]* v9, i8 20 users [i61, i63] | |
// 160| 61| v34 i8 = load i8* v33 users [i62] | |
// 162| 62| v35 i8 = add i8 v34, i16 1 users [i63] | |
// 164| 63| store i8* v33, i8 v35 | |
// 166| 64| jmp @20 | |
++(*output)[20]; | |
} | |
} | |
// 168| | @20 SF. in(@6, @18, @19) | |
// 168| | v7 i32 = phi7(@6 i32 v0, @18 i32 v6, @19 i32 v6) users [i67, i71] | |
// 170| 65| v36 i8** = add {i64, i8*}* v11, i8 8 users [i69] | |
// 172| 66| v37 i8* = mov [21 x i8]* v9 users [i68] | |
// 174| 67| v38 i32 = sub i32 21, i32 v7 users [i68] | |
// 176| 68| v39 i8* = add i8* v37, i32 v38 users [i69] | |
// 178| 69| store i8** v36, i8* v39 | |
(*result).ptr = (*output).ptr + (21 - numDigits); | |
// 180| 70| v40 i64* = mov {i64, i8*}* v11 users [i71] | |
// 182| 71| store i64* v40, i32 v7 | |
(*result).length = numDigits; | |
// 184| 72| jmp @1 | |
// 186| | @1 SF. in(@20) | |
// 188| 73| ret | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment