127 lines
1.7 KiB
C
127 lines
1.7 KiB
C
#pragma once
|
|
|
|
#pragma code_seg("sm0")
|
|
|
|
DWORD x_Ftol(float af_Value)
|
|
{
|
|
DWORD ldw_RetVal;
|
|
__asm fld af_Value
|
|
__asm fistp ldw_RetVal
|
|
return ldw_RetVal;
|
|
}
|
|
|
|
#pragma code_seg("sm1")
|
|
|
|
__forceinline float x_Frac(float af_Value)
|
|
{
|
|
return af_Value - x_Ftol(af_Value);
|
|
}
|
|
|
|
#pragma code_seg("sm2")
|
|
|
|
__forceinline float x_Abs(float af_Value)
|
|
{
|
|
__asm fld af_Value
|
|
__asm fabs
|
|
}
|
|
|
|
#pragma code_seg("sm3")
|
|
|
|
float x_Sin(float af_Value)
|
|
{
|
|
__asm fld af_Value
|
|
__asm fsin
|
|
}
|
|
|
|
#pragma code_seg("sm4")
|
|
|
|
float x_Sign(float af_Value)
|
|
{
|
|
if (af_Value != 0)
|
|
return af_Value / x_Abs(af_Value);
|
|
|
|
return 1.0f;
|
|
}
|
|
|
|
#pragma code_seg("sm5")
|
|
|
|
float x_Sqrt(float af_Value)
|
|
{
|
|
__asm fld af_Value
|
|
__asm fsqrt
|
|
}
|
|
|
|
#pragma code_seg("sm7")
|
|
|
|
__forceinline void x_MemCopy(void* av_Dest_, const void* av_Src_, size_t ai_Size)
|
|
{
|
|
__asm mov esi, av_Src_
|
|
__asm mov edi, av_Dest_
|
|
__asm mov ecx, ai_Size
|
|
__asm rep movsb
|
|
}
|
|
|
|
#pragma code_seg("sm8")
|
|
|
|
float x_Fmod(float x, float y)
|
|
{
|
|
__asm fld y
|
|
__asm fld x
|
|
__asm fprem
|
|
__asm fxch
|
|
__asm fstp x
|
|
}
|
|
|
|
#pragma data_seg("smA")
|
|
|
|
static unsigned long seed=0x12345678;
|
|
|
|
#pragma code_seg("sm9")
|
|
|
|
__forceinline void x_Randomize(unsigned long x)
|
|
{
|
|
seed = x;
|
|
}
|
|
|
|
#pragma code_seg("smB")
|
|
|
|
float x_Rand()
|
|
{
|
|
seed = seed * 0x76364873 + 1234567;
|
|
return (float)(seed & 0x7FFFFFFF) * (const float)(2.0f / (float)0x7FFFFFFF) - 1.0f;
|
|
}
|
|
|
|
#pragma code_seg("smS")
|
|
|
|
__forceinline size_t x_Strlen(const char* as_String)
|
|
{
|
|
size_t li_Length = 0;
|
|
while (*as_String++) ++li_Length;
|
|
return li_Length;
|
|
}
|
|
|
|
#pragma code_seg("smP")
|
|
|
|
float x_Pow(float x, float y){
|
|
float r;
|
|
__asm{
|
|
fld y
|
|
fld x
|
|
fyl2x
|
|
fld1
|
|
fld st(1)
|
|
fprem
|
|
f2xm1
|
|
faddp st(1),st
|
|
fscale
|
|
fxch st(1)
|
|
fstp st(0)
|
|
fstp r
|
|
}
|
|
return r;
|
|
}
|
|
|
|
extern "C"
|
|
{
|
|
int _fltused = 1;
|
|
} |