浏览代码

* fixed occasional rounding error with currency constants on the LLVM targets
(fixes test/tcustomattr13.pp)

git-svn-id: trunk@43017 -

Jonas Maebe 6 年之前
父节点
当前提交
ff2d718699
共有 1 个文件被更改,包括 4 次插入2 次删除
  1. 4 2
      compiler/llvm/nllvmcon.pas

+ 4 - 2
compiler/llvm/nllvmcon.pas

@@ -153,10 +153,12 @@ implementation
            s32real,s64real:
              current_asmdata.CurrAsmList.concat(taillvm.op_reg_size_fpconst_size(la_bitcast,location.register,resultdef,value_real,resultdef));
            { comp and currency are handled as int64 at the llvm level }
-           s64comp,
-           s64currency:
+           s64comp:
              { sc80floattype instead of resultdef, see comment in thlcgllvm.a_loadfpu_ref_reg }
              current_asmdata.CurrAsmList.concat(taillvm.op_reg_size_const_size(la_sitofp,location.register,s64inttype,trunc(value_real),sc80floattype));
+           s64currency:
+             { sc80floattype instead of resultdef, see comment in thlcgllvm.a_loadfpu_ref_reg }
+             current_asmdata.CurrAsmList.concat(taillvm.op_reg_size_const_size(la_sitofp,location.register,s64inttype,trunc(value_currency),sc80floattype));
 {$ifdef cpuextended}
            s80real,sc80real:
              current_asmdata.CurrAsmList.concat(taillvm.op_reg_size_fpconst80_size(la_bitcast,location.register,resultdef,value_real,resultdef));