Browse Source

* handle 64 bit parameters correctly for arm eabi

git-svn-id: trunk@11913 -
florian 17 years ago
parent
commit
04fe88f134
1 changed files with 6 additions and 2 deletions
  1. 6 2
      compiler/arm/cpupara.pas

+ 6 - 2
compiler/arm/cpupara.pas

@@ -332,7 +332,9 @@ unit cpupara;
                         { align registers for eabi }
                         { align registers for eabi }
                         if (target_info.abi=abi_eabi) and
                         if (target_info.abi=abi_eabi) and
                           (paracgsize in [OS_F64,OS_64,OS_S64]) and
                           (paracgsize in [OS_F64,OS_64,OS_S64]) and
-                          (nextintreg in [RS_R1,RS_R3]) then
+                          (nextintreg in [RS_R1,RS_R3]) and
+                          { first location? }
+                          (paralen=8) then
                           inc(nextintreg);
                           inc(nextintreg);
                         { this is not abi compliant
                         { this is not abi compliant
                           why? (FK) }
                           why? (FK) }
@@ -386,7 +388,9 @@ unit cpupara;
                         { align stack for eabi }
                         { align stack for eabi }
                         if (target_info.abi=abi_eabi) and
                         if (target_info.abi=abi_eabi) and
                           (paracgsize in [OS_F64,OS_64,OS_S64]) and
                           (paracgsize in [OS_F64,OS_64,OS_S64]) and
-                          (stack_offset mod 8<>0) then
+                          (stack_offset mod 8<>0) and
+                          { first location? }
+                          (paralen=8) then
                           inc(stack_offset,8-(stack_offset mod 8));
                           inc(stack_offset,8-(stack_offset mod 8));
 
 
                         paraloc^.size:=OS_ADDR;
                         paraloc^.size:=OS_ADDR;