aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-arm.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r--gas/config/tc-arm.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index becaecd..a1bf33a 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -19233,13 +19233,22 @@ do_neon_cvttb_1 (bool t)
return;
}
+ unsigned op0 = inst.operands[0].reg;
+ unsigned op1 = inst.operands[1].reg;
+ /* NS_QQ so both registers are quads but inst.operands has their
+ D-register values, so halve before encoding. */
+ if (rs == NS_QQ)
+ {
+ op0 >>= 1;
+ op1 >>= 1;
+ }
inst.instruction = 0xee3f0e01;
inst.instruction |= single_to_half << 28;
- inst.instruction |= HI1 (inst.operands[0].reg) << 22;
- inst.instruction |= LOW4 (inst.operands[0].reg) << 13;
+ inst.instruction |= HI1 (op0) << 22;
+ inst.instruction |= LOW4 (op0) << 13;
inst.instruction |= t << 12;
- inst.instruction |= HI1 (inst.operands[1].reg) << 5;
- inst.instruction |= LOW4 (inst.operands[1].reg) << 1;
+ inst.instruction |= HI1 (op1) << 5;
+ inst.instruction |= LOW4 (op1) << 1;
inst.is_neon = 1;
}
else if (neon_check_type (2, rs, N_F16, N_F32 | N_VFP).type != NT_invtype)
@@ -30332,7 +30341,7 @@ md_begin (void)
*/
-const char * md_shortopts = "m:k";
+const char md_shortopts[] = "m:k";
#ifdef ARM_BI_ENDIAN
#define OPTION_EB (OPTION_MD_BASE + 0)
@@ -30347,7 +30356,7 @@ const char * md_shortopts = "m:k";
#define OPTION_FIX_V4BX (OPTION_MD_BASE + 2)
#define OPTION_FDPIC (OPTION_MD_BASE + 3)
-struct option md_longopts[] =
+const struct option md_longopts[] =
{
#ifdef OPTION_EB
{"EB", no_argument, NULL, OPTION_EB},
@@ -30362,7 +30371,7 @@ struct option md_longopts[] =
{NULL, no_argument, NULL, 0}
};
-size_t md_longopts_size = sizeof (md_longopts);
+const size_t md_longopts_size = sizeof (md_longopts);
struct arm_option_table
{