Skip to content

Instantly share code, notes, and snippets.

@MrSmith33
Last active October 9, 2019 20:57
Show Gist options
  • Save MrSmith33/9a94b53845b4bc88ed1f611832012de4 to your computer and use it in GitHub Desktop.
Save MrSmith33/9a94b53845b4bc88ed1f611832012de4 to your computer and use it in GitHub Desktop.
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