Browse Source

* test for the fdiv problem depending on assembler style

pierre 25 years ago
parent
commit
85f23e3058
1 changed files with 70 additions and 0 deletions
  1. 70 0
      tests/test/testfdiv.pp

+ 70 - 0
tests/test/testfdiv.pp

@@ -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.