Преглед на файлове

* process fma intrinsic parameters in an order which takes care of multiple x87 stack parameters, resolves #38295
(cherry picked from commit 9592c033e51063a1d36be454e17abcc2b5ff3b98)

# Conflicts:
# .gitattributes

florian преди 4 години
родител
ревизия
f6dee4c3e0
променени са 2 файла, в които са добавени 22 реда и са изтрити 1 реда
  1. 3 1
      compiler/x86/nx86inl.pas
  2. 19 0
      tests/webtbs/tw38295.pp

+ 3 - 1
compiler/x86/nx86inl.pas

@@ -1100,7 +1100,9 @@ implementation
              { only one memory operand is allowed }
              gotmem:=false;
              memop:=0;
-             for i:=1 to 3 do
+             { in case parameters come on the FPU stack, we have to pop them in reverse order as we
+               called secondpass }
+             for i:=3 downto 1 do
                begin
                  if not(paraarray[i].location.loc in [LOC_MMREGISTER,LOC_CMMREGISTER]) then
                    begin

+ 19 - 0
tests/webtbs/tw38295.pp

@@ -0,0 +1,19 @@
+{ %cpu=i386 }
+{ %opt=-CfAVX -CpCOREAVX2 -OoFASTMATH }
+uses
+  cpu;
+var
+    a, b: uint32; // or (u)int64; int32 works
+    r: single; // or double, or even extended
+begin
+  if FMASupport then
+    begin
+      a := 1;
+      b := 3;
+      r := a + b / 10;
+      writeln(r:0:3);
+      if r>2.0 then
+         halt(1);
+      writeln('ok');
+    end;
+end.