Преглед на файлове

* fixes reference handling for arm thumb and ldrh, not perfect yet

git-svn-id: trunk@28568 -
florian преди 11 години
родител
ревизия
8a7c16327c
променени са 1 файла, в които са добавени 13 реда и са изтрити 2 реда
  1. 13 2
      compiler/arm/cgcpu.pas

+ 13 - 2
compiler/arm/cgcpu.pas

@@ -4074,8 +4074,19 @@ unit cgcpu;
              ((op=A_LDRB) and (oppostfix=PF_None))) and
             ((ref.base=NR_STACK_POINTER_REG) or
              (ref.index=NR_STACK_POINTER_REG) or
-             (abs(ref.offset)>31))
-            ) then
+             (abs(ref.offset)>31)
+            )
+           ) or
+           { LDRH limitations }
+           (
+            (((op=A_LDR) and (oppostfix=PF_H)) or
+             ((op=A_LDRH) and (oppostfix=PF_None))) and
+            ((ref.base=NR_STACK_POINTER_REG) or
+             (ref.index=NR_STACK_POINTER_REG) or
+             (abs(ref.offset)>62) or
+             ((abs(ref.offset) mod 2)<>0)
+            )
+           ) then
           begin
             tmpreg:=getintregister(list,OS_ADDR);
             a_loadaddr_ref_reg(list,ref,tmpreg);