mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-15 00:29:24 +02:00
Added coprocessor registers, and support for 6 operands(MCR/MRC instructions, etc)
git-svn-id: branches/laksen/arm-embedded@22778 -
This commit is contained in:
parent
9892aea2ca
commit
666332385d
@ -50,6 +50,7 @@
|
|||||||
'mcr',
|
'mcr',
|
||||||
'mla',
|
'mla',
|
||||||
'mov',
|
'mov',
|
||||||
|
'mrc',
|
||||||
'mrs',
|
'mrs',
|
||||||
'msr',
|
'msr',
|
||||||
'mnf',
|
'mnf',
|
||||||
|
@ -326,5 +326,6 @@ attsufNONE,
|
|||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
attsufNONE,
|
attsufNONE,
|
||||||
|
attsufNONE,
|
||||||
attsufNONE
|
attsufNONE
|
||||||
);
|
);
|
||||||
|
@ -235,7 +235,7 @@ reg32,imm8,fpureg \xF0\x02\x01 FPA
|
|||||||
[LOGcc]
|
[LOGcc]
|
||||||
|
|
||||||
[MCR]
|
[MCR]
|
||||||
reg32,mem32 \320\301\1\x13\110 ARM7
|
; reg32,mem32 \320\301\1\x13\110 ARM7
|
||||||
|
|
||||||
[MLAcc]
|
[MLAcc]
|
||||||
reg32,reg32,reg32,reg32 \x15\x00\x20\x90 ARM7
|
reg32,reg32,reg32,reg32 \x15\x00\x20\x90 ARM7
|
||||||
@ -247,7 +247,7 @@ reg32,reg32,reg32,reg32 \x15\x00\x20\x90 ARM7
|
|||||||
; reg32,reg32,imm \xA\x1\xA0 ARM7
|
; reg32,reg32,imm \xA\x1\xA0 ARM7
|
||||||
; reg32,imm \xB\x3\xA0 ARM7
|
; reg32,imm \xB\x3\xA0 ARM7
|
||||||
|
|
||||||
; [MRC]
|
[MRC]
|
||||||
; reg32,reg32 \321\301\1\x13\110 ARM7
|
; reg32,reg32 \321\301\1\x13\110 ARM7
|
||||||
|
|
||||||
[MRScc]
|
[MRScc]
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from armins.dat }
|
{ don't edit, this file is generated from armins.dat }
|
||||||
106;
|
105;
|
||||||
|
@ -50,6 +50,7 @@ A_LOG,
|
|||||||
A_MCR,
|
A_MCR,
|
||||||
A_MLA,
|
A_MLA,
|
||||||
A_MOV,
|
A_MOV,
|
||||||
|
A_MRC,
|
||||||
A_MRS,
|
A_MRS,
|
||||||
A_MSR,
|
A_MSR,
|
||||||
A_MNF,
|
A_MNF,
|
||||||
|
@ -111,3 +111,22 @@ CPSR,$05,$00,$00,cpsr,0,0
|
|||||||
FPSCR,$05,$00,$01,fpscr,0,0
|
FPSCR,$05,$00,$01,fpscr,0,0
|
||||||
SPSR,$05,$00,$02,spsr,0,0
|
SPSR,$05,$00,$02,spsr,0,0
|
||||||
APSR_nzcv,$05,$00,$03,apsr_nzcv,0,0
|
APSR_nzcv,$05,$00,$03,apsr_nzcv,0,0
|
||||||
|
; coprocessor registers
|
||||||
|
CR0,$05,$00,$04,cr0,0,0
|
||||||
|
CR1,$05,$00,$05,cr1,0,0
|
||||||
|
CR2,$05,$00,$06,cr2,0,0
|
||||||
|
CR3,$05,$00,$07,cr3,0,0
|
||||||
|
CR4,$05,$00,$08,cr4,0,0
|
||||||
|
CR5,$05,$00,$09,cr5,0,0
|
||||||
|
CR6,$05,$00,$0A,cr6,0,0
|
||||||
|
CR7,$05,$00,$0B,cr7,0,0
|
||||||
|
CR8,$05,$00,$0C,cr8,0,0
|
||||||
|
CR9,$05,$00,$0D,cr9,0,0
|
||||||
|
CR10,$05,$00,$0E,cr10,0,0
|
||||||
|
CR11,$05,$00,$0F,cr11,0,0
|
||||||
|
CR12,$05,$00,$10,cr12,0,0
|
||||||
|
CR13,$05,$00,$11,cr13,0,0
|
||||||
|
CR14,$05,$00,$12,cr14,0,0
|
||||||
|
CR15,$05,$00,$13,cr15,0,0
|
||||||
|
; coprocessors
|
||||||
|
p15,$05,$00,$14,p15,0,0
|
@ -385,13 +385,6 @@
|
|||||||
code : #240#2#1;
|
code : #240#2#1;
|
||||||
flags : if_fpa
|
flags : if_fpa
|
||||||
),
|
),
|
||||||
(
|
|
||||||
opcode : A_MCR;
|
|
||||||
ops : 2;
|
|
||||||
optypes : (ot_reg32,ot_memory or ot_bits32,ot_none,ot_none);
|
|
||||||
code : #208#193#1#19#72;
|
|
||||||
flags : if_arm7
|
|
||||||
),
|
|
||||||
(
|
(
|
||||||
opcode : A_MLA;
|
opcode : A_MLA;
|
||||||
ops : 4;
|
ops : 4;
|
||||||
|
@ -48,7 +48,7 @@ unit cpubase;
|
|||||||
TAsmOp= {$i armop.inc}
|
TAsmOp= {$i armop.inc}
|
||||||
{This is a bit of a hack, because there are more than 256 ARM Assembly Ops
|
{This is a bit of a hack, because there are more than 256 ARM Assembly Ops
|
||||||
But FPC currently can't handle more than 256 elements in a set.}
|
But FPC currently can't handle more than 256 elements in a set.}
|
||||||
TCommonAsmOps = Set of A_None .. A_UQSAX;
|
TCommonAsmOps = Set of A_None .. A_UQASX;
|
||||||
|
|
||||||
{ This should define the array of instructions as string }
|
{ This should define the array of instructions as string }
|
||||||
op2strtable=array[tasmop] of string[11];
|
op2strtable=array[tasmop] of string[11];
|
||||||
@ -230,7 +230,7 @@ unit cpubase;
|
|||||||
*****************************************************************************}
|
*****************************************************************************}
|
||||||
|
|
||||||
const
|
const
|
||||||
max_operands = 4;
|
max_operands = 6;
|
||||||
|
|
||||||
maxintregs = 15;
|
maxintregs = 15;
|
||||||
maxfpuregs = 8;
|
maxfpuregs = 8;
|
||||||
|
@ -1061,7 +1061,7 @@ Unit raarmgas;
|
|||||||
AS_COMMA: { Operand delimiter }
|
AS_COMMA: { Operand delimiter }
|
||||||
Begin
|
Begin
|
||||||
if ((instr.opcode in [A_MOV, A_MVN, A_CMP, A_CMN, A_TST, A_TEQ]) and (operandnum=2)) or
|
if ((instr.opcode in [A_MOV, A_MVN, A_CMP, A_CMN, A_TST, A_TEQ]) and (operandnum=2)) or
|
||||||
((operandnum=3) and not(instr.opcode in [A_UMLAL,A_UMULL,A_SMLAL,A_SMULL,A_MLA])) then
|
((operandnum=3) and not(instr.opcode in [A_UMLAL,A_UMULL,A_SMLAL,A_SMULL,A_MLA,A_MRC,A_MCR,A_MCRR,A_MRRC])) then
|
||||||
begin
|
begin
|
||||||
Consume(AS_COMMA);
|
Consume(AS_COMMA);
|
||||||
if not(TryBuildShifterOp(instr.Operands[operandnum+1] as tarmoperand)) then
|
if not(TryBuildShifterOp(instr.Operands[operandnum+1] as tarmoperand)) then
|
||||||
|
@ -92,3 +92,20 @@ NR_CPSR = tregister($05000000);
|
|||||||
NR_FPSCR = tregister($05000001);
|
NR_FPSCR = tregister($05000001);
|
||||||
NR_SPSR = tregister($05000002);
|
NR_SPSR = tregister($05000002);
|
||||||
NR_APSR_nzcv = tregister($05000003);
|
NR_APSR_nzcv = tregister($05000003);
|
||||||
|
NR_CR0 = tregister($05000004);
|
||||||
|
NR_CR1 = tregister($05000005);
|
||||||
|
NR_CR2 = tregister($05000006);
|
||||||
|
NR_CR3 = tregister($05000007);
|
||||||
|
NR_CR4 = tregister($05000008);
|
||||||
|
NR_CR5 = tregister($05000009);
|
||||||
|
NR_CR6 = tregister($0500000A);
|
||||||
|
NR_CR7 = tregister($0500000B);
|
||||||
|
NR_CR8 = tregister($0500000C);
|
||||||
|
NR_CR9 = tregister($0500000D);
|
||||||
|
NR_CR10 = tregister($0500000E);
|
||||||
|
NR_CR11 = tregister($0500000F);
|
||||||
|
NR_CR12 = tregister($05000010);
|
||||||
|
NR_CR13 = tregister($05000011);
|
||||||
|
NR_CR14 = tregister($05000012);
|
||||||
|
NR_CR15 = tregister($05000013);
|
||||||
|
NR_p15 = tregister($05000014);
|
||||||
|
@ -91,4 +91,21 @@
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
0
|
0
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from armreg.dat }
|
{ don't edit, this file is generated from armreg.dat }
|
||||||
93
|
110
|
||||||
|
@ -91,4 +91,21 @@ tregister($0407001F),
|
|||||||
tregister($05000000),
|
tregister($05000000),
|
||||||
tregister($05000001),
|
tregister($05000001),
|
||||||
tregister($05000002),
|
tregister($05000002),
|
||||||
tregister($05000003)
|
tregister($05000003),
|
||||||
|
tregister($05000004),
|
||||||
|
tregister($05000005),
|
||||||
|
tregister($05000006),
|
||||||
|
tregister($05000007),
|
||||||
|
tregister($05000008),
|
||||||
|
tregister($05000009),
|
||||||
|
tregister($0500000A),
|
||||||
|
tregister($0500000B),
|
||||||
|
tregister($0500000C),
|
||||||
|
tregister($0500000D),
|
||||||
|
tregister($0500000E),
|
||||||
|
tregister($0500000F),
|
||||||
|
tregister($05000010),
|
||||||
|
tregister($05000011),
|
||||||
|
tregister($05000012),
|
||||||
|
tregister($05000013),
|
||||||
|
tregister($05000014)
|
||||||
|
@ -91,4 +91,21 @@
|
|||||||
89,
|
89,
|
||||||
90,
|
90,
|
||||||
91,
|
91,
|
||||||
92
|
92,
|
||||||
|
93,
|
||||||
|
94,
|
||||||
|
95,
|
||||||
|
96,
|
||||||
|
97,
|
||||||
|
98,
|
||||||
|
99,
|
||||||
|
100,
|
||||||
|
101,
|
||||||
|
102,
|
||||||
|
103,
|
||||||
|
104,
|
||||||
|
105,
|
||||||
|
106,
|
||||||
|
107,
|
||||||
|
108,
|
||||||
|
109
|
||||||
|
@ -2,6 +2,22 @@
|
|||||||
0,
|
0,
|
||||||
92,
|
92,
|
||||||
89,
|
89,
|
||||||
|
93,
|
||||||
|
94,
|
||||||
|
103,
|
||||||
|
104,
|
||||||
|
105,
|
||||||
|
106,
|
||||||
|
107,
|
||||||
|
108,
|
||||||
|
95,
|
||||||
|
96,
|
||||||
|
97,
|
||||||
|
98,
|
||||||
|
99,
|
||||||
|
100,
|
||||||
|
101,
|
||||||
|
102,
|
||||||
27,
|
27,
|
||||||
30,
|
30,
|
||||||
57,
|
57,
|
||||||
@ -43,6 +59,7 @@
|
|||||||
23,
|
23,
|
||||||
24,
|
24,
|
||||||
90,
|
90,
|
||||||
|
109,
|
||||||
1,
|
1,
|
||||||
2,
|
2,
|
||||||
11,
|
11,
|
||||||
|
@ -91,4 +91,21 @@
|
|||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
0
|
0
|
||||||
|
@ -91,4 +91,21 @@
|
|||||||
'cpsr',
|
'cpsr',
|
||||||
'fpscr',
|
'fpscr',
|
||||||
'spsr',
|
'spsr',
|
||||||
'apsr_nzcv'
|
'apsr_nzcv',
|
||||||
|
'cr0',
|
||||||
|
'cr1',
|
||||||
|
'cr2',
|
||||||
|
'cr3',
|
||||||
|
'cr4',
|
||||||
|
'cr5',
|
||||||
|
'cr6',
|
||||||
|
'cr7',
|
||||||
|
'cr8',
|
||||||
|
'cr9',
|
||||||
|
'cr10',
|
||||||
|
'cr11',
|
||||||
|
'cr12',
|
||||||
|
'cr13',
|
||||||
|
'cr14',
|
||||||
|
'cr15',
|
||||||
|
'p15'
|
||||||
|
@ -92,3 +92,20 @@ RS_CPSR = $00;
|
|||||||
RS_FPSCR = $01;
|
RS_FPSCR = $01;
|
||||||
RS_SPSR = $02;
|
RS_SPSR = $02;
|
||||||
RS_APSR_nzcv = $03;
|
RS_APSR_nzcv = $03;
|
||||||
|
RS_CR0 = $04;
|
||||||
|
RS_CR1 = $05;
|
||||||
|
RS_CR2 = $06;
|
||||||
|
RS_CR3 = $07;
|
||||||
|
RS_CR4 = $08;
|
||||||
|
RS_CR5 = $09;
|
||||||
|
RS_CR6 = $0A;
|
||||||
|
RS_CR7 = $0B;
|
||||||
|
RS_CR8 = $0C;
|
||||||
|
RS_CR9 = $0D;
|
||||||
|
RS_CR10 = $0E;
|
||||||
|
RS_CR11 = $0F;
|
||||||
|
RS_CR12 = $10;
|
||||||
|
RS_CR13 = $11;
|
||||||
|
RS_CR14 = $12;
|
||||||
|
RS_CR15 = $13;
|
||||||
|
RS_p15 = $14;
|
||||||
|
Loading…
Reference in New Issue
Block a user