129 lines
1.6 KiB
C
129 lines
1.6 KiB
C
#pragma once
|
|
|
|
#pragma code_seg("pi")
|
|
__forceinline float pi()
|
|
{
|
|
__asm fldpi
|
|
}
|
|
|
|
#pragma code_seg("sm0")
|
|
|
|
unsigned long ftol(float Value)
|
|
{
|
|
unsigned long RetVal;
|
|
__asm fld Value
|
|
__asm fistp RetVal
|
|
return RetVal;
|
|
}
|
|
|
|
#pragma code_seg("sm1")
|
|
|
|
float frac(float Value)
|
|
{
|
|
return Value - ftol(Value);
|
|
}
|
|
|
|
#pragma code_seg("sm2")
|
|
|
|
float abs(float Value)
|
|
{
|
|
__asm fld Value
|
|
__asm fabs
|
|
}
|
|
|
|
#pragma code_seg("sm3")
|
|
|
|
float sin(float Value)
|
|
{
|
|
__asm fld Value
|
|
__asm fsin
|
|
}
|
|
|
|
#pragma code_seg("sm4")
|
|
|
|
float sign(float Value)
|
|
{
|
|
if (Value != 0)
|
|
return Value / abs(Value);
|
|
|
|
return 1.0f;
|
|
}
|
|
|
|
#pragma code_seg("sm5")
|
|
|
|
float sqrt(float Value)
|
|
{
|
|
__asm fld Value
|
|
__asm fsqrt
|
|
}
|
|
|
|
#pragma code_seg("sm7")
|
|
|
|
void* memcpy(void* Dest, const void* Src, size_t destSize)
|
|
{
|
|
__asm mov esi, Src
|
|
__asm mov edi, Dest
|
|
__asm mov ecx, destSize
|
|
__asm rep movsb
|
|
}
|
|
|
|
#pragma code_seg("sm8")
|
|
|
|
float 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 randomize(unsigned long x)
|
|
{
|
|
seed = x;
|
|
}
|
|
|
|
#pragma code_seg("smB")
|
|
|
|
float rand()
|
|
{
|
|
seed = seed * 0x76364873 + 1234567;
|
|
return (float)(seed & 0x7FFFFFFF) * (const float)(2.0f / (float)0x7FFFFFFF) - 1.0f;
|
|
}
|
|
|
|
#pragma code_seg("smS")
|
|
|
|
__forceinline size_t strlen(const char* String)
|
|
{
|
|
size_t Length = 0;
|
|
while (*String++) ++Length;
|
|
return Length;
|
|
}
|
|
|
|
#pragma code_seg("smP")
|
|
|
|
float 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;
|
|
}
|