mirror of
https://github.com/vapaamies/KolibriOS.git
synced 2025-09-21 22:53:51 +02:00
Floating-point functions added
FWAIT opcodes removed as well, not needed for Pentium.
This commit is contained in:
@@ -149,6 +149,16 @@ var
|
|||||||
function Get8087CW: Word;
|
function Get8087CW: Word;
|
||||||
procedure Set8087CW(Value: Word);
|
procedure Set8087CW(Value: Word);
|
||||||
|
|
||||||
|
procedure _Frac;
|
||||||
|
procedure _Int;
|
||||||
|
procedure _Round;
|
||||||
|
procedure _Trunc;
|
||||||
|
|
||||||
|
procedure _Exp;
|
||||||
|
|
||||||
|
procedure _Cos;
|
||||||
|
procedure _Sin;
|
||||||
|
|
||||||
var
|
var
|
||||||
RandSeed: LongWord;
|
RandSeed: LongWord;
|
||||||
RandCounter: LongWord;
|
RandCounter: LongWord;
|
||||||
@@ -402,6 +412,79 @@ asm
|
|||||||
FLDCW Default8087CW
|
FLDCW Default8087CW
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure _Frac;
|
||||||
|
asm
|
||||||
|
FLD ST(0)
|
||||||
|
SUB ESP, 4
|
||||||
|
FNSTCW [ESP].Word
|
||||||
|
FNSTCW [ESP+2].Word
|
||||||
|
OR [ESP+2].Word, $0F00
|
||||||
|
FLDCW [ESP+2].Word
|
||||||
|
FRNDINT
|
||||||
|
FLDCW [ESP].Word
|
||||||
|
ADD ESP, 4
|
||||||
|
FSUB
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _Int;
|
||||||
|
asm
|
||||||
|
SUB ESP, 4
|
||||||
|
FNSTCW [ESP].Word
|
||||||
|
FNSTCW [ESP+2].Word
|
||||||
|
OR [ESP+2].Word, $0F00
|
||||||
|
FLDCW [ESP+2].Word
|
||||||
|
FRNDINT
|
||||||
|
FLDCW [ESP].Word
|
||||||
|
ADD ESP, 4
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _Round;
|
||||||
|
asm
|
||||||
|
SUB ESP, 8
|
||||||
|
FISTP [ESP].LongWord
|
||||||
|
POP EAX
|
||||||
|
POP EDX
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _Trunc;
|
||||||
|
asm
|
||||||
|
SUB ESP, 12
|
||||||
|
FNSTCW [ESP].Word
|
||||||
|
FNSTCW [ESP+2].Word
|
||||||
|
OR [ESP+2].Word, $0F00
|
||||||
|
FLDCW [ESP+2].Word
|
||||||
|
FISTP [ESP+4].LongWord
|
||||||
|
FLDCW [ESP].Word
|
||||||
|
POP ECX
|
||||||
|
POP EAX
|
||||||
|
POP EDX
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _Exp;
|
||||||
|
asm
|
||||||
|
FLDL2E
|
||||||
|
FMUL
|
||||||
|
FLD ST(0)
|
||||||
|
FRNDINT
|
||||||
|
FSUB ST(1), ST
|
||||||
|
FXCH ST(1)
|
||||||
|
F2XM1
|
||||||
|
FLD1
|
||||||
|
FADD
|
||||||
|
FSCALE
|
||||||
|
FSTP ST(1)
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _Cos;
|
||||||
|
asm
|
||||||
|
FCOS
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure _Sin;
|
||||||
|
asm
|
||||||
|
FSIN
|
||||||
|
end;
|
||||||
|
|
||||||
// Produce random values in a given range [MinValue..MaxValue]
|
// Produce random values in a given range [MinValue..MaxValue]
|
||||||
// Note: Always return 0 if range = [0..$FFFFFFFF]
|
// Note: Always return 0 if range = [0..$FFFFFFFF]
|
||||||
// cause (MaxValue - MinValue + 1) * eax + MinValue = 0
|
// cause (MaxValue - MinValue + 1) * eax + MinValue = 0
|
||||||
@@ -590,7 +673,6 @@ initialization
|
|||||||
|
|
||||||
asm // InitFPU
|
asm // InitFPU
|
||||||
FNINIT
|
FNINIT
|
||||||
FWAIT
|
|
||||||
FLDCW Default8087CW
|
FLDCW Default8087CW
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user