arc: Update opcode related include files for ARCv3.

Add new ARCv3 CPUs and required bits to decode/encode ARCv3 ISA
opcodes. Fix 32 bit relocations which were set as signed but should be
bitfield: ARC_32_ME, ARC_GLOB_DAT, ARC_JMP_SLOT, ARC_RELATIVE. Remove
non-ABI relocation ARC_32_ME_S.

include/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>
	    Cupertino Miranda  <cupertinomiranda@gmail.com>
	    Bruno Mauricio <brunoasmauricio@gmail.com>

	* include/elf/arc-cpu.def: Add new HS5x and HS6x CPUs.
	* include/elf/arc-reloc.def: Add new ARC64 relocations.
	* include/elf/arc.h (EF_ARC_CPU_ARC64): New define.
	* include/opcode/arc-attrs.h (FEATURE_LIST_NAME): Update predicate.
	* include/opcode/arc-func.h: Update formating.
	(replace_disp8ls): New function.
	(replace_disp9s): Likewise.
	(replace_disp6s): Likewise.
	(replace_disp7s): Likewise.
	(replace_disp12s): Likewise.
	* include/opcode/arc.h (ARC_OPCODE_ARC64): New define.
	(ARC_OPCODE_ARC32): Likewise.
	(ARC_OPERAND_FP): Likewise.
	(HARD_FIELDF): Likewise.
	(ARC_OPCODE_ARCVx): New macro.
	(arc_flag_class): Update structure to hold new extract/insert
	functions for flags.
	(INSN3OP): Update macro.
	(FP_SIZE, TPOF, DPOF, SOPF, COPF, CONVOPS): New enums.

Signed-off-by: Claudiu Zissulescu <claziss@synopsys.com>
This commit is contained in:
Claudiu Zissulescu
2023-09-25 10:55:51 +03:00
committed by Claudiu Zissulescu
parent 4deb1ee57f
commit 04414221df
6 changed files with 449 additions and 93 deletions
+31 -26
View File
@@ -19,35 +19,40 @@
02110-1301, USA. */
ARC_CPU_TYPE_A7xx (arc700, 0x00),
ARC_CPU_TYPE_A7xx (nps400, NPS400),
ARC_CPU_TYPE_A64x (hs6x, CD | DIV)
ARC_CPU_TYPE_A32x (hs5x, CD | DIV)
ARC_CPU_TYPE_A64x (hs68, CD | DIV)
ARC_CPU_TYPE_A32x (hs58, CD | DIV)
ARC_CPU_TYPE_AV2EM (arcem, 0x00),
ARC_CPU_TYPE_AV2EM (em, 0x00),
ARC_CPU_TYPE_AV2EM (em_mini, 0x00),
ARC_CPU_TYPE_AV2EM (em4, CD),
ARC_CPU_TYPE_AV2EM (em4_dmips, CD),
ARC_CPU_TYPE_AV2EM (em4_fpus, CD),
ARC_CPU_TYPE_AV2EM (em4_fpuda, CD | DPA),
ARC_CPU_TYPE_AV2EM (quarkse_em, CD | SPX | DPX),
ARC_CPU_TYPE_A7xx (arc700, 0x00)
ARC_CPU_TYPE_A7xx (nps400, NPS400)
ARC_CPU_TYPE_AV2HS (archs, CD),
ARC_CPU_TYPE_AV2HS (hs, CD),
ARC_CPU_TYPE_AV2HS (hs34, CD),
ARC_CPU_TYPE_AV2HS (hs38, CD),
ARC_CPU_TYPE_AV2HS (hs38_linux, CD),
ARC_CPU_TYPE_AV2HS (hs4x, CD),
ARC_CPU_TYPE_AV2HS (hs4xd, CD),
ARC_CPU_TYPE_AV2HS (hs4x_rel31, CD),
ARC_CPU_TYPE_AV2EM (arcem, 0x00)
ARC_CPU_TYPE_AV2EM (em, 0x00)
ARC_CPU_TYPE_AV2EM (em_mini, 0x00)
ARC_CPU_TYPE_AV2EM (em4, CD)
ARC_CPU_TYPE_AV2EM (em4_dmips, CD)
ARC_CPU_TYPE_AV2EM (em4_fpus, CD)
ARC_CPU_TYPE_AV2EM (em4_fpuda, CD | DPA)
ARC_CPU_TYPE_AV2EM (quarkse_em, CD | SPX | DPX)
ARC_CPU_TYPE_A6xx (arc600, 0x00),
ARC_CPU_TYPE_A6xx (arc600_norm, 0x00),
ARC_CPU_TYPE_A6xx (arc600_mul64, 0x00),
ARC_CPU_TYPE_A6xx (arc600_mul32x16, 0x00),
ARC_CPU_TYPE_A6xx (arc601, 0x00),
ARC_CPU_TYPE_A6xx (arc601_norm, 0x00),
ARC_CPU_TYPE_A6xx (arc601_mul64, 0x00),
ARC_CPU_TYPE_A6xx (arc601_mul32x16, 0x00),
ARC_CPU_TYPE_AV2HS (archs, CD)
ARC_CPU_TYPE_AV2HS (hs, CD)
ARC_CPU_TYPE_AV2HS (hs34, CD)
ARC_CPU_TYPE_AV2HS (hs38, CD)
ARC_CPU_TYPE_AV2HS (hs38_linux, CD)
ARC_CPU_TYPE_AV2HS (hs4x, CD)
ARC_CPU_TYPE_AV2HS (hs4xd, CD)
ARC_CPU_TYPE_AV2HS (hs4x_rel31, CD)
ARC_CPU_TYPE_A6xx (arc600, 0x00)
ARC_CPU_TYPE_A6xx (arc600_norm, 0x00)
ARC_CPU_TYPE_A6xx (arc600_mul64, 0x00)
ARC_CPU_TYPE_A6xx (arc600_mul32x16, 0x00)
ARC_CPU_TYPE_A6xx (arc601, 0x00)
ARC_CPU_TYPE_A6xx (arc601_norm, 0x00)
ARC_CPU_TYPE_A6xx (arc601_mul64, 0x00)
ARC_CPU_TYPE_A6xx (arc601_mul32x16, 0x00)
ARC_CPU_TYPE_NONE
+160 -11
View File
@@ -64,6 +64,13 @@ ARC_RELOC_HOWTO(ARC_32, 4, \
bitfield, \
( S + A ))
ARC_RELOC_HOWTO(ARC_64, 5, \
8, \
64, \
replace_word64, \
bitfield, \
( S + A ))
ARC_RELOC_HOWTO(ARC_N8, 8, \
1, \
8, \
@@ -201,14 +208,7 @@ ARC_RELOC_HOWTO(ARC_32_ME, 27, \
4, \
32, \
replace_limm, \
signed, \
( ME ( ( S + A ) ) ))
ARC_RELOC_HOWTO(ARC_32_ME_S, 105, \
4, \
32, \
replace_limms, \
signed, \
bitfield, \
( ME ( ( S + A ) ) ))
ARC_RELOC_HOWTO(ARC_N32_ME, 28, \
@@ -369,21 +369,21 @@ ARC_RELOC_HOWTO(ARC_GLOB_DAT, 54, \
4, \
32, \
replace_word32, \
signed, \
bitfield, \
S)
ARC_RELOC_HOWTO(ARC_JMP_SLOT, 55, \
4, \
32, \
replace_word32, \
signed, \
bitfield, \
( ME ( S ) ))
ARC_RELOC_HOWTO(ARC_RELATIVE, 56, \
4, \
32, \
replace_word32, \
signed, \
bitfield, \
( ME ( ( B + A ) ) ))
ARC_RELOC_HOWTO(ARC_GOTOFF, 57, \
@@ -511,3 +511,152 @@ ARC_RELOC_HOWTO(ARC_NPS_CMEM16, 78, \
replace_bits16, \
dont, \
( ME ( S + A )))
ARC_RELOC_HOWTO(ARC_S9H_PCREL, 79, \
4, \
8, \
replace_disp8ls, \
signed, \
( ME ( ( ( ( S + A ) - P ) >> 1 ) ) ) )
ARC_RELOC_HOWTO(ARC_S7H_PCREL, 80, \
2, \
6, \
replace_disp6s, \
signed, \
( ( ( ( S + A ) - P ) >> 1 ) ) )
ARC_RELOC_HOWTO(ARC_S8H_PCREL, 81, \
2, \
7, \
replace_disp7s, \
signed, \
( ( ( ( S + A ) - P ) >> 1 ) ) )
ARC_RELOC_HOWTO(ARC_S10H_PCREL, 82, \
2, \
9, \
replace_disp9s, \
signed, \
( ( ( ( S + A ) - P ) >> 1 ) ) )
ARC_RELOC_HOWTO(ARC_S13H_PCREL, 83, \
4, \
12, \
replace_disp12s, \
signed, \
( ME ( ( ( ( S + A ) - P ) >> 1 ) ) ) )
ARC_RELOC_HOWTO(ARC_ALIGN, 84, \
4, \
0, \
replace_none, \
dont, \
0 )
ARC_RELOC_HOWTO(ARC_ADD8, 85, \
1, \
8, \
replace_bits8, \
dont, \
( S + A ))
ARC_RELOC_HOWTO(ARC_ADD16, 86, \
2, \
16, \
replace_bits16, \
dont, \
( S + A ))
ARC_RELOC_HOWTO(ARC_SUB8, 87, \
1, \
8, \
replace_bits8, \
dont, \
( A - S + ICARRY ))
ARC_RELOC_HOWTO(ARC_SUB16, 88, \
2, \
16, \
replace_bits16, \
dont, \
( A - S + ICARRY ))
ARC_RELOC_HOWTO(ARC_SUB32, 89, \
4, \
32, \
replace_word32, \
dont, \
( A - S + ICARRY))
ARC_RELOC_HOWTO(ARC_LO32, 90, \
4, \
32, \
replace_word32, \
dont, \
( ( S + A ) & 4294967295 ))
ARC_RELOC_HOWTO(ARC_HI32, 91, \
4, \
32, \
replace_word32, \
dont, \
( ( S + A ) >> 32 ))
ARC_RELOC_HOWTO(ARC_LO32_ME, 92, \
4, \
32, \
replace_word32, \
dont, \
( ME ( ( ( S + A ) & 4294967295 ) ) ))
ARC_RELOC_HOWTO(ARC_HI32_ME, 93, \
4, \
32, \
replace_word32, \
dont, \
( ME ( ( ( S + A ) >> 32 ) ) ))
ARC_RELOC_HOWTO(ARC_N64, 94, \
4, \
32, \
replace_word32, \
dont, \
( DEREFP - ( S + A ) ))
ARC_RELOC_HOWTO(ARC_SDA_LDST3, 95, \
4, \
9, \
replace_disp9ls, \
signed, \
( ( ( S + A ) - _SDA_BASE_ ) >> 3 ))
ARC_RELOC_HOWTO(ARC_NLO32, 96, \
4, \
32, \
replace_word32, \
dont, \
( DEREFP - ( ( S + A ) & 4294967295 ) ))
ARC_RELOC_HOWTO(ARC_NLO32_ME, 97, \
4, \
32, \
replace_word32, \
dont, \
( ME ( ( DEREFP - ( ( S + A ) & 4294967295 ) ) ) ))
ARC_RELOC_HOWTO(ARC_PCLO32_ME_2, 98, \
4, \
34, \
replace_word32, \
signed, \
( ME ( ( ( ( S + A ) - P ) >> 2 ) & 0xFFFFFFFF ) ) )
ARC_RELOC_HOWTO(ARC_PLT34, 99, \
4, \
34, \
replace_word32, \
signed, \
( ME ( ( ( ( L + A ) - P ) >> 2 ) & 0xFFFFFFFF ) ) )
+1
View File
@@ -50,6 +50,7 @@ END_RELOC_NUMBERS (R_ARC_max)
#define E_ARC_MACH_ARC700 0x00000003
#define EF_ARC_CPU_ARCV2EM 0x00000005
#define EF_ARC_CPU_ARCV2HS 0x00000006
#define EF_ARC_CPU_ARC64 0x00000007
/* ARC Linux specific ABIs. */
#define E_ARC_OSABI_ORIG 0x00000000 /* MUST be 0 for back-compat. */