Browse Source

* (modified) patch by Christo Crause: ESP8266 doesn't support min/max instructions, resolves #38175

git-svn-id: trunk@47699 -
florian 4 years ago
parent
commit
4f3271500a
2 changed files with 7 additions and 3 deletions
  1. 4 1
      compiler/nflw.pas
  2. 3 2
      compiler/xtensa/cpuinfo.pas

+ 4 - 1
compiler/nflw.pas

@@ -302,6 +302,9 @@ implementation
     {$ifdef i8086}
     {$ifdef i8086}
       cpuinfo,
       cpuinfo,
     {$endif i8086}
     {$endif i8086}
+    {$ifdef xtensa}
+      cpuinfo,
+    {$endif xtensa}
       cgbase,procinfo
       cgbase,procinfo
       ;
       ;
 
 
@@ -1591,7 +1594,7 @@ implementation
           (thenstmnt.nodetype=assignn) and (elsestmnt.nodetype=assignn) and
           (thenstmnt.nodetype=assignn) and (elsestmnt.nodetype=assignn) and
           not(might_have_sideeffects(left)) and
           not(might_have_sideeffects(left)) and
           tassignmentnode(thenstmnt).left.isequal(tassignmentnode(elsestmnt).left) and
           tassignmentnode(thenstmnt).left.isequal(tassignmentnode(elsestmnt).left) and
-          is_32bitint(tassignmentnode(thenstmnt).right.resultdef) and
+          (CPUXTENSA_HAS_MINMAX in cpu_capabilities[current_settings.cputype]) and is_32bitint(tassignmentnode(thenstmnt).right.resultdef) and
           ((tassignmentnode(thenstmnt).right.isequal(taddnode(left).left) and (tassignmentnode(elsestmnt).right.isequal(taddnode(left).right))) or
           ((tassignmentnode(thenstmnt).right.isequal(taddnode(left).left) and (tassignmentnode(elsestmnt).right.isequal(taddnode(left).right))) or
            (tassignmentnode(thenstmnt).right.isequal(taddnode(left).right) and (tassignmentnode(elsestmnt).right.isequal(taddnode(left).left)))) then
            (tassignmentnode(thenstmnt).right.isequal(taddnode(left).right) and (tassignmentnode(elsestmnt).right.isequal(taddnode(left).left)))) then
           begin
           begin

+ 3 - 2
compiler/xtensa/cpuinfo.pas

@@ -141,7 +141,8 @@ Const
         CPUXTENSA_HAS_BOOLEAN_OPTION,
         CPUXTENSA_HAS_BOOLEAN_OPTION,
         CPUXTENSA_HAS_MUL32HIGH,
         CPUXTENSA_HAS_MUL32HIGH,
         CPUXTENSA_HAS_DIV,
         CPUXTENSA_HAS_DIV,
-        CPUXTENSA_HAS_LOOPS
+        CPUXTENSA_HAS_LOOPS,
+        CPUXTENSA_HAS_MINMAX
       );
       );
 
 
    tfpuflags =
    tfpuflags =
@@ -155,7 +156,7 @@ Const
      (
      (
        { cpu_none     } [],
        { cpu_none     } [],
        { cpu_lx106    } [],
        { cpu_lx106    } [],
-       { cpu_lx6      } [CPUXTENSA_REGWINDOW, CPUXTENSA_HAS_SEXT, CPUXTENSA_HAS_NSAx, CPUXTENSA_HAS_BOOLEAN_OPTION, CPUXTENSA_HAS_MUL32HIGH, CPUXTENSA_HAS_DIV, CPUXTENSA_HAS_LOOPS]
+       { cpu_lx6      } [CPUXTENSA_REGWINDOW, CPUXTENSA_HAS_SEXT, CPUXTENSA_HAS_NSAx, CPUXTENSA_HAS_BOOLEAN_OPTION, CPUXTENSA_HAS_MUL32HIGH, CPUXTENSA_HAS_DIV, CPUXTENSA_HAS_LOOPS, CPUXTENSA_HAS_MINMAX]
      );
      );
 
 
    fpu_capabilities : array[tfputype] of set of tfpuflags =
    fpu_capabilities : array[tfputype] of set of tfpuflags =