Mercurial > hg > CbC > CbC_gcc
diff gcc/config/arm/iterators.md @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/config/arm/iterators.md Fri Oct 27 22:46:09 2017 +0900 +++ b/gcc/config/arm/iterators.md Thu Oct 25 07:37:49 2018 +0900 @@ -1,5 +1,5 @@ ;; Code and mode itertator and attribute definitions for the ARM backend -;; Copyright (C) 2010-2017 Free Software Foundation, Inc. +;; Copyright (C) 2010-2018 Free Software Foundation, Inc. ;; Contributed by ARM Ltd. ;; ;; This file is part of GCC. @@ -119,6 +119,10 @@ ;; All supported vector modes (except singleton DImode). (define_mode_iterator VDQ [V8QI V16QI V4HI V8HI V2SI V4SI V4HF V8HF V2SF V4SF V2DI]) +;; All supported floating-point vector modes (except V2DF). +(define_mode_iterator VF [(V4HF "TARGET_NEON_FP16INST") + (V8HF "TARGET_NEON_FP16INST") V2SF V4SF]) + ;; All supported vector modes (except those with 64-bit integer elements). (define_mode_iterator VDQW [V8QI V16QI V4HI V8HI V2SI V4SI V2SF V4SF]) @@ -247,6 +251,9 @@ ;; Operations on the sign of a number. (define_code_iterator ABSNEG [abs neg]) +;; The PLUS and MINUS operators. +(define_code_iterator PLUSMINUS [plus minus]) + ;; Conversions. (define_code_iterator FCVT [unsigned_float float]) @@ -266,6 +273,8 @@ (define_code_attr cmp_type [(eq "i") (gt "s") (ge "s") (lt "s") (le "s")]) +(define_code_attr vfml_op [(plus "a") (minus "s")]) + ;;---------------------------------------------------------------------------- ;; Int iterators ;;---------------------------------------------------------------------------- @@ -412,6 +421,8 @@ (define_int_iterator DOTPROD [UNSPEC_DOT_S UNSPEC_DOT_U]) +(define_int_iterator VFMLHALVES [UNSPEC_VFML_LO UNSPEC_VFML_HI]) + ;;---------------------------------------------------------------------------- ;; Mode attributes ;;---------------------------------------------------------------------------- @@ -471,6 +482,18 @@ (V2SF "V2SF") (V4SF "V2SF") (DI "V2DI") (V2DI "V2DI")]) +;; Mode mapping for VFM[A,S]L instructions. +(define_mode_attr VFML [(V2SF "V4HF") (V4SF "V8HF")]) + +;; Mode mapping for VFM[A,S]L instructions for the vec_select result. +(define_mode_attr VFMLSEL [(V2SF "V2HF") (V4SF "V4HF")]) + +;; Mode mapping for VFM[A,S]L instructions for some awkward lane-wise forms. +(define_mode_attr VFMLSEL2 [(V2SF "V8HF") (V4SF "V4HF")]) + +;; Same as the above, but lowercase. +(define_mode_attr vfmlsel2 [(V2SF "v8hf") (V4SF "v4hf")]) + ;; Similar, for three elements. (define_mode_attr V_three_elem [(V8QI "BLK") (V16QI "BLK") (V4HI "BLK") (V8HI "BLK") @@ -494,8 +517,18 @@ (V2SI "P") (V4SI "q") (V2SF "P") (V4SF "q") (DI "P") (V2DI "q") - (SF "") (DF "P") - (HF "")]) + (V2HF "") (SF "") + (DF "P") (HF "")]) + +;; Output template to select the high VFP register of a mult-register value. +(define_mode_attr V_hi [(V2SF "p") (V4SF "f")]) + +;; Output template to select the low VFP register of a mult-register value. +(define_mode_attr V_lo [(V2SF "") (V4SF "e")]) + +;; Helper attribute for printing output templates for awkward forms of +;; vfmlal/vfmlsl intrinsics. +(define_mode_attr V_lane_reg [(V2SF "") (V4SF "P")]) ;; Wider modes with the same number of elements. (define_mode_attr V_widen [(V8QI "V8HI") (V4HI "V4SI") (V2SI "V2DI")]) @@ -708,6 +741,7 @@ (define_mode_attr F_constraint [(SF "t") (DF "w")]) (define_mode_attr vfp_type [(SF "s") (DF "d")]) (define_mode_attr vfp_double_cond [(SF "") (DF "&& TARGET_VFP_DOUBLE")]) +(define_mode_attr VF_constraint [(V2SF "t") (V4SF "w")]) ;; Mode attribute used to build the "type" attribute. (define_mode_attr q [(V8QI "") (V16QI "_q") @@ -824,6 +858,12 @@ (UNSPEC_DOT_S "s") (UNSPEC_DOT_U "u") ]) +(define_int_attr vfml_half + [(UNSPEC_VFML_HI "high") (UNSPEC_VFML_LO "low")]) + +(define_int_attr vfml_half_selector + [(UNSPEC_VFML_HI "true") (UNSPEC_VFML_LO "false")]) + (define_int_attr vcvth_op [(UNSPEC_VCVTA_S "a") (UNSPEC_VCVTA_U "a") (UNSPEC_VCVTM_S "m") (UNSPEC_VCVTM_U "m")