Fix some small encoding bugs.

git-svn-id: branches/laksen/armiw@29250 -
This commit is contained in:
Jeppe Johansen 2014-12-10 23:28:09 +00:00
parent 9e5979e8be
commit eb3eaab54b
4 changed files with 13 additions and 8 deletions

View File

@ -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);

View File

@ -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

View File

@ -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
),
(

View File

@ -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