Commit Graph

9 Commits

Author SHA1 Message Date
Daniel Jacobowitz 0c422e7433 neon-testgen.ml: Use dg-add-options arm_neon.
2010-05-24  Daniel Jacobowitz  <dan@codesourcery.com>
	    Sandra Loosemore  <sandra@codesourcery.com>

	gcc/
	* config/arm/neon-testgen.ml: Use dg-add-options arm_neon.
	* doc/sourcebuild.texi (Effective-Target Keywords): Update arm_neon_ok
	description.  Add arm_neon_fp16_ok.
	(Add Options): Add arm_neon and arm_neon_fp16.

	gcc/testsuite/
	* gcc.target/arm/neon/: Regenerated test cases.

	* gcc.target/arm/neon/polytypes.c,
	gcc.target/arm/neon-vmla-1.c, gcc.target/arm/neon-vmls-1.c,
	gcc.target/arm/neon-cond-1.c, gcc.target/arm/neon/vfp-shift-a2t2.c,
	gcc.target/arm/neon-thumb2-move.c, gcc.dg/torture/arm-fp16-ops-8.c, 
	gcc.dg/torture/arm-fp16-ops-7.c, g++.dg/ext/arm-fp16/arm-fp16-ops-7.C,
	g++.dg/ext/arm-fp16/arm-fp16-ops-8.C, g++.dg/abi/mangle-neon.C: Use
	dg-add-options arm_neon.

	* gcc.target/arm/fp16-compile-vcvt.c, gcc.dg/torture/arm-fp16-ops-5.c,
	gcc.dg/torture/arm-fp16-ops-6.c, g++.dg/ext/arm-fp16/arm-fp16-ops-5.C,
	g++.dg/ext/arm-fp16/arm-fp16-ops-6.C: Use dg-add-options arm_neon_fp16
	and arm_neon_fp16_ok.

	* gcc.dg/vect/vect.exp, g++.dg/vect/vect.exp,
	gfortran.dg/vect/vect.exp: Use add_options_for_arm_neon.

	* lib/target-supports.exp (add_options_for_arm_neon): New.
	(check_effective_target_arm_neon_ok_nocache): New, from
	check_effective_target_arm_neon_ok.  Check multiple possibilities.
	(check_effective_target_arm_neon_ok): Use
	check_effective_target_arm_neon_ok_nocache.
	(add_options_for_arm_neon_fp16)
	(check_effective_target_arm_neon_fp16_ok)
	check_effective_target_arm_neon_fp16_ok_nocache): New.
	(check_effective_target_arm_neon_hw): Use add_options_for_arm_neon.


Co-Authored-By: Sandra Loosemore <sandra@codesourcery.com>

From-SVN: r159794
2010-05-24 15:36:31 -04:00
Ramana Radhakrishnan b3d7e1910f Fix target/38697
2010-01-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

       PR target/38697
       * config/arm/neon-testgen.m (emit_automatics): New parameter
	features. Adjust for Fixed_return_reg feature.
	(test_intrinsic): Call emit_automatics with new feature.
       * config/arm/neon.ml: Update copyright years.
	(features): New Fixed_return_reg feature.
	(ops): Update feature for Vget_low.

2010-01-19  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

	PR target/38697.
	* gcc.target/arm/neon/vget_lowf32.c: Regenerate.
	* gcc.target/arm/neon/vget_lowp16.c: Likewise.
	* gcc.target/arm/neon/vget_lowp8.c:  Likewise.
	* gcc.target/arm/neon/vget_lows16.c: Likewise.
	* gcc.target/arm/neon/vget_lows32.c: Likewise.
	* gcc.target/arm/neon/vget_lows64.c: Likewise.
	* gcc.target/arm/neon/vget_lows8.c: Likewise.
	* gcc.target/arm/neon/vget_lowu16.c: Likewise.
	* gcc.target/arm/neon/vget_lowu32.c: Likewise.
	* gcc.target/arm/neon/vget_lowu64.c: Likewise.
	* gcc.target/arm/neon/vget_lowu8.c: Likewise.

From-SVN: r156042
2010-01-19 14:21:14 +00:00
Daniel Jacobowitz 814a4c3b35 arm.c (neon_vdup_constant, [...]): New.
gcc/
	* config/arm/arm.c (neon_vdup_constant, neon_make_constant): New.
	(neon_expand_vector_init): Use them.  Also handle non-constant
	vectors with identical elements and vectors with only one
	non-constant element.
	(arm_print_operand): Handle 'y' modifier.
	* config/arm/arm-protos.h (neon_make_constant): Declare.
	* config/arm/neon.md (neon_vdup_n<mode>): Split into two
	patterns.  Use VX instead of VDQW for the first one.  Allow
	a VFP alternative and V32 modes for the second one.
	* config/arm/neon.ml (shape_elt): Add Alternatives.
	(ops): Use Alternatives for vdup lane instructions.
	* config/arm/neon-testgen.ml (analyze_shape): Handle Alternatives.
	* config/arm/vec-common.md (mov<mode>): Use neon_make_constant.

	gcc/testsuite/
	* gcc.target/arm/neon: Regenerate generated tests.

From-SVN: r154094
2009-11-11 14:23:03 +00:00
Daniel Gutson 8cb32ff23b neon.md (neon_vshll_n<mode>): Checking Bounds fixed.
2009-10-14  Daniel Gutson  <dgutson@codesourcery.com>

        gcc/
        * config/arm/neon.md (neon_vshll_n<mode>): Checking Bounds
        fixed.

        gcc/testsuite/
        * gcc.target/arm/neon/vfp-shift-a2t2.c: New test case.

From-SVN: r152777
2009-10-14 19:18:20 +00:00
Doug Kwan ddead5badb polytypes.c: Adjust test for new notes in warnings added in rev 141298.
2009-07-30  Doug Kwan  <dougkwan@google.com>

	* gcc.target/arm/neon/polytypes.c: Adjust test for new notes
	in warnings added in rev 141298.

From-SVN: r150287
2009-07-31 00:17:46 +00:00
Joseph Myers 658896fbb8 polytypes.c: Use dg-message separately from dg-error to match separate messages.
* gcc.target/arm/neon/polytypes.c: Use dg-message separately from
	dg-error to match separate messages.

From-SVN: r137381
2008-07-02 20:35:08 +01:00
Nick Clifton cd976c16a3 execute.exp: Change copyright header to refer to version 3 of the GNU General Public License...
* gcc.c-torture/execute/execute.exp: Change copyright header to refer to version
  3 of the GNU General Public License and to point readers at the COPYING3 file
  and the FSF's license web page.
* gcc.c-torture/execute/ieee/ieee.exp, gcc.c-torture/unsorted/unsorted.exp,
  gcc.c-torture/compile/compile.exp, gcc.c-torture/compile/structs.c, 
  gcc.target/powerpc/powerpc.exp, gcc.target/arm/neon/neon.exp, gcc.target/arm/arm.exp,
  gcc.target/cris/torture/cris-torture.exp, gcc.target/cris/cris.exp, gcc.target/ia64/ia64.exp,
  gcc.target/alpha/alpha.exp, gcc.target/m68k/m68k.exp, gcc.target/spu/spu.exp, gcc.target/mips/mips.exp,
  gcc.target/sparc/sparc.exp, gcc.target/i386/i386.exp, gcc.target/x86_64/abi/abi-x86_64.exp, gnat.dg/specs/specs.exp,
  gnat.dg/dg.exp, gnat.dg/style/style.exp, gcc.dg/special/mips-abi.exp, gcc.dg/special/special.exp,
  gcc.dg/pch/pch.exp, gcc.dg/vxworks/vxworks.exp, gcc.dg/dg.exp, gcc.dg/charset/charset.exp, gcc.dg/weak/weak.exp,
  gcc.dg/tree-ssa/tree-ssa.exp, gcc.dg/tls/tls.exp, gcc.dg/cpp/cpp.exp, gcc.dg/cpp/trad/trad.exp,
  gcc.dg/matrix/matrix.exp, gcc.dg/vmx/vmx.exp, gcc.dg/compat/struct-layout-1.exp, gcc.dg/compat/compat.exp,
  gcc.dg/compat/struct-layout-1_generate.c, gcc.dg/debug/debug.exp, gcc.dg/debug/dwarf2/dwarf2.exp, gcc.dg/tree-prof/tree-prof.exp,
  gcc.dg/ipa/ipa.exp, gcc.dg/dfp/dfp.exp, gcc.dg/noncompile/noncompile.exp,
  gcc.dg/vect/costmodel/ppc/ppc-costmodel-vect.exp, gcc.dg/vect/costmodel/spu/spu-costmodel-vect.exp,
  gcc.dg/vect/costmodel/i386/i386-costmodel-vect.exp, gcc.dg/vect/costmodel/x86_64/x86_64-costmodel-vect.exp,
  gcc.dg/vect/vect.exp, gcc.dg/format/format.exp, gcc.misc-tests/i386-prefetch.exp, gcc.misc-tests/sort2.exp,
  gcc.misc-tests/matrix1.exp, gcc.misc-tests/dectest.exp, gcc.misc-tests/options.exp, gcc.misc-tests/gcov.exp,
  gcc.misc-tests/mg-2.exp, gcc.misc-tests/mg.exp, gcc.misc-tests/bprob.exp, gcc.misc-tests/acker1.exp,
  gcc.misc-tests/dhry.exp, gcc.misc-tests/linkage.exp, gcc.misc-tests/arm-isr.exp, gcc.misc-tests/sieve.exp,
  g++.old-deja/g++.niklas/README, g++.old-deja/g++.gb/README, g++.old-deja/old-deja.exp,
  gfortran.fortran-torture/execute/execute.exp, gfortran.fortran-torture/compile/compile.exp,
  treelang/output/output-1.c, treelang/output/output-1.tree, treelang/execute/execute.exp, treelang/Makefile.in,
  treelang/compile/compile.exp, g++.dg/dg.exp, g++.dg/debug/debug.exp, g++.dg/debug/dwarf2/dwarf2.exp,
  g++.dg/charset/charset.exp, g++.dg/vect/vect.exp, g++.dg/tls/tls.exp, g++.dg/tree-prof/tree-prof.exp,
  g++.dg/pch/pch.exp, g++.dg/special/ecos.exp, g++.dg/compat/struct-layout-1.exp,
  g++.dg/compat/struct-layout-1_generate.c, g++.dg/compat/compat.exp, g++.dg/gcov/gcov.exp,
  g++.dg/bprob/bprob.exp, config/default.exp, gcc.test-framework/test-framework.awk,
  gcc.test-framework/gen_directive_tests, gcc.test-framework/test-framework.exp,
  objc.dg/special/special.exp, objc.dg/gnu-encoding/gnu-encoding.exp,
  objc.dg/gnu-encoding/struct-layout-encoding-1_generate.c, objc.dg/pch/pch.exp, objc.dg/dg.exp, lib/copy-file.exp,
  lib/profopt.exp, lib/gcc.exp, lib/mike-g++.exp, lib/c-compat.exp, lib/scanrtl.exp, lib/gfortran-dg.exp, lib/g++.exp,
  lib/obj-c++.exp, lib/wrapper.exp, lib/gnat-dg.exp, lib/compat.exp, lib/c-torture.exp, lib/gcc-dg.exp, lib/scanasm.exp, lib/gnat.exp,
  lib/treelang-dg.exp, lib/prune.exp, lib/gcov.exp, lib/treelang.exp, lib/dg-pch.exp, lib/scantree.exp,
  lib/g++-dg.exp, lib/objc-dg.exp, lib/file-format.exp, lib/target-libpath.exp, lib/obj-c++-dg.exp, lib/scandump.exp,
  lib/target-supports-dg.exp, lib/gcc-defs.exp, lib/fortran-torture.exp, lib/objc.exp, lib/scanipa.exp,
  lib/mike-gcc.exp, lib/objc-torture.exp, lib/gfortran.exp, lib/target-supports.exp, obj-c++.dg/dg.exp, gfortran.dg/dg.exp,
  gfortran.dg/vect/vect.exp, objc/execute/execute.exp, objc/execute/exceptions/exceptions.exp, 
  objc/compile/compile.exp: Likewise.

From-SVN: r127127
2007-08-01 16:25:11 +00:00
Julian Brown 89ffa8fc47 neon.md (V_ext): New mode attribute.
gcc/
    * config/arm/neon.md (V_ext): New mode attribute.
    (neon_vget_lane<mode>): Replace with define_expand.
    (neon_vget_lane<mode>_sext_internal)
    (neon_vget_lane<mode>_zext_internal): New define_insns for double
    and quad precision vectors.
    (neon_vget_lanedi): Add bounds check. Remove dead comment.
    * config/arm/neon.ml (get_lane): Make 32-bit get-lane intrinsics
    have typeless 32-bit result.

    gcc/testsuite/
    * gcc.target/arm/neon/*.c: Regenerate.

From-SVN: r127061
2007-07-30 13:48:43 +00:00
Julian Brown 88f77cba02 Makefile.in (TEXI_GCC_FILES): Add arm-neon-intrinsics.texi.
gcc/
    * Makefile.in (TEXI_GCC_FILES): Add arm-neon-intrinsics.texi.
    * config.gcc (arm*-*-*): Add arm_neon.h to extra headers.
    (with_fpu): Allow --with-fpu=neon.
    * config/arm/aof.h (ADDITIONAL_REGISTER_NAMES): Add Q0-Q15.
    * config/arm/aout.h (ADDITIONAL_REGISTER_NAMES): Add Q0-Q15.
    * config/arm/arm-modes.def (EI, OI, CI, XI): New modes.
    * config/arm/arm-protos.h (neon_immediate_valid_for_move)
    (neon_immediate_valid_for_logic, neon_output_logic_immediate)
    (neon_pairwise_reduce, neon_expand_vector_init, neon_reinterpret)
    (neon_emit_pair_result_insn, neon_disambiguate_copy)
    (neon_vector_mem_operand, neon_struct_mem_operand, output_move_quad)
    (output_move_neon): Add prototypes.
    * config/arm/arm.c (FL_NEON): New flag for NEON processor capability.
    (all_fpus): Add FPUTYPE_NEON.
    (fp_model_for_fpu): Add NEON field.
    (arm_return_in_memory): Return vectors <= 16 bytes in ARM registers.
    (arm_arg_partial_bytes): Allow NEON vectors to be passed partially
    in registers.
    (arm_legitimate_address_p): Don't support fancy addressing for NEON
    structure moves.
    (thumb2_legitimate_address_p): Likewise.
    (neon_valid_immediate): Recognize and prepare constants suitable for
    NEON instructions.
    (neon_immediate_valid_for_move): New function. Recognize and prepare
    immediates for NEON move instructions.
    (neon_immediate_valid_for_logic): New function. Recognize and
    prepare immediates for NEON logic instructions.
    (neon_output_logic_immediate): New function. Create asm string
    suitable for outputting immediate logic instructions.
    (neon_pairwise_reduce): New function. Implement reduction using
    pairwise operations.
    (neon_expand_vector_init): New function. Expand a (possibly
    non-constant) vector initialization.
    (neon_vector_mem_operand): New function. Memory operands supported
    for quad-word loads/stores to/from ARM or NEON registers. Don't
    allow base+offset addressing for core regs.
    (neon_struct_mem_operand): New function. Valid mems for NEON
    structure moves.
    (coproc_secondary_reload_class): Enable NEON registers to be loaded
    from neon_vector_mem_operand addresses without a secondary register.
    (add_minipool_forward_ref): Handle >8-byte minipool entries.
    (add_minipool_backward_ref): Likewise.
    (dump_minipool): Likewise.
    (push_minipool_fix): Likewise.
    (output_move_quad): New function. Output quad-word moves, loads and
    stores using ARM registers.
    (output_move_vfp): Add support for vectors in VFP (NEON) D
    registers.
    (output_move_neon): Output a NEON load/store to/from a quadword
    register.
    (arm_print_operand): Implement new codes:
    - 'c' for unadorned integers (without a # sign).
    - 'J', 'K' for reg+2/reg+3, reg+3/reg+2 in little/big-endian
    mode.
    - 'e', 'f' for the low and high D parts of a NEON Q register.
    - 'q' outputs a NEON Q register.
    - 'h' outputs ranges of D registers for VLDM/VSTM etc.
    - 'T' prints NEON opcode features from a coded bitmask.
    - 'F' is similar to T, but signed/unsigned codes both print as
    'i'.
    - 't' is similar to T, but 'u' is printed instead of 'p'.
    - 'O' prints 'r' if NEON instruction should perform rounding (as
    specified by bitmask), else prints nothing.
    - '#' is a punctuation character to stop operand numbers from
    running together with following digits in the assembler
    strings for instructions (when using mode attributes).
    (arm_assemble_integer): Handle extra NEON vector modes. Permute
    constant vectors in big-endian mode, where necessary.
    (arm_hard_regno_mode_ok): Allow vectors in VFP/NEON registers.
    Handle EI, OI, CI, XI modes.
    (ashlv4hi3, ashlv2si3, lshrv4hi3, lshrv2si3, ashrv4hi3)
    (ashrv2si3): Rename IWMMXT2_BUILTINs to...
    (ashlv4hi3_iwmmxt, ashlv2si3_iwmmxt, lshrv4hi3_iwmmxt)
    (lshrv2si3_iwmmxt, ashrv4hi3_iwmmxt, ashrv2si3_iwmmxt): New names.
    (neon_builtin_type_bits): Add enumeration, one bit for each vector
    type.
    (v8qi_UP, v4hi_UP, v2si_UP, v2sf_UP, di_UP, v16qi_UP, v8hi_UP)
    (v4si_UP, v4sf_UP, v2di_UP, ti_UP, ei_UP, oi_UP, UP): Define macros
    to turn v8qi, etc. into bits defined above.
    (neon_itype): New enumeration. Classifications of NEON builtins.
    (neon_builtin_datum): Define struct. Contains information about
    a single builtin (with multiple modes).
    (CF): Define helper macro for...
    (VAR1...VAR10): Define builtins with a type, name and 1-10 different
    modes.
    (neon_builtin_data): New array. Define information about builtins
    for use during initialization/expansion.
    (arm_init_neon_builtins): New function.
    (arm_init_builtins): Call arm_init_neon_builtins if TARGET_NEON is
    true.
    (neon_builtin_compare): New function.
    (locate_neon_builtin_icode): New function. Find an insn code for a
    builtin given a function code for that builtin. Also return type of
    builtin (NEON_BINOP, NEON_UNOP etc.).
    (builtin_arg): New enumeration. Types of arguments for builtins.
    (arm_expand_neon_args): New function. Expand a generic NEON builtin.
    Takes a variable argument list of builtin_arg types, terminated by
    NEON_ARG_STOP.
    (arm_expand_neon_builtin): New function. Expand a NEON builtin.
    (neon_reinterpret): New function. Expand NEON reinterpret intrinsic.
    (neon_emit_pair_result_insn): New function. Support returning pairs
    of vectors via a pointer.
    (neon_disambiguate_copy): New function. Set up operands for a
    multi-word copy such that registers do not get clobbered.
    (arm_expand_builtin): Call arm_expand_neon_builtin if fcode >=
    ARM_BUILTIN_NEON_BASE.
    (arm_file_start): Set float-abi attribute for NEON.
    (arm_vector_mode_supported_p): Enable NEON vector modes.
    (arm_mangle_map_entry): New.
    (arm_mangle_map): New.
    (arm_mangle_vector_type): New.
    * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_NEON__
    when appropriate.
    (TARGET_NEON): New macro. Target supports NEON.
    (fputype): Add FPUTYPE_NEON.
    (UNITS_PER_SIMD_WORD): Define. Allow quad-word registers to be used
    for vectorization based on command-line arg.
    (NEON_REGNO_OK_FOR_NREGS): Define.
    (VALID_NEON_DREG_MODE, VALID_NEON_QREG_MODE)
    (VALID_NEON_STRUCT_MODE): Define.
    (PRINT_OPERAND_PUNCT_VALID_P): '#' is valid punctuation.
    (arm_builtins): Add ARM_BUILTIN_NEON_BASE.
    * config/arm/arm.md (VUNSPEC_POOL_16): Insert constant for unspec.
    (consttable_16): Add pattern for outputting 16-byte minipool
    entries.
    (movv2si, movv4hi, movv8qi): Remove blank expanders (redefined in
    vec-common.md).
    (vec-common.md, neon.md): Include md files.
    * config/arm/arm.opt (mvectorize-with-neon-quad): Add option.
    * config/arm/constraints.md (constraint "Dn", "Dl", "DL"): Define.
    (memory_constraint "Ut", "Un", "Us"): Define.
    * config/arm/iwmmxt.md (VMMX, VSHFT): New mode macros.
    (MMX_char): New mode attribute.
    (addv8qi3, addv4hi3, addv2si3): Remove. Replace with...
    (*add<mode>3_iwmmxt): New insn pattern.
    (subv8qi3, subv4hi3, subv2si3): Remove. Replace with...
    (*sub<mode>3_iwmmxt): New insn pattern.
    (mulv4hi3): Rename to...
    (*mulv4hi3_iwmmxt): This.
    (smaxv8qi3, smaxv4hi3, smaxv2si3, umaxv8qi3, umaxv4hi3)
    (umaxv2si3, sminv8qi3, sminv4hi3, sminv2si3, uminv8qi3)
    (uminv4hi3, uminv2si3): Remove. Replace with...
    (*smax<mode>3_iwmmxt, *umax<mode>3_iwmmxt, *smin<mode>3_iwmmxt)
    (*umin<mode>3_iwmmxt): These.
    (ashrv4hi3, ashrv2si3, ashrdi3_iwmmxt): Replace with...
    (ashr<mode>3_iwmmxt): This new pattern.
    (lshrv4hi3, lshrv2si3, lshrdi3_iwmmxt): Replace with...
    (lshr<mode>3_iwmmxt): This new pattern.
    (ashlv4hi3, ashlv2si3, ashldi3_iwmmxt): Replace with...
    (ashl<mode>3_iwmmxt): This new pattern.
    * config/arm/neon-docgen.ml: New file. Generate documentation for
    intrinsics.
    * config/arm/neon-gen.ml: New file. Generate arm_neon.h header.
    * config/arm/arm_neon.h: New (autogenerated).
    * config/arm/neon-testgen.ml: New file. Generate NEON tests
    automatically.
    * config/arm/neon.md: New file. Define NEON instructions.
    * config/arm/neon.ml: New file. Abstract description of NEON
    instructions, used to generate arm_neon.h header, documentation and tests.
    * config/arm/t-arm (MD_INCLUDES): Add vec-common.md, neon.md.
    * vec-common.md: New file. Shared parts for iWMMXt and NEON vector
    support.
    * doc/extend.texi (ARM Built-in Functions): Rename and remove
    extraneous comma.
    (ARM NEON Intrinsics): New subsection.
    * doc/arm-neon-intrinsics.texi: New (autogenerated).

    gcc/testsuite/
    * gcc.dg/vect/vect.exp: Check is-effective-target arm_neon_hw.
    * gcc.dg/vect/tree-vect.h: Check for NEON SIMD support.
    * lib/gcc-dg.exp (cleanup-saved-temps): Fix comment.
    * lib/target-supports.exp (check_effective_target_arm_neon_ok)
    (check_effective_target_arm_neon_hw): New.
    * gcc.target/arm/neon/neon.exp: New file.
    * gcc.target/arm/neon/polytypes.c: New file.
    * gcc.target/arm/neon/v*.c (1870 files): New (autogenerated).


Co-Authored-By: Joseph Myers <joseph@codesourcery.com>
Co-Authored-By: Mark Shinwell <shinwell@codesourcery.com>
Co-Authored-By: Paul Brook <paul@codesourcery.com>

From-SVN: r126911
2007-07-25 12:28:31 +00:00