diff options
author | pfg <pfg@FreeBSD.org> | 2016-06-10 21:47:37 +0000 |
---|---|---|
committer | pfg <pfg@FreeBSD.org> | 2016-06-10 21:47:37 +0000 |
commit | c430f449a0c53d34e550131700a604cc50f3292b (patch) | |
tree | 6662d7f475899c43c395daaf3e5e4ea0566557e1 /contrib/binutils/gas | |
parent | e09a8f24a979e454edf3a803e7e02987eb72cb53 (diff) | |
download | FreeBSD-src-c430f449a0c53d34e550131700a604cc50f3292b.zip FreeBSD-src-c430f449a0c53d34e550131700a604cc50f3292b.tar.gz |
MFC r300333:
gas: Implement the .inst assembler directive for arm.
We normally use the binutils from ports but on other systems this
is required for building gcc 4.9.
Obtained from: OpenBSD (CVS rev. 1.5)
Diffstat (limited to 'contrib/binutils/gas')
-rw-r--r-- | contrib/binutils/gas/config/tc-arm.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/contrib/binutils/gas/config/tc-arm.c b/contrib/binutils/gas/config/tc-arm.c index d838047..a20ddad 100644 --- a/contrib/binutils/gas/config/tc-arm.c +++ b/contrib/binutils/gas/config/tc-arm.c @@ -2284,6 +2284,37 @@ s_unreq (int a ATTRIBUTE_UNUSED) demand_empty_rest_of_line (); } +static void +s_inst(int unused ATTRIBUTE_UNUSED) +{ + expressionS exp; + + if (thumb_mode) { + as_bad(".inst not implemented for Thumb mode"); + ignore_rest_of_line(); + return; + } + + if (is_it_end_of_statement()) { + demand_empty_rest_of_line(); + return; + } + + do { + expression(&exp); + + if (exp.X_op != O_constant) + as_bad("constant expression required"); + else + emit_expr(&exp, 4); + + } while (*input_line_pointer++ == ','); + + /* Put terminator back into stream. */ + input_line_pointer--; + demand_empty_rest_of_line(); +} + /* Directives: Instruction set selection. */ #ifdef OBJ_ELF @@ -3895,6 +3926,7 @@ const pseudo_typeS md_pseudo_table[] = { "object_arch", s_arm_object_arch, 0 }, { "fpu", s_arm_fpu, 0 }, { "arch_extension", s_arm_arch_extension, 0 }, + { "inst", s_inst, 0 }, #ifdef OBJ_ELF { "word", s_arm_elf_cons, 4 }, { "long", s_arm_elf_cons, 4 }, |