File: builtins-5.c

package info (click to toggle)
gcc-arm-none-eabi 15%3A12.2.rel1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 959,712 kB
  • sloc: cpp: 3,275,382; ansic: 2,061,766; ada: 840,956; f90: 208,513; makefile: 76,132; asm: 73,433; xml: 50,448; exp: 34,146; sh: 32,436; objc: 15,637; fortran: 14,012; python: 11,991; pascal: 6,787; awk: 4,779; perl: 3,054; yacc: 338; ml: 285; lex: 201; haskell: 122
file content (39 lines) | stat: -rw-r--r-- 1,304 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-options "-mdejagnu-cpu=power8 -O0 -dp" } */

#include <altivec.h>


int main ()
{
  vector long long la = {5L, 14L};
  vector long long lb = {3L, 86L};
  vector bool long long ld = {0, -1};

  vector unsigned long long ua = {5L, 14L};
  vector unsigned long long ub = {3L, 86L};
  vector bool long long ud = {0, -1};

  /*  vec_or tests generate an xxlor instruction when compiled with -O0.  The xxlor
      instructions get optimized away with higher optimization levels.
      When compiling on Linux we see the xxlor instruction used as a move in various
      places.  When compiling on AIX, a move instruction is used instead of the xxlor
      instruction.  So, these tests have been isolated into a different file to limit
      the xxlor instruction use to just the vex_or builtin tests.  */      
      
  vector long long ls = vec_or (la, lb);
  vector long long lt = vec_or (la, ld);
  vector long long lu = vec_or (ld, la);

  vector unsigned long long us = vec_or (ua, ub);
  vector unsigned long long ut = vec_or (ua, ud);
  vector unsigned long long uu = vec_or (ud, ua);

  return 0;
}

/* Expected results:
   vec_or              xxlor    */

/* { dg-final { scan-assembler-times "xxlor" 6 } } */