diff options
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r-- | gas/config/tc-arm.c | 23 |
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 { |