mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-18 17:09:16 +02:00
* test for the fdiv problem depending on assembler style
This commit is contained in:
parent
e5b1fd5620
commit
85f23e3058
70
tests/test/testfdiv.pp
Normal file
70
tests/test/testfdiv.pp
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{ This test program deals with the
|
||||||
|
the delicate problem of
|
||||||
|
non commutative FPU instruction
|
||||||
|
where the destination register
|
||||||
|
is ST(1) to ST(7)
|
||||||
|
|
||||||
|
Whereas Intel interprets
|
||||||
|
fdiv st(1),st
|
||||||
|
as
|
||||||
|
st(1):=st(1) / st
|
||||||
|
The ATT read
|
||||||
|
fdiv %st,%st(1)
|
||||||
|
as
|
||||||
|
st(1):=st/st(1) }
|
||||||
|
|
||||||
|
|
||||||
|
program test_nasm_div;
|
||||||
|
|
||||||
|
|
||||||
|
var
|
||||||
|
x,y,z : double;
|
||||||
|
|
||||||
|
begin
|
||||||
|
x:=4;
|
||||||
|
y:=2;
|
||||||
|
Writeln('4/2=',x/y:0:2);
|
||||||
|
if x/y <> 2.0 then
|
||||||
|
Halt(1);
|
||||||
|
{$asmmode att}
|
||||||
|
asm
|
||||||
|
fldl y
|
||||||
|
fldl x
|
||||||
|
fdivp %st,%st(1)
|
||||||
|
fstpl z
|
||||||
|
end;
|
||||||
|
Writeln('ATT result of 4/2=',z:0:2);
|
||||||
|
if z <> 2.0 then
|
||||||
|
Halt(1);
|
||||||
|
asm
|
||||||
|
fldl y
|
||||||
|
fldl x
|
||||||
|
fdiv %st(1),%st
|
||||||
|
fstpl z
|
||||||
|
fstp %st
|
||||||
|
end;
|
||||||
|
Writeln('ATT result of 4/2=',z:0:2);
|
||||||
|
if z <> 2.0 then
|
||||||
|
Halt(1);
|
||||||
|
{$asmmode intel}
|
||||||
|
asm
|
||||||
|
fld x
|
||||||
|
fld y
|
||||||
|
fdivp st(1),st
|
||||||
|
fstp z
|
||||||
|
end;
|
||||||
|
Writeln('Intel result of 4/2=',z:0:2);
|
||||||
|
if z <> 2.0 then
|
||||||
|
Halt(1);
|
||||||
|
asm
|
||||||
|
fld y
|
||||||
|
fld x
|
||||||
|
fdiv st,st(1)
|
||||||
|
fstp z
|
||||||
|
fstp st
|
||||||
|
end;
|
||||||
|
Writeln('Intel result of 4/2=',z:0:2);
|
||||||
|
if z <> 2.0 then
|
||||||
|
Halt(1);
|
||||||
|
Writeln('All tests completed successfully!');
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user