Sfoglia il codice sorgente

* do not use fsin and fcos on 286-, since they're 387+

git-svn-id: trunk@24596 -
nickysn 12 anni fa
parent
commit
2b583bb265
1 ha cambiato i file con 32 aggiunte e 0 eliminazioni
  1. 32 0
      compiler/x86/nx86inl.pas

+ 32 - 0
compiler/x86/nx86inl.pas

@@ -131,12 +131,28 @@ implementation
 
 
      function tx86inlinenode.first_cos_real : tnode;
      function tx86inlinenode.first_cos_real : tnode;
       begin
       begin
+{$ifdef i8086}
+        { FCOS is 387+ }
+        if current_settings.cputype < cpu_386 then
+          begin
+            result := inherited;
+            exit;
+          end;
+{$endif i8086}
         expectloc:=LOC_FPUREGISTER;
         expectloc:=LOC_FPUREGISTER;
         first_cos_real := nil;
         first_cos_real := nil;
       end;
       end;
 
 
      function tx86inlinenode.first_sin_real : tnode;
      function tx86inlinenode.first_sin_real : tnode;
       begin
       begin
+{$ifdef i8086}
+        { FSIN is 387+ }
+        if current_settings.cputype < cpu_386 then
+          begin
+            result := inherited;
+            exit;
+          end;
+{$endif i8086}
         expectloc:=LOC_FPUREGISTER;
         expectloc:=LOC_FPUREGISTER;
         first_sin_real := nil;
         first_sin_real := nil;
       end;
       end;
@@ -400,12 +416,28 @@ implementation
 
 
      procedure tx86inlinenode.second_cos_real;
      procedure tx86inlinenode.second_cos_real;
        begin
        begin
+{$ifdef i8086}
+       { FCOS is 387+ }
+       if current_settings.cputype < cpu_386 then
+         begin
+           inherited;
+           exit;
+         end;
+{$endif i8086}
          load_fpu_location(left);
          load_fpu_location(left);
          emit_none(A_FCOS,S_NO);
          emit_none(A_FCOS,S_NO);
        end;
        end;
 
 
      procedure tx86inlinenode.second_sin_real;
      procedure tx86inlinenode.second_sin_real;
        begin
        begin
+{$ifdef i8086}
+       { FSIN is 387+ }
+       if current_settings.cputype < cpu_386 then
+         begin
+           inherited;
+           exit;
+         end;
+{$endif i8086}
          load_fpu_location(left);
          load_fpu_location(left);
          emit_none(A_FSIN,S_NO)
          emit_none(A_FSIN,S_NO)
        end;
        end;