mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-09 07:26:20 +02:00
+ Missing part of internal ARM assembler, Mantis #26588. I'm not setting it as default for arm-wince yet, because testing reveals several points in generic code that need adjustments.
git-svn-id: trunk@29588 -
This commit is contained in:
parent
2c3aa7cee0
commit
9cc0bdd6b9
@ -1595,6 +1595,12 @@ implementation
|
||||
if (ot and OT_AM2)<>0 then
|
||||
s:=s+' am2 ';
|
||||
end
|
||||
else
|
||||
if (ot and OT_SHIFTEROP)=OT_SHIFTEROP then
|
||||
begin
|
||||
s:=s+'shifterop';
|
||||
addsize:=false;
|
||||
end
|
||||
else
|
||||
s:=s+'???';
|
||||
{ size }
|
||||
@ -1867,6 +1873,8 @@ implementation
|
||||
begin
|
||||
ot:=OT_SHIFTEROP;
|
||||
end;
|
||||
top_conditioncode:
|
||||
ot:=OT_CONDITION;
|
||||
else
|
||||
internalerror(2004022623);
|
||||
end;
|
||||
@ -1900,7 +1908,6 @@ implementation
|
||||
{siz : array[0..3] of longint;}
|
||||
begin
|
||||
Matches:=100;
|
||||
writeln(getstring,'---');
|
||||
|
||||
{ Check the opcode and operands }
|
||||
if (p^.opcode<>opcode) or (p^.ops<>ops) then
|
||||
@ -1942,7 +1949,7 @@ implementation
|
||||
{ update condition flags
|
||||
or floating point single }
|
||||
if (oppostfix=PF_S) and
|
||||
not(p^.code[0] in [#$04]) then
|
||||
not(p^.code[0] in [#$04..#$0B]) then
|
||||
begin
|
||||
Matches:=0;
|
||||
exit;
|
||||
@ -2113,26 +2120,58 @@ implementation
|
||||
|
||||
|
||||
procedure taicpu.gencode(objdata:TObjData);
|
||||
const
|
||||
CondVal : array[TAsmCond] of byte=(
|
||||
$E, $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $A,
|
||||
$B, $C, $D, $E, 0);
|
||||
var
|
||||
bytes : dword;
|
||||
i_field : byte;
|
||||
currsym : TObjSymbol;
|
||||
offset : longint;
|
||||
|
||||
procedure setshifterop(op : byte);
|
||||
var
|
||||
r : byte;
|
||||
imm : dword;
|
||||
begin
|
||||
case oper[op]^.typ of
|
||||
top_const:
|
||||
begin
|
||||
i_field:=1;
|
||||
bytes:=bytes or dword(oper[op]^.val and $fff);
|
||||
if oper[op]^.val and $ff=oper[op]^.val then
|
||||
bytes:=bytes or dword(oper[op]^.val)
|
||||
else
|
||||
begin
|
||||
{ calc rotate and adjust imm }
|
||||
r:=0;
|
||||
imm:=dword(oper[op]^.val);
|
||||
repeat
|
||||
imm:=RolDWord(imm, 2);
|
||||
inc(r)
|
||||
until imm and $ff=imm;
|
||||
bytes:=bytes or (r shl 8) or imm;
|
||||
end;
|
||||
end;
|
||||
top_reg:
|
||||
begin
|
||||
i_field:=0;
|
||||
bytes:=bytes or (getsupreg(oper[op]^.reg) shl 16);
|
||||
bytes:=bytes or getsupreg(oper[op]^.reg);
|
||||
|
||||
{ does a real shifter op follow? }
|
||||
if (op+1<=op) and (oper[op+1]^.typ=top_shifterop) then
|
||||
if (op+1<opercnt) and (oper[op+1]^.typ=top_shifterop) then
|
||||
with oper[op+1]^.shifterop^ do
|
||||
begin
|
||||
bytes:=bytes or (shiftimm shl 7);
|
||||
if shiftmode<>SM_RRX then
|
||||
bytes:=bytes or (ord(shiftmode) - ord(SM_LSL)) shl 5
|
||||
else
|
||||
bytes:=bytes or (3 shl 5);
|
||||
if getregtype(rs) <> R_INVALIDREGISTER then
|
||||
begin
|
||||
bytes:=bytes or (1 shl 4);
|
||||
bytes:=bytes or (getsupreg(rs) shl 8);
|
||||
end
|
||||
end;
|
||||
end;
|
||||
else
|
||||
@ -2140,34 +2179,258 @@ implementation
|
||||
end;
|
||||
end;
|
||||
|
||||
function MakeRegList(reglist: tcpuregisterset): word;
|
||||
var
|
||||
i, w: word;
|
||||
begin
|
||||
result:=0;
|
||||
w:=1;
|
||||
for i:=RS_R0 to RS_R15 do
|
||||
begin
|
||||
if i in reglist then
|
||||
result:=result or w;
|
||||
w:=w shl 1
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
bytes:=$0;
|
||||
i_field:=0;
|
||||
{ evaluate and set condition code }
|
||||
bytes:=bytes or (CondVal[condition] shl 28);
|
||||
|
||||
{ condition code allowed? }
|
||||
|
||||
{ setup rest of the instruction }
|
||||
case insentry^.code[0] of
|
||||
#$08:
|
||||
#$01: // B/BL
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 26);
|
||||
bytes:=bytes or (ord(insentry^.code[2]) shl 21);
|
||||
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 24);
|
||||
{ set offset }
|
||||
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)
|
||||
else
|
||||
bytes:=bytes or (((currsym.offset-insoffset-8) shr 2) and $ffffff);
|
||||
end;
|
||||
#$04..#$07: // SUB
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 24);
|
||||
bytes:=bytes or (ord(insentry^.code[2]) shl 16);
|
||||
{ set destination }
|
||||
bytes:=bytes or (getsupreg(oper[0]^.reg) shl 12);
|
||||
|
||||
{ set Rn }
|
||||
bytes:=bytes or (getsupreg(oper[1]^.reg) shl 16);
|
||||
{ create shifter op }
|
||||
setshifterop(1);
|
||||
|
||||
{ set i field }
|
||||
setshifterop(2);
|
||||
{ set I field }
|
||||
bytes:=bytes or (i_field shl 25);
|
||||
|
||||
{ set s if necessary }
|
||||
{ set S if necessary }
|
||||
if oppostfix=PF_S then
|
||||
bytes:=bytes or (1 shl 20);
|
||||
end;
|
||||
#$08,#$0A,#$0B: // MOV
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 24);
|
||||
bytes:=bytes or (ord(insentry^.code[2]) shl 16);
|
||||
{ set destination }
|
||||
bytes:=bytes or (getsupreg(oper[0]^.reg) shl 12);
|
||||
{ create shifter op }
|
||||
setshifterop(1);
|
||||
{ set I field }
|
||||
bytes:=bytes or (i_field shl 25);
|
||||
{ set S if necessary }
|
||||
if oppostfix=PF_S then
|
||||
bytes:=bytes or (1 shl 20);
|
||||
end;
|
||||
#$0C,#$0E,#$0F: // CMP
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 24);
|
||||
bytes:=bytes or (ord(insentry^.code[2]) shl 16);
|
||||
{ set destination }
|
||||
bytes:=bytes or (getsupreg(oper[0]^.reg) shl 16);
|
||||
{ create shifter op }
|
||||
setshifterop(1);
|
||||
{ set I field }
|
||||
bytes:=bytes or (i_field shl 25);
|
||||
{ always set S bit }
|
||||
bytes:=bytes or (1 shl 20);
|
||||
end;
|
||||
#$14: // MUL/MLA r1,r2,r3
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or ord(insentry^.code[1]) shl 24;
|
||||
bytes:=bytes or ord(insentry^.code[2]) shl 16;
|
||||
bytes:=bytes or ord(insentry^.code[3]);
|
||||
{ set regs }
|
||||
bytes:=bytes or getsupreg(oper[0]^.reg) shl 16;
|
||||
bytes:=bytes or getsupreg(oper[1]^.reg);
|
||||
bytes:=bytes or getsupreg(oper[2]^.reg) shl 8;
|
||||
end;
|
||||
#$15: // MUL/MLA r1,r2,r3,r4
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or ord(insentry^.code[1]) shl 24;
|
||||
bytes:=bytes or ord(insentry^.code[2]) shl 16;
|
||||
bytes:=bytes or ord(insentry^.code[3]);
|
||||
{ set regs }
|
||||
bytes:=bytes or getsupreg(oper[0]^.reg) shl 16;
|
||||
bytes:=bytes or getsupreg(oper[1]^.reg);
|
||||
bytes:=bytes or getsupreg(oper[2]^.reg) shl 8;
|
||||
bytes:=bytes or getsupreg(oper[3]^.reg) shl 12;
|
||||
end;
|
||||
#$16: // MULL r1,r2,r3,r4
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or ord(insentry^.code[1]) shl 24;
|
||||
bytes:=bytes or ord(insentry^.code[2]) shl 16;
|
||||
bytes:=bytes or ord(insentry^.code[3]);
|
||||
{ set regs }
|
||||
bytes:=bytes or getsupreg(oper[0]^.reg) shl 12;
|
||||
bytes:=bytes or getsupreg(oper[1]^.reg) shl 16;
|
||||
bytes:=bytes or getsupreg(oper[2]^.reg);
|
||||
bytes:=bytes or getsupreg(oper[3]^.reg) shl 8;
|
||||
end;
|
||||
#$17: // LDR/STR
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 24);
|
||||
bytes:=bytes or (ord(insentry^.code[2]) shl 16);
|
||||
{ set Rn and Rd }
|
||||
bytes:=bytes or getsupreg(oper[0]^.reg) shl 12;
|
||||
bytes:=bytes or getsupreg(oper[1]^.ref^.base) shl 16;
|
||||
if getregtype(oper[1]^.ref^.index)=R_INVALIDREGISTER then
|
||||
begin
|
||||
{ set offset }
|
||||
offset:=0;
|
||||
currsym:=objdata.symbolref(oper[1]^.ref^.symbol);
|
||||
if assigned(currsym) then
|
||||
offset:=currsym.offset-insoffset-8;
|
||||
offset:=offset+oper[1]^.ref^.offset;
|
||||
if offset>=0 then
|
||||
begin
|
||||
{ set U flag }
|
||||
bytes:=bytes or (1 shl 23);
|
||||
bytes:=bytes or offset
|
||||
end
|
||||
else
|
||||
begin
|
||||
offset:=-offset;
|
||||
bytes:=bytes or offset
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
{ set U flag }
|
||||
if oper[1]^.ref^.signindex>0 then
|
||||
bytes:=bytes or (1 shl 23);
|
||||
{ set I flag }
|
||||
bytes:=bytes or (1 shl 25);
|
||||
bytes:=bytes or getsupreg(oper[1]^.ref^.index);
|
||||
{ set shift }
|
||||
with oper[1]^.ref^ do
|
||||
if shiftmode<>SM_None then
|
||||
begin
|
||||
bytes:=bytes or (shiftimm shl 7);
|
||||
if shiftmode<>SM_RRX then
|
||||
bytes:=bytes or (ord(shiftmode) - ord(SM_LSL)) shl 5
|
||||
else
|
||||
bytes:=bytes or (3 shl 5);
|
||||
end
|
||||
end;
|
||||
{ set W bit }
|
||||
if oper[1]^.ref^.addressmode=AM_PREINDEXED then
|
||||
bytes:=bytes or (1 shl 21);
|
||||
{ set P bit if necessary }
|
||||
if oper[1]^.ref^.addressmode<>AM_POSTINDEXED then
|
||||
bytes:=bytes or (1 shl 24);
|
||||
end;
|
||||
#$22: // LDRH/STRH
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 16);
|
||||
bytes:=bytes or ord(insentry^.code[2]);
|
||||
{ src/dest register (Rd) }
|
||||
bytes:=bytes or getsupreg(oper[0]^.reg) shl 12;
|
||||
{ base register (Rn) }
|
||||
bytes:=bytes or getsupreg(oper[1]^.ref^.base) shl 16;
|
||||
if getregtype(oper[1]^.ref^.index)=R_INVALIDREGISTER then
|
||||
begin
|
||||
bytes:=bytes or (1 shl 22); // with immediate offset
|
||||
if oper[1]^.ref^.offset < 0 then
|
||||
begin
|
||||
bytes:=bytes or ((-oper[1]^.ref^.offset) and $f0 shl 4);
|
||||
bytes:=bytes or ((-oper[1]^.ref^.offset) and $f);
|
||||
end
|
||||
else
|
||||
begin
|
||||
{ set U bit }
|
||||
bytes:=bytes or (1 shl 23);
|
||||
bytes:=bytes or (oper[1]^.ref^.offset and $f0 shl 4);
|
||||
bytes:=bytes or (oper[1]^.ref^.offset and $f);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
{ set U flag }
|
||||
bytes:=bytes or (1 shl 23);
|
||||
bytes:=bytes or getsupreg(oper[1]^.ref^.index);
|
||||
end;
|
||||
{ set W bit }
|
||||
if oper[1]^.ref^.addressmode=AM_PREINDEXED then
|
||||
bytes:=bytes or (1 shl 21);
|
||||
{ set P bit if necessary }
|
||||
if oper[1]^.ref^.addressmode<>AM_POSTINDEXED then
|
||||
bytes:=bytes or (1 shl 24);
|
||||
end;
|
||||
#$26: // LDM/STM
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 20);
|
||||
if oper[0]^.typ=top_ref then
|
||||
begin
|
||||
{ set W bit }
|
||||
if oper[0]^.ref^.addressmode=AM_PREINDEXED then
|
||||
bytes:=bytes or (1 shl 21);
|
||||
{ set Rn }
|
||||
bytes:=bytes or (getsupreg(oper[0]^.ref^.index) shl 16);
|
||||
end
|
||||
else { typ=top_reg }
|
||||
begin
|
||||
{ set Rn }
|
||||
bytes:=bytes or (getsupreg(oper[0]^.reg) shl 16);
|
||||
end;
|
||||
{ reglist }
|
||||
bytes:=bytes or MakeRegList(oper[1]^.regset^);
|
||||
{ set P bit }
|
||||
if (opcode=A_LDM) and (oppostfix in [PF_ED,PF_EA,PF_IB,PF_DB])
|
||||
or (opcode=A_STM) and (oppostfix in [PF_FA,PF_FD,PF_IB,PF_DB]) then
|
||||
bytes:=bytes or (1 shl 24);
|
||||
{ set U bit }
|
||||
if (opcode=A_LDM) and (oppostfix in [PF_ED,PF_FD,PF_IB,PF_IA])
|
||||
or (opcode=A_STM) and (oppostfix in [PF_FA,PF_EA,PF_IB,PF_IA]) then
|
||||
bytes:=bytes or (1 shl 23);
|
||||
end;
|
||||
#$27: // SWP/SWPB
|
||||
begin
|
||||
{ set instruction code }
|
||||
bytes:=bytes or (ord(insentry^.code[1]) shl 20);
|
||||
bytes:=bytes or (ord(insentry^.code[2]) shl 4);
|
||||
{ set regs }
|
||||
bytes:=bytes or (getsupreg(oper[0]^.reg) shl 12);
|
||||
bytes:=bytes or getsupreg(oper[1]^.reg);
|
||||
bytes:=bytes or (getsupreg(oper[2]^.ref^.base) shl 16);
|
||||
end;
|
||||
#$03: // BX
|
||||
begin
|
||||
writeln(objdata.CurrObjSec.fullname);
|
||||
Comment(v_warning,'BX instruction');
|
||||
// TBD
|
||||
end;
|
||||
#$ff:
|
||||
internalerror(2005091101);
|
||||
else
|
||||
|
@ -97,13 +97,13 @@ void void none
|
||||
reg32,reg32,reg32 \4\x0\xA0 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x0\xA0 ARM7
|
||||
reg32,reg32,reg32,imm \6\x0\xA0 ARM7
|
||||
reg32,reg32,imm \7\x2\xA0 ARM7
|
||||
reg32,reg32,immshifter \7\x2\xA0 ARM7
|
||||
|
||||
[ADDcc]
|
||||
reg32,reg32,reg32 \4\x0\x80 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x0\x80 ARM7
|
||||
reg32,reg32,reg32,imm \6\x0\x80 ARM7
|
||||
reg32,reg32,imm \7\x2\x80 ARM7
|
||||
reg32,reg32,reg32,shifterop \6\x0\x80 ARM7
|
||||
reg32,reg32,immshifter \7\x2\x80 ARM7
|
||||
|
||||
[ADFcc]
|
||||
|
||||
@ -111,19 +111,20 @@ reg32,reg32,imm \7\x2\x80 ARM7
|
||||
|
||||
[ANDcc]
|
||||
reg32,reg32,reg32 \4\x0\x00 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x0\x00 ARM7
|
||||
reg32,reg32,reg32,imm \6\x0\x00 ARM7
|
||||
reg32,reg32,imm \7\x2\x00 ARM7
|
||||
;reg32,reg32,reg32,reg32 \5\x0\x00 ARM7
|
||||
;reg32,reg32,reg32,imm \6\x0\x00 ARM7
|
||||
reg32,reg32,reg32,shifterop \6\x0\x00 ARM7
|
||||
reg32,reg32,immshifter \7\x2\x00 ARM7
|
||||
|
||||
[Bcc]
|
||||
mem32 \1\x0A ARM7
|
||||
imm24 \1\x0A ARM7
|
||||
|
||||
[BICcc]
|
||||
reg32,reg32,reg32 \4\x1\xC0 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x1\xC0 ARM7
|
||||
reg32,reg32,reg32,imm \6\x1\xC0 ARM7
|
||||
reg32,reg32,imm \7\x3\xC0 ARM7
|
||||
;reg32,reg32,reg32 \4\x1\xC0 ARM7
|
||||
;reg32,reg32,reg32,reg32 \5\x1\xC0 ARM7
|
||||
;reg32,reg32,reg32,imm \6\x1\xC0 ARM7
|
||||
reg32,reg32,immshifter \7\x3\xC0 ARM7
|
||||
|
||||
[BLcc]
|
||||
mem32 \1\x0B ARM7
|
||||
@ -149,13 +150,13 @@ reg8,reg8 \300\1\x10\101 ARM7
|
||||
reg32,reg32 \xC\x1\x60 ARM7
|
||||
reg32,reg32,reg32 \xD\x1\x60 ARM7
|
||||
reg32,reg32,imm \xE\x1\x60 ARM7
|
||||
reg32,imm \xF\x3\x60 ARM7
|
||||
reg32,immshifter \xF\x1\x60 ARM7
|
||||
|
||||
[CMPcc]
|
||||
reg32,reg32 \xC\x1\x40 ARM7
|
||||
reg32,reg32,reg32 \xD\x1\x40 ARM7
|
||||
reg32,reg32,imm \xE\x1\x40 ARM7
|
||||
reg32,imm \xF\x3\x40 ARM7
|
||||
reg32,reg32,shifterop \xE\x1\x40 ARM7
|
||||
reg32,immshifter \xF\x3\x40 ARM7
|
||||
|
||||
[CLZcc]
|
||||
reg32,reg32 \x27\x01\x01 ARM7
|
||||
@ -172,9 +173,10 @@ reg32,reg32 \x27\x01\x01 ARM7
|
||||
|
||||
[EORcc]
|
||||
reg32,reg32,reg32 \4\x0\x20 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x0\x20 ARM7
|
||||
reg32,reg32,reg32,imm \6\x0\x20 ARM7
|
||||
reg32,reg32,imm \7\x2\x20 ARM7
|
||||
;reg32,reg32,reg32,reg32 \5\x0\x20 ARM7
|
||||
;reg32,reg32,reg32,imm \6\x0\x20 ARM7
|
||||
reg32,reg32,reg32,shifterop \6\x0\x20 ARM7
|
||||
reg32,reg32,immshifter \7\x2\x20 ARM7
|
||||
|
||||
[EXPcc]
|
||||
|
||||
@ -193,14 +195,15 @@ reg32,reg32 \321\300\1\x11\101 ARM7
|
||||
|
||||
[LDMcc]
|
||||
memam4,reglist \x26\x81 ARM7
|
||||
reg32,reglist \x26\x81 ARM7
|
||||
|
||||
[LDRBTcc]
|
||||
|
||||
[LDRBcc]
|
||||
reg32,memam2 \x17\x07\x10 ARM7
|
||||
reg32,memam2 \x17\x04\x50 ARM7
|
||||
|
||||
[LDRcc]
|
||||
reg32,memam2 \x17\x05\x10 ARM7
|
||||
reg32,memam2 \x17\x04\x10 ARM7
|
||||
; reg32,imm32 \x17\x05\x10 ARM7
|
||||
; reg32,reg32 \x18\x04\x10 ARM7
|
||||
; reg32,reg32,imm32 \x19\x04\x10 ARM7
|
||||
@ -208,22 +211,24 @@ reg32,memam2 \x17\x05\x10 ARM7
|
||||
; reg32,reg32,reg32,imm32 \x21\x06\x10 ARM7
|
||||
|
||||
[LDRHcc]
|
||||
reg32,imm32 \x22\x50\xB0 ARM7
|
||||
reg32,reg32 \x23\x50\xB0 ARM7
|
||||
reg32,reg32,imm32 \x24\x50\xB0 ARM7
|
||||
reg32,reg32,reg32 \x25\x10\xB0 ARM7
|
||||
reg32,memam2 \x22\x10\xB0 ARM7
|
||||
;reg32,imm32 \x22\x50\xB0 ARM7
|
||||
;reg32,reg32 \x23\x50\xB0 ARM7
|
||||
;reg32,reg32,imm32 \x24\x50\xB0 ARM7
|
||||
;reg32,reg32,reg32 \x25\x10\xB0 ARM7
|
||||
|
||||
[LDRSBcc]
|
||||
reg32,imm32 \x22\x50\xD0 ARM7
|
||||
reg32,memam2 \x22\x10\xD0 ARM7
|
||||
reg32,reg32 \x23\x50\xD0 ARM7
|
||||
reg32,reg32,imm32 \x24\x50\xD0 ARM7
|
||||
reg32,reg32,reg32 \x25\x10\xD0 ARM7
|
||||
|
||||
[LDRSHcc]
|
||||
reg32,imm32 \x22\x50\xF0 ARM7
|
||||
reg32,reg32 \x23\x50\xF0 ARM7
|
||||
reg32,reg32,imm32 \x24\x50\xF0 ARM7
|
||||
reg32,reg32,reg32 \x25\x10\xF0 ARM7
|
||||
reg32,memam2 \x22\x10\xF0 ARM7
|
||||
;reg32,imm32 \x22\x50\xF0 ARM7
|
||||
;reg32,reg32 \x23\x50\xF0 ARM7
|
||||
;reg32,reg32,imm32 \x24\x50\xF0 ARM7
|
||||
;reg32,reg32,reg32 \x25\x10\xF0 ARM7
|
||||
|
||||
[LDRTcc]
|
||||
|
||||
@ -243,11 +248,10 @@ reg32,imm8,fpureg \xF0\x02\x01 FPA
|
||||
reg32,reg32,reg32,reg32 \x15\x00\x20\x90 ARM7
|
||||
|
||||
[MOVcc]
|
||||
; reg32,shifterop \x8\x0\0xd ARM7
|
||||
; reg32,immshifter \x8\x0\0xd ARM7
|
||||
reg32,shifterop \x8\x1\xA0 ARM7
|
||||
; reg32,reg32,reg32 \x9\x1\xA0 ARM7
|
||||
; reg32,reg32,imm \xA\x1\xA0 ARM7
|
||||
; reg32,imm \xB\x3\xA0 ARM7
|
||||
reg32,reg32,shifterop \xA\x1\xA0 ARM7
|
||||
reg32,immshifter \xB\x1\xA0 ARM7
|
||||
|
||||
[MRC]
|
||||
; reg32,reg32 \321\301\1\x13\110 ARM7
|
||||
@ -272,18 +276,18 @@ fpureg,fpureg \xF2 FPA
|
||||
fpureg,immfpu \xF2 FPA
|
||||
|
||||
[MVNcc]
|
||||
; reg32,reg32 \x8\x0\0xf ARM7
|
||||
reg32,reg32 \x8\x1\xE0 ARM7
|
||||
; reg32,reg32,reg32 \x9\x1\xE0 ARM7
|
||||
; reg32,reg32,imm \xA\x1\xE0 ARM7
|
||||
; reg32,imm \xB\x3\xE0 ARM7
|
||||
reg32,reg32,shifterop \xA\x1\xE0 ARM7
|
||||
reg32,immshifter \xB\x1\xE0 ARM7
|
||||
|
||||
[NOP]
|
||||
|
||||
[ORRcc]
|
||||
reg32,reg32,reg32 \4\x1\x80 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x1\x80 ARM7
|
||||
reg32,reg32,reg32,imm \6\x1\x80 ARM7
|
||||
reg32,reg32,imm \7\x3\x80 ARM7
|
||||
reg32,reg32,reg32,shifterop \6\x1\x80 ARM7
|
||||
reg32,reg32,immshifter \7\x3\x80 ARM7
|
||||
|
||||
[RDFcc]
|
||||
|
||||
@ -296,16 +300,16 @@ reg32,reg32,imm \7\x3\x80 ARM7
|
||||
[RPWcc]
|
||||
|
||||
[RSBcc]
|
||||
reg32,reg32,reg32 \4\x0\x60 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x0\x60 ARM7
|
||||
reg32,reg32,reg32,imm \6\x0\x60 ARM7
|
||||
reg32,reg32,imm \7\x2\x60 ARM7
|
||||
;reg32,reg32,reg32 \4\x0\x60 ARM7
|
||||
;reg32,reg32,reg32,reg32 \5\x0\x60 ARM7
|
||||
reg32,reg32,reg32,shifterop \6\x0\x60 ARM7
|
||||
reg32,reg32,immshifter \7\x0\x60 ARM7
|
||||
|
||||
[RSCcc]
|
||||
reg32,reg32,reg32 \4\x0\xE0 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x0\xE0 ARM7
|
||||
reg32,reg32,reg32,imm \6\x0\xE0 ARM7
|
||||
reg32,reg32,imm \7\x2\xE0 ARM7
|
||||
reg32,reg32,immshifter \7\x2\xE0 ARM7
|
||||
|
||||
[RSFcc]
|
||||
|
||||
@ -317,7 +321,7 @@ reg32,reg32,imm \7\x2\xE0 ARM7
|
||||
reg32,reg32,reg32 \4\x0\xC0 ARM7
|
||||
reg32,reg32,reg32,reg32 \5\x0\xC0 ARM7
|
||||
reg32,reg32,reg32,imm \6\x0\xC0 ARM7
|
||||
reg32,reg32,imm \7\x2\xC0 ARM7
|
||||
reg32,reg32,immshifter \7\x2\xC0 ARM7
|
||||
|
||||
[SFMcc]
|
||||
reg32,imm8,fpureg \xF0\x02\x00 FPA
|
||||
@ -338,6 +342,7 @@ reg32,reg32,reg32,reg32 \x16\x00\xC0\x90 ARM7
|
||||
|
||||
[STMcc]
|
||||
memam4,reglist \x26\x80 ARM7
|
||||
reg32,reglist \x26\x80 ARM7
|
||||
|
||||
[STRcc]
|
||||
reg32,memam2 \x17\x04\x00 ARM7
|
||||
@ -348,16 +353,17 @@ reg32,memam2 \x17\x04\x00 ARM7
|
||||
; reg32,reg32,reg32,imm32 \x21\x06\x00 ARM7
|
||||
|
||||
[STRBcc]
|
||||
reg32,memam2 \x17\x06\x00 ARM7
|
||||
reg32,memam2 \x17\x04\x40 ARM7
|
||||
|
||||
[STRBTcc]
|
||||
|
||||
; A dummy since it is parsed as STR{cond}H
|
||||
[STRHcc]
|
||||
reg32,imm32 \x22\x40\xB0 ARM7
|
||||
reg32,reg32 \x23\x40\xB0 ARM7
|
||||
reg32,reg32,imm32 \x24\x40\xB0 ARM7
|
||||
reg32,reg32,reg32 \x25\x00\xB0 ARM7
|
||||
reg32,memam2 \x22\x00\xB0 ARM7
|
||||
;reg32,imm32 \x22\x40\xB0 ARM7
|
||||
;reg32,reg32 \x23\x40\xB0 ARM7
|
||||
;reg32,reg32,imm32 \x24\x40\xB0 ARM7
|
||||
;reg32,reg32,reg32 \x25\x00\xB0 ARM7
|
||||
|
||||
[STRTcc]
|
||||
|
||||
@ -366,17 +372,17 @@ reg32,reg32,shifterop \4\x0\x40 ARM7
|
||||
reg32,reg32,immshifter \4\x0\x40 ARM7
|
||||
reg32,reg32,reg32 \4\x0\x40 ARM7
|
||||
; reg32,reg32,reg32,reg32 \5\x0\x40 ARM7
|
||||
; reg32,reg32,reg32,imm \6\x0\x40 ARM7
|
||||
reg32,reg32,reg32,shifterop \6\x0\x40 ARM7
|
||||
; reg32,reg32,imm \7\x2\x40 ARM7
|
||||
|
||||
[SWIcc]
|
||||
imm \2\x0F ARM7
|
||||
|
||||
[SWPcc]
|
||||
reg32,reg32,reg32 \x27\x01\x90 ARM7
|
||||
reg32,reg32,memam2 \x27\x10\x09 ARM7
|
||||
|
||||
[SWPBcc]
|
||||
reg32,reg32,reg32 \x27\x01\x90 ARM7
|
||||
reg32,reg32,reg32 \x27\x14\x09 ARM7
|
||||
|
||||
[TANcc]
|
||||
|
||||
@ -389,8 +395,8 @@ reg32,imm \xF\x3\x20 ARM7
|
||||
[TSTcc]
|
||||
reg32,reg32 \xC\x1\x00 ARM7
|
||||
reg32,reg32,reg32 \xD\x1\x00 ARM7
|
||||
reg32,reg32,imm \xE\x1\x00 ARM7
|
||||
reg32,imm \xF\x3\x00 ARM7
|
||||
reg32,reg32,shifterop \xE\x1\x00 ARM7
|
||||
reg32,immshifter \xF\x3\x00 ARM7
|
||||
|
||||
[UMLALcc]
|
||||
reg32,reg32,reg32,reg32 \x16\x00\xA0\x90 ARM7
|
||||
|
@ -1,2 +1,2 @@
|
||||
{ don't edit, this file is generated from armins.dat }
|
||||
105;
|
||||
98;
|
||||
|
@ -31,7 +31,7 @@
|
||||
(
|
||||
opcode : A_ADC;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#2#160;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -52,14 +52,14 @@
|
||||
(
|
||||
opcode : A_ADD;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_immediate);
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_shifterop);
|
||||
code : #6#0#128;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_ADD;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#2#128;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -73,21 +73,14 @@
|
||||
(
|
||||
opcode : A_AND;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_reg32);
|
||||
code : #5#0#0;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_AND;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_immediate);
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_shifterop);
|
||||
code : #6#0#0;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_AND;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#2#0;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -108,28 +101,7 @@
|
||||
(
|
||||
opcode : A_BIC;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_none);
|
||||
code : #4#1#192;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_BIC;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_reg32);
|
||||
code : #5#1#192;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_BIC;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_immediate);
|
||||
code : #6#1#192;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_BIC;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#3#192;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -199,8 +171,8 @@
|
||||
(
|
||||
opcode : A_CMN;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediate,ot_none,ot_none);
|
||||
code : #15#3#96;
|
||||
optypes : (ot_reg32,ot_immediateshifter,ot_none,ot_none);
|
||||
code : #15#1#96;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
@ -220,14 +192,14 @@
|
||||
(
|
||||
opcode : A_CMP;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_shifterop,ot_none);
|
||||
code : #14#1#64;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_CMP;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediate,ot_none,ot_none);
|
||||
optypes : (ot_reg32,ot_immediateshifter,ot_none,ot_none);
|
||||
code : #15#3#64;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -248,21 +220,14 @@
|
||||
(
|
||||
opcode : A_EOR;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_reg32);
|
||||
code : #5#0#32;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_EOR;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_immediate);
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_shifterop);
|
||||
code : #6#0#32;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_EOR;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#2#32;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -280,53 +245,39 @@
|
||||
code : #38#129;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDM;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_reglist,ot_none,ot_none);
|
||||
code : #38#129;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRB;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_memoryam2,ot_none,ot_none);
|
||||
code : #23#7#16;
|
||||
code : #23#4#80;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDR;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_memoryam2,ot_none,ot_none);
|
||||
code : #23#5#16;
|
||||
code : #23#4#16;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRH;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediate or ot_bits32,ot_none,ot_none);
|
||||
code : #34#80#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRH;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_reg32,ot_none,ot_none);
|
||||
code : #35#80#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRH;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate or ot_bits32,ot_none);
|
||||
code : #36#80#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRH;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_none);
|
||||
code : #37#16#176;
|
||||
optypes : (ot_reg32,ot_memoryam2,ot_none,ot_none);
|
||||
code : #34#16#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRSB;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediate or ot_bits32,ot_none,ot_none);
|
||||
code : #34#80#208;
|
||||
optypes : (ot_reg32,ot_memoryam2,ot_none,ot_none);
|
||||
code : #34#16#208;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
@ -353,29 +304,8 @@
|
||||
(
|
||||
opcode : A_LDRSH;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediate or ot_bits32,ot_none,ot_none);
|
||||
code : #34#80#240;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRSH;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_reg32,ot_none,ot_none);
|
||||
code : #35#80#240;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRSH;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate or ot_bits32,ot_none);
|
||||
code : #36#80#240;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_LDRSH;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_none);
|
||||
code : #37#16#240;
|
||||
optypes : (ot_reg32,ot_memoryam2,ot_none,ot_none);
|
||||
code : #34#16#240;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
@ -392,6 +322,27 @@
|
||||
code : #21#0#32#144;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_MOV;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_shifterop,ot_none,ot_none);
|
||||
code : #8#1#160;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_MOV;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_shifterop,ot_none);
|
||||
code : #10#1#160;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_MOV;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediateshifter,ot_none,ot_none);
|
||||
code : #11#1#160;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_MRS;
|
||||
ops : 2;
|
||||
@ -441,6 +392,27 @@
|
||||
code : #242;
|
||||
flags : if_fpa
|
||||
),
|
||||
(
|
||||
opcode : A_MVN;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_reg32,ot_none,ot_none);
|
||||
code : #8#1#224;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_MVN;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_shifterop,ot_none);
|
||||
code : #10#1#224;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_MVN;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediateshifter,ot_none,ot_none);
|
||||
code : #11#1#224;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_ORR;
|
||||
ops : 3;
|
||||
@ -458,43 +430,29 @@
|
||||
(
|
||||
opcode : A_ORR;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_immediate);
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_shifterop);
|
||||
code : #6#1#128;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_ORR;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#3#128;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_RSB;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_none);
|
||||
code : #4#0#96;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_RSB;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_reg32);
|
||||
code : #5#0#96;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_RSB;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_immediate);
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_shifterop);
|
||||
code : #6#0#96;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_RSB;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
code : #7#2#96;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#0#96;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
@ -521,7 +479,7 @@
|
||||
(
|
||||
opcode : A_RSC;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#2#224;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -549,7 +507,7 @@
|
||||
(
|
||||
opcode : A_SBC;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediateshifter,ot_none);
|
||||
code : #7#2#192;
|
||||
flags : if_arm7
|
||||
),
|
||||
@ -581,6 +539,13 @@
|
||||
code : #38#128;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_STM;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_reglist,ot_none,ot_none);
|
||||
code : #38#128;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_STR;
|
||||
ops : 2;
|
||||
@ -592,35 +557,14 @@
|
||||
opcode : A_STRB;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_memoryam2,ot_none,ot_none);
|
||||
code : #23#6#0;
|
||||
code : #23#4#64;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_STRH;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediate or ot_bits32,ot_none,ot_none);
|
||||
code : #34#64#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_STRH;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_reg32,ot_none,ot_none);
|
||||
code : #35#64#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_STRH;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate or ot_bits32,ot_none);
|
||||
code : #36#64#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_STRH;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_none);
|
||||
code : #37#0#176;
|
||||
optypes : (ot_reg32,ot_memoryam2,ot_none,ot_none);
|
||||
code : #34#0#176;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
@ -644,6 +588,13 @@
|
||||
code : #4#0#64;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_SUB;
|
||||
ops : 4;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_shifterop);
|
||||
code : #6#0#64;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_SWI;
|
||||
ops : 1;
|
||||
@ -654,15 +605,15 @@
|
||||
(
|
||||
opcode : A_SWP;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_none);
|
||||
code : #39#1#144;
|
||||
optypes : (ot_reg32,ot_reg32,ot_memoryam2,ot_none);
|
||||
code : #39#16#9;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_SWPB;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_reg32,ot_none);
|
||||
code : #39#1#144;
|
||||
code : #39#20#9;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
@ -710,14 +661,14 @@
|
||||
(
|
||||
opcode : A_TST;
|
||||
ops : 3;
|
||||
optypes : (ot_reg32,ot_reg32,ot_immediate,ot_none);
|
||||
optypes : (ot_reg32,ot_reg32,ot_shifterop,ot_none);
|
||||
code : #14#1#0;
|
||||
flags : if_arm7
|
||||
),
|
||||
(
|
||||
opcode : A_TST;
|
||||
ops : 2;
|
||||
optypes : (ot_reg32,ot_immediate,ot_none,ot_none);
|
||||
optypes : (ot_reg32,ot_immediateshifter,ot_none,ot_none);
|
||||
code : #15#3#0;
|
||||
flags : if_arm7
|
||||
),
|
||||
|
@ -1009,10 +1009,9 @@ const pemagic : array[0..3] of byte = (
|
||||
result:=aname
|
||||
else
|
||||
begin
|
||||
{ non-PECOFF targets lack rodata support.
|
||||
TODO: WinCE likely supports it, but needs testing. }
|
||||
{ non-PECOFF targets lack rodata support }
|
||||
if (atype in [sec_rodata,sec_rodata_norel]) and
|
||||
not (target_info.system in systems_windows) then
|
||||
not (target_info.system in systems_all_windows) then
|
||||
atype:=sec_data;
|
||||
secname:=coffsecnames[atype];
|
||||
if create_smartlink_sections and
|
||||
@ -1038,8 +1037,7 @@ const pemagic : array[0..3] of byte = (
|
||||
begin
|
||||
if (aType in [sec_rodata,sec_rodata_norel]) then
|
||||
begin
|
||||
{ TODO: WinCE needs testing }
|
||||
if (target_info.system in systems_windows) then
|
||||
if (target_info.system in systems_all_windows) then
|
||||
aType:=sec_rodata_norel
|
||||
else
|
||||
aType:=sec_data;
|
||||
@ -1279,6 +1277,8 @@ const pemagic : array[0..3] of byte = (
|
||||
rel.reloctype:=IMAGE_REL_ARM_ADDR32NB;
|
||||
RELOC_SECREL32 :
|
||||
rel.reloctype:=IMAGE_REL_ARM_SECREL;
|
||||
RELOC_RELATIVE_24 :
|
||||
rel.reloctype:=IMAGE_REL_ARM_BRANCH24;
|
||||
{$endif arm}
|
||||
{$ifdef i386}
|
||||
RELOC_RELATIVE :
|
||||
@ -3045,7 +3045,7 @@ const pemagic : array[0..3] of byte = (
|
||||
asmbin : '';
|
||||
asmcmd : '';
|
||||
supported_targets : [system_arm_wince];
|
||||
flags : [af_outputbinary];
|
||||
flags : [af_outputbinary,af_smartlink_sections];
|
||||
labelprefix : '.L';
|
||||
comment : '';
|
||||
dollarsign: '$';
|
||||
|
Loading…
Reference in New Issue
Block a user