mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-26 23:36:32 +00:00
3a33e6baaf
Rename all .CC files to .ZC extension.
684 lines
13 KiB
HolyC
Executable file
684 lines
13 KiB
HolyC
Executable file
asm {
|
|
|
|
//************************************
|
|
_D3_NORM::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RDX, U64 SF_ARG1[RBP]
|
|
FLD U64 [RDX]
|
|
FMUL ST0, ST0
|
|
FLD U64 8[RDX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FLD U64 16[RDX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FSQRT
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_D3_NORM_SQR::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RDX, U64 SF_ARG1[RBP]
|
|
FLD U64 [RDX]
|
|
FMUL ST0, ST0
|
|
FLD U64 8[RDX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FLD U64 16[RDX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_D3_DIST::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RDX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG2[RBP]
|
|
FLD U64 [RDX]
|
|
FSUB ST0, U64 [RBX]
|
|
FMUL ST0, ST0
|
|
FLD U64 8[RDX]
|
|
FSUB ST0, U64 8[RBX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FLD U64 16[RDX]
|
|
FSUB ST0, U64 16[RBX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FSQRT
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_DIST_SQR::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RDX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG2[RBP]
|
|
FLD U64 [RDX]
|
|
FSUB ST0, U64 [RBX]
|
|
FMUL ST0, ST0
|
|
FLD U64 8[RDX]
|
|
FSUB ST0, U64 8[RBX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FLD U64 16[RDX]
|
|
FSUB ST0, U64 16[RBX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_CROSS::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RDX, U64 SF_ARG2[RBP]
|
|
MOV RBX, U64 SF_ARG3[RBP]
|
|
|
|
FLD U64 8[RDX]
|
|
FMUL ST0, U64 16[RBX]
|
|
FLD U64 16[RDX]
|
|
FMUL ST0, U64 8[RBX]
|
|
FSUBP ST1, ST0
|
|
FSTP U64 [RAX]
|
|
|
|
FLD U64 [RDX]
|
|
FMUL ST0, U64 16[RBX]
|
|
FLD U64 16[RDX]
|
|
FMUL ST0, U64 [RBX]
|
|
FSUBRP ST1, ST0
|
|
FSTP U64 8[RAX]
|
|
|
|
FLD U64 [RDX]
|
|
FMUL ST0, U64 8[RBX]
|
|
FLD U64 8[RDX]
|
|
FMUL ST0, U64 [RBX]
|
|
FSUBP ST1, ST0
|
|
FSTP U64 16[RAX]
|
|
|
|
POP RBP
|
|
RET1 24
|
|
|
|
//************************************
|
|
_D3_DOT::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RDX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG2[RBP]
|
|
FLD U64 [RDX]
|
|
FMUL ST0, U64 [RBX]
|
|
FLD U64 8[RDX]
|
|
FMUL ST0, U64 8[RBX]
|
|
FADDP ST1, ST0
|
|
FLD U64 16[RDX]
|
|
FMUL ST0, U64 16[RBX]
|
|
FADDP ST1, ST0
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_ADD::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RDX, U64 SF_ARG2[RBP]
|
|
MOV RBX, U64 SF_ARG3[RBP]
|
|
FLD U64 [RDX]
|
|
FADD ST0, U64 [RBX]
|
|
FSTP U64 [RAX]
|
|
FLD U64 8[RDX]
|
|
FADD ST0, U64 8[RBX]
|
|
FSTP U64 8[RAX]
|
|
FLD U64 16[RDX]
|
|
FADD ST0, U64 16[RBX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 24
|
|
|
|
//************************************
|
|
_D3_SUB::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RDX, U64 SF_ARG2[RBP]
|
|
MOV RBX, U64 SF_ARG3[RBP]
|
|
FLD U64 [RDX]
|
|
FSUB ST0, U64 [RBX]
|
|
FSTP U64 [RAX]
|
|
FLD U64 8[RDX]
|
|
FSUB ST0, U64 8[RBX]
|
|
FSTP U64 8[RAX]
|
|
FLD U64 16[RDX]
|
|
FSUB ST0, U64 16[RBX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 24
|
|
|
|
//************************************
|
|
_D3_MUL::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG3[RBP]
|
|
FLD U64 SF_ARG2[RBP]
|
|
FLD ST0
|
|
FMUL ST0, U64 [RBX]
|
|
FSTP U64 [RAX]
|
|
FLD ST0
|
|
FMUL ST0, U64 8[RBX]
|
|
FSTP U64 8[RAX]
|
|
FMUL ST0, U64 16[RBX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 24
|
|
|
|
//************************************
|
|
_D3_DIV::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG2[RBP]
|
|
FLD U64 SF_ARG3[RBP]
|
|
FLD ST0
|
|
FDIVR ST0, U64 [RBX]
|
|
FSTP U64 [RAX]
|
|
FLD ST0
|
|
FDIVR ST0, U64 8[RBX]
|
|
FSTP U64 8[RAX]
|
|
FDIVR ST0, U64 16[RBX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 24
|
|
|
|
//************************************
|
|
_D3_ZERO::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
XOR RDX, RDX
|
|
MOV U64 [RAX], RDX
|
|
MOV U64 8[RAX], RDX
|
|
MOV U64 16[RAX], RDX
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_D3_COPY::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG2[RBP]
|
|
MOV RDX, U64 [RBX]
|
|
MOV U64 [RAX], RDX
|
|
MOV RDX, U64 8[RBX]
|
|
MOV U64 8[RAX], RDX
|
|
MOV RDX, U64 16[RBX]
|
|
MOV U64 16[RAX], RDX
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_EQU::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RDX, U64 SF_ARG2[RBP]
|
|
MOV U64 [RAX], RDX
|
|
MOV RDX, U64 SF_ARG3[RBP]
|
|
MOV U64 8[RAX], RDX
|
|
MOV RDX, U64 SF_ARG4[RBP]
|
|
MOV U64 16[RAX], RDX
|
|
POP RBP
|
|
RET1 32
|
|
|
|
//************************************
|
|
_D3_ADD_EQU::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG2[RBP]
|
|
FLD U64 [RAX]
|
|
FADD ST0, U64 [RBX]
|
|
FSTP U64 [RAX]
|
|
FLD U64 8[RAX]
|
|
FADD ST0, U64 8[RBX]
|
|
FSTP U64 8[RAX]
|
|
FLD U64 16[RAX]
|
|
FADD ST0, U64 16[RBX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_SUB_EQU::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
MOV RBX, U64 SF_ARG2[RBP]
|
|
FLD U64 [RAX]
|
|
FSUB ST0, U64 [RBX]
|
|
FSTP U64 [RAX]
|
|
FLD U64 8[RAX]
|
|
FSUB ST0, U64 8[RBX]
|
|
FSTP U64 8[RAX]
|
|
FLD U64 16[RAX]
|
|
FSUB ST0, U64 16[RBX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_MUL_EQU::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
FLD U64 SF_ARG2[RBP]
|
|
FLD ST0
|
|
FMUL ST0, U64 [RAX]
|
|
FSTP U64 [RAX]
|
|
FLD ST0
|
|
FMUL ST0, U64 8[RAX]
|
|
FSTP U64 8[RAX]
|
|
FMUL ST0, U64 16[RAX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_DIV_EQU::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
FLD U64 SF_ARG2[RBP]
|
|
FLD ST0
|
|
FDIVR ST0, U64 [RAX]
|
|
FSTP U64 [RAX]
|
|
FLD ST0
|
|
FDIVR ST0, U64 8[RAX]
|
|
FSTP U64 8[RAX]
|
|
FDIVR ST0, U64 16[RAX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_D3_UNIT::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
FLD U64 [RAX]
|
|
FMUL ST0, ST0
|
|
FLD U64 8[RAX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FLD U64 16[RAX]
|
|
FMUL ST0, ST0
|
|
FADDP ST1, ST0
|
|
FSQRT
|
|
FST U64 SF_ARG1[RBP]
|
|
MOV RBX, SF_ARG1[RBP]
|
|
TEST RBX, RBX
|
|
JZ @@05
|
|
FLD ST0
|
|
FDIVR ST0, U64 [RAX]
|
|
FSTP U64 [RAX]
|
|
FLD ST0
|
|
FDIVR ST0, U64 8[RAX]
|
|
FSTP U64 8[RAX]
|
|
FDIVR ST0, U64 16[RAX]
|
|
FSTP U64 16[RAX]
|
|
POP RBP
|
|
RET1 8
|
|
@@05: FFREE ST0
|
|
FINCSTP
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_SQR::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
FLD U64 SF_ARG1[RBP]
|
|
FMUL ST0, ST0
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_SIGN::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
FLD U64 SF_ARG1[RBP]
|
|
FTST
|
|
FSTSW
|
|
FFREE ST0
|
|
FINCSTP
|
|
MOV RDX, RAX
|
|
XOR RAX, RAX
|
|
BT RDX, 14
|
|
JC @@05
|
|
MOV RAX, 1.0
|
|
BT RDX, 8
|
|
JNC @@05
|
|
MOV RAX, -1.0
|
|
@@05: POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_ARG::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
FLD U64 SF_ARG2[RBP]
|
|
FLD U64 SF_ARG1[RBP]
|
|
@@05: FPATAN
|
|
FSTSW
|
|
TEST AX, 0x400
|
|
JNZ @@05
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_ROUND::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 8
|
|
FSTCW U16 -8[RBP]
|
|
MOV AX, U16 -8[RBP]
|
|
MOV U16 -6[RBP], AX
|
|
AND AX,~0x0C00
|
|
MOV U16 -8[RBP], AX
|
|
FLDCW U16 -8[RBP]
|
|
|
|
FLD U64 SF_ARG1[RBP]
|
|
FRNDINT
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
|
|
FLDCW U16 -6[RBP]
|
|
LEAVE
|
|
RET1 8
|
|
|
|
//************************************
|
|
_TRUNC::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 8
|
|
FSTCW U16 -8[RBP]
|
|
MOV AX, U16 -8[RBP]
|
|
MOV U16 -6[RBP], AX
|
|
OR AX, 0x0C00
|
|
MOV U16 -8[RBP], AX
|
|
FLDCW U16 -8[RBP]
|
|
|
|
FLD U64 SF_ARG1[RBP]
|
|
FRNDINT
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
|
|
FLDCW U16 -6[RBP]
|
|
LEAVE
|
|
RET1 8
|
|
|
|
//************************************
|
|
_FLOOR::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 8
|
|
FSTCW U16 -8[RBP]
|
|
MOV AX, U16 -8[RBP]
|
|
MOV U16 -6[RBP], AX
|
|
AND AX, ~0x0C00
|
|
OR AX, 0x0400
|
|
MOV U16 -8[RBP], AX
|
|
FLDCW U16 -8[RBP]
|
|
|
|
FLD U64 SF_ARG1[RBP]
|
|
FRNDINT
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
|
|
FLDCW U16 -6[RBP]
|
|
LEAVE
|
|
RET1 8
|
|
|
|
//************************************
|
|
_CEIL::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 8
|
|
FSTCW U16 -8[RBP]
|
|
MOV AX, U16 -8[RBP]
|
|
MOV U16 -6[RBP], AX
|
|
AND AX, ~0x0C00
|
|
OR AX, 0x0800
|
|
MOV U16 -8[RBP], AX
|
|
FLDCW U16 -8[RBP]
|
|
|
|
FLD U64 SF_ARG1[RBP]
|
|
FRNDINT
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, SF_ARG1[RBP]
|
|
|
|
FLDCW U16 -6[RBP]
|
|
LEAVE
|
|
RET1 8
|
|
|
|
//************************************
|
|
SYS_POW::
|
|
// RAX=RDX`RAX
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 24
|
|
TEST RAX, RAX //To power of zero?
|
|
JNZ @@05
|
|
MOV RAX, 1.0
|
|
JMP @@20
|
|
@@05: TEST RDX, RDX //zero to a power?
|
|
JNZ @@10
|
|
XOR RAX, RAX
|
|
JMP @@20
|
|
@@10: MOV RCX, RAX //RCX=pow
|
|
MOV U64 -8[RBP], RDX
|
|
MOV U64 -16[RBP], RAX
|
|
FSTCW U16 -24[RBP]
|
|
MOV AX, U16 -24[RBP]
|
|
MOV U16 -22[RBP], AX
|
|
OR AX, 0x0C00
|
|
MOV U16 -24[RBP], AX
|
|
FLDCW U16 -24[RBP]
|
|
FLD U64 -16[RBP]
|
|
FLD U64 -8[RBP]
|
|
FABS //base should be pos
|
|
FYL2X // y*log2(x)
|
|
FST U64 -8[RBP]
|
|
FRNDINT
|
|
FLD U64 -8[RBP]
|
|
FSUBRP ST1, ST0
|
|
F2XM1
|
|
FLD1
|
|
FADDP ST1, ST0
|
|
FSTP U64 -16[RBP]
|
|
FLD U64 -8[RBP]
|
|
FLD U64 -16[RBP]
|
|
FSCALE // ST0<<ST1
|
|
TEST RDX, RDX //was base neg?
|
|
JGE @@15
|
|
MOV U64 -16[RBP], RCX
|
|
FLD U64 -16[RBP]
|
|
FISTTP U64 -16[RBP]
|
|
TEST U64 -16[RBP], 1
|
|
JZ @@15 //was pow odd?
|
|
FCHS
|
|
@@15: FSTP U64 -8[RBP]
|
|
FFREE ST0
|
|
FINCSTP
|
|
FLDCW U16 -22[RBP]
|
|
MOV RAX, U64 -8[RBP]
|
|
@@20: LEAVE
|
|
RET
|
|
|
|
//************************************
|
|
_POW::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
MOV RAX, U64 SF_ARG2[RBP]
|
|
MOV RDX, U64 SF_ARG1[RBP]
|
|
CALL SYS_POW
|
|
POP RBP
|
|
RET1 16
|
|
|
|
//************************************
|
|
_POW10::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 16
|
|
FSTCW U16 -8[RBP]
|
|
MOV AX, U16 -8[RBP]
|
|
MOV U16 -6[RBP], AX
|
|
OR AX, 0x0C00
|
|
MOV U16 -8[RBP], AX
|
|
FLDCW U16 -8[RBP]
|
|
|
|
FLDL2T
|
|
FLD U64 SF_ARG1[RBP]
|
|
FMULP ST1, ST0
|
|
FST U64 SF_ARG1[RBP]
|
|
FRNDINT
|
|
FLD U64 SF_ARG1[RBP]
|
|
FSUBRP ST1, ST0
|
|
F2XM1
|
|
FLD1
|
|
FADDP ST1, ST0
|
|
FSTP U64 -16[RBP]
|
|
FLD U64 SF_ARG1[RBP]
|
|
FLD U64 -16[RBP]
|
|
FSCALE // ST0<<ST1
|
|
FSTP U64 -16[RBP]
|
|
FFREE ST0
|
|
FINCSTP
|
|
|
|
FLDCW U16 -6[RBP]
|
|
MOV RAX, U64 -16[RBP]
|
|
LEAVE
|
|
RET1 8
|
|
|
|
//************************************
|
|
_EXP::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 16
|
|
FSTCW U16 -8[RBP]
|
|
MOV AX, U16 -8[RBP]
|
|
MOV U16 -6[RBP], AX
|
|
OR AX, 0x0C00
|
|
MOV U16 -8[RBP], AX
|
|
FLDCW U16 -8[RBP]
|
|
|
|
FLDL2E
|
|
FLD U64 SF_ARG1[RBP]
|
|
FMULP ST1, ST0
|
|
FST U64 SF_ARG1[RBP]
|
|
FRNDINT
|
|
FLD U64 SF_ARG1[RBP]
|
|
FSUBRP ST1, ST0
|
|
F2XM1
|
|
FLD1
|
|
FADDP ST1, ST0
|
|
FSTP U64 -16[RBP]
|
|
FLD U64 SF_ARG1[RBP]
|
|
FLD U64 -16[RBP]
|
|
FSCALE // ST0<<ST1
|
|
FSTP U64 -16[RBP]
|
|
FFREE ST0
|
|
FINCSTP
|
|
|
|
FLDCW U16 -6[RBP]
|
|
MOV RAX, U64 -16[RBP]
|
|
LEAVE
|
|
RET1 8
|
|
|
|
//************************************
|
|
_LOG10::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
FLDLG2
|
|
FLD U64 SF_ARG1[RBP]
|
|
FYL2X // y*log2(x)
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_LOG2::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
FLD1
|
|
FLD U64 SF_ARG1[RBP]
|
|
FYL2X // y*log2(x)
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_LN::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
FLDLN2
|
|
FLD U64 SF_ARG1[RBP]
|
|
FYL2X // y*log2(x)
|
|
FSTP U64 SF_ARG1[RBP]
|
|
MOV RAX, U64 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_FLDCW::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
FLDCW U16 SF_ARG1[RBP]
|
|
POP RBP
|
|
RET1 8
|
|
|
|
//************************************
|
|
_FSTCW::
|
|
PUSH RBP
|
|
MOV RBP, RSP
|
|
SUB RSP, 8
|
|
FSTCW U16 -8[RBP]
|
|
MOVZX RAX, U16 -8[RBP]
|
|
LEAVE
|
|
RET
|
|
|
|
//************************************
|
|
_FSTSW::
|
|
XOR RAX, RAX
|
|
FSTSW
|
|
RET
|
|
|
|
//************************************
|
|
_FCLEX::
|
|
FCLEX
|
|
RET
|
|
}
|