Jelajahi Sumber

* fixed float spilling to use sfm/lfm instead of stf/ldf

florian 21 tahun lalu
induk
melakukan
960bf7b8b1
2 mengubah file dengan 20 tambahan dan 7 penghapusan
  1. 15 5
      compiler/arm/aasmcpu.pas
  2. 5 2
      compiler/arm/cpuinfo.pas

+ 15 - 5
compiler/arm/aasmcpu.pas

@@ -324,7 +324,10 @@ implementation
           R_INTREGISTER :
             result:=taicpu.op_reg_ref(A_LDR,r,ref);
           R_FPUREGISTER :
-            result:=taicpu.op_reg_ref(A_LDF,r,ref);
+            { use lfm because we don't know the current internal format
+              and avoid exceptions
+            }
+            result:=taicpu.op_reg_const_ref(A_LFM,r,1,ref);
           else
             internalerror(200401041);
         end;
@@ -337,7 +340,10 @@ implementation
           R_INTREGISTER :
             result:=taicpu.op_reg_ref(A_STR,r,ref);
           R_FPUREGISTER :
-            result:=taicpu.op_reg_ref(A_STF,r,ref);
+            { use sfm because we don't know the current internal format
+              and avoid exceptions
+            }
+            result:=taicpu.op_reg_const_ref(A_SFM,r,1,ref);
           else
             internalerror(200401041);
         end;
@@ -358,7 +364,8 @@ implementation
           A_ADF,A_DVF,A_FDV,A_FML,
           A_RFS,A_RFC,A_RDF,
           A_RMF,A_RPW,A_RSF,A_SUF,A_ABS,A_ACS,A_ASN,A_ATN,A_COS,
-          A_EXP,A_LOG,A_LGN,A_MVF,A_MNF,A_FRD,A_MUF,A_POL,A_RND,A_SIN,A_SQT,A_TAN:
+          A_EXP,A_LOG,A_LGN,A_MVF,A_MNF,A_FRD,A_MUF,A_POL,A_RND,A_SIN,A_SQT,A_TAN,
+          A_LFM:
             if opnr=0 then
               result:=operand_write
             else
@@ -378,7 +385,7 @@ implementation
             else
               result:=operand_read;
           A_STR,A_STRB,A_STRBT,A_STRD,
-          A_STRH,A_STRT,A_STF:
+          A_STRH,A_STRT,A_STF,A_SFM:
             { important is what happens with the involved registers }
             if opnr=0 then
               result := operand_read
@@ -486,7 +493,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.33  2004-06-20 08:55:31  florian
+  Revision 1.34  2004-07-04 15:22:34  florian
+    * fixed float spilling to use sfm/lfm instead of stf/ldf
+
+  Revision 1.33  2004/06/20 08:55:31  florian
     * logs truncated
 
   Revision 1.32  2004/06/16 20:07:10  florian

+ 5 - 2
compiler/arm/cpuinfo.pas

@@ -50,7 +50,7 @@ Type
 
 Const
    {# Size of native extended floating point type }
-   extended_size = 8;
+   extended_size = 12;
    {# Size of a multimedia register               }
    mmreg_size = 16;
    { target cpu string (used by compiler options) }
@@ -97,7 +97,10 @@ Implementation
 end.
 {
   $Log$
-  Revision 1.9  2004-06-20 08:55:31  florian
+  Revision 1.10  2004-07-04 15:22:34  florian
+    * fixed float spilling to use sfm/lfm instead of stf/ldf
+
+  Revision 1.9  2004/06/20 08:55:31  florian
     * logs truncated
 
   Revision 1.8  2004/06/16 20:07:10  florian