فهرست منبع

* MIPS: when converting int to real, use a floating point constant directly, instead of emulating it with integers. tai_real_64bit already handles all endian issues.

git-svn-id: trunk@25856 -
sergei 11 سال پیش
والد
کامیت
dd472dbfb0
1فایلهای تغییر یافته به همراه1 افزوده شده و 10 حذف شده
  1. 1 10
      compiler/mips/ncpucnv.pas

+ 1 - 10
compiler/mips/ncpucnv.pas

@@ -147,8 +147,6 @@ var
   href:      treference;
   hregister: tregister;
   l1, l2:    tasmlabel;
-  addend: array[boolean] of longword;
-  bigendian: boolean;
 begin
   location_reset(location, LOC_FPUREGISTER, def_cgsize(resultdef));
   if is_signed(left.resultdef) then
@@ -173,14 +171,7 @@ begin
         hregister := cg.getfpuregister(current_asmdata.CurrAsmList, OS_F64);
         new_section(current_asmdata.asmlists[al_typedconsts],sec_rodata_norel,l1.name,const_align(8));
         current_asmdata.asmlists[al_typedconsts].concat(Tai_label.Create(l1));
-
-        addend[false]:=0;
-        addend[true]:=$41f00000;
-        bigendian:=(target_info.endian=endian_big);
-
-        { add double number 4294967296.0 = (1ull^32) = 0x41f00000,00000000 in little endian hex}
-        current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit(addend[bigendian]));
-        current_asmdata.asmlists[al_typedconsts].concat(Tai_const.Create_32bit(addend[not bigendian]));
+        current_asmdata.asmlists[al_typedconsts].concat(Tai_real_64bit.Create(4294967296.0));
 
         cg.a_loadfpu_ref_reg(current_asmdata.CurrAsmList, OS_F64, OS_F64, href, hregister);
         current_asmdata.CurrAsmList.concat(taicpu.op_reg_reg_reg(A_ADD_D, location.Register, hregister, location.Register));