From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com [IPv6:2607:f8b0:4864:20::42b]) by sourceware.org (Postfix) with ESMTPS id 4A394385782D for ; Tue, 15 Sep 2020 07:16:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 4A394385782D Received: by mail-pf1-x42b.google.com with SMTP id d9so1418336pfd.3 for ; Tue, 15 Sep 2020 00:16:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=xRi6BnWnNauifeHadNTc0wAW0x4JKIh7P917mEqMtL4=; b=kpLGQYvKkrVVSzDb+AscjRiuMs0RkH5hqkNwAHY9yVP3hJom0cM/pyAauOp0qT+BfC k27fs1yhsnzaPmXxjEK2xg8P1/mQ4rgrq3sTG+bQoe1vjMvtLw3lVToxl6izB2Ff6TzE Dv4/IUjiJ0KRnlL0Sa2vWNE2TS3ymkfMvwZ9gonC4UAZwFOTIVUcqdmfYrZhjGQkQlX1 DfbOGpJVeZSXPZHBkcR06qGtcZeSySRdoEqXMEqB1PlXLiArMNbdV90IbK9XVrnatlzq Oim0Offs00+4uxlqKGEz+NOGYIQYNzM8mQCDTAq0fVMpcrckf9bS0KY+rt9RsDxIUoSC ZUlg== X-Gm-Message-State: AOAM5310MWwx++5WcFmLPC6R8VPyLB2QGWwInjqoW3Ubhvc/C+FX/+4x rwYIWkPAFDiVCWKRbY+7z54SHTDo4x8= X-Google-Smtp-Source: ABdhPJwMm7XZueEkt5/PGgtKhmDj4s4ULL8LNXNWz1G5eWS3aY+oLNg3E+MrCG7hhSMTBEqHAPILMg== X-Received: by 2002:a05:6a00:8c5:b029:13e:ce2c:88bd with SMTP id s5-20020a056a0008c5b029013ece2c88bdmr16696144pfu.0.1600154173412; Tue, 15 Sep 2020 00:16:13 -0700 (PDT) Received: from bubble.grove.modra.org ([2406:3400:51d:8cc0:84d7:77fb:b88d:babf]) by smtp.gmail.com with ESMTPSA id k4sm2767738pga.76.2020.09.15.00.16.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 15 Sep 2020 00:16:12 -0700 (PDT) Received: by bubble.grove.modra.org (Postfix, from userid 1000) id C03CC8557A; Tue, 15 Sep 2020 16:46:08 +0930 (ACST) Date: Tue, 15 Sep 2020 16:46:08 +0930 From: Alan Modra To: Segher Boessenkool Cc: gcc-patches@sourceware.org, Peter Bergner Subject: Re: [RS6000] rotate and mask constants Message-ID: <20200915071608.GJ5452@bubble.grove.modra.org> References: <20200915011946.3395-1-amodra@gmail.com> <20200915011946.3395-9-amodra@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200915011946.3395-9-amodra@gmail.com> User-Agent: Mutt/1.9.4 (2018-02-28) X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 15 Sep 2020 07:16:16 -0000 On Tue, Sep 15, 2020 at 10:49:46AM +0930, Alan Modra wrote: > Implement more two insn constants. And tests. rot_cst1 checks the values generated, rot_cst2 checks instruction count. * gcc.target/powerpc/rot_cst.h, * gcc.target/powerpc/rot_cst1.c, * gcc.target/powerpc/rot_cst2.c: New tests. diff --git a/gcc/testsuite/gcc.target/powerpc/rot_cst.h b/gcc/testsuite/gcc.target/powerpc/rot_cst.h new file mode 100644 index 00000000000..0d100d61233 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/rot_cst.h @@ -0,0 +1,269 @@ +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c1 (void) +{ + return 0xc000000000000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c2 (void) +{ + return 0xc00000000000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c3 (void) +{ + return 0xc0000000000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c4 (void) +{ + return 0xc000000000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c5 (void) +{ + return 0xc00000000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c6 (void) +{ + return 0xc0000000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c7 (void) +{ + return 0xc000000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c8 (void) +{ + return 0xc00000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c9 (void) +{ + return 0xc0000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c10 (void) +{ + return 0xc000000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c11 (void) +{ + return 0xc00000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c12 (void) +{ + return 0xc0000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c13 (void) +{ + return 0xc000ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c14 (void) +{ + return 0xc00ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c15 (void) +{ + return 0xc0ULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +c16 (void) +{ + return 0xcULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b1 (void) +{ + return 0xbfffffffffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b2 (void) +{ + return 0xbffffffffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b3 (void) +{ + return 0xbfffffffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b4 (void) +{ + return 0xbffffffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b5 (void) +{ + return 0xbfffffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b6 (void) +{ + return 0xbffffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b7 (void) +{ + return 0xbfffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b8 (void) +{ + return 0xbffffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b9 (void) +{ + return 0xbfffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b10 (void) +{ + return 0xbffffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b11 (void) +{ + return 0xbfffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b12 (void) +{ + return 0xbffffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b13 (void) +{ + return 0xbfffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b14 (void) +{ + return 0xbffULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b15 (void) +{ + return 0xbfULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +b16 (void) +{ + return 0xbULL; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r1 (void) +{ + return -0x124ULL << 48; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r2 (void) +{ + return -0x124ULL << 44; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r3 (void) +{ + return -0x124ULL << 40; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r4 (void) +{ + return -0x124ULL << 32; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r5 (void) +{ + return -0x124ULL << 28; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r6 (void) +{ + return -0x124ULL << 24; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r7 (void) +{ + return -0x124ULL << 20; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r8 (void) +{ + return -0x124ULL << 16; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r9 (void) +{ + return -0x124ULL << 12; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r10 (void) +{ + return -0x124ULL << 8; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r11 (void) +{ + return -0x124ULL << 4; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +r12 (void) +{ + return -0x124ULL << 0; +} + +unsigned long long __attribute__ ((__noinline__, __noclone__)) +lis1 (void) +{ + return 0x89ab0000ffffULL; +} diff --git a/gcc/testsuite/gcc.target/powerpc/rot_cst1.c b/gcc/testsuite/gcc.target/powerpc/rot_cst1.c new file mode 100644 index 00000000000..30219dd1438 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/rot_cst1.c @@ -0,0 +1,68 @@ +/* { dg-do run { target lp64 } } */ +/* { dg-options "-O2" } */ + +#include "rot_cst.h" + +struct fun { + unsigned long long (*f) (void); + unsigned long long val; +}; + +volatile struct fun values[] = { + { c1, 0xc000000000000000ULL }, + { c2, 0xc00000000000000ULL }, + { c3, 0xc0000000000000ULL }, + { c4, 0xc000000000000ULL }, + { c5, 0xc00000000000ULL }, + { c6, 0xc0000000000ULL }, + { c7, 0xc000000000ULL }, + { c8, 0xc00000000ULL }, + { c9, 0xc0000000ULL }, + { c10, 0xc000000ULL }, + { c11, 0xc00000ULL }, + { c12, 0xc0000ULL }, + { c13, 0xc000ULL }, + { c14, 0xc00ULL }, + { c15, 0xc0ULL }, + { c16, 0xcULL }, + { b1, 0xbfffffffffffffffULL }, + { b2, 0xbffffffffffffffULL }, + { b3, 0xbfffffffffffffULL }, + { b4, 0xbffffffffffffULL }, + { b5, 0xbfffffffffffULL }, + { b6, 0xbffffffffffULL }, + { b7, 0xbfffffffffULL }, + { b8, 0xbffffffffULL }, + { b9, 0xbfffffffULL }, + { b10, 0xbffffffULL }, + { b11, 0xbfffffULL }, + { b12, 0xbffffULL }, + { b13, 0xbfffULL }, + { b14, 0xbffULL }, + { b15, 0xbfULL }, + { b16, 0xbULL }, + { r1, -0x124ULL << 48 }, + { r2, -0x124ULL << 44 }, + { r3, -0x124ULL << 40 }, + { r4, -0x124ULL << 32 }, + { r5, -0x124ULL << 28 }, + { r6, -0x124ULL << 24 }, + { r7, -0x124ULL << 20 }, + { r8, -0x124ULL << 16 }, + { r9, -0x124ULL << 12 }, + { r10, -0x124ULL << 8 }, + { r11, -0x124ULL << 4 }, + { r12, -0x124ULL << 0 }, + { lis1, 0x89ab0000ffffULL } +}; + +int +main (void) +{ + volatile struct fun *t; + + for (t = values; t < values + sizeof (values) / sizeof (values[0]); ++t) + if (t->f () != t->val) + __builtin_abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.target/powerpc/rot_cst2.c b/gcc/testsuite/gcc.target/powerpc/rot_cst2.c new file mode 100644 index 00000000000..d5d45ead043 --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/rot_cst2.c @@ -0,0 +1,6 @@ +/* { dg-do compile { target lp64 } } */ +/* { dg-options "-O2" } */ + +#include "rot_cst.h" + +/* { dg-final { scan-assembler-times {(?n)^\s+[a-z]} 122 } } */ -- Alan Modra Australia Development Lab, IBM