From 0f6fdfcda891b86c104b0ee70c3145f834999607 Mon Sep 17 00:00:00 2001 From: jsg Date: Sat, 13 Jun 2015 09:37:13 +0000 Subject: [PATCH] Add more encodings of options for the armv7 barrier instructions and allow non "sy"/0xf options for dmb. This omits the *ld options available in armv8 running in a32 mode. Similiar changes made in freebsd. ok miod@ --- gnu/usr.bin/binutils-2.17/gas/config/tc-arm.c | 16 +++++++++++---- gnu/usr.bin/binutils-2.17/opcodes/arm-dis.c | 20 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/gnu/usr.bin/binutils-2.17/gas/config/tc-arm.c b/gnu/usr.bin/binutils-2.17/gas/config/tc-arm.c index 912fca0e29d..698ef778326 100644 --- a/gnu/usr.bin/binutils-2.17/gas/config/tc-arm.c +++ b/gnu/usr.bin/binutils-2.17/gas/config/tc-arm.c @@ -4661,6 +4661,7 @@ do_barrier (void) if (inst.operands[0].present) { constraint ((inst.instruction & 0xf0) != 0x40 + && (inst.instruction & 0xf0) != 0x50 && inst.operands[0].imm != 0xf, "bad barrier type"); inst.instruction |= inst.operands[0].imm; @@ -6555,6 +6556,7 @@ do_t_barrier (void) if (inst.operands[0].present) { constraint ((inst.instruction & 0xf0) != 0x40 + && (inst.instruction & 0xf0) != 0x50 && inst.operands[0].imm != 0xf, "bad barrier type"); inst.instruction |= inst.operands[0].imm; @@ -8826,10 +8828,16 @@ static const struct asm_cond conds[] = static struct asm_barrier_opt barrier_opt_names[] = { - { "sy", 0xf }, - { "un", 0x7 }, - { "st", 0xe }, - { "unst", 0x6 } + { "oshst", 0x2 }, + { "osh", 0x3 }, + { "nshst", 0x6 }, + { "unst", 0x6 }, + { "nsh", 0x7 }, + { "un", 0x7 }, + { "ishst", 0xa }, + { "ish", 0xb }, + { "st", 0xe }, + { "sy", 0xf } }; /* Table of ARM-format instructions. */ diff --git a/gnu/usr.bin/binutils-2.17/opcodes/arm-dis.c b/gnu/usr.bin/binutils-2.17/opcodes/arm-dis.c index bc5b52cf9c0..25d307f72b6 100644 --- a/gnu/usr.bin/binutils-2.17/opcodes/arm-dis.c +++ b/gnu/usr.bin/binutils-2.17/opcodes/arm-dis.c @@ -1951,10 +1951,14 @@ print_insn_arm (bfd_vma pc, struct disassemble_info *info, long given) case 'U': switch (given & 0xf) { - case 0xf: func(stream, "sy"); break; - case 0x7: func(stream, "un"); break; + case 0x2: func(stream, "oshst"); break; + case 0x3: func(stream, "osh"); break; + case 0x6: func(stream, "nshst"); break; + case 0x7: func(stream, "nsh"); break; + case 0xa: func(stream, "ishst"); break; + case 0xb: func(stream, "ish"); break; case 0xe: func(stream, "st"); break; - case 0x6: func(stream, "unst"); break; + case 0xf: func(stream, "sy"); break; default: func(stream, "#%d", (int)given & 0xf); break; @@ -2713,10 +2717,14 @@ print_insn_thumb32 (bfd_vma pc, struct disassemble_info *info, long given) case 'U': switch (given & 0xf) { - case 0xf: func(stream, "sy"); break; - case 0x7: func(stream, "un"); break; + case 0x2: func(stream, "oshst"); break; + case 0x3: func(stream, "osh"); break; + case 0x6: func(stream, "nshst"); break; + case 0x7: func(stream, "nsh"); break; + case 0xa: func(stream, "ishst"); break; + case 0xb: func(stream, "ish"); break; case 0xe: func(stream, "st"); break; - case 0x6: func(stream, "unst"); break; + case 0xf: func(stream, "sy"); break; default: func(stream, "#%d", (int)given & 0xf); break; -- 2.20.1