Skip to content

Instantly share code, notes, and snippets.

@WheretIB
Created December 20, 2019 18:58
Show Gist options
  • Save WheretIB/7be2120d48db9a21cd14bd09a77ea6b7 to your computer and use it in GitHub Desktop.
Save WheretIB/7be2120d48db9a21cd14bd09a77ea6b7 to your computer and use it in GitHub Desktop.
; ------------------- Invalidation ----------------
0xc000156f: ; 5487
; 5487: less r9, r8, r6
mov eax, dword [rbx+64]
cmp eax, dword [rbx+48]
; 5488: jmpz r9, 5541 // kill late[r9]
jge '0xc00015a5'
// auto bi = this.bodies[i];
; 5489: loadq r9, [r4 + 0]
mov rax, qword [rbx+32]
mov rax, qword [rax]
mov qword [rbx+72], rax
; 5490: load r10, [r4 + 8]
mov rdx, qword [rbx+32]
mov edx, dword [rdx+8]
; 5491: index r11, r7, r9, r10, 8
mov edi, dword [rbx+56]
cmp edi, edx
jb '0x3ad'
; set_tracking 0
mov rcx, &ctx
mov dword [rcx+152], 5491
call qword [rcx+40]
; set_tracking 1
0x00000000000003AD:
lea rsi, [rdi*8 + rax]
; 5492: loadq r11, [r11 + 0] // kill early[r11]
mov r8, qword [rsi]
// auto bj = this.bodies[j];
; 5493: index r10, r8, r9, r10, 8 // kill early[r9, r10]
mov r9d, dword [rbx+64]
cmp r9d, edx
jb '0x3ae'
; set_tracking 0
mov rcx, &ctx
mov dword [rcx+152], 5493
call qword [rcx+40]
; set_tracking 1
0x00000000000003AE:
lea r10, [r9*8 + rax]
; 5494: loadq r10, [r10 + 0] // kill early[r10]
mov r11, qword [r10]
// dx = bi.x - bj.x;
; 5495: loadd r9, [r11 + 0]
movsd xmm0, qword [r8]
; 5496: subd r9, r9, [r10 + 0] // kill early[r9]
movsd xmm1, qword [r11]
subsd xmm0, xmm1
movsd qword [rbx+72], xmm0
// dy = bi.y - bj.y;
; 5497: loadd r12, [r11 + 8]
movsd xmm2, qword [r8+8]
; 5498: subd r12, r12, [r10 + 8] // kill early[r12]
movsd xmm3, qword [r11+8]
subsd xmm2, xmm3
movsd qword [rbx+96], xmm2
// dz = bi.z - bj.z;
; 5499: loadd r13, [r11 + 16]
movsd xmm4, qword [r8+16]
; 5500: subd r13, r13, [r10 + 16] // kill early[r13]
movsd xmm5, qword [r11+16]
subsd xmm4, xmm5
movsd qword [rbx+104], xmm4
// distance = sqrt(dx*dx + dy*dy + dz*dz);
; 5501: muld r14, r9, r9
mulsd xmm0, xmm0
; 5502: muld r15, r12, r12
mulsd xmm2, xmm2
; 5503: addd r15, r14, r15 // kill early[r14, r15]
addsd xmm0, xmm2
; 5504: muld r14, r13, r13
mulsd xmm4, xmm4
; 5505: addd r14, r15, r14 // kill early[r15, r14]
addsd xmm0, xmm4
; 5506: call sqrt#153(r14, 0L) -> double (r14) @39700 // kill early[r14]
sqrtsd xmm1, xmm0
movsd qword [rbx+112], xmm1
// mag = dt / (distance * distance * distance);
; 5507: muld r15, r14, r14
mulsd xmm1, xmm1
; 5508: muld r14, r15, r14 // kill early[r15, r14]
movsd xmm2, qword [rbx+112]
mulsd xmm1, xmm2
; 5509: divd r14, r5, r14 // kill early[r14]
movsd xmm3, qword [rbx+40]
divsd xmm3, xmm1
movsd qword [rbx+112], xmm3
// bi.vx -= dx * bj.mass * mag;
; 5510: loadd r15, [r11 + 24]
movsd xmm4, qword [r8+24]
; 5511: loadd r16, [r10 + 48]
movsd xmm5, qword [r11+48]
movsd qword [rbx+128], xmm5
; 5512: muld r17, r9, r16
movsd xmm0, qword [rbx+72]
mulsd xmm0, xmm5
; 5513: muld r17, r17, r14 // kill early[r17]
mulsd xmm0, xmm3
; 5514: subd r17, r15, r17 // kill early[r15, r17]
subsd xmm4, xmm0
; 5515: stored r17, [r11 + 24] // kill late[r17]
movsd qword [r8+24], xmm4
// bi.vy -= dy * bj.mass * mag;
; 5516: loadd r17, [r11 + 32]
movsd xmm2, qword [r8+32]
; 5517: muld r15, r12, r16
movsd xmm3, qword [rbx+96]
mulsd xmm3, xmm5
; 5518: muld r15, r15, r14 // kill early[r15]
movsd xmm4, qword [rbx+112]
mulsd xmm3, xmm4
; 5519: subd r15, r17, r15 // kill early[r17, r15]
subsd xmm2, xmm3
; 5520: stored r15, [r11 + 32] // kill late[r15]
movsd qword [r8+32], xmm2
// bi.vz -= dz * bj.mass * mag;
; 5521: loadd r15, [r11 + 40]
movsd xmm0, qword [r8+40]
; 5522: muld r16, r13, r16 // kill early[r16]
movsd xmm1, qword [rbx+104]
movsd xmm2, qword [rbx+128]
mulsd xmm1, xmm2
; 5523: muld r16, r16, r14 // kill early[r16]
mulsd xmm1, xmm4
; 5524: subd r16, r15, r16 // kill early[r15, r16]
subsd xmm0, xmm1
; 5525: stored r16, [r11 + 40] // kill late[r16]
movsd qword [r8+40], xmm0
// bj.vx += dx * bi.mass * mag;
; 5526: loadd r11, [r11 + 48] // kill early[r11]
movsd xmm4, qword [r8+48]
movsd qword [rbx+88], xmm4
; 5527: muld r9, r9, r11 // kill early[r9]
movsd xmm5, qword [rbx+72]
mulsd xmm5, xmm4
; 5528: muld r9, r9, r14 // kill early[r9]
movsd xmm0, qword [rbx+112]
mulsd xmm5, xmm0
; 5529: addd r9, r9, [r10 + 24] // kill early[r9]
movsd xmm1, qword [r11+24]
addsd xmm5, xmm1
; 5530: stored r9, [r10 + 24] // kill late[r9]
movsd qword [r11+24], xmm5
// bj.vy += dy * bi.mass * mag;
; 5531: muld r12, r12, r11 // kill early[r12]
movsd xmm3, qword [rbx+96]
mulsd xmm3, xmm4
; 5532: muld r12, r12, r14 // kill early[r12]
mulsd xmm3, xmm0
; 5533: addd r12, r12, [r10 + 32] // kill early[r12]
movsd xmm4, qword [r11+32]
addsd xmm3, xmm4
; 5534: stored r12, [r10 + 32] // kill late[r12]
movsd qword [r11+32], xmm3
// bj.vz += dz * bi.mass * mag;
; 5535: muld r11, r13, r11 // kill early[r13, r11]
movsd xmm0, qword [rbx+104]
movsd xmm1, qword [rbx+88]
mulsd xmm0, xmm1
; 5536: muld r14, r11, r14 // kill early[r11, r14]
movsd xmm2, qword [rbx+112]
mulsd xmm0, xmm2
; 5537: addd r14, r14, [r10 + 40] // kill early[r14]
movsd xmm3, qword [r11+40]
addsd xmm0, xmm3
; 5538: stored r14, [r10 + 40] // kill late[r14, r10]
movsd qword [r11+40], xmm0
// for (auto j=i+1; j < size; j++) {
; 5539: addimm r8, r8, 1
add dword [rbx+64], 1
; 5540: jmp 5487
jmp '0xc000156f'
; ------------------- Invalidation ----------------
0xc000156f:
mov eax, dword [rbx+64]
cmp eax, dword [rbx+48]
jge '0xc00015a5'
mov rax, qword [rbx+32]
mov rax, qword [rax]
mov qword [rbx+72], rax
mov rdx, qword [rbx+32]
mov edx, dword [rdx+8]
mov edi, dword [rbx+56]
cmp edi, edx
jb '0x3ad'
mov rcx, &ctx
mov dword [rcx+152], 5491
call qword [rcx+40]
0x00000000000003AD:
lea rsi, [rdi*8 + rax]
mov r8, qword [rsi]
mov r9d, dword [rbx+64]
cmp r9d, edx
jb '0x3ae'
mov rcx, &ctx
mov dword [rcx+152], 5493
call qword [rcx+40]
0x00000000000003AE:
lea r10, [r9*8 + rax]
mov r11, qword [r10]
movsd xmm0, qword [r8]
movsd xmm1, qword [r11]
subsd xmm0, xmm1
movsd qword [rbx+72], xmm0
movsd xmm2, qword [r8+8]
movsd xmm3, qword [r11+8]
subsd xmm2, xmm3
movsd qword [rbx+96], xmm2
movsd xmm4, qword [r8+16]
movsd xmm5, qword [r11+16]
subsd xmm4, xmm5
movsd qword [rbx+104], xmm4
mulsd xmm0, xmm0
mulsd xmm2, xmm2
addsd xmm0, xmm2
mulsd xmm4, xmm4
addsd xmm0, xmm4
sqrtsd xmm1, xmm0
movsd qword [rbx+112], xmm1
mulsd xmm1, xmm1
movsd xmm2, qword [rbx+112]
mulsd xmm1, xmm2
movsd xmm3, qword [rbx+40]
divsd xmm3, xmm1
movsd qword [rbx+112], xmm3
movsd xmm4, qword [r8+24]
movsd xmm5, qword [r11+48]
movsd qword [rbx+128], xmm5
movsd xmm0, qword [rbx+72]
mulsd xmm0, xmm5
mulsd xmm0, xmm3
subsd xmm4, xmm0
movsd qword [r8+24], xmm4
movsd xmm2, qword [r8+32]
movsd xmm3, qword [rbx+96]
mulsd xmm3, xmm5
movsd xmm4, qword [rbx+112]
mulsd xmm3, xmm4
subsd xmm2, xmm3
movsd qword [r8+32], xmm2
movsd xmm0, qword [r8+40]
movsd xmm1, qword [rbx+104]
movsd xmm2, qword [rbx+128]
mulsd xmm1, xmm2
mulsd xmm1, xmm4
subsd xmm0, xmm1
movsd qword [r8+40], xmm0
movsd xmm4, qword [r8+48]
movsd qword [rbx+88], xmm4
movsd xmm5, qword [rbx+72]
mulsd xmm5, xmm4
movsd xmm0, qword [rbx+112]
mulsd xmm5, xmm0
movsd xmm1, qword [r11+24]
addsd xmm5, xmm1
movsd qword [r11+24], xmm5
movsd xmm3, qword [rbx+96]
mulsd xmm3, xmm4
mulsd xmm3, xmm0
movsd xmm4, qword [r11+32]
addsd xmm3, xmm4
movsd qword [r11+32], xmm3
movsd xmm0, qword [rbx+104]
movsd xmm1, qword [rbx+88]
mulsd xmm0, xmm1
movsd xmm2, qword [rbx+112]
mulsd xmm0, xmm2
movsd xmm3, qword [r11+40]
addsd xmm0, xmm3
movsd qword [r11+40], xmm0
add dword [rbx+64], 1
jmp '0xc000156f'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment