bone_sse: assembly-verified reimplementation of transformMatrix4x4

13 bugs fixed by comparing against full assembly dump (5317 instructions):
- Emitter check: this+0x188 -> this+0x1D8
- Animation time: added FILD*time_scale pattern for both primary (+0xB0)
  and secondary (+0xDC) slots
- Conditional multiply: bone_local *= *(bone_rt+0xF0) was missing
- Billboard post-processing: 4 switch cases (types 8/16/32/64) implemented
- Color animation loop bound: model_hdr+0x64 -> +0x6C
- Bone keyframe data stride: 0x24 -> 0x54
- Ribbon emitter output stride: 0x15C -> 0x170
- Particle data/output strides: 0x1FC/0x17C -> 0x1F8/0x16C
- Child SceneObject offsets: attach_idx +0x184->+0x1D4, next +0x190->+0x1E4
- Root bone parent: identity -> this+0xFC

New files:
- BONE_SSE_PROGRESS.md: section-by-section verification status
- t44_full_asm.txt: complete function assembly (ground truth)
- t44_helpers_asm.txt: all 12 helper function assemblies
- math_sse.zig: 18 x87->SSE polyfill stubs (VanillaFixes integration)

Also: OnWorldUpdate hook for true per-frame counting, DUMP_FRAMES=450.
SSE dispatch currently disabled while particle sections are being verified.
This commit is contained in:
MarcelineVQ
2026-03-14 17:34:37 -07:00
parent 236cf95bdd
commit 2b9b5bc043
7 changed files with 7646 additions and 148 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,777 @@
openjdk version "21.0.10" 2026-01-20
OpenJDK Runtime Environment (build 21.0.10+7)
OpenJDK 64-Bit Server VM (build 21.0.10+7, mixed mode)
=== findInterpolationIndices (0x00713D50, 334 bytes) ===
0x00713D50 PUSH EBP
0x00713D51 MOV EBP,ESP
0x00713D53 SUB ESP,0x8
0x00713D56 PUSH ESI
0x00713D57 MOV ESI,ECX
0x00713D59 MOV ECX,dword ptr [EBP + 0x10]
0x00713D5C MOV EAX,dword ptr [ECX + 0x4]
0x00713D5F TEST EAX,EAX
0x00713D61 PUSH EDI
0x00713D62 JZ 0x00713d75
0x00713D64 MOV EDX,dword ptr [EBP + 0xc]
0x00713D67 MOV EAX,dword ptr [ECX + 0x8]
0x00713D6A MOV EDI,dword ptr [EAX + EDX*0x8 + 0x4]
0x00713D6E LEA EAX,[EAX + EDX*0x8]
0x00713D71 MOV EDX,dword ptr [EAX]
0x00713D73 JMP 0x00713d7b
0x00713D75 MOV EDI,dword ptr [ECX + 0xc]
0x00713D78 XOR EDX,EDX
0x00713D7A DEC EDI
0x00713D7B CMP EDX,EDI
0x00713D7D JC 0x00713d96
0x00713D7F MOV EAX,dword ptr [EBP + 0x14]
0x00713D82 POP EDI
0x00713D83 MOV dword ptr [EAX],EDX
0x00713D85 MOV dword ptr [EAX + 0x4],EDX
0x00713D88 MOV dword ptr [EAX + 0x8],0x0
0x00713D8F POP ESI
0x00713D90 MOV ESP,EBP
0x00713D92 POP EBP
0x00713D93 RET 0x10 << RET
0x00713D96 MOV AX,word ptr [ECX + 0x2]
0x00713D9A CMP AX,0xffff
0x00713D9E JZ 0x00713dab
0x00713DA0 MOV ESI,dword ptr [ESI + 0x64]
0x00713DA3 MOVZX EAX,AX
0x00713DA6 MOV ESI,dword ptr [ESI + EAX*0x4]
0x00713DA9 JMP 0x00713dae
0x00713DAB MOV ESI,dword ptr [EBP + 0x8]
0x00713DAE MOV EAX,dword ptr [EBP + 0x14]
0x00713DB1 MOV ECX,dword ptr [ECX + 0x10]
0x00713DB4 PUSH EBX
0x00713DB5 MOV EBX,dword ptr [EAX]
0x00713DB7 MOV EAX,dword ptr [ECX + EBX*0x4]
0x00713DBA MOV dword ptr [EBP + 0xc],EAX
0x00713DBD MOV EAX,ESI
0x00713DBF SUB EAX,dword ptr [EBP + 0xc]
0x00713DC2 CMP EAX,0x1f4
0x00713DC7 JNC 0x00713de1
0x00713DC9 MOV EAX,EBX
0x00713DCB CMP EAX,EDI
0x00713DCD JNC 0x00713e45
0x00713DCF LEA ECX,[ECX + EAX*0x4 + 0x4]
0x00713DD3 CMP dword ptr [ECX],ESI
0x00713DD5 JA 0x00713e45
0x00713DD7 INC EAX
0x00713DD8 ADD ECX,0x4
0x00713DDB CMP EAX,EDI
0x00713DDD JC 0x00713dd3
0x00713DDF JMP 0x00713e45
0x00713DE1 CMP EAX,0xfffffe0c
0x00713DE6 JC 0x00713dff
0x00713DE8 MOV EAX,EBX
0x00713DEA CMP EAX,EDX
0x00713DEC JBE 0x00713e45
0x00713DEE LEA ECX,[ECX + EAX*0x4]
0x00713DF1 CMP dword ptr [ECX],ESI
0x00713DF3 JBE 0x00713e45
0x00713DF5 DEC EAX
0x00713DF6 SUB ECX,0x4
0x00713DF9 CMP EAX,EDX
0x00713DFB JA 0x00713df1
0x00713DFD JMP 0x00713e45
0x00713DFF MOV EBX,dword ptr [ECX + EDX*0x4]
0x00713E02 MOV EAX,ESI
0x00713E04 SUB EAX,EBX
0x00713E06 CMP EAX,0x1f4
0x00713E0B JNC 0x00713e21
0x00713E0D MOV EAX,EDX
0x00713E0F LEA ECX,[ECX + EDX*0x4 + 0x4]
0x00713E13 CMP dword ptr [ECX],ESI
0x00713E15 JA 0x00713e45
0x00713E17 INC EAX
0x00713E18 ADD ECX,0x4
0x00713E1B CMP EAX,EDI
0x00713E1D JC 0x00713e13
0x00713E1F JMP 0x00713e45
0x00713E21 LEA EAX,[EDI + EDX*0x1]
0x00713E24 SHR EAX,0x1
0x00713E26 CMP ESI,dword ptr [ECX + EAX*0x4]
0x00713E29 JNC 0x00713e30
0x00713E2B LEA EDI,[EAX + -0x1]
0x00713E2E JMP 0x00713e3b
0x00713E30 MOV EBX,dword ptr [ECX + EAX*0x4 + 0x4]
0x00713E34 CMP ESI,EBX
0x00713E36 LEA EDX,[EAX + 0x1]
0x00713E39 JC 0x00713e41
0x00713E3B CMP EDX,EDI
0x00713E3D JC 0x00713e21
0x00713E3F JMP 0x00713e43
0x00713E41 MOV EDX,EAX
0x00713E43 MOV EAX,EDX
0x00713E45 MOV ECX,dword ptr [EBP + 0x10]
0x00713E48 MOV EDI,dword ptr [ECX + 0xc]
0x00713E4B LEA EDX,[EAX + 0x1]
0x00713E4E CMP EDX,EDI
0x00713E50 POP EBX
0x00713E51 JNC 0x00713e87
0x00713E53 MOV EDI,dword ptr [EBP + 0x14]
0x00713E56 MOV dword ptr [EDI],EAX
0x00713E58 MOV dword ptr [EDI + 0x4],EDX
0x00713E5B MOV ECX,dword ptr [ECX + 0x10]
0x00713E5E MOV EAX,dword ptr [ECX + EAX*0x4]
0x00713E61 MOV ECX,dword ptr [ECX + EDX*0x4]
0x00713E64 SUB ESI,EAX
0x00713E66 MOV dword ptr [EBP + -0x8],ESI
0x00713E69 XOR ESI,ESI
0x00713E6B MOV dword ptr [EBP + -0x4],ESI
0x00713E6E FILD qword ptr [EBP + -0x8]
0x00713E71 SUB ECX,EAX
0x00713E73 MOV dword ptr [EBP + -0x4],ESI
0x00713E76 MOV dword ptr [EBP + -0x8],ECX
0x00713E79 FIDIV dword ptr [EBP + -0x8]
0x00713E7C FSTP float ptr [EDI + 0x8]
0x00713E7F POP EDI
0x00713E80 POP ESI
0x00713E81 MOV ESP,EBP
0x00713E83 POP EBP
0x00713E84 RET 0x10 << RET
0x00713E87 MOV ECX,dword ptr [EBP + 0x14]
0x00713E8A POP EDI
0x00713E8B MOV dword ptr [ECX + 0x4],EAX
0x00713E8E MOV dword ptr [ECX],EAX
0x00713E90 MOV dword ptr [ECX + 0x8],0x0
0x00713E97 POP ESI
0x00713E98 MOV ESP,EBP
0x00713E9A POP EBP
0x00713E9B RET 0x10 << RET
=== interpolateAnimationKeyframes (0x00713EA0, 337 bytes) ===
0x00713EA0 PUSH EBP
0x00713EA1 MOV EBP,ESP
0x00713EA3 PUSH ECX
0x00713EA4 PUSH EBX
0x00713EA5 PUSH ESI
0x00713EA6 MOV ESI,dword ptr [EBP + 0xc]
0x00713EA9 PUSH EDI
0x00713EAA MOV EDI,dword ptr [EBP + 0x8]
0x00713EAD PUSH ESI
0x00713EAE MOV EBX,EDX
0x00713EB0 MOV EAX,dword ptr [EBX + 0x9c]
0x00713EB6 MOV EDX,dword ptr [EBX + 0x98]
0x00713EBC PUSH EDI
0x00713EBD PUSH EAX
0x00713EBE PUSH EDX
0x00713EBF MOV dword ptr [EBP + -0x4],ECX
0x00713EC2 CALL 0x00713d50 << CALL
0x00713EC7 MOV EAX,dword ptr [ESI]
0x00713EC9 SHL EAX,0x4
0x00713ECC CMP word ptr [EDI],0x0
0x00713ED0 JNZ 0x00713ef7
0x00713ED2 ADD EAX,dword ptr [EDI + 0x18]
0x00713ED5 MOV ECX,dword ptr [EAX]
0x00713ED7 ADD ESI,0xc
0x00713EDA MOV dword ptr [ESI],ECX
0x00713EDC MOV EDX,dword ptr [EAX + 0x4]
0x00713EDF MOV dword ptr [ESI + 0x4],EDX
0x00713EE2 MOV ECX,dword ptr [EAX + 0x8]
0x00713EE5 MOV dword ptr [ESI + 0x8],ECX
0x00713EE8 MOV EDX,dword ptr [EAX + 0xc]
0x00713EEB POP EDI
0x00713EEC MOV dword ptr [ESI + 0xc],EDX
0x00713EEF POP ESI
0x00713EF0 POP EBX
0x00713EF1 MOV ESP,EBP
0x00713EF3 POP EBP
0x00713EF4 RET 0x8 << RET
0x00713EF7 MOV EDX,dword ptr [EDI + 0x18]
0x00713EFA FLD float ptr [ESI + 0x8]
0x00713EFD MOV ECX,dword ptr [ESI + 0x4]
0x00713F00 ADD EAX,EDX
0x00713F02 SHL ECX,0x4
0x00713F05 FLD float ptr [ECX + EDX*0x1]
0x00713F08 ADD ECX,EDX
0x00713F0A FSUB float ptr [EAX]
0x00713F0C LEA EDI,[ESI + 0xc]
0x00713F0F FMUL ST1
0x00713F11 FADD float ptr [EAX]
0x00713F13 FSTP float ptr [EDI]
0x00713F15 FLD float ptr [ECX + 0x4]
0x00713F18 FSUB float ptr [EAX + 0x4]
0x00713F1B FMUL ST1
0x00713F1D FADD float ptr [EAX + 0x4]
0x00713F20 FSTP float ptr [EDI + 0x4]
0x00713F23 FLD float ptr [ECX + 0x8]
0x00713F26 FSUB float ptr [EAX + 0x8]
0x00713F29 FMUL ST1
0x00713F2B FADD float ptr [EAX + 0x8]
0x00713F2E FSTP float ptr [EDI + 0x8]
0x00713F31 FLD float ptr [ECX + 0xc]
0x00713F34 FSUB float ptr [EAX + 0xc]
0x00713F37 FMUL ST1
0x00713F39 FADD float ptr [EAX + 0xc]
0x00713F3C FSTP float ptr [EDI + 0xc]
0x00713F3F FSTP ST0
0x00713F41 FLD float ptr [0x007ffd74]
0x00713F47 FCOMP float ptr [EBX + 0x10c]
0x00713F4D FNSTSW AX
0x00713F4F TEST AH,0x44
0x00713F52 JNP 0x00713fe8
0x00713F58 MOV ECX,dword ptr [EBP + 0x8]
0x00713F5B CMP word ptr [ECX + 0x2],0xffff
0x00713F61 JNZ 0x00713fe8
0x00713F67 LEA EAX,[ESI + 0x1c]
0x00713F6A PUSH EAX
0x00713F6B MOV EAX,dword ptr [EBX + 0xc8]
0x00713F71 PUSH ECX
0x00713F72 MOV ECX,dword ptr [EBX + 0xc4]
0x00713F78 PUSH EAX
0x00713F79 PUSH ECX
0x00713F7A MOV ECX,dword ptr [EBP + -0x4]
0x00713F7D CALL 0x00713d50 << CALL
0x00713F82 FLD float ptr [ESI + 0x24]
0x00713F85 MOV ECX,dword ptr [ESI + 0x20]
0x00713F88 MOV EAX,dword ptr [ESI + 0x1c]
0x00713F8B MOV EDX,dword ptr [EBP + 0x8]
0x00713F8E MOV EDX,dword ptr [EDX + 0x18]
0x00713F91 SHL ECX,0x4
0x00713F94 FLD float ptr [ECX + EDX*0x1]
0x00713F97 ADD ECX,EDX
0x00713F99 SHL EAX,0x4
0x00713F9C FSUB float ptr [EAX + EDX*0x1]
0x00713F9F ADD EAX,EDX
0x00713FA1 LEA EDX,[ESI + 0x28]
0x00713FA4 PUSH ECX
0x00713FA5 FMUL ST1
0x00713FA7 FADD float ptr [EAX]
0x00713FA9 FSTP float ptr [EDX]
0x00713FAB FLD float ptr [ECX + 0x4]
0x00713FAE FSUB float ptr [EAX + 0x4]
0x00713FB1 FMUL ST1
0x00713FB3 FADD float ptr [EAX + 0x4]
0x00713FB6 FSTP float ptr [EDX + 0x4]
0x00713FB9 FLD float ptr [ECX + 0x8]
0x00713FBC FSUB float ptr [EAX + 0x8]
0x00713FBF FMUL ST1
0x00713FC1 FADD float ptr [EAX + 0x8]
0x00713FC4 FSTP float ptr [EDX + 0x8]
0x00713FC7 FLD float ptr [ECX + 0xc]
0x00713FCA FSUB float ptr [EAX + 0xc]
0x00713FCD FMUL ST1
0x00713FCF FADD float ptr [EAX + 0xc]
0x00713FD2 FSTP float ptr [EDX + 0xc]
0x00713FD5 FSTP ST0
0x00713FD7 FLD float ptr [EBX + 0x10c]
0x00713FDD FSTP float ptr [ESP]
0x00713FE0 PUSH EDX
0x00713FE1 PUSH EDI
0x00713FE2 PUSH EDI
0x00713FE3 CALL 0x0074d114 << CALL
0x00713FE8 POP EDI
0x00713FE9 POP ESI
0x00713FEA POP EBX
0x00713FEB MOV ESP,EBP
0x00713FED POP EBP
0x00713FEE RET 0x8 << RET
=== getInterpolatedFloat (0x0071AF20, 199 bytes) ===
0x0071AF20 PUSH EBP
0x0071AF21 MOV EBP,ESP
0x0071AF23 PUSH ECX
0x0071AF24 PUSH EBX
0x0071AF25 MOV EBX,dword ptr [EBP + 0x8]
0x0071AF28 PUSH ESI
0x0071AF29 MOV ESI,dword ptr [EBP + 0xc]
0x0071AF2C PUSH EDI
0x0071AF2D PUSH ESI
0x0071AF2E MOV EDI,EDX
0x0071AF30 MOV EAX,dword ptr [EDI + 0x9c]
0x0071AF36 MOV EDX,dword ptr [EDI + 0x98]
0x0071AF3C PUSH EBX
0x0071AF3D PUSH EAX
0x0071AF3E PUSH EDX
0x0071AF3F MOV dword ptr [EBP + -0x4],ECX
0x0071AF42 CALL 0x00713d50 << CALL
0x0071AF47 CMP word ptr [EBX],0x0
0x0071AF4B JNZ 0x0071af61
0x0071AF4D MOV ECX,dword ptr [EBX + 0x18]
0x0071AF50 MOV EAX,dword ptr [ESI]
0x0071AF52 MOV EDX,dword ptr [ECX + EAX*0x4]
0x0071AF55 POP EDI
0x0071AF56 MOV dword ptr [ESI + 0xc],EDX
0x0071AF59 POP ESI
0x0071AF5A POP EBX
0x0071AF5B MOV ESP,EBP
0x0071AF5D POP EBP
0x0071AF5E RET 0x8 << RET
0x0071AF61 MOV EAX,dword ptr [EBX + 0x18]
0x0071AF64 MOV ECX,dword ptr [ESI]
0x0071AF66 FLD float ptr [EAX + ECX*0x4]
0x0071AF69 MOV EDX,dword ptr [ESI + 0x4]
0x0071AF6C FLD float ptr [EAX + EDX*0x4]
0x0071AF6F FSUB ST0,ST1
0x0071AF71 FMUL float ptr [ESI + 0x8]
0x0071AF74 FADD ST0,ST1
0x0071AF76 FSTP float ptr [ESI + 0xc]
0x0071AF79 FSTP ST0
0x0071AF7B FLD float ptr [0x007ffd74]
0x0071AF81 FCOMP float ptr [EDI + 0x10c]
0x0071AF87 FNSTSW AX
0x0071AF89 TEST AH,0x44
0x0071AF8C JNP 0x0071afde
0x0071AF8E CMP word ptr [EBX + 0x2],0xffff
0x0071AF94 JNZ 0x0071afde
0x0071AF96 MOV ECX,dword ptr [EDI + 0xc4]
0x0071AF9C LEA EAX,[ESI + 0x10]
0x0071AF9F PUSH EAX
0x0071AFA0 MOV EAX,dword ptr [EDI + 0xc8]
0x0071AFA6 PUSH EBX
0x0071AFA7 PUSH EAX
0x0071AFA8 PUSH ECX
0x0071AFA9 MOV ECX,dword ptr [EBP + -0x4]
0x0071AFAC CALL 0x00713d50 << CALL
0x0071AFB1 MOV EBX,dword ptr [EBX + 0x18]
0x0071AFB4 MOV EDX,dword ptr [ESI + 0x10]
0x0071AFB7 FLD float ptr [EBX + EDX*0x4]
0x0071AFBA MOV EAX,dword ptr [ESI + 0x14]
0x0071AFBD FLD float ptr [EBX + EAX*0x4]
0x0071AFC0 FSUB ST0,ST1
0x0071AFC2 FMUL float ptr [ESI + 0x18]
0x0071AFC5 FADDP
0x0071AFC7 FST float ptr [ESI + 0x1c]
0x0071AFCA FLD float ptr [ESI + 0xc]
0x0071AFCD FXCH
0x0071AFCF FSUB ST0,ST1
0x0071AFD1 FMUL float ptr [EDI + 0x10c]
0x0071AFD7 FADD ST0,ST1
0x0071AFD9 FSTP float ptr [ESI + 0xc]
0x0071AFDC FSTP ST0
0x0071AFDE POP EDI
0x0071AFDF POP ESI
0x0071AFE0 POP EBX
0x0071AFE1 MOV ESP,EBP
0x0071AFE3 POP EBP
0x0071AFE4 RET 0x8 << RET
=== getIndexOffset (0x0071AFF0, 16 bytes) ===
0x0071AFF0 PUSH EBP
0x0071AFF1 MOV EBP,ESP
0x0071AFF3 MOV EAX,dword ptr [ECX + 0x4]
0x0071AFF6 MOV ECX,dword ptr [EBP + 0x8]
0x0071AFF9 LEA EAX,[EAX + ECX*0x2]
0x0071AFFC POP EBP
0x0071AFFD RET 0x4 << RET
=== setShortValue (0x0071B010, 18 bytes) ===
0x0071B010 PUSH EBP
0x0071B011 MOV EBP,ESP
0x0071B013 MOV EAX,ECX
0x0071B015 MOV ECX,dword ptr [EBP + 0x8]
0x0071B018 MOV DX,word ptr [ECX]
0x0071B01B MOV word ptr [EAX],DX
0x0071B01E POP EBP
0x0071B01F RET 0x4 << RET
=== scaleMatrix3x3ByVector (0x007BDCA0, 82 bytes) ===
0x007BDCA0 PUSH EBP
0x007BDCA1 MOV EBP,ESP
0x007BDCA3 MOV EAX,dword ptr [EBP + 0x8]
0x007BDCA6 FLD float ptr [EAX]
0x007BDCA8 FLD ST0
0x007BDCAA FMUL float ptr [ECX]
0x007BDCAC FSTP float ptr [ECX]
0x007BDCAE FLD ST0
0x007BDCB0 FMUL float ptr [ECX + 0x4]
0x007BDCB3 FSTP float ptr [ECX + 0x4]
0x007BDCB6 FMUL float ptr [ECX + 0x8]
0x007BDCB9 FSTP float ptr [ECX + 0x8]
0x007BDCBC FLD float ptr [EAX + 0x4]
0x007BDCBF FLD ST0
0x007BDCC1 FMUL float ptr [ECX + 0x10]
0x007BDCC4 FSTP float ptr [ECX + 0x10]
0x007BDCC7 FLD ST0
0x007BDCC9 FMUL float ptr [ECX + 0x14]
0x007BDCCC FSTP float ptr [ECX + 0x14]
0x007BDCCF FMUL float ptr [ECX + 0x18]
0x007BDCD2 FSTP float ptr [ECX + 0x18]
0x007BDCD5 FLD float ptr [EAX + 0x8]
0x007BDCD8 FLD ST0
0x007BDCDA FMUL float ptr [ECX + 0x20]
0x007BDCDD FSTP float ptr [ECX + 0x20]
0x007BDCE0 FLD ST0
0x007BDCE2 FMUL float ptr [ECX + 0x24]
0x007BDCE5 FSTP float ptr [ECX + 0x24]
0x007BDCE8 FMUL float ptr [ECX + 0x28]
0x007BDCEB FSTP float ptr [ECX + 0x28]
0x007BDCEE POP EBP
0x007BDCEF RET 0x4 << RET
=== ApplyTranslationMatrix (0x007BDC40, 90 bytes) ===
0x007BDC40 PUSH EBP
0x007BDC41 MOV EBP,ESP
0x007BDC43 MOV EAX,dword ptr [EBP + 0x8]
0x007BDC46 FLD float ptr [ECX + 0x20]
0x007BDC49 FMUL float ptr [EAX + 0x8]
0x007BDC4C FLD float ptr [ECX + 0x10]
0x007BDC4F FMUL float ptr [EAX + 0x4]
0x007BDC52 FADDP
0x007BDC54 FLD float ptr [EAX]
0x007BDC56 FMUL float ptr [ECX]
0x007BDC58 FADDP
0x007BDC5A FADD float ptr [ECX + 0x30]
0x007BDC5D FSTP float ptr [ECX + 0x30]
0x007BDC60 FLD float ptr [ECX + 0x24]
0x007BDC63 FMUL float ptr [EAX + 0x8]
0x007BDC66 FLD float ptr [ECX + 0x14]
0x007BDC69 FMUL float ptr [EAX + 0x4]
0x007BDC6C FADDP
0x007BDC6E FLD float ptr [ECX + 0x4]
0x007BDC71 FMUL float ptr [EAX]
0x007BDC73 FADDP
0x007BDC75 FADD float ptr [ECX + 0x34]
0x007BDC78 FSTP float ptr [ECX + 0x34]
0x007BDC7B FLD float ptr [ECX + 0x28]
0x007BDC7E FMUL float ptr [EAX + 0x8]
0x007BDC81 FLD float ptr [ECX + 0x18]
0x007BDC84 FMUL float ptr [EAX + 0x4]
0x007BDC87 FADDP
0x007BDC89 FLD float ptr [ECX + 0x8]
0x007BDC8C FMUL float ptr [EAX]
0x007BDC8E FADDP
0x007BDC90 FADD float ptr [ECX + 0x38]
0x007BDC93 FSTP float ptr [ECX + 0x38]
0x007BDC96 POP EBP
0x007BDC97 RET 0x4 << RET
=== rotateMatrixByQuaternion (0x007BDDB0, 333 bytes) ===
0x007BDDB0 PUSH EBP
0x007BDDB1 MOV EBP,ESP
0x007BDDB3 SUB ESP,0x9c
0x007BDDB9 MOV EAX,dword ptr [EBP + 0x8]
0x007BDDBC FLD float ptr [EAX]
0x007BDDBE PUSH ESI
0x007BDDBF FADD ST0,ST0
0x007BDDC1 MOV ESI,ECX
0x007BDDC3 FLD float ptr [EAX + 0x4]
0x007BDDC6 MOV dword ptr [EBP + -0x50],0x0
0x007BDDCD FADD ST0,ST0
0x007BDDCF MOV dword ptr [EBP + -0x40],0x0
0x007BDDD6 FLD float ptr [EAX + 0x8]
0x007BDDD9 FADD ST0,ST0
0x007BDDDB FSTP float ptr [EBP + 0x8]
0x007BDDDE FLD ST1
0x007BDDE0 FMUL float ptr [EAX + 0xc]
0x007BDDE3 FSTP float ptr [EBP + -0xc]
0x007BDDE6 FLD ST0
0x007BDDE8 FMUL float ptr [EAX + 0xc]
0x007BDDEB FSTP float ptr [EBP + -0x1c]
0x007BDDEE FLD float ptr [EBP + 0x8]
0x007BDDF1 FMUL float ptr [EAX + 0xc]
0x007BDDF4 FSTP float ptr [EBP + -0x18]
0x007BDDF7 FXCH
0x007BDDF9 FMUL float ptr [EAX]
0x007BDDFB FSTP float ptr [EBP + -0x14]
0x007BDDFE FLD ST0
0x007BDE00 FMUL float ptr [EAX]
0x007BDE02 FSTP float ptr [EBP + -0x8]
0x007BDE05 FLD float ptr [EBP + 0x8]
0x007BDE08 FMUL float ptr [EAX]
0x007BDE0A FSTP float ptr [EBP + -0x10]
0x007BDE0D FMUL float ptr [EAX + 0x4]
0x007BDE10 FLD float ptr [EBP + 0x8]
0x007BDE13 FMUL float ptr [EAX + 0x4]
0x007BDE16 FSTP float ptr [EBP + -0x4]
0x007BDE19 FLD float ptr [EBP + 0x8]
0x007BDE1C FMUL float ptr [EAX + 0x8]
0x007BDE1F FST float ptr [EBP + 0x8]
0x007BDE22 FADD ST0,ST1
0x007BDE24 FSUBR float ptr [0x007ff9d8]
0x007BDE2A FLD float ptr [EBP + -0x8]
0x007BDE2D FADD float ptr [EBP + -0x18]
0x007BDE30 FLD float ptr [EBP + -0x10]
0x007BDE33 FSUB float ptr [EBP + -0x1c]
0x007BDE36 FSTP float ptr [EBP + -0x78]
0x007BDE39 MOV EAX,dword ptr [EBP + -0x78]
0x007BDE3C FLD float ptr [EBP + -0x8]
0x007BDE3F MOV dword ptr [EBP + -0x54],EAX
0x007BDE42 FSUB float ptr [EBP + -0x18]
0x007BDE45 FSTP float ptr [EBP + -0x74]
0x007BDE48 MOV ECX,dword ptr [EBP + -0x74]
0x007BDE4B FLD float ptr [EBP + 0x8]
0x007BDE4E MOV dword ptr [EBP + -0x4c],ECX
0x007BDE51 FADD float ptr [EBP + -0x14]
0x007BDE54 FSUBR float ptr [0x007ff9d8]
0x007BDE5A FSTP float ptr [EBP + -0x70]
0x007BDE5D MOV EDX,dword ptr [EBP + -0x70]
0x007BDE60 FLD float ptr [EBP + -0x4]
0x007BDE63 MOV dword ptr [EBP + -0x48],EDX
0x007BDE66 FADD float ptr [EBP + -0xc]
0x007BDE69 FSTP float ptr [EBP + -0x6c]
0x007BDE6C MOV EAX,dword ptr [EBP + -0x6c]
0x007BDE6F FLD float ptr [EBP + -0x10]
0x007BDE72 MOV dword ptr [EBP + -0x44],EAX
0x007BDE75 FADD float ptr [EBP + -0x1c]
0x007BDE78 FSTP float ptr [EBP + -0x68]
0x007BDE7B MOV ECX,dword ptr [EBP + -0x68]
0x007BDE7E FLD float ptr [EBP + -0x4]
0x007BDE81 MOV dword ptr [EBP + -0x3c],ECX
0x007BDE84 FSUB float ptr [EBP + -0xc]
0x007BDE87 FSTP float ptr [EBP + -0x64]
0x007BDE8A MOV EDX,dword ptr [EBP + -0x64]
0x007BDE8D FXCH ST2
0x007BDE8F MOV dword ptr [EBP + -0x38],EDX
0x007BDE92 FADD float ptr [EBP + -0x14]
0x007BDE95 FSUBR float ptr [0x007ff9d8]
0x007BDE9B FSTP float ptr [EBP + -0x60]
0x007BDE9E FSTP float ptr [EBP + -0x5c]
0x007BDEA1 FSTP float ptr [EBP + -0x58]
0x007BDEA4 MOV EAX,dword ptr [EBP + -0x60]
0x007BDEA7 PUSH ESI
0x007BDEA8 LEA EDX,[EBP + -0x5c]
0x007BDEAB LEA ECX,[EBP + 0xffffff64]
0x007BDEB1 MOV dword ptr [EBP + -0x34],EAX
0x007BDEB4 MOV dword ptr [EBP + -0x30],0x0
0x007BDEBB MOV dword ptr [EBP + -0x2c],0x0
0x007BDEC2 MOV dword ptr [EBP + -0x28],0x0
0x007BDEC9 MOV dword ptr [EBP + -0x24],0x0
0x007BDED0 MOV dword ptr [EBP + -0x20],0x3f800000
0x007BDED7 CALL 0x007bc6a0 << CALL
0x007BDEDC MOV ECX,ESI
0x007BDEDE MOV EDX,0x8
0x007BDEE3 MOV ESI,dword ptr [EAX]
0x007BDEE5 MOV dword ptr [ECX],ESI
0x007BDEE7 MOV ESI,dword ptr [EAX + 0x4]
0x007BDEEA MOV dword ptr [ECX + 0x4],ESI
0x007BDEED ADD ECX,0x8
0x007BDEF0 ADD EAX,0x8
0x007BDEF3 DEC EDX
0x007BDEF4 JNZ 0x007bdee3
0x007BDEF6 POP ESI
0x007BDEF7 MOV ESP,EBP
0x007BDEF9 POP EBP
0x007BDEFA RET 0x4 << RET
=== calculateScaledInverseMatrix (0x007BD820, 347 bytes) ===
0x007BD820 PUSH EBP
0x007BD821 MOV EBP,ESP
0x007BD823 SUB ESP,0x94
0x007BD829 FLD float ptr [EBP + 0xc]
0x007BD82C PUSH ESI
0x007BD82D FSUB float ptr [0x007ff9d8]
0x007BD833 PUSH EDI
0x007BD834 MOV ESI,ECX
0x007BD836 FABS
0x007BD838 FCOMP float ptr [0x008026bc]
0x007BD83E FNSTSW AX
0x007BD840 TEST AH,0x5
0x007BD843 JP 0x007bd858
0x007BD845 MOV EDI,dword ptr [EBP + 0x8]
0x007BD848 PUSH EDI
0x007BD849 CALL 0x007bd700 << CALL
0x007BD84E MOV EAX,EDI
0x007BD850 POP EDI
0x007BD851 POP ESI
0x007BD852 MOV ESP,EBP
0x007BD854 POP EBP
0x007BD855 RET 0x8 << RET
0x007BD858 MOV EAX,dword ptr [ESI + 0x28]
0x007BD85B MOV ECX,dword ptr [ESI + 0x24]
0x007BD85E MOV EDX,dword ptr [ESI + 0x20]
0x007BD861 PUSH EAX
0x007BD862 MOV EAX,dword ptr [ESI + 0x18]
0x007BD865 PUSH ECX
0x007BD866 MOV ECX,dword ptr [ESI + 0x14]
0x007BD869 PUSH EDX
0x007BD86A MOV EDX,dword ptr [ESI + 0x10]
0x007BD86D PUSH EAX
0x007BD86E MOV EAX,dword ptr [ESI + 0x8]
0x007BD871 PUSH ECX
0x007BD872 MOV ECX,dword ptr [ESI + 0x4]
0x007BD875 PUSH EDX
0x007BD876 MOV EDX,dword ptr [ESI]
0x007BD878 PUSH EAX
0x007BD879 PUSH ECX
0x007BD87A PUSH EDX
0x007BD87B LEA ECX,[EBP + -0x70]
0x007BD87E CALL 0x005f8d20 << CALL
0x007BD883 MOV EAX,dword ptr [EBP + -0x50]
0x007BD886 MOV ECX,dword ptr [EBP + -0x5c]
0x007BD889 MOV EDX,dword ptr [EBP + -0x68]
0x007BD88C PUSH EAX
0x007BD88D MOV EAX,dword ptr [EBP + -0x54]
0x007BD890 PUSH ECX
0x007BD891 MOV ECX,dword ptr [EBP + -0x60]
0x007BD894 PUSH EDX
0x007BD895 MOV EDX,dword ptr [EBP + -0x6c]
0x007BD898 PUSH EAX
0x007BD899 MOV EAX,dword ptr [EBP + -0x58]
0x007BD89C PUSH ECX
0x007BD89D MOV ECX,dword ptr [EBP + -0x64]
0x007BD8A0 PUSH EDX
0x007BD8A1 MOV EDX,dword ptr [EBP + -0x70]
0x007BD8A4 PUSH EAX
0x007BD8A5 PUSH ECX
0x007BD8A6 PUSH EDX
0x007BD8A7 LEA ECX,[EBP + 0xffffff6c]
0x007BD8AD CALL 0x005f8d20 << CALL
0x007BD8B2 FLD float ptr [EBP + 0xc]
0x007BD8B5 FMUL float ptr [EBP + 0xc]
0x007BD8B8 MOV ECX,dword ptr [EBP + 0xffffff70]
0x007BD8BE MOV EAX,dword ptr [EBP + 0xffffff6c]
0x007BD8C4 MOV EDX,dword ptr [EBP + 0xffffff74]
0x007BD8CA FDIVR float ptr [0x007ff9d8]
0x007BD8D0 MOV dword ptr [EBP + -0x48],ECX
0x007BD8D3 MOV ECX,dword ptr [EBP + 0xffffff7c]
0x007BD8D9 MOV dword ptr [EBP + -0x4c],EAX
0x007BD8DC MOV EAX,dword ptr [EBP + 0xffffff78]
0x007BD8E2 MOV dword ptr [EBP + -0x44],EDX
0x007BD8E5 MOV EDX,dword ptr [EBP + -0x80]
0x007BD8E8 MOV dword ptr [EBP + -0x38],ECX
0x007BD8EB MOV ECX,dword ptr [EBP + -0x78]
0x007BD8EE MOV dword ptr [EBP + -0x3c],EAX
0x007BD8F1 MOV EAX,dword ptr [EBP + -0x7c]
0x007BD8F4 MOV dword ptr [EBP + -0x34],EDX
0x007BD8F7 MOV EDX,dword ptr [EBP + -0x74]
0x007BD8FA PUSH ECX
0x007BD8FB MOV dword ptr [EBP + -0x28],ECX
0x007BD8FE LEA ECX,[EBP + -0x4c]
0x007BD901 MOV dword ptr [EBP + -0x40],0x0
0x007BD908 MOV dword ptr [EBP + -0x30],0x0
0x007BD90F MOV dword ptr [EBP + -0x2c],EAX
0x007BD912 MOV dword ptr [EBP + -0x24],EDX
0x007BD915 MOV dword ptr [EBP + -0x20],0x0
0x007BD91C MOV dword ptr [EBP + -0x1c],0x0
0x007BD923 MOV dword ptr [EBP + -0x18],0x0
0x007BD92A MOV dword ptr [EBP + -0x14],0x0
0x007BD931 MOV dword ptr [EBP + -0x10],0x3f800000
0x007BD938 FSTP float ptr [ESP]
0x007BD93B CALL 0x007bdd00 << CALL
0x007BD940 FLD float ptr [ESI + 0x30]
0x007BD943 FCHS
0x007BD945 FSTP float ptr [EBP + -0xc]
0x007BD948 FLD float ptr [ESI + 0x34]
0x007BD94B FCHS
0x007BD94D FSTP float ptr [EBP + -0x8]
0x007BD950 FLD float ptr [ESI + 0x38]
0x007BD953 LEA EAX,[EBP + -0xc]
0x007BD956 FCHS
0x007BD958 PUSH EAX
0x007BD959 FSTP float ptr [EBP + -0x4]
0x007BD95C LEA ECX,[EBP + -0x4c]
0x007BD95F CALL 0x007bdc40 << CALL
0x007BD964 MOV EAX,dword ptr [EBP + 0x8]
0x007BD967 MOV ECX,0x10
0x007BD96C LEA ESI,[EBP + -0x4c]
0x007BD96F MOV EDI,EAX
0x007BD971 MOVSD.REP ES:EDI,ESI
0x007BD973 POP EDI
0x007BD974 POP ESI
0x007BD975 MOV ESP,EBP
0x007BD977 POP EBP
0x007BD978 RET 0x8 << RET
=== multiplyMatrix4x4_Basic (0x007507BB, 229 bytes) ===
0x007507BB MOV EDI,EDI
0x007507BD PUSH EBP
0x007507BE MOV EBP,ESP
0x007507C0 SUB ESP,0x40
0x007507C3 MOV EAX,dword ptr [EBP + 0x8]
0x007507C6 PUSH EBX
0x007507C7 PUSH ESI
0x007507C8 MOV ESI,dword ptr [EBP + 0x10]
0x007507CB CMP ESI,EAX
0x007507CD PUSH EDI
0x007507CE JNZ 0x00750841
0x007507D0 CMP dword ptr [EBP + 0xc],EAX
0x007507D3 JZ 0x00750833
0x007507D5 MOV EBX,dword ptr [EBP + 0x8]
0x007507D8 MOV ECX,dword ptr [EBP + 0xc]
0x007507DB MOV EDX,dword ptr [EBP + 0x10]
0x007507DE MOV EDI,0xfffffffc
0x007507E3 MOV ESI,0xfffffff0
0x007507E8 FLD float ptr [EDX + EDI*0x4 + 0x10]
0x007507EC FLD float ptr [EDX + EDI*0x4 + 0x20]
0x007507F0 FLD float ptr [EDX + EDI*0x4 + 0x30]
0x007507F4 FLD float ptr [EDX + EDI*0x4 + 0x40]
0x007507F8 FLD ST3
0x007507FA FMUL float ptr [ECX + ESI*0x4 + 0x40]
0x007507FE FLD ST3
0x00750800 FMUL float ptr [ECX + ESI*0x4 + 0x44]
0x00750804 FLD ST3
0x00750806 FMUL float ptr [ECX + ESI*0x4 + 0x48]
0x0075080A FLD ST3
0x0075080C FMUL float ptr [ECX + ESI*0x4 + 0x4c]
0x00750810 FXCH ST3
0x00750812 FADDP
0x00750814 FXCH ST2
0x00750816 FADDP
0x00750818 FADDP
0x0075081A FSTP float ptr [EBX + ESI*0x4 + 0x40]
0x0075081E ADD ESI,0x4
0x00750821 JNZ 0x007507f8
0x00750823 FFREE ST3
0x00750825 FFREE ST2
0x00750827 FFREE ST1
0x00750829 FFREE ST0
0x0075082B LEA EBX,[EBX + 0x4]
0x0075082E INC EDI
0x0075082F JNZ 0x007507e3
0x00750831 JMP 0x00750899
0x00750833 PUSH 0x10
0x00750835 POP ECX
0x00750836 LEA EDI,[EBP + -0x40]
0x00750839 MOVSD.REP ES:EDI,ESI
0x0075083B LEA ECX,[EBP + -0x40]
0x0075083E MOV dword ptr [EBP + 0x10],ECX
0x00750841 MOV EBX,dword ptr [EBP + 0x8]
0x00750844 MOV ECX,dword ptr [EBP + 0xc]
0x00750847 MOV EDX,dword ptr [EBP + 0x10]
0x0075084A MOV EDI,0xfffffffc
0x0075084F MOV ESI,0xfffffffc
0x00750854 FLD float ptr [ECX]
0x00750856 FLD float ptr [ECX + 0x4]
0x00750859 FLD float ptr [ECX + 0x8]
0x0075085C FLD float ptr [ECX + 0xc]
0x0075085F FLD ST3
0x00750861 FMUL float ptr [EDX + ESI*0x4 + 0x10]
0x00750865 FLD ST3
0x00750867 FMUL float ptr [EDX + ESI*0x4 + 0x20]
0x0075086B FLD ST3
0x0075086D FMUL float ptr [EDX + ESI*0x4 + 0x30]
0x00750871 FLD ST3
0x00750873 FMUL float ptr [EDX + ESI*0x4 + 0x40]
0x00750877 FXCH ST3
0x00750879 FADDP
0x0075087B FXCH ST2
0x0075087D FADDP
0x0075087F FADDP
0x00750881 FSTP float ptr [EBX + ESI*0x4 + 0x10]
0x00750885 INC ESI
0x00750886 JNZ 0x0075085f
0x00750888 FFREE ST3
0x0075088A FFREE ST2
0x0075088C FFREE ST1
0x0075088E FFREE ST0
0x00750890 LEA ECX,[ECX + 0x10]
0x00750893 LEA EBX,[EBX + 0x10]
0x00750896 INC EDI
0x00750897 JNZ 0x0075084f
0x00750899 POP EDI
0x0075089A POP ESI
0x0075089B POP EBX
0x0075089C LEAVE
0x0075089D RET 0xc << RET
=== buildRotMatFromQuat (0x0074B6BB) NOT FOUND ===
=== squaredMagnitude (0x004549F0, 31 bytes) ===
0x004549F0 FLD float ptr [ECX + 0x8]
0x004549F3 FLD float ptr [ECX + 0x4]
0x004549F6 FLD float ptr [ECX]
0x004549F8 FLD ST0
0x004549FA FMUL ST1
0x004549FC FLD ST2
0x004549FE FMUL ST3
0x00454A00 FADDP
0x00454A02 FLD ST3
0x00454A04 FMUL ST4
0x00454A06 FADDP
0x00454A08 FSTP ST3
0x00454A0A FSTP ST0
0x00454A0C FSTP ST0
0x00454A0E RET << RET