Created
February 3, 2026 02:35
-
-
Save usrnatc/979f1338a63a3d75e9162f730653ef8f to your computer and use it in GitHub Desktop.
collection of x87 maths routines
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
| align(16) | |
| PowF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| movss dword ptr [rsp + 16], xmm1 | |
| fld dword ptr [rsp + 16] | |
| fld dword ptr [rsp + 8] | |
| fyl2x | |
| fld st(0) | |
| frndint | |
| fsub st(1), st(0) | |
| fxch st(1) | |
| f2xm1 | |
| fld1 | |
| faddp st(1), st(0) | |
| fscale | |
| fstp st(1) | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| PowF32 endp | |
| align(16) | |
| ExpF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fldl2e | |
| fld dword ptr [rsp + 8] | |
| fmulp st(1), st(0) | |
| fld st(0) | |
| frndint | |
| fsub st(1), st(0) | |
| fxch st(1) | |
| f2xm1 | |
| fld1 | |
| faddp st(1), st(0) | |
| fscale | |
| fstp st(1) | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| ExpF32 endp | |
| align(16) | |
| LnF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fldln2 | |
| fld dword ptr [rsp + 8] | |
| fyl2x | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| LnF32 endp | |
| align(16) | |
| Log10F32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fldlg2 | |
| fld dword ptr [rsp + 8] | |
| fyl2x | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| Log10F32 endp | |
| align(16) | |
| Log2F32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld1 | |
| fld dword ptr [rsp + 8] | |
| fyl2x | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| Log2F32 endp | |
| align(16) | |
| SinF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld dword ptr [rsp + 8] | |
| fsin | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| SinF32 endp | |
| align(16) | |
| CosF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld dword ptr [rsp + 8] | |
| fcos | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| CosF32 endp | |
| align(16) ;; NOTE: void SinCosF32(f32 Val, OUT f32* SinRes, OUT f32* CosRes) | |
| SinCosF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld dword ptr [rsp + 8] | |
| fsincos | |
| fstp dword ptr [r8] | |
| fstp dword ptr [rdx] | |
| ret | |
| SinCosF32 endp | |
| align(16) | |
| TanF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld dword ptr [rsp + 8] | |
| fptan | |
| fstp st(0) | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| TanF32 endp | |
| align(16) | |
| ArcSinF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld dword ptr [rsp + 8] | |
| fld st(0) | |
| fmul st(0), st(0) | |
| fld1 | |
| fsubrp st(1), st(0) | |
| fsqrt | |
| fpatan | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| ArcSinF32 endp | |
| align(16) | |
| ArcCosF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld dword ptr [rsp + 8] | |
| fld st(0) | |
| fmul st(0), st(0) | |
| fld1 | |
| fsubrp st(1), st(0) | |
| fsqrt | |
| fxch st(1) | |
| fpatan | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| ArcCosF32 endp | |
| align(16) | |
| ArcTanF32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| fld dword ptr [rsp + 8] | |
| fld1 | |
| fpatan | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| ArcTanF32 endp | |
| align(16) | |
| ArcTan2F32 proc | |
| movss dword ptr [rsp + 8], xmm0 | |
| movss dword ptr [rsp + 16], xmm1 | |
| fld dword ptr [rsp + 8] | |
| fld dword ptr [rsp + 16] | |
| fpatan | |
| fstp dword ptr [rsp + 8] | |
| movss xmm0, dword ptr [rsp + 8] | |
| ret | |
| ArcTan2F32 endp | |
| align(16) | |
| PowF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| movsd qword ptr [rsp + 16], xmm1 | |
| fld qword ptr [rsp + 16] | |
| fld qword ptr [rsp + 8] | |
| fyl2x | |
| fld st(0) | |
| frndint | |
| fsub st(1), st(0) | |
| fxch st(1) | |
| f2xm1 | |
| fld1 | |
| faddp st(1), st(0) | |
| fscale | |
| fstp st(1) | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| PowF64 endp | |
| align(16) | |
| ExpF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fldl2e | |
| fld qword ptr [rsp + 8] | |
| fmulp st(1), st(0) | |
| fld st(0) | |
| frndint | |
| fsub st(1), st(0) | |
| fxch st(1) | |
| f2xm1 | |
| fld1 | |
| faddp st(1), st(0) | |
| fscale | |
| fstp st(1) | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| ExpF64 endp | |
| align(16) | |
| LnF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fldln2 | |
| fld qword ptr [rsp + 8] | |
| fyl2x | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| LnF64 endp | |
| align(16) | |
| Log10F64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fldlg2 | |
| fld qword ptr [rsp + 8] | |
| fyl2x | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| Log10F64 endp | |
| align(16) | |
| Log2F64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld1 | |
| fld qword ptr [rsp + 8] | |
| fyl2x | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| Log2F64 endp | |
| align(16) | |
| SinF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld qword ptr [rsp + 8] | |
| fsin | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| SinF64 endp | |
| align(16) | |
| CosF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld qword ptr [rsp + 8] | |
| fcos | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| CosF64 endp | |
| align(16) ;; NOTE: void SinCosF64(f64 Val, OUT f64* SinRes, OUT f64* CosRes) | |
| SinCosF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld qword ptr [rsp + 8] | |
| fsincos | |
| fstp qword ptr [r8] | |
| fstp qword ptr [rdx] | |
| ret | |
| SinCosF64 endp | |
| align(16) | |
| TanF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld qword ptr [rsp + 8] | |
| fptan | |
| fstp st(0) | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| TanF64 endp | |
| align(16) | |
| ArcSinF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld qword ptr [rsp + 8] | |
| fld st(0) | |
| fmul st(0), st(0) | |
| fld1 | |
| fsubrp st(1), st(0) | |
| fsqrt | |
| fpatan | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| ArcSinF64 endp | |
| align(16) | |
| ArcCosF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld qword ptr [rsp + 8] | |
| fld st(0) | |
| fmul st(0), st(0) | |
| fld1 | |
| fsubrp st(1), st(0) | |
| fsqrt | |
| fxch st(1) | |
| fpatan | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| ArcCosF64 endp | |
| align(16) | |
| ArcTanF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld qword ptr [rsp + 8] | |
| fld1 | |
| fpatan | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| ArcTanF64 endp | |
| align(16) | |
| ArcTan2F64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| movsd qword ptr [rsp + 16], xmm1 | |
| fld qword ptr [rsp + 8] | |
| fld qword ptr [rsp + 16] | |
| fpatan | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| ArcTan2F64 endp | |
| align(16) | |
| InvSqrtF64 proc | |
| movsd qword ptr [rsp + 8], xmm0 | |
| fld1 | |
| fld qword ptr [rsp + 8] | |
| fsqrt | |
| fdivp st(1), st(0) | |
| fstp qword ptr [rsp + 8] | |
| movsd xmm0, qword ptr [rsp + 8] | |
| ret | |
| InvSqrtF64 endp |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment