Last active
October 9, 2019 20:57
-
-
Save MrSmith33/9a94b53845b4bc88ed1f611832012de4 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
void tran_thong(i32 xstart, i32 ystart, i32 xend, i32 yend, void function(void*, i32, i32) callback, void* userData) | |
{ | |
i32 x = xstart; | |
i32 y = ystart; | |
i32 deltax; | |
i32 signdx; | |
if (xend >= xstart) { | |
deltax = xend - xstart; | |
signdx = 1; | |
} else { | |
deltax = xstart - xend; | |
signdx = -1; | |
} | |
i32 deltay; | |
i32 signdy; | |
if (yend >= ystart) { | |
deltay = yend - ystart; | |
signdy = 1; | |
} else { | |
deltay = ystart - yend; | |
signdy = -1; | |
} | |
callback(userData, x, y); | |
i32 test; | |
if (signdy == -1) | |
test = -1; | |
else | |
test = 0; | |
if (deltax >= deltay) { | |
test = (deltax + test) >> 1; | |
for (i32 i = 1; i < deltax; ++i) { | |
test -= deltay; | |
x += signdx; | |
if (test < 0) { | |
y += signdy; | |
test += deltax; | |
} | |
callback(userData, x, y); | |
} | |
} else { | |
test = (deltay + test) >> 1; | |
for (i32 i = 1; i < deltay; ++i) { | |
test -= deltax; | |
y += signdy; | |
if (test < 0) { | |
x += signdx; | |
test += deltay; | |
} | |
callback(userData, x, y); | |
} | |
} | |
callback(userData, xend, yend); | |
} | |
func tran_thong(i32, i32, i32, i32, (void_t*, i32, i32)*, void_t*) 5396 bytes ir:"LIR Amd64" { | |
┇ 0| 0| @0 SF. | |
┇ D 2| 622| v.628 i32 = mov ecx users [phi.456, phi.296, i.787, i.677, i.682, i.699] | |
┇ ┃D 4| 635| v.641 i32 = mov edx users [phi.475, phi.277, i.781, i.716, i.721, i.738] | |
┇ ┃┃D 6| 648| v.654 i32 = mov r8d users [i.968, i.677, i.682, i.699] | |
┇ ┃┃┃D 8| 661| v.667 i32 = mov r9d users [i.962, i.716, i.721, i.738] | |
┇ ┃┃┃┃ 10| 674| jmp @13 | |
┇ ┏┏┏┏ 12| 13| @13 SF. in(@0) | |
┇ U┃U┃ 14| 677| if i32 v.654 >= i32 v.628 then @26 else @39 | |
┇ ┏┏┏┏ 16| 39| @39 SF. in(@13) | |
┇ U┃U┃ D 18| 699| v.706 i32 = sub i32 v.628, i32 v.654 users [phi.84] | |
┇ ┃┃┃┃ ┃ 20| 713| jmp @52 | |
┇ ┏┏┏┏ 22| 26| @26 SF. in(@13) | |
┇ U┃U┃D 24| 682| v.689 i32 = sub i32 v.654, i32 v.628 users [phi.84] | |
┇ ┃┃┃┃┃ 26| 696| jmp @52 | |
┇┃┃ ┏┏┏┏ 28| 52| @52 SF. in(@26, @39) | |
┇┃D ┃┃┃┃UU 28| 84| v.90 i32 = phi.84(@26 i32 v.689, @39 i32 v.706) users [i.1122, i.1018, i.831, i.836, i.898] | |
┇D┃ ┃┃┃┃ 28| 65| v.71 i32 = phi.65(@26 i32 1, @39 i32 -1) users [i.917, i.1155] | |
┇┃┃ ┃U┃U 30| 716| if i32 v.667 >= i32 v.641 then @103 else @116 | |
┇┏┏ ┏┏┏┏ 32| 116| @116 SF. in(@52) | |
┇┃┃ ┃U┃U D 34| 738| v.745 i32 = sub i32 v.641, i32 v.667 users [phi.142] | |
┇┃┃ ┃┃┃┃ ┃ 36| 752| jmp @129 | |
┇┏┏ ┏┏┏┏ 38| 103| @103 SF. in(@52) | |
┇┃┃ ┃U┃U D 40| 721| v.728 i32 = sub i32 v.667, i32 v.641 users [phi.142] | |
┇┃┃ ┃┃┃┃ ┃ 42| 735| jmp @129 | |
┇┏┏┃┃ ┏┏┏┏ 44| 129| @129 SF. in(@103, @116) | |
┇┃┃┃D ┃┃┃┃ 44| 161| v.167 i32 = phi.161(@103 i32 1, @116 i32 -1) users [i.820, i.1004, i.1136] | |
┇┃┃D┃ ┃┃┃┃ UU 44| 142| v.148 i32 = phi.142(@103 i32 v.728, @116 i32 v.745) users [i.1169, i.1117, i.831, i.867, i.903] | |
┇┃┃┃┃ ┃┃┃┃ D 46| 755| v.761 (void_t*, i32, i32)* = load (void_t*, i32, i32)** s.0 users [i.806] | |
┇┃┃┃┃ ┃┃┃┃ ┃D 48| 768| v.774 void_t* = load void_t** s.1 users [i.793] | |
┇┃┃┃┃ ┃U┃┃ ┃┃ 50| 781| r8d = mov i32 v.641 | |
┃ ┇┃┃┃┃ U┃┃┃ ┃┃ 52| 787| edx = mov i32 v.628 | |
┃┃ ┃ ┇┃┃┃┃ ┃┃┃┃ ┃U 54| 793| rcx = mov void_t* v.774 | |
┃┃ ┃ ┃ ┇┃┃┃┃ ┃┃┃┃ ┃ 56| 799| rsp = sub rsp, i8 32 | |
┃┃┃ ┃ ┃┃┃┃ ┇┃┃┃┃ ┃┃┃┃ U 58| 806| call (void_t*, i32, i32)* v.761, rcx, edx, r8d | |
┃ ┇┃┃┃┃ ┃┃┃┃ 60| 813| rsp = add rsp, i8 32 | |
┃ ┇┃┃┃U ┃┃┃┃ 62| 820| if i32 v.167 == i32 -1 then @180 else @193 | |
┇┏┏┏┏ ┏┏┏┏ 64| 193| @193 SF. in(@129) | |
┇┃┃┃┃ ┃┃┃┃ 66| 828| jmp @206 | |
┇┏┏┏┏ ┏┏┏┏ 68| 180| @180 SF. in(@129) | |
┇┃┃┃┃ ┃┃┃┃ 70| 825| jmp @206 | |
┇┏┏┏┏┃ ┏┏┏┏ 72| 206| @206 SF. in(@180, @193) | |
┇┃┃┃┃D ┃┃┃┃ 72| 219| v.225 i32 = phi.219(@180 i32 -1, @193 i32 0) users [i.836, i.867] | |
┇┃UU┃┃ ┃┃┃┃ 74| 831| if i32 v.90 >= i32 v.148 then @238 else @251 | |
┇┏┏┏┏┏ ┏┏┏┏ 76| 251| @251 SF. in(@206) | |
┇┃┃U┃U ┃┃┃┃ D 78| 867| v.874 i32 = add i32 v.148, i32 v.225 users [i.881] | |
┇┃┃┃┃ ┃┃┃┃ UD 80| 881| v.888 i32 = sar i32 v.874, i32 1 users [phi.494] | |
┇┃┃┃┃ ┃┃┃┃ ┃ 82| 895| jmp @443 | |
┇┏┏┏┏ ┃┃┃┃ ┏┏ 84| 443| @443 SFL in(@251, @558) | |
┇┃┃┃┃ ┃┃┃D ┃┃ U 84| 513| v.519 i32 = phi.513(@251 i32 1, @558 i32 v.1258) users [i.1117, i.1251] | |
┇┃┃┃┃ ┃┃D┃U ┃┃ U 84| 494| v.500 i32 = phi.494(@251 i32 v.888, @558 i32 v.577) users [i.1122] | |
┇┃┃┃┃ ┃D┃┃ U┃┃ U 84| 475| v.481 i32 = phi.475(@251 i32 v.641, @558 i32 v.1143) users [i.1136] | |
┇┃┃┃┃ D┃┃┃ UU ┃┃ 84| 456| v.462 i32 = phi.456(@251 i32 v.628, @558 i32 v.596) users [i.1155, phi.590] | |
┇┃┃U┃ ┃┃┃U ┃┃ 86| 1117| if i32 v.519 < i32 v.148 then @532 else @366 | |
┇┏┏┏┏ ┏┏┏┏ ┃┃ 88| 532| @532 SF. in(@443) | |
┇┃U┃┃ ┃┃U┃ ┃┃ D 90| 1122| v.1129 i32 = sub i32 v.500, i32 v.90 users [i.1150, i.1169, phi.571] | |
┇┃┃┃U ┃U ┃ ┃┃ ┃D 92| 1136| v.1143 i32 = add i32 v.481, i32 v.167 users [phi.475, i.1212] | |
┇┃┃┃┃ ┃ ┃ ┃┃ U┃ 94| 1150| if i32 v.1129 < i32 0 then @545 else @558 | |
┇┏┃┏┃ ┏ ┏ ┃┃ ┏┏ 96| 545| @545 SF. in(@532) | |
┇U┃┃┃ U ┃ ┃┃ ┃┃D 98| 1155| v.1162 i32 = add i32 v.462, i32 v.71 users [phi.590] | |
┇┃┃U┃ ┃ ┃┃ U┃┃D 100| 1169| v.1176 i32 = add i32 v.1129, i32 v.148 users [phi.571] | |
┇┃┃┃┃ ┃ ┃┃ ┃┃┃ 102| 1183| jmp @558 | |
┇┃┃┃┃ ┏┃┃ ┃┃ ┏ 104| 558| @558 SF. in(@532, @545) | |
┇┃┃┃┃ U ┃┃D ┃┃ ┃U 104| 590| v.596 i32 = phi.590(@532 i32 v.462, @545 i32 v.1162) users [phi.456, i.1218] | |
┇┃┃┃┃ ┃D┃ ┃┃ U┃ U 104| 571| v.577 i32 = phi.571(@532 i32 v.1129, @545 i32 v.1176) users [phi.494] | |
┇┃┃┃┃ ┃┃┃ ┃┃ ┃ D 106| 1186| v.1192 (void_t*, i32, i32)* = load (void_t*, i32, i32)** s.0 users [i.1237] | |
┇┃┃┃┃ ┃┃┃ ┃┃ ┃ ┃D 108| 1199| v.1205 void_t* = load void_t** s.1 users [i.1224] | |
┇┃┃┃┃ ┃┃┃ ┃┃ U ┃┃ 110| 1212| r8d = mov i32 v.1143 | |
┃ ┇┃┃┃┃ ┃┃U ┃┃ ┃ ┃┃ 112| 1218| edx = mov i32 v.596 | |
┃┃ ┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ ┃U 114| 1224| rcx = mov void_t* v.1205 | |
┃┃ ┃ ┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ ┃ 116| 1230| rsp = sub rsp, i8 32 | |
┃┃┃ ┃ ┃┃┃┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ U 118| 1237| call (void_t*, i32, i32)* v.1192, rcx, edx, r8d | |
┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ 120| 1244| rsp = add rsp, i8 32 | |
┃ ┇┃┃┃┃ U┃┃ ┃┃ ┃ D 122| 1251| v.1258 i32 = add i32 v.519, i16 1 users [phi.513] | |
┇┃┃┃┃ ┃┃ ┃┃ ┃ ┃ 124| 1265| jmp @443 | |
┇┏┏┏┏┏ ┏┏┏┏ 126| 238| @238 SF. in(@206) | |
┇┃U┃┃U ┃┃┃┃ D 128| 836| v.843 i32 = add i32 v.90, i32 v.225 users [i.850] | |
┇┃┃┃┃ ┃┃┃┃ UD 130| 850| v.857 i32 = sar i32 v.843, i32 1 users [phi.315] | |
┇┃┃┃┃ ┃┃┃┃ ┃ 132| 864| jmp @264 | |
┇┏┏┏┏ ┃┃┃┃ ┏┏ 134| 264| @264 SFL in(@238, @392) | |
┇┃┃┃┃ ┃┃┃D ┃┃ U 134| 334| v.340 i32 = phi.334(@238 i32 1, @392 i32 v.1107) users [i.898, i.1100] | |
┇┃┃┃┃ ┃┃D┃U ┃┃ U 134| 315| v.321 i32 = phi.315(@238 i32 v.857, @392 i32 v.411) users [i.903] | |
┇┃┃┃┃ ┃D┃┃ U ┃┃ U 134| 296| v.302 i32 = phi.296(@238 i32 v.628, @392 i32 v.924) users [i.917] | |
┇┃┃┃┃ D┃┃┃ U U┃┃ 134| 277| v.283 i32 = phi.277(@238 i32 v.641, @392 i32 v.430) users [i.1004, phi.424] | |
┇┃U┃┃ ┃┃┃U ┃┃ 136| 898| if i32 v.340 < i32 v.90 then @353 else @366 | |
┇┃┃┃┃ ┏┏ 138| 366| @366 SF. in(@264, @443) | |
┇┃┃┃┃ ┃┃ D 140| 936| v.942 (void_t*, i32, i32)* = load (void_t*, i32, i32)** s.0 users [i.987] | |
┇┃┃┃┃ ┃┃ ┃D 142| 949| v.955 void_t* = load void_t** s.1 users [i.974] | |
┇┃┃┃┃ ┃U ┃┃ 144| 962| r8d = mov i32 v.667 | |
┃ ┇┃┃┃┃ U┃ ┃┃ 146| 968| edx = mov i32 v.654 | |
┃┃ ┃ ┇┃┃┃┃ ┃┃ ┃U 148| 974| rcx = mov void_t* v.955 | |
┃┃ ┃ ┃ ┇┃┃┃┃ ┃┃ ┃ 150| 980| rsp = sub rsp, i8 32 | |
┃┃┃ ┃ ┃┃┃┃ ┇┃┃┃┃ ┃┃ U 152| 987| call (void_t*, i32, i32)* v.942, rcx, edx, r8d | |
┃ ┇┃┃┃┃ ┃┃ 154| 994| rsp = add rsp, i8 32 | |
┃ ┇┃┃┃┃ ┃┃ 156| 1001| jmp @609 | |
┇┏┏┏┏ ┏┏┏┏ ┃┃ 158| 353| @353 SF. in(@264) | |
┇┃┃U┃ ┃┃U┃ ┃┃ D 160| 903| v.910 i32 = sub i32 v.321, i32 v.148 users [i.931, i.1018, phi.405] | |
┇U┃┃┃ ┃U ┃ ┃┃ ┃D 162| 917| v.924 i32 = add i32 v.302, i32 v.71 users [phi.296, i.1067] | |
┇┃┃┃┃ ┃ ┃ ┃┃ U┃ 164| 931| if i32 v.910 < i32 0 then @379 else @392 | |
┇┃┏┃┏ ┏ ┏ ┃┃ ┏┏ 166| 379| @379 SF. in(@353) | |
┇┃┃┃U U ┃ ┃┃ ┃┃ D 168| 1004| v.1011 i32 = add i32 v.283, i32 v.167 users [phi.424] | |
┇┃U┃┃ ┃ ┃┃ U┃ ┃D 170| 1018| v.1025 i32 = add i32 v.910, i32 v.90 users [phi.405] | |
┇┃┃┃┃ ┃ ┃┃ ┃ ┃┃ 172| 1032| jmp @392 | |
┇┃┃┃┃ ┏┃┃ ┃┃ ┏ 174| 392| @392 SF. in(@353, @379) | |
┇┃┃┃┃ U ┃┃D ┃┃ ┃ U 174| 424| v.430 i32 = phi.424(@353 i32 v.283, @379 i32 v.1011) users [phi.277, i.1061] | |
┇┃┃┃┃ ┃D┃ ┃┃ U┃ U 174| 405| v.411 i32 = phi.405(@353 i32 v.910, @379 i32 v.1025) users [phi.315] | |
┇┃┃┃┃ ┃┃┃ ┃┃ ┃ D 176| 1035| v.1041 (void_t*, i32, i32)* = load (void_t*, i32, i32)** s.0 users [i.1086] | |
┇┃┃┃┃ ┃┃┃ ┃┃ ┃ ┃D 178| 1048| v.1054 void_t* = load void_t** s.1 users [i.1073] | |
┇┃┃┃┃ ┃┃U ┃┃ ┃ ┃┃ 180| 1061| r8d = mov i32 v.430 | |
┃ ┇┃┃┃┃ ┃┃┃ ┃┃ U ┃┃ 182| 1067| edx = mov i32 v.924 | |
┃┃ ┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ ┃U 184| 1073| rcx = mov void_t* v.1054 | |
┃┃ ┃ ┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ ┃ 186| 1079| rsp = sub rsp, i8 32 | |
┃┃┃ ┃ ┃┃┃┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ U 188| 1086| call (void_t*, i32, i32)* v.1041, rcx, edx, r8d | |
┃ ┇┃┃┃┃ ┃┃┃ ┃┃ ┃ 190| 1093| rsp = add rsp, i8 32 | |
┃ ┇┃┃┃┃ U┃┃ ┃┃ ┃ D 192| 1100| v.1107 i32 = add i32 v.340, i16 1 users [phi.334] | |
┇┃┃┃┃ ┃┃ ┃┃ ┃ ┃ 194| 1114| jmp @264 | |
┇ 196| 609| @609 SF. in(@366) | |
┇ 198| 1268| ret | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment