diff options
author | Paul Brook <paul@codesourcery.com> | 2006-09-05 14:07:22 +0000 |
---|---|---|
committer | Paul Brook <paul@codesourcery.com> | 2006-09-05 14:07:22 +0000 |
commit | 428e3f1f4e7539e2706c12f2f2880c42a7948a92 (patch) | |
tree | 6ccc35c2315d7141514d0071c7378d0ab29714ab /gas/config | |
parent | 91bb255c67ce378e25576a12e6b24929c45c92fc (diff) | |
download | gdb-428e3f1f4e7539e2706c12f2f2880c42a7948a92.zip gdb-428e3f1f4e7539e2706c12f2f2880c42a7948a92.tar.gz gdb-428e3f1f4e7539e2706c12f2f2880c42a7948a92.tar.bz2 |
2006-09-04 Paul Brook <paul@codesourcery.com>
gas/
* config/tc-arm.c (do_neon_dyadic_if_i): Remove.
(do_neon_dyadic_if_i_d): Avoid setting U bit.
(do_neon_mac_maybe_scalar): Ditto.
(do_neon_dyadic_narrow): Force operand type to NT_integer.
(insns): Remove out of date comments.
gas/testsuite/
* gas/arm/neon-cov.s: Test .u and .s aliases for .i suffixes.
* gas/arm/neon-cov.d: Adjust expected output.
opcodes/
* arm-dis.c (neon_opcode): Fix suffix on VMOVN.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-arm.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 63aa32e..06dba43 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -11618,15 +11618,11 @@ do_neon_dyadic_if_su_d (void) } static void -do_neon_dyadic_if_i (void) -{ - neon_dyadic_misc (NT_unsigned, N_IF_32, 0); -} - -static void do_neon_dyadic_if_i_d (void) { - neon_dyadic_misc (NT_unsigned, N_IF_32, 0); + /* The "untyped" case can't happen. Do this to stop the "U" bit being + affected if we specify unsigned args. */ + neon_dyadic_misc (NT_untyped, N_IF_32, 0); } enum vfp_or_neon_is_neon_bits @@ -11841,7 +11837,11 @@ do_neon_mac_maybe_scalar (void) neon_mul_mac (et, neon_quad (rs)); } else - do_neon_dyadic_if_i (); + { + /* The "untyped" case can't happen. Do this to stop the "U" bit being + affected if we specify unsigned args. */ + neon_dyadic_misc (NT_untyped, N_IF_32, 0); + } } static void @@ -12492,6 +12492,9 @@ do_neon_dyadic_narrow (void) { struct neon_type_el et = neon_check_type (3, NS_QDD, N_EQK | N_DBL, N_EQK, N_I16 | N_I32 | N_I64 | N_KEY); + /* Operand sign is unimportant, and the U bit is part of the opcode, + so force the operand type to integer. */ + et.type = NT_integer; neon_mixed_length (et, et.size / 2); } @@ -15533,14 +15536,13 @@ static const struct asm_opcode insns[] = nUF(vcltq, vclt, 3, (RNQ, oRNQ, RNDQ_I0), neon_cmp_inv), nUF(vcle, vcle, 3, (RNDQ, oRNDQ, RNDQ_I0), neon_cmp_inv), nUF(vcleq, vcle, 3, (RNQ, oRNQ, RNDQ_I0), neon_cmp_inv), - /* Comparison. Type I8 I16 I32 F32. Non-immediate -> neon_dyadic_if_i. */ + /* Comparison. Type I8 I16 I32 F32. */ nUF(vceq, vceq, 3, (RNDQ, oRNDQ, RNDQ_I0), neon_ceq), nUF(vceqq, vceq, 3, (RNQ, oRNQ, RNDQ_I0), neon_ceq), /* As above, D registers only. */ nUF(vpmax, vpmax, 3, (RND, oRND, RND), neon_dyadic_if_su_d), nUF(vpmin, vpmin, 3, (RND, oRND, RND), neon_dyadic_if_su_d), /* Int and float variants, signedness unimportant. */ - /* If not scalar, fall back to neon_dyadic_if_i. */ nUF(vmlaq, vmla, 3, (RNQ, oRNQ, RNDQ_RNSC), neon_mac_maybe_scalar), nUF(vmlsq, vmls, 3, (RNQ, oRNQ, RNDQ_RNSC), neon_mac_maybe_scalar), nUF(vpadd, vpadd, 3, (RND, oRND, RND), neon_dyadic_if_i_d), |