public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/108049] New: s390: Compiler adds extra zero extend after xoring 2 zero extended values
@ 2022-12-10 12:23 jens.seifert at de dot ibm.com
  2022-12-10 12:27 ` [Bug target/108049] " jens.seifert at de dot ibm.com
  0 siblings, 1 reply; 2+ messages in thread
From: jens.seifert at de dot ibm.com @ 2022-12-10 12:23 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108049

            Bug ID: 108049
           Summary: s390: Compiler adds extra zero extend after xoring 2
                    zero extended values
           Product: gcc
           Version: 12.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jens.seifert at de dot ibm.com
  Target Milestone: ---

Same issue for PPC: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107949

extern unsigned char magic1[256];

unsigned int hash(const unsigned char inp[4])
{
   const unsigned long long INIT = 0x1ULL;
   unsigned long long h1 = INIT;
   h1 = magic1[((unsigned long long)inp[0]) ^ h1];
   h1 = magic1[((unsigned long long)inp[1]) ^ h1];
   h1 = magic1[((unsigned long long)inp[2]) ^ h1];
   h1 = magic1[((unsigned long long)inp[3]) ^ h1];
   return h1;
}

hash(unsigned char const*):
        llgc    %r4,1(%r2) <= zero extends to 64-bit
        lgrl    %r1,.LC0
        llgc    %r3,0(%r2) <= zero extends to 64-bit
        xilf    %r3,1 
        llgc    %r3,0(%r3,%r1)
        xr      %r3,%r4 <= should be 64-bit xor
        llgc    %r4,2(%r2) <= zero extends to 64-bit
        llgcr   %r3,%r3 <= unnecessary
        llgc    %r2,3(%r2)
        llgc    %r3,0(%r3,%r1)
        xr      %r3,%r4 <= should be 64-bit xor
        llgcr   %r3,%r3 <= unnecessary
        llgc    %r3,0(%r3,%r1) <= zero extends to 64-bit
        xrk     %r2,%r3,%r2 <= should be 64-bit xor
        llgcr   %r2,%r2 <= unnecessary
        llgc    %r2,0(%r2,%r1)
        br      %r14

Smaller sample:
unsigned long long tiny2(const unsigned char *inp)
{
  unsigned long long a = inp[0];
  unsigned long long b = inp[1];
  return a ^ b;
}

tiny2(unsigned char const*):
        llgc    %r1,0(%r2)
        llgc    %r2,1(%r2)
        xrk     %r2,%r1,%r2
        llgcr   %r2,%r2
        br      %r14

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Bug target/108049] s390: Compiler adds extra zero extend after xoring 2 zero extended values
  2022-12-10 12:23 [Bug target/108049] New: s390: Compiler adds extra zero extend after xoring 2 zero extended values jens.seifert at de dot ibm.com
@ 2022-12-10 12:27 ` jens.seifert at de dot ibm.com
  0 siblings, 0 replies; 2+ messages in thread
From: jens.seifert at de dot ibm.com @ 2022-12-10 12:27 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108049

--- Comment #1 from Jens Seifert <jens.seifert at de dot ibm.com> ---
Sample above got compiled with -march=z196

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-12-10 12:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-12-10 12:23 [Bug target/108049] New: s390: Compiler adds extra zero extend after xoring 2 zero extended values jens.seifert at de dot ibm.com
2022-12-10 12:27 ` [Bug target/108049] " jens.seifert at de dot ibm.com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).