浏览代码

m68k: write inline floating point immediates as hex consts, instead of scientific notation. the scientific notation format parsing depends on the libc the assembler was linked against, which can lead to varying results and compile errors

git-svn-id: trunk@48524 -
Károly Balogh 4 年之前
父节点
当前提交
ada3d2050c
共有 1 个文件被更改,包括 10 次插入6 次删除
  1. 10 6
      compiler/m68k/ag68kgas.pas

+ 10 - 6
compiler/m68k/ag68kgas.pas

@@ -169,7 +169,7 @@ interface
       end;
       end;
 
 
 
 
-    function getopstr(var o:toper) : string;
+    function getopstr(size: topsize; var o:toper) : string;
       var
       var
         i : tsuperregister;
         i : tsuperregister;
       begin
       begin
@@ -220,10 +220,14 @@ interface
             getopstr:='#'+tostr(longint(o.val));
             getopstr:='#'+tostr(longint(o.val));
           top_realconst:
           top_realconst:
             begin
             begin
-              str(o.val_real,getopstr);
-              if getopstr[1]=' ' then
-                getopstr[1]:='+';
-              getopstr:='#0d'+getopstr;
+              case size of
+                S_FS:
+                  getopstr:='#0x'+hexstr(longint(single(o.val_real)),sizeof(single)*2);
+                S_FD:
+                  getopstr:='#0x'+hexstr(BestRealRec(o.val_real).Data,sizeof(bestreal)*2);
+              else
+                internalerror(2021020801);
+              end;
             end;
             end;
           else internalerror(200405021);
           else internalerror(200405021);
         end;
         end;
@@ -337,7 +341,7 @@ interface
                         sep:=':'
                         sep:=':'
                       else
                       else
                         sep:=',';
                         sep:=',';
-                      s:=s+sep+getopstr(taicpu(hp).oper[i]^);
+                      s:=s+sep+getopstr(taicpu(hp).opsize,taicpu(hp).oper[i]^);
                     end;
                     end;
                 end;
                 end;
            end;
            end;