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

            Bug ID: 79544
           Summary: vec_sra (unsigned long long,foo) generating vsrd
                    instead of vsrad
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: willschm at gcc dot gnu.org
  Target Milestone: ---

Created attachment 40756
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40756&action=edit
sample test

Noticed that vec_sra is generating a vsrd instruction rather than the expected
vsrad instruction when using "unsigned long long" parameter.   

>       #include <altivec.h>
>       vector unsigned long long
>       test6_sra (vector unsigned long long x, vector unsigned long long y)
>       {
>         return vec_sra (x, y);
>       }

> #> gcc -c testme_sra.c  -S -mvsx -O3 

> #> grep -A 3 test6_sra: testme_sra.s
> test6_sra:
>       vsrd 2,2,3
>       blr
>       .long 0

vec_sra() against char,short,int appear OK. 

Seeing this on trunk (20170208) as well as older distro supplied compilers. 

test attached.

Reply via email to