From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1725) id 67F6339518BE; Sun, 7 Feb 2021 18:16:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 67F6339518BE Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: William Schmidt To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/wschmidt/heads/builtins4)] rs6000: More bug fixes X-Act-Checkin: gcc X-Git-Author: Bill Schmidt X-Git-Refname: refs/users/wschmidt/heads/builtins4 X-Git-Oldrev: 5e89461e031f384c3e522a33bda3649f854a5ca2 X-Git-Newrev: e5040567804004f3bd8a63baec683fa7ca489d1c Message-Id: <20210207181634.67F6339518BE@sourceware.org> Date: Sun, 7 Feb 2021 18:16:34 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Feb 2021 18:16:34 -0000 https://gcc.gnu.org/g:e5040567804004f3bd8a63baec683fa7ca489d1c commit e5040567804004f3bd8a63baec683fa7ca489d1c Author: Bill Schmidt Date: Thu Dec 17 16:25:22 2020 -0600 rs6000: More bug fixes 2020-12-17 Bill Schmidt * config/rs6000/rs6000-builtin-new.def (LVEBX): Fix return type. (LVEHX): Likewise. (LVEWX): Likeiwse. * config/rs6000/rs6000-gen-builtins.c (construct_fntype_id): Don't use "ci" for pointers. * config/rs6000/rs6000-overload.def (VEC_CMPEQ): Use Altivec forms, not VSX forms, for now. (VEC_CMPEQ_P): Likewise. (VEC_CMPGE): Likewise. (VEC_CMPGE_P): Likewise. (VEC_CMPGT): Likewise. (VEC_CMPGT_P): Likewise. (VEC_NMSUB): Likewise. (VEC_RE): Likewise. Diff: --- gcc/config/rs6000/rs6000-builtin-new.def | 6 +++--- gcc/config/rs6000/rs6000-gen-builtins.c | 5 ++++- gcc/config/rs6000/rs6000-overload.def | 27 +++++++++++++++++++-------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/gcc/config/rs6000/rs6000-builtin-new.def b/gcc/config/rs6000/rs6000-builtin-new.def index 3ca7ccab705..8b54b17e1ce 100644 --- a/gcc/config/rs6000/rs6000-builtin-new.def +++ b/gcc/config/rs6000/rs6000-builtin-new.def @@ -306,13 +306,13 @@ fpmath vf __builtin_altivec_float_sisf (vsi); FLOAT_V4SI_V4SF floatv4siv4sf2 {} - pure vop __builtin_altivec_lvebx (signed long long, const void *); + pure vsc __builtin_altivec_lvebx (signed long long, const void *); LVEBX altivec_lvebx {ldvec} - pure vop __builtin_altivec_lvehx (signed long long, const void *); + pure vss __builtin_altivec_lvehx (signed long long, const void *); LVEHX altivec_lvehx {ldvec} - pure vop __builtin_altivec_lvewx (signed long long, const void *); + pure vsi __builtin_altivec_lvewx (signed long long, const void *); LVEWX altivec_lvewx {ldvec} pure vuc __builtin_altivec_lvsl (signed long long, const void *); diff --git a/gcc/config/rs6000/rs6000-gen-builtins.c b/gcc/config/rs6000/rs6000-gen-builtins.c index 57095dde58a..a4495e0c443 100644 --- a/gcc/config/rs6000/rs6000-gen-builtins.c +++ b/gcc/config/rs6000/rs6000-gen-builtins.c @@ -930,6 +930,7 @@ match_type (typeinfo *typedata, int voidok) [const] [[signed|unsigned] | ] [*] + #### Lie below #### where "const" applies only to a of "int". Legal values of are (for now): @@ -1577,7 +1578,9 @@ construct_fntype_id (prototype *protoptr) { assert (argptr); buf[bufi++] = '_'; - if (argptr->info.isconst && argptr->info.base == BT_INT) + if (argptr->info.isconst + && argptr->info.base == BT_INT + && !argptr->info.ispointer) { buf[bufi++] = 'c'; buf[bufi++] = 'i'; diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def index 2109c6ccb56..981e2fe944b 100644 --- a/gcc/config/rs6000/rs6000-overload.def +++ b/gcc/config/rs6000/rs6000-overload.def @@ -456,6 +456,7 @@ VCMPBFP [VEC_CMPEQ, vec_cmpeq, __builtin_vec_cmpeq] +; #### XVCMPEQSP{TARGET_VSX};VCMPEQFP vbc __builtin_vec_cmpeq (vsc, vsc); VCMPEQUB VCMPEQUB_VSC vbc __builtin_vec_cmpeq (vuc, vuc); @@ -481,12 +482,13 @@ vbll __builtin_vec_cmpeq (vbll, vbll); VCMPEQUD VCMPEQUD_VBLL vbi __builtin_vec_cmpeq (vf, vf); - XVCMPEQSP + VCMPEQFP vbll __builtin_vec_cmpeq (vd, vd); XVCMPEQDP ; We skip generating a #define because of the C-versus-C++ complexity ; in altivec.h. Look there for the template-y details. +; #### XVCMPEQSP_P{TARGET_VSX};VCMPEQFP_P [VEC_CMPEQ_P, SKIP, __builtin_vec_vcmpeq_p] signed int __builtin_vec_vcmpeq_p (signed int, vuc, vuc); VCMPEQUB_P VCMPEQUB_PU @@ -515,7 +517,7 @@ signed int __builtin_vec_vcmpeq_p (signed int, vbll, vbll); VCMPEQUD_P VCMPEQUD_PB signed int __builtin_vec_vcmpeq_p (signed int, vf, vf); - XVCMPEQSP_P + VCMPEQFP_P signed int __builtin_vec_vcmpeq_p (signed int, vd, vd); XVCMPEQDP_P @@ -523,6 +525,7 @@ signed int __builtin_byte_in_set (unsigned char, unsigned long long); CMPEQB +; #### XVCMPGESP{TARGET_VSX};VCMPGEFP [VEC_CMPGE, vec_cmpge, __builtin_vec_cmpge] vbc __builtin_vec_cmpge (vsc, vsc); CMPGE_16QI CMPGE_16QI_VSC @@ -541,7 +544,7 @@ vbll __builtin_vec_cmpge (vull, vull); CMPGE_2DI CMPGE_2DI_VULL vbi __builtin_vec_cmpge (vf, vf); - XVCMPGESP + VCMPGEFP vbll __builtin_vec_cmpge (vd, vd); XVCMPGEDP @@ -549,6 +552,7 @@ ; in altivec.h. Look there for the template-y details. ; See altivec_build_resolved_builtin for how we deal with VEC_CMPGE_P. ; It's quite strange and horrible! +; #### XVCMPGESP_P{TARGET_VSX};VCMPGEFP_P [VEC_CMPGE_P, SKIP, __builtin_vec_vcmpge_p] signed int __builtin_vec_vcmpge_p (signed int, vuc, vuc); VCMPGTUB_P VCMPGTUB_PR @@ -567,10 +571,11 @@ signed int __builtin_vec_vcmpge_p (signed int, vsll, vsll); VCMPGTSD_P VCMPGTSD_PR signed int __builtin_vec_vcmpge_p (signed int, vf, vf); - XVCMPGESP_P + VCMPGEFP_P signed int __builtin_vec_vcmpge_p (signed int, vd, vd); XVCMPGEDP_P +; #### XVCMPGTSP{TARGET_VSX};VCMPGTFP [VEC_CMPGT, vec_cmpgt, __builtin_vec_cmpgt] vbc __builtin_vec_cmpgt (vsc, vsc); VCMPGTSB @@ -589,12 +594,13 @@ vbll __builtin_vec_cmpgt (vull, vull); VCMPGTUD vbi __builtin_vec_cmpgt (vf, vf); - XVCMPGTSP + VCMPGTFP vbll __builtin_vec_cmpgt (vd, vd); XVCMPGTDP ; We skip generating a #define because of the C-versus-C++ complexity ; in altivec.h. Look there for the template-y details. +; #### XVCMPGTSP_P{TARGET_VSX};VCMPGTFP_P [VEC_CMPGT_P, SKIP, __builtin_vec_vcmpgt_p] signed int __builtin_vec_vcmpgt_p (signed int, vuc, vuc); VCMPGTUB_P @@ -613,7 +619,7 @@ signed int __builtin_vec_vcmpgt_p (signed int, vsll, vsll); VCMPGTSD_P signed int __builtin_vec_vcmpgt_p (signed int, vf, vf); - XVCMPGTSP_P + VCMPGTFP_P signed int __builtin_vec_vcmpgt_p (signed int, vd, vd); XVCMPGTDP_P @@ -2084,9 +2090,10 @@ vd __builtin_vec_nmadd (vd, vd, vd); XVNMADDDP +; #### XVNMSUBDP{TARGET_VSX};VNMSUBFP [VEC_NMSUB, vec_nmsub, __builtin_vec_nmsub] vf __builtin_vec_nmsub (vf, vf, vf); - XVNMSUBSP + VNMSUBFP vd __builtin_vec_nmsub (vd, vd, vd); XVNMSUBDP @@ -2354,9 +2361,13 @@ vsi __builtin_vec_promote (vsi); ABS_V4SI PROMOTE_FAKERY +; Opportunity for improvement: We can use XVRESP instead of VREFP for +; TARGET_VSX. We would need conditional dispatch to allow two possibilities. +; Some syntax like "XVRESP{TARGET_VSX};VREFP". +; TODO. #### [VEC_RE, vec_re, __builtin_vec_re] vf __builtin_vec_re (vf); - XVRESP + VREFP vd __builtin_vec_re (vd); XVREDP