forked from Imagelibrary/binutils-gdb
Add assembler support for ARMv8-M Baseline
2015-12-24 Thomas Preud'homme <thomas.preudhomme@arm.com> bfd/ (tag_cpu_arch_combine): Adjust comment in v4t_plus_v6_m with regards to merging with ARMv8-M Baseline. binutils/ * readelf.c (arm_attr_tag_CPU_arch): Add ARMv8-M Baseline Tag_CPU_arch value. gas/ * config/tc-arm.c (arm_ext_v6t2_v8m): New feature for instructions shared between ARMv6T2 and ARMv8-M. (move_or_literal_pool): Check mov.w/mvn and movw availability against arm_ext_v6t2 and arm_ext_v6t2_v8m respectively instead of checking arm_arch_t2. (do_t_branch): Error out for wide conditional branch instructions if targetting ARMv8-M Baseline. (non_v6t2_wide_only_insn): Add the logic for new wide-only instructions in ARMv8-M Baseline. (wide_insn_ok): New function. (md_assemble): Use wide_insn_ok instead of non_v6t2_wide_only_insn and adapt error message for unsupported wide instruction to ARMv8-M Baseline. (insns): Reorganize instructions shared by ARMv8-M Baseline and ARMv6t2 architecture. (arm_cpus): Set feature bit ARM_EXT2_V6T2_V8M for marvell-pj4 and marvell-whitney cores. (arm_archs): Define armv8-m.base architecture. (cpu_arch_ver): Define ARM_ARCH_V8M_BASE architecture version. (aeabi_set_public_attributes): Add logic to set Tag_CPU_arch to 17 for ARMv8-M Mainline. Set Tag_DIV_use for ARMv8-M Baseline as well. gas/testsuite/ * gas/arm/archv8m-base.d: New file. * gas/arm/attr-march-armv8m.base.d: Likewise. * gas/arm/armv8m.base-idiv.d: Likewise. * gas/arm/any-armv8m.d: Adapt to deal with ARMv8-M Baseline. include/elf/ * arm.h (TAG_CPU_ARCH_V8M_BASE): Declare. include/opcode/ * arm.h (ARM_EXT2_V6T2_V8M): New extension bit. (ARM_AEXT2_V8A): New architecture extension bitfield. (ARM_AEXT2_V8_1A): Use ARM_AEXT2_V8A instead of ARM_EXT2_ATOMICS. (ARM_AEXT_V8M_BASE): New architecture extension bitfield. (ARM_AEXT2_V8M): Add extension bit ARM_EXT2_V6T2_V8M. (ARM_ARCH_V6T2): Use ARM_EXT2_V6T2_V8M for the second extension bitfield. (ARM_ARCH_V6KT2): Likewise. (ARM_ARCH_V6ZT2): Likewise. (ARM_ARCH_V6KZT2): Likewise. (ARM_ARCH_V7): Likewise. (ARM_ARCH_V7A): Likewise. (ARM_ARCH_V7VE): Likewise. (ARM_ARCH_V7R): Likewise. (ARM_ARCH_V7M): Likewise. (ARM_ARCH_V7EM): Likewise. (ARM_ARCH_V8A): Likewise. (ARM_ARCH_V8M_BASE): New architecture bitfield. (ARM_ARCH_THUMB2): Include instructions shared by ARMv6t2 and ARMv8-M. (ARM_ARCH_V7A_SEC): Use ARM_EXT2_V6T2_V8M for the second extension bitfield and reindent. (ARM_ARCH_V7A_MP_SEC): Likewise. (ARM_ARCH_V7R_IDIV): Likewise. (ARM_ARCH_V8A_FP): Use ARM_AEXT2_V8A instead of ARM_EXT2_ATOMICS. (ARM_ARCH_V8A_SIMD): Likewise. (ARM_ARCH_V8A_CRYPTOV1): Likewise. opcodes/ * arm-dis.c (arm_opcodes): Guard movw, movt cbz, cbnz, clrex, ldrex, ldrexb, ldrexh, strex, strexb, strexh shared by ARMv6T2 and ARMv8-M by ARM_EXT2_V6T2_V8M instead of ARM_EXT_V6T2.
This commit is contained in:
@@ -1666,9 +1666,9 @@ static const struct opcode32 arm_opcodes[] =
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0x00300090, 0x0f300090, "ldr%6's%5?hbt%c\t%12-15R, %S"},
|
||||
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0x03000000, 0x0ff00000, "movw%c\t%12-15R, %V"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0x03400000, 0x0ff00000, "movt%c\t%12-15R, %V"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0x06ff0f30, 0x0fff0ff0, "rbit%c\t%12-15R, %0-3R"},
|
||||
@@ -2335,8 +2335,10 @@ static const struct opcode16 thumb_opcodes[] =
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf00, 0xff0f, "nop%c\t{%4-7d}"},
|
||||
|
||||
/* ARM V6T2 instructions. */
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xb900, 0xfd00, "cbnz\t%0-2r, %b%X"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xb100, 0xfd00, "cbz\t%0-2r, %b%X"},
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xb900, 0xfd00, "cbnz\t%0-2r, %b%X"},
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xb100, 0xfd00, "cbz\t%0-2r, %b%X"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xbf00, 0xff00, "it%I%X"},
|
||||
|
||||
/* ARM V6. */
|
||||
@@ -2611,7 +2613,7 @@ static const struct opcode32 thumb32_opcodes[] =
|
||||
0xf3af8000, 0xffffff00, "nop%c.w\t{%0-7d}"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2), 0xf7f0a000, 0xfff0f000, "udf%c.w\t%H"},
|
||||
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xf3bf8f2f, 0xffffffff, "clrex%c"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xf3af8400, 0xffffff1f, "cpsie.w\t%7'a%6'i%5'f%X"},
|
||||
@@ -2639,9 +2641,9 @@ static const struct opcode32 thumb32_opcodes[] =
|
||||
0xf3de8f00, 0xffffff00, "subs%c\tpc, lr, #%0-7d"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xf3808000, 0xffe0f000, "msr%c\t%C, %16-19r"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xe8500f00, 0xfff00fff, "ldrex%c\t%12-15r, [%16-19r]"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xe8d00f4f, 0xfff00fef, "ldrex%4?hb%c\t%12-15r, [%16-19r]"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xe800c000, 0xffd0ffe0, "srsdb%c\t%16-19r%21'!, #%0-4d"},
|
||||
@@ -2659,7 +2661,7 @@ static const struct opcode32 thumb32_opcodes[] =
|
||||
0xfa4ff080, 0xfffff0c0, "sxtb%c.w\t%8-11r, %0-3r%R"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xfa5ff080, 0xfffff0c0, "uxtb%c.w\t%8-11r, %0-3r%R"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xe8400000, 0xfff000ff, "strex%c\t%8-11r, %12-15r, [%16-19r]"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xe8d0007f, 0xfff000ff, "ldrexd%c\t%12-15r, %8-11r, [%16-19r]"},
|
||||
@@ -2767,7 +2769,7 @@ static const struct opcode32 thumb32_opcodes[] =
|
||||
0xfa40f000, 0xffe0f0f0, "asr%20's%c.w\t%8-11R, %16-19R, %0-3R"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xfa60f000, 0xffe0f0f0, "ror%20's%c.w\t%8-11r, %16-19r, %0-3r"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xe8c00f40, 0xfff00fe0, "strex%4?hb%c\t%0-3r, %12-15r, [%16-19r]"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xf3200000, 0xfff0f0e0, "ssat16%c\t%8-11r, #%0-4D, %16-19r"},
|
||||
@@ -2835,7 +2837,7 @@ static const struct opcode32 thumb32_opcodes[] =
|
||||
0xfbe00000, 0xfff000f0, "umlal%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xfbe00060, 0xfff000f0, "umaal%c\t%12-15R, %8-11R, %16-19R, %0-3R"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xe8500f00, 0xfff00f00, "ldrex%c\t%12-15r, [%16-19r, #%0-7W]"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xf04f0000, 0xfbef8000, "mov%20's%c.w\t%8-11r, %M"},
|
||||
@@ -2883,11 +2885,11 @@ static const struct opcode32 thumb32_opcodes[] =
|
||||
0xf3800000, 0xffd08020, "usat%c\t%8-11r, #%0-4d, %16-19r%s"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xf2000000, 0xfbf08000, "addw%c\t%8-11r, %16-19r, %I"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xf2400000, 0xfbf08000, "movw%c\t%8-11r, %J"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xf2a00000, 0xfbf08000, "subw%c\t%8-11r, %16-19r, %I"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xf2c00000, 0xfbf08000, "movt%c\t%8-11r, %J"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xea000000, 0xffe08000, "and%20's%c.w\t%8-11r, %16-19r, %S"},
|
||||
@@ -2909,7 +2911,7 @@ static const struct opcode32 thumb32_opcodes[] =
|
||||
0xeba00000, 0xffe08000, "sub%20's%c.w\t%8-11r, %16-19r, %S"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xebc00000, 0xffe08000, "rsb%20's%c\t%8-11r, %16-19r, %S"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V6T2_V8M),
|
||||
0xe8400000, 0xfff00000, "strex%c\t%8-11r, %12-15r, [%16-19r, #%0-7W]"},
|
||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6T2),
|
||||
0xf0000000, 0xfbe08000, "and%20's%c.w\t%8-11r, %16-19r, %M"},
|
||||
|
||||
Reference in New Issue
Block a user