1e0971e sve

Authored and Committed by Richard Sandiford 7 years ago
      sve
    
    [AArch64] Additional SVE instructions
    
    This patch supports some additions to the SVE architecture prior to
    its public release.
    
    include/
    	* opcode/aarch64.h (AARCH64_OPND_SVE_ADDR_RI_S4x16)
    	(AARCH64_OPND_SVE_IMM_ROT1, AARCH64_OPND_SVE_IMM_ROT2)
    	(AARCH64_OPND_SVE_Zm3_INDEX, AARCH64_OPND_SVE_Zm3_22_INDEX)
    	(AARCH64_OPND_SVE_Zm4_INDEX): New aarch64_opnds.
    
    opcodes/
    	* aarch64-tbl.h (OP_SVE_HMH, OP_SVE_VMU_HSD, OP_SVE_VMVU_HSD)
    	(OP_SVE_VMVV_HSD, OP_SVE_VMVVU_HSD, OP_SVE_VM_HSD, OP_SVE_VUVV_HSD)
    	(OP_SVE_VUV_HSD, OP_SVE_VU_HSD, OP_SVE_VVVU_H, OP_SVE_VVVU_S)
    	(OP_SVE_VVVU_HSD, OP_SVE_VVV_D, OP_SVE_VVV_D_H, OP_SVE_VVV_H)
    	(OP_SVE_VVV_HSD, OP_SVE_VVV_S, OP_SVE_VVV_S_B, OP_SVE_VVV_SD_BH)
    	(OP_SVE_VV_BHSDQ, OP_SVE_VV_HSD, OP_SVE_VZVV_HSD, OP_SVE_VZV_HSD)
    	(OP_SVE_V_HSD): New macros.
    	(OP_SVE_VMU_SD, OP_SVE_VMVU_SD, OP_SVE_VM_SD, OP_SVE_VUVV_SD)
    	(OP_SVE_VU_SD, OP_SVE_VVVU_SD, OP_SVE_VVV_SD, OP_SVE_VZVV_SD)
    	(OP_SVE_VZV_SD, OP_SVE_V_SD): Delete.
    	(aarch64_opcode_table): Add new SVE instructions.
    	(aarch64_opcode_table): Use imm_rotate{1,2} instead of imm_rotate
    	for rotation operands.  Add new SVE operands.
    	* aarch64-asm.h (ins_sve_addr_ri_s4): New inserter.
    	(ins_sve_quad_index): Likewise.
    	(ins_imm_rotate): Split into...
    	(ins_imm_rotate1, ins_imm_rotate2): ...these two inserters.
    	* aarch64-asm.c (aarch64_ins_imm_rotate): Split into...
    	(aarch64_ins_imm_rotate1, aarch64_ins_imm_rotate2): ...these two
    	functions.
    	(aarch64_ins_sve_addr_ri_s4): New function.
    	(aarch64_ins_sve_quad_index): Likewise.
    	(do_misc_encoding): Handle "MOV Zn.Q, Qm".
    	* aarch64-asm-2.c: Regenerate.
    	* aarch64-dis.h (ext_sve_addr_ri_s4): New extractor.
    	(ext_sve_quad_index): Likewise.
    	(ext_imm_rotate): Split into...
    	(ext_imm_rotate1, ext_imm_rotate2): ...these two extractors.
    	* aarch64-dis.c (aarch64_ext_imm_rotate): Split into...
    	(aarch64_ext_imm_rotate1, aarch64_ext_imm_rotate2): ...these two
    	functions.
    	(aarch64_ext_sve_addr_ri_s4): New function.
    	(aarch64_ext_sve_quad_index): Likewise.
    	(aarch64_ext_sve_index): Allow quad indices.
    	(do_misc_decoding): Likewise.
    	* aarch64-dis-2.c: Regenerate.
    	* aarch64-opc.h (FLD_SVE_i3h, FLD_SVE_rot1, FLD_SVE_rot2): New
    	aarch64_field_kinds.
    	(OPD_F_OD_MASK): Widen by one bit.
    	(OPD_F_NO_ZR): Bump accordingly.
    	(get_operand_field_width): New function.
    	* aarch64-opc.c (fields): Add new SVE fields.
    	(operand_general_constraint_met_p): Handle new SVE operands.
    	(aarch64_print_operand): Likewise.
    	* aarch64-opc-2.c: Regenerate.
    
    gas/
    	* doc/c-aarch64.texi: Document that sve implies fp16, simd and compnum.
    	* config/tc-aarch64.c (parse_vector_type_for_operand): Allow .q
    	to be used with SVE registers.
    	(parse_operands): Handle new SVE operands.
    	(aarch64_features): Make "sve" require F16 rather than FP.  Also
    	require COMPNUM.
    	* testsuite/gas/aarch64/sve.s: Add tests for new instructions.
    	Include compnum tests.
    	* testsuite/gas/aarch64/sve.d: Update accordingly.
    	* testsuite/gas/aarch64/sve-invalid.s: Add tests for new instructions.
    	* testsuite/gas/aarch64/sve-invalid.l: Update accordingly.  Also
    	update expected output for new FMOV and MOV alternatives.
    
        
file modified
+15 -0
file modified
+10 -3
file modified
+3 -2
file modified
+2327 -1
file modified
+2295 -0
file modified
+7 -0
file modified
+6 -0
file modified
+48 -0
file modified
+81 -72
file modified
+48 -30
file modified
+4 -1
file modified
+2913 -2475
file modified
+48 -31
file modified
+4 -1
file modified
+6 -0
file modified
+39 -0
file modified
+13 -2
file modified
+230 -96