[patch] Armv7

Paul Brook paul@codesourcery.com
Thu Feb 23 21:05:00 GMT 2006


The attached patch implements Armv7 binutils support. There are three 
different "profiles" in armv7: v7A, v7R and v7M. The A and R profiles are 
basically armv6T2 plus a handful of extra instructions.
The v7M profile removes the traditional Arm state (leaving only Thumb-2), and 
also removes some of the v5te and v6 instructions.

I'm not entirely sure what "-march=armv7" should mean. I can think of 2 
options:

a) Accept the common subset of the 3 profiles. For Thumb code this is fine. 
Unfortunately this definition also means all Arm state code is rejected by 
this switch, which seems less than ideal from a user POV.

b) Accept the common subset of Thumb instructions, as with (a), plus the 
common subset of A and R profile Arm state instructions. This is a bit harder 
to implement.

c) Accept the superset of all 3 profiles.

I've currently implemented (a), however I'm wondering if it's worth the effort 
to implement (b). I don't like (c) because it doesn't make sense for gcc. 
Having the same option with different semantics in gcc and gas seems a bad 
idea.

Any thoughts?

Tested with cross to arm-none-eabi.
Ok?

Paul

2006-02-23  Paul Brook  <paul@codesourcery.com>

gas/
	* config/arm/tc-arm.c (arm_ext_v6_notm, arm_ext_div, arm_ext_v7,
	arm_ext_v7a, arm_ext_v7r, arm_ext_v7m): New variables.
	(struct asm_barrier_opt): Define.
	(arm_v7m_psr_hsh, arm_barrier_opt_hsh): New variables.
	(parse_psr): Accept V7M psr names.
	(parse_barrier): New function.
	(enum operand_parse_code): Add OP_oBARRIER.
	(parse_operands): Implement OP_oBARRIER.
	(do_barrier): New function.
	(do_dbg, do_pli, do_t_barrier, do_t_dbg, do_t_div): New functions.
	(do_t_cpsi): Add V7M restrictions.
	(do_t_mrs, do_t_msr): Validate V7M variants.
	(md_assemble): Check for NULL variants.
	(v7m_psrs, barrier_opt_names): New tables.
	(insns): Add V7 instructions.  Mark V6 instructions absent from V7M.
	(md_begin): Initialize arm_v7m_psr_hsh and arm_barrier_opt_hsh.
	(arm_cpu_option_table): Add Cortex-M3, R4 and A8.
	(arm_arch_option_table): Add armv7, armv7a, armv7r and armv7m.
	(struct cpu_arch_ver_table): Define.
	(cpu_arch_ver): New.
	(aeabi_set_public_attributes): Use cpu_arch_ver.  Set
	Tag_CPU_arch_profile.
	* doc/c-arm.texi: Document new cpu and arch options.
gas/testsuite/
	* gas/arm/thumb32.d: Fix expected msr and mrs output.
	* gas/arm/arch7.d: New test.
	* gas/arm/arch7.s: New test.
	* gas/arm/arch7m-bad.l: New test.
	* gas/arm/arch7m-bad.d: New test.
	* gas/arm/arch7m-bad.s: New test.
include/opcode/
	* arm.h: Add V7 feature bits.
opcodes/
	* arm-dis.c (arm_opcodes): Add V7 instructions.
	(thumb32_opcodes): Ditto.  Handle V7M MSR/MRS variants.
	(print_arm_address): New function.
	(print_insn_arm): Use it.  Add 'P' and 'U' cases.
	(psr_name): New function.
	(print_insn_thumb32): Add 'U', 'C' and 'D' cases.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.gas_v7
Type: text/x-diff
Size: 42554 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20060223/a57e0322/attachment.bin>


More information about the Binutils mailing list