Files
bluflame/4kgfx/small.h
2026-04-18 22:31:51 +02:00

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;
}