Bläddra i källkod

* be more carefull with unaligned load optimization

git-svn-id: trunk@6356 -
florian 18 år sedan
förälder
incheckning
eb8b2fb138
2 ändrade filer med 9 tillägg och 3 borttagningar
  1. 8 2
      compiler/arm/cgcpu.pas
  2. 1 1
      compiler/ncgmem.pas

+ 8 - 2
compiler/arm/cgcpu.pas

@@ -857,7 +857,10 @@ unit cgcpu;
                    if assigned(ref.symbol) or
                    if assigned(ref.symbol) or
                      (ref.index<>NR_NO) or
                      (ref.index<>NR_NO) or
                      (ref.offset<-4095) or
                      (ref.offset<-4095) or
-                     (ref.offset>4094) then
+                     (ref.offset>4094) or
+                     { sometimes the compiler reused registers }
+                     (reg=ref.index) or
+                     (reg=ref.base) then
                      begin
                      begin
                        tmpreg3:=getintregister(list,OS_INT);
                        tmpreg3:=getintregister(list,OS_INT);
                        a_loadaddr_ref_reg(list,ref,tmpreg3);
                        a_loadaddr_ref_reg(list,ref,tmpreg3);
@@ -886,7 +889,10 @@ unit cgcpu;
                    if assigned(ref.symbol) or
                    if assigned(ref.symbol) or
                      (ref.index<>NR_NO) or
                      (ref.index<>NR_NO) or
                      (ref.offset<-4095) or
                      (ref.offset<-4095) or
-                     (ref.offset>4092) then
+                     (ref.offset>4092) or
+                     { sometimes the compiler reused registers }
+                     (reg=ref.index) or
+                     (reg=ref.base) then
                      begin
                      begin
                        tmpreg3:=getintregister(list,OS_INT);
                        tmpreg3:=getintregister(list,OS_INT);
                        a_loadaddr_ref_reg(list,ref,tmpreg3);
                        a_loadaddr_ref_reg(list,ref,tmpreg3);

+ 1 - 1
compiler/ncgmem.pas

@@ -375,7 +375,7 @@ implementation
                    (tabstractrecordsymtable(vs.owner).usefieldalignment=1) then
                    (tabstractrecordsymtable(vs.owner).usefieldalignment=1) then
                    location.reference.alignment:=1;
                    location.reference.alignment:=1;
 {$endif SUPPORT_UNALIGNED}
 {$endif SUPPORT_UNALIGNED}
-    
+
                end
                end
              else if (vs.fieldoffset mod 8 = 0) and
              else if (vs.fieldoffset mod 8 = 0) and
                      (resultdef.packedbitsize mod 8 = 0) and
                      (resultdef.packedbitsize mod 8 = 0) and