소스 검색

* fixed loading of floating point constants

git-svn-id: trunk@3667 -
florian 19 년 전
부모
커밋
30e7d87c11
1개의 변경된 파일13개의 추가작업 그리고 3개의 파일을 삭제
  1. 13 3
      compiler/arm/cgcpu.pas

+ 13 - 3
compiler/arm/cgcpu.pas

@@ -1486,7 +1486,6 @@ unit cgcpu;
         end;
 
       begin
-
         if len=0 then
           exit;
         helpsize:=12+maxtmpreg*4;//52 with maxtmpreg=10
@@ -1498,8 +1497,19 @@ unit cgcpu;
           begin
             tmpregi:=0;
             srcreg:=getintregister(list,OS_ADDR);
-            a_loadaddr_ref_reg(list,source,srcreg);
-            reference_reset_base(srcref,srcreg,0);
+
+            { explicit pc relative addressing, could be
+              e.g. a floating point constant }
+            if source.base=NR_PC then
+              begin
+                { ... then we don't need a loadaddr }
+                srcref:=source;
+              end
+            else
+              begin
+                a_loadaddr_ref_reg(list,source,srcreg);
+                reference_reset_base(srcref,srcreg,0);
+              end;
 
             while (len div  4 <> 0) and (tmpregi<=maxtmpreg) do
               begin