瀏覽代碼

Fix some small encoding bugs.

git-svn-id: branches/laksen/armiw@29250 -
Jeppe Johansen 10 年之前
父節點
當前提交
eb3eaab54b
共有 4 個文件被更改,包括 13 次插入8 次删除
  1. 5 1
      compiler/arm/aasmcpu.pas
  2. 3 3
      compiler/arm/armins.dat
  3. 3 3
      compiler/arm/armtab.inc
  4. 2 1
      compiler/arm/cpuelf.pas

+ 5 - 1
compiler/arm/aasmcpu.pas

@@ -2398,7 +2398,10 @@ implementation
                 begin
                   currsym:=objdata.symbolref(oper[0]^.ref^.symbol);
                   if (currsym.bind<>AB_LOCAL) and (currsym.objsection<>objdata.CurrObjSec) then
-                    objdata.writereloc(oper[0]^.ref^.offset,0,currsym,RELOC_RELATIVE_24)
+                    begin
+                      objdata.writereloc(oper[0]^.ref^.offset,0,currsym,RELOC_RELATIVE_24);
+                      bytes:=bytes or $fffffe; // TODO: Not sure this is right, but it matches the output of gas
+                    end
                   else
                     bytes:=bytes or (((currsym.offset-insoffset-8) shr 2) and $ffffff);
                 end;
@@ -2794,6 +2797,7 @@ implementation
                 end
               else
                 begin
+                  bytes:=bytes or (1 shl 25);
                   { set U flag }
                   if oper[0]^.ref^.signindex>=0 then
                     bytes:=bytes or (1 shl 23);

+ 3 - 3
compiler/arm/armins.dat

@@ -370,10 +370,10 @@ reg32,reg32,reg32,reg32     \x16\x00\x80\x9         ARM32,ARMv4
 reg32,reg32,memam2        \x19\x0\x0\x0\xD0           ARM32,ARMv4
 
 [PLD]
-memam2                     \x25\xF7\x50\xF0\x0                 ARM32,ARMv5TE
+memam2                     \x25\xF5\x50\xF0\x0                 ARM32,ARMv5TE
 
 [PLDW]
-memam2                     \x25\xF7\x10\xF0\x0                 ARM32,ARMv7
+memam2                     \x25\xF5\x10\xF0\x0                 ARM32,ARMv7
 
 [QADDcc]
 reg32,reg32,reg32          \x1A\x01\x00\x05                    ARM32,ARMv5TE
@@ -523,7 +523,7 @@ reg32,reg32,reg32           \x16\x6\x80\x5                     ARM32,ARMv6
 reg32,reg32,reg32,shifterop \x16\x6\x80\x5                     ARM32,ARMv6
 
 [PLI]
-memam2                     \x25\xF6\x50\xF0\x0                 ARM32,ARMv7
+memam2                     \x25\xF4\x50\xF0\x0                 ARM32,ARMv7
 
 [QADD16cc]
 reg32,reg32,reg32          \x16\x06\x20\xF1                    ARM32,ARMv6

+ 3 - 3
compiler/arm/armtab.inc

@@ -949,14 +949,14 @@
     opcode  : A_PLD;
     ops     : 1;
     optypes : (ot_memoryam2,ot_none,ot_none,ot_none,ot_none,ot_none);
-    code    : #37#247#80#240#0;
+    code    : #37#245#80#240#0;
     flags   : if_arm32 or if_armv5te
   ),
   (
     opcode  : A_PLDW;
     ops     : 1;
     optypes : (ot_memoryam2,ot_none,ot_none,ot_none,ot_none,ot_none);
-    code    : #37#247#16#240#0;
+    code    : #37#245#16#240#0;
     flags   : if_arm32 or if_armv7
   ),
   (
@@ -1320,7 +1320,7 @@
     opcode  : A_PLI;
     ops     : 1;
     optypes : (ot_memoryam2,ot_none,ot_none,ot_none,ot_none,ot_none);
-    code    : #37#246#80#240#0;
+    code    : #37#244#80#240#0;
     flags   : if_arm32 or if_armv7
   ),
   (

+ 2 - 1
compiler/arm/cpuelf.pas

@@ -325,7 +325,8 @@ implementation
           result:=R_ARM_ABS32;
         RELOC_RELATIVE:
           result:=R_ARM_REL32;
-        RELOC_RELATIVE_24,
+        RELOC_RELATIVE_24:
+          result:=R_ARM_JUMP24;
         RELOC_RELATIVE_24_THUMB:
           result:=R_ARM_CALL;
       else