From dd472dbfb0fe656f487d30b8b4f28e4da2959229 Mon Sep 17 00:00:00 2001 From: sergei Date: Sat, 26 Oct 2013 18:12:25 +0000 Subject: [PATCH] * 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 - --- compiler/mips/ncpucnv.pas | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/compiler/mips/ncpucnv.pas b/compiler/mips/ncpucnv.pas index 46b5283569..de219edec9 100644 --- a/compiler/mips/ncpucnv.pas +++ b/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));