mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-23 00:50:28 +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