summaryrefslogtreecommitdiffstats
path: root/ChangeLog.csl
diff options
context:
space:
mode:
Diffstat (limited to 'ChangeLog.csl')
-rw-r--r--ChangeLog.csl205
1 files changed, 205 insertions, 0 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index 75d7adb9c..5ac69a867 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -1,3 +1,208 @@
+2005-04-03 Julian Brown <julian@codesourcery.com>
+ Nathan Sidwell <nathan@codesourcery.com>
+
+ * binutils/readelf.c (arm_attr_tag_VFP_arch): Add VFPv3.
+
+ * gas/config/tc-arm.c (limits.h): Include.
+ (fpu_arch_vfp_v3, fpu_vfp_ext_v3, fpu_neon_ext_v1)
+ (fpu_vfp_v3_or_neon_ext): Declare constants.
+ (neon_el_type): New enumeration of types for Neon vector elements.
+ (neon_type_el): New struct. Define type and size of a vector element.
+ (NEON_MAX_TYPE_ELS): Define constant. The maximum number of types per
+ instruction.
+ (neon_type): Define struct. The type of an instruction.
+ (arm_it): Add 'vectype' for the current instruction.
+ (isscalar, immisalign, regisimm, isquad): New predicates for operands.
+ (vfp_sp_reg_pos): Rename to...
+ (vfp_reg_pos): ...this, and add VFP_REG_Dd, VFP_REG_Dm, VFP_REG_Dn
+ tags.
+ (arm_reg_type): Add REG_TYPE_NQ (Neon Q register) and REG_TYPE_NDQ
+ (Neon D or Q register).
+ (reg_expected_msgs): Sync with above. Allow VFD to mean VFP or Neon
+ D register.
+ (GE_OPT_PREFIX_BIG): Define constant, for use in...
+ (my_get_expression): Allow above constant as argument to accept
+ 64-bit constants with optional prefix.
+ (arm_reg_parse): Add extra argument to return the specific type of
+ register in when either a D or Q register (REG_TYPE_NDQ) is requested.
+ Can be NULL.
+ (parse_scalar): New function. Parse Neon scalar (vector reg and index).
+ (parse_reg_list): Update for new arm_reg_parse args.
+ (parse_vfp_reg_list): Allow parsing of Neon D/Q register lists.
+ (parse_neon_el_struct_list): New function. Parse element/structure
+ register lists for VLD<n>/VST<n> instructions.
+ (s_arm_unwind_save_vfp): Update for new parse_vfp_reg_list args.
+ (s_arm_unwind_save_mmxwr): Likewise.
+ (s_arm_unwind_save_mmxwcg): Likewise.
+ (s_arm_unwind_movsp): Likewise.
+ (s_arm_unwind_setfp): Likewise.
+ (parse_big_immediate): New function. Parse an immediate, which may
+ be 64 bits wide. Put results in inst.operands[i].
+ (parse_shift): Update for new arm_reg_parse args.
+ (parse_address): Likewise. Add parsing of alignment specifiers.
+ (parse_neon_mov): Parse the operands of a VMOV instruction.
+ (operand_parse_code): Add OP_RND, OP_RNQ, OP_RNDQ, OP_RNSC,
+ OP_NRDLST, OP_NSTRLST, OP_NILO, OP_RNDQ_I0, OP_RR_RNSC,
+ OP_RNDQ_RNSC, OP_RND_RNSC, OP_VMOV, OP_RNDQ_IMVNb, OP_RNDQ_I63b,
+ OP_I0, OP_I16z, OP_I32z, OP_I64, OP_I64z, OP_oI32b, OP_oRND,
+ OP_oRNQ, OP_oRNDQ.
+ (parse_operands): Handle new codes above.
+ (encode_arm_vfp_sp_reg): Rename to...
+ (encode_arm_vfp_reg): ...this. Handle D regs (0-31) too. Complain if
+ selected VFP version only supports D0-D15.
+ (do_vfp_sp_monadic, do_vfp_sp_dyadic, do_vfp_sp_compare_z)
+ (do_vfp_dp_sp_cvt, do_vfp_reg_from_sp, do_vfp_reg2_from_sp2)
+ (do_vfp_sp_from_reg, do_vfp_sp2_from_reg2, do_vfp_sp_ldst)
+ (do_vfp_dp_ldst, vfp_sp_ldstm, vfp_dp_ldstm): Update for new
+ encode_arm_vfp_reg name, and allow 32 D regs.
+ (do_vfp_dp_rd_rm, do_vfp_dp_rn_rd, do_vfp_dp_rd_rn)
+ (do_vfp_dp_rd_rn_rm, do_vfp_rm_rd_rn): New functions to encode VFP
+ insns allowing 32 D regs.
+ (do_vfp_sp_const, do_vfp_dp_const, vfp_conv, do_vfp_sp_conv_16)
+ (do_vfp_dp_conv_16, do_vfp_sp_conv_32, do_vfp_dp_conv_32): Handle
+ constant-load and conversion insns introduced with VFPv3.
+ (neon_tab_entry): New struct.
+ (NEON_ENC_TAB): Bit patterns for overloaded Neon instructions, and
+ those which are the targets of pseudo-instructions.
+ (neon_opc): Enumerate opcodes, use as indices into...
+ (neon_enc_tab): ...this. Hold data from NEON_ENC_TAB.
+ (NEON_ENC_INTEGER, NEON_ENC_ARMREG, NEON_ENC_POLY, NEON_ENC_FLOAT)
+ (NEON_ENC_SCALAR, NEON_ENC_IMMED, NEON_ENC_INTERLV, NEON_ENC_LANE)
+ (NEON_ENC_DUP): Define meaningful helper macros to look up values in
+ neon_enc_tab.
+ (neon_shape): Enumerate shapes (permitted register widths, etc.) for
+ Neon instructions.
+ (neon_type_mask): New. Compact type representation for type
+ checking.
+ (N_SU_ALL, N_SU_32, N_SU_16_64, N_SUF_32, N_I_ALL, N_IF_32): Common
+ permitted type combinations.
+ (N_IGNORE_TYPE): New macro.
+ (neon_check_shape): New function. Check an instruction shape for
+ multiple alternatives. Return the specific shape for the current
+ instruction.
+ (neon_modify_type_size): New function. Modify a vector type and
+ size, depending on the bit mask in argument 1.
+ (neon_type_promote): New function. Convert a given "key" type (of an
+ operand) into the correct type for a different operand, based on a bit
+ mask.
+ (type_chk_of_el_type): New function. Convert a type and size into the
+ compact representation used for type checking.
+ (el_type_of_type_ckh): New function. Reverse of above (only when a
+ single bit is set in the bit mask).
+ (modify_types_allowed): New function. Alter a mask of allowed types
+ based on a bit mask of modifications.
+ (neon_check_type): New function. Check the type of the current
+ instruction against the variable argument list. The "key" type of the
+ instruction is returned.
+ (neon_dp_fixup): New function. Fill in and modify instruction bits for
+ a Neon data-processing instruction depending on whether we're in ARM
+ mode or Thumb-2 mode.
+ (neon_logbits): New function.
+ (neon_three_same, neon_two_same, do_neon_dyadic_i_su)
+ (do_neon_dyadic_i64_su, neon_imm_shift, do_neon_shl_imm)
+ (do_neon_qshl_imm, neon_cmode_for_logic_imm)
+ (neon_bits_same_in_bytes, neon_squash_bits, neon_is_quarter_float)
+ (neon_qfloat_bits, neon_cmode_for_move_imm, neon_write_immbits)
+ (neon_invert_size, do_neon_logic, do_neon_bitfield, neon_dyadic)
+ (do_neon_dyadic_if_su, do_neon_dyadic_if_su_d, do_neon_dyadic_if_i)
+ (do_neon_dyadic_if_i_d, do_neon_addsub_if_i, neon_exchange_operands)
+ (neon_compare, do_neon_cmp, do_neon_cmp_inv, do_neon_ceq)
+ (neon_scalar_for_mul, neon_mul_mac, do_neon_mac_maybe_scalar)
+ (do_neon_tst, do_neon_mul, do_neon_qdmulh, do_neon_fcmp_absolute)
+ (do_neon_fcmp_absolute_inv, do_neon_step, do_neon_abs_neg)
+ (do_neon_sli, do_neon_sri, do_neon_qshlu_imm, do_neon_qmovn)
+ (do_neon_qmovun, do_neon_rshift_sat_narrow)
+ (do_neon_rshift_sat_narrow_u, do_neon_movn, do_neon_rshift_narrow)
+ (do_neon_shll, neon_cvt_flavour, do_neon_cvt, neon_move_immediate)
+ (do_neon_mvn, neon_mixed_length, do_neon_dyadic_long, do_neon_abal)
+ (neon_mac_reg_scalar_long, do_neon_mac_maybe_scalar_long)
+ (do_neon_dyadic_wide, do_neon_vmull, do_neon_ext, do_neon_rev)
+ (do_neon_dup, do_neon_mov, do_neon_rshift_round_imm, do_neon_movl)
+ (do_neon_trn, do_neon_zip_uzp, do_neon_sat_abs_neg)
+ (do_neon_pair_long, do_neon_recip_est, do_neon_cls, do_neon_clz)
+ (do_neon_cnt, do_neon_swp, do_neon_tbl_tbx, do_neon_ldm_stm)
+ (do_neon_ldr_str, do_neon_ld_st_interleave, neon_alignment_bit)
+ (do_neon_ld_st_lane, do_neon_ld_dup, do_neon_ldx_stx): New
+ functions. Neon bit encoding and encoding helpers.
+ (parse_neon_type): New function. Parse Neon type specifier.
+ (opcode_lookup): Allow parsing of Neon type specifiers.
+ (REGNUM2, REGSETH, REGSET2): New macros.
+ (reg_names): Add new VFPv3 and Neon registers.
+ (NUF, nUF, NCE, nCE): New macros for opcode table.
+ (insns): More VFP registers allowed in fcpyd, fmdhr, fmdlr, fmrdh,
+ fmrdl, fabsd, fnegd, fsqrtd, faddd, fsubd, fmuld, fdivd, fmacd,
+ fmscd, fnmuld, fnmacd, fnmscd, fcmpd, fcmpzd, fcmped, fcmpezd,
+ fmdrr, fmrrd. Add Neon instructions vaba, vhadd, vrhadd, vhsub,
+ vqadd, vqsub, vrshl, vqrshl, vshl, vqshl{u}, vand, vbic, vorr, vorn,
+ veor, vbsl, vbit, vbif, vabd, vmax, vmin, vcge, vcgt, vclt, vcle,
+ vceq, vpmax, vpmin, vmla, vmls, vpadd, vadd, vsub, vtst, vmul,
+ vqdmulh, vqrdmulh, vacge, vacgt, vaclt, vacle, vrecps, vrsqrts,
+ vabs, vneg, v{r}shr, v{r}sra, vsli, vsri, vqshrn, vq{r}shr{u}n,
+ v{r}shrn, vshll, vcvt, vmov, vmvn, vabal, vabdl, vaddl, vsubl,
+ vmlal, vmlsl, vaddw, vsubw, v{r}addhn, v{r}subhn, vqdmlal, vqdmlsl,
+ vqdmull, vmull, vext, vrev64, vrev32, vrev16, vdup, vmovl, v{q}movn,
+ vzip, vuzp, vqabs, vqneg, vpadal, vpaddl, vrecpe, vrsqrte, vcls,
+ vclz, vcnt, vswp, vtrn, vtbl, vtbx, vldm, vstm, vldr, vstr,
+ vld[1234], vst[1234], fconst[sd], f[us][lh]to[sd], fto[us][lh][sd].
+ (tc_arm_regname_to_dw2regnum): Update for arm_reg_parse args.
+ (arm_cpu_option_table): Add Neon and VFPv3 to Cortex-A8.
+ (arm_option_cpu_value): Add vfp3 and neon.
+ (aeabi_set_public_attributes): Support VFPv3 and NEON attributes.
+ Fix VFPv1 attribute.
+
+ * gas/testsuite/gas/arm/copro.s: Avoid ldcl which encodes as a bad Neon
+ instruction.
+ * gas/testsuite/gas/arm/copro.d: Update accordingly.
+ * gas/testsuite/gas/arm/neon-cond.s: New test. Conditional Neon opcodes
+ in ARM mode.
+ * gas/testsuite/gas/arm/neon-cond.d: Expected results of above.
+ * gas/testsuite/gas/arm/neon-cov.s: New test. Coverage of Neon
+ instructions.
+ * gas/testsuite/gas/arm/neon-cov.d: Expected results of above.
+ * gas/testsuite/gas/arm/neon-ldst-es.s: New test. Element and structure
+ loads and stores.
+ * gas/testsuite/gas/arm/neon-ldst-es.d: Expected results of above.
+ * gas/testsuite/gas/arm/neon-ldst-rm.s: New test. Single and multiple
+ register loads and stores.
+ * gas/testsuite/gas/arm/neon-ldst-rm.d: Expected results of above.
+ * gas/testsuite/gas/arm/neon-omit.s: New test. Omission of optional
+ operands.
+ * gas/testsuite/gas/arm/neon-omit.d: Expected results of above.
+ * gas/testsuite/gas/arm/vfp1.d: Expect Neon syntax for some VFP
+ instructions.
+ * gas/testsuite/gas/arm/vfp1_t2.d: Likewise.
+ * gas/testsuite/gas/arm/vfp1xD.d: Likewise.
+ * gas/testsuite/gas/arm/vfp1xD_t2.d: Likewise.
+ * gas/testsuite/gas/arm/vfp2.d: Likewise.
+ * gas/testsuite/gas/arm/vfp2_t2.d: Likewise.
+ * gas/testsuite/gas/arm/vfp3-32drs.s: New test. Extended D register
+ range for VFP instructions.
+ * gas/testsuite/gas/arm/vfp3-32drs.d: Expected results of above.
+ * gas/testsuite/gas/arm/vfp3-const-conv.s: New test. VFPv3
+ constant-load and conversion instructions.
+ * gas/testsuite/gas/arm/vfp3-const-conv.d: Expected results of above.
+
+ * include/opcode/arm.h (FPU_VFP_EXT_V3): Define constant.
+ (FPU_NEON_EXT_V1): Likewise.
+ (FPU_VFP_HARD): Update.
+ (FPU_VFP_V3): Define macro.
+ (FPU_ARCH_VFP_V3, FPU_ARCH_VFP_V3_PLUS_NEON_V1): Define macros.
+
+ * opcodes/arm-dis.c (coprocessor_opcodes): Add %A, %B, %k,
+ convert %<code>[zy] into %[zy]<code>. Expand meaning of
+ %<bitfield>['`?].
+ Add unified load/store instruction names.
+ (neon_opcode_table): New.
+ (arm_opcodes): Expand meaning of %<bitfield>['`?].
+ (arm_decode_bitfield): New.
+ (print_insn_coprocessor): Add pc argument. Add %A & %B specifiers.
+ Use arm_decode_bitfield and adjust numeric specifiers.
+ Adjust %z & %y.
+ (print_insn_neon): New.
+ (print_insn_arm): Adjust print_insn_coprocessor call. Call
+ print_insn_neon. Use arm_decode_bitfield and adjust numeric specifiers.
+ (print_insn_thumb32): Likewise.
+
2005-04-01 Paul Brook <paul@codesourcery.com>
* config/tc-arm.c (arm_fix_adjustable): Return 0 for function symbols.