xref: /netbsd-src/external/gpl3/gdb/dist/gdb/testsuite/gdb.arch/altivec-regs.c (revision d16b7486a53dcb8072b60ec6fcb4373a2d0c27b7)
1 #include <altivec.h>
2 #include <stdio.h>
3 
4 vector unsigned int
5 vector_fun (volatile vector unsigned int a, volatile vector unsigned int b)
6 {
7   vector unsigned int c;
8   a = ((vector unsigned int) vec_splat_u8(2));
9   b = ((vector unsigned int) vec_splat_u8(3));
10 
11   c = vec_add (a, b);
12   return c;
13 }
14 
15 int
16 main ()
17 {
18   vector unsigned int y;
19   vector unsigned int x;
20   vector unsigned int z;
21   int a;
22 
23   /* This line may look unnecessary but we do need it, because we want to
24      have a line to do a next over (so that gdb refetches the registers)
25      and we don't want the code to change any vector registers.
26      The splat operations below modify the VRs,i
27      so we don't want to execute them yet.  */
28   a = 9;
29   x = ((vector unsigned int) vec_splat_u8 (-2));
30   y = ((vector unsigned int) vec_splat_u8 (1));
31 
32   z = vector_fun (x, y);
33   x = vec_sld (x,y,2);
34 
35   x = vec_add (x, ((vector unsigned int){5,6,7,8}));
36   z = (vector unsigned int) vec_splat_u8 ( -2);
37   y = vec_add (x, z);
38   z = (vector unsigned int) vec_cmpeq (x,y);
39 
40   return 0;
41 }
42