Commit d4f18ec6 by Kelvin Nilsen

rs6000-c.c (altivec_overloaded_builtins): Remove erroneous entries for "vector int vec_ldl (int...

gcc/ChangeLog:

2018-04-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Remove
	erroneous entries for
	"vector int vec_ldl (int, long int *)", and
	"vector unsigned int vec_ldl (int, unsigned long int *)".
	Add comments and entries for
	"vector bool char vec_ldl (int, bool char *)",
	"vector bool short vec_ldl (int, bool short *)",
	"vector bool int vec_ldl (int, bool int *)",
	"vector bool long long vec_ldl (int, bool long long *)",
	"vector pixel vec_ldl (int, pixel *)",
	"vector long long vec_ldl (int, long long *)",
	"vector unsigned long long vec_ldl (int, unsigned long long *)".
	* config/rs6000/rs6000.c (rs6000_init_builtins): Initialize new
	type tree bool_long_long_type_node and correct definition of
	bool_V2DI_type_node to make reference to this new type tree.
	(rs6000_mangle_type): Replace erroneous reference to
	bool_long_type_node with bool_long_long_type_node.
	* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
	comments to emphasize sign distinctions for char and int types and
	replace RS6000_BTI_bool_long constant with
	RS6000_BTI_bool_long_long constant.  Also add comment to restrict
	use of RS6000_BTI_pixel.
	(bool_long_type_node): Remove this macro definition.
	(bool_long_long_type_node): New macro definition

gcc/testsuite/ChangeLog:

2018-04-10  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* gcc.target/powerpc/vec-ldl-1.c: New test.
	* gcc.dg/vmx/ops-long-1.c: Correct test programs to reflect
	corrections to ABI implementation.

From-SVN: r259294
parent 45d14461
2018-04-10 Kelvin Nilsen <kelvin@gcc.gnu.org>
* config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Remove
erroneous entries for
"vector int vec_ldl (int, long int *)", and
"vector unsigned int vec_ldl (int, unsigned long int *)".
Add comments and entries for
"vector bool char vec_ldl (int, bool char *)",
"vector bool short vec_ldl (int, bool short *)",
"vector bool int vec_ldl (int, bool int *)",
"vector bool long long vec_ldl (int, bool long long *)",
"vector pixel vec_ldl (int, pixel *)",
"vector long long vec_ldl (int, long long *)",
"vector unsigned long long vec_ldl (int, unsigned long long *)".
* config/rs6000/rs6000.c (rs6000_init_builtins): Initialize new
type tree bool_long_long_type_node and correct definition of
bool_V2DI_type_node to make reference to this new type tree.
(rs6000_mangle_type): Replace erroneous reference to
bool_long_type_node with bool_long_long_type_node.
* config/rs6000/rs6000.h (enum rs6000_builtin_type_index): Add
comments to emphasize sign distinctions for char and int types and
replace RS6000_BTI_bool_long constant with
RS6000_BTI_bool_long_long constant. Also add comment to restrict
use of RS6000_BTI_pixel.
(bool_long_type_node): Remove this macro definition.
(bool_long_long_type_node): New macro definition
2018-04-10 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/85300
......
......@@ -1655,27 +1655,45 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
{ ALTIVEC_BUILTIN_VEC_LVEBX, ALTIVEC_BUILTIN_LVEBX,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
/* vector float vec_ldl (int, vector float *);
vector float vec_ldl (int, float *); */
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SF,
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_V4SF, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SF,
RS6000_BTI_V4SF, RS6000_BTI_INTSI, ~RS6000_BTI_float, 0 },
/* vector bool int vec_ldl (int, vector bool int *);
vector bool int vec_ldl (int, bool int *);
vector int vec_ldl (int, vector int *);
vector int vec_ldl (int, int *);
vector unsigned int vec_ldl (int, vector unsigned int *);
vector unsigned int vec_ldl (int, unsigned int *); */
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_bool_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_int, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_INTSI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_long, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V4SI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTSI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V4SI,
RS6000_BTI_unsigned_V4SI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_long, 0 },
/* vector bool short vec_ldl (int, vector bool short *);
vector bool short vec_ldl (int, bool short *);
vector pixel vec_ldl (int, vector pixel *);
vector short vec_ldl (int, vector short *);
vector short vec_ldl (int, short *);
vector unsigned short vec_ldl (int, vector unsigned short *);
vector unsigned short vec_ldl (int, unsigned short *); */
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V8HI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_bool_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_short, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_pixel_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_pixel_V8HI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_V8HI, 0 },
......@@ -1685,9 +1703,18 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_unsigned_V8HI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V8HI,
RS6000_BTI_unsigned_V8HI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTHI, 0 },
/* vector bool char vec_ldl (int, vector bool char *);
vector bool char vec_ldl (int, bool char *);
vector char vec_ldl (int, vector char *);
vector char vec_ldl (int, char *);
vector unsigned char vec_ldl (int, vector unsigned char *);
vector unsigned char vec_ldl (int, unsigned char *); */
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V16QI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_bool_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_char, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_V16QI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_INTQI, 0 },
......@@ -1696,15 +1723,35 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = {
~RS6000_BTI_unsigned_V16QI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V16QI,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
/* vector double vec_ldl (int, vector double *);
vector double vec_ldl (int, double *); */
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DF,
RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_V2DF, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DF,
RS6000_BTI_V2DF, RS6000_BTI_INTSI, ~RS6000_BTI_double, 0 },
/* vector long long vec_ldl (int, vector long long *);
vector long long vec_ldl (int, long long *);
vector unsigned long long vec_ldl (int, vector unsigned long long *);
vector unsigned long long vec_ldl (int, unsigned long long *);
vector bool long long vec_ldl (int, vector bool long long *);
vector bool long long vec_ldl (int, bool long long *); */
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_long_long, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_unsigned_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_unsigned_V2DI, RS6000_BTI_INTSI,
~RS6000_BTI_unsigned_long_long, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_V2DI, 0 },
{ ALTIVEC_BUILTIN_VEC_LDL, ALTIVEC_BUILTIN_LVXL_V2DI,
RS6000_BTI_bool_V2DI, RS6000_BTI_INTSI, ~RS6000_BTI_bool_long_long, 0 },
{ ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
RS6000_BTI_unsigned_V16QI, RS6000_BTI_INTSI, ~RS6000_BTI_UINTQI, 0 },
{ ALTIVEC_BUILTIN_VEC_LVSL, ALTIVEC_BUILTIN_LVSL,
......
......@@ -16953,7 +16953,7 @@ rs6000_init_builtins (void)
bool_char_type_node = build_distinct_type_copy (unsigned_intQI_type_node);
bool_short_type_node = build_distinct_type_copy (unsigned_intHI_type_node);
bool_int_type_node = build_distinct_type_copy (unsigned_intSI_type_node);
bool_long_type_node = build_distinct_type_copy (unsigned_intDI_type_node);
bool_long_long_type_node = build_distinct_type_copy (unsigned_intDI_type_node);
pixel_type_node = build_distinct_type_copy (unsigned_intHI_type_node);
long_integer_type_internal_node = long_integer_type_node;
......@@ -17070,7 +17070,7 @@ rs6000_init_builtins (void)
bool_V2DI_type_node = rs6000_vector_type (TARGET_POWERPC64
? "__vector __bool long"
: "__vector __bool long long",
bool_long_type_node, 2);
bool_long_long_type_node, 2);
pixel_V8HI_type_node = rs6000_vector_type ("__vector __pixel",
pixel_type_node, 8);
......@@ -32900,7 +32900,7 @@ rs6000_mangle_type (const_tree type)
if (type == bool_short_type_node) return "U6__bools";
if (type == pixel_type_node) return "u7__pixel";
if (type == bool_int_type_node) return "U6__booli";
if (type == bool_long_type_node) return "U6__booll";
if (type == bool_long_long_type_node) return "U6__boolx";
/* Use a unique name for __float128 rather than trying to use "e" or "g". Use
"g" for IBM extended double, no matter whether it is long double (using
......@@ -2580,7 +2580,7 @@ enum rs6000_builtin_type_index
RS6000_BTI_opaque_V2SF,
RS6000_BTI_opaque_p_V2SI,
RS6000_BTI_opaque_V4SI,
RS6000_BTI_V16QI,
RS6000_BTI_V16QI, /* __vector signed char */
RS6000_BTI_V1TI,
RS6000_BTI_V2SI,
RS6000_BTI_V2SF,
......@@ -2590,7 +2590,7 @@ enum rs6000_builtin_type_index
RS6000_BTI_V4SI,
RS6000_BTI_V4SF,
RS6000_BTI_V8HI,
RS6000_BTI_unsigned_V16QI,
RS6000_BTI_unsigned_V16QI, /* __vector unsigned char */
RS6000_BTI_unsigned_V1TI,
RS6000_BTI_unsigned_V8HI,
RS6000_BTI_unsigned_V4SI,
......@@ -2598,8 +2598,14 @@ enum rs6000_builtin_type_index
RS6000_BTI_bool_char, /* __bool char */
RS6000_BTI_bool_short, /* __bool short */
RS6000_BTI_bool_int, /* __bool int */
RS6000_BTI_bool_long, /* __bool long */
RS6000_BTI_pixel, /* __pixel */
RS6000_BTI_bool_long_long, /* __bool long long */
RS6000_BTI_pixel, /* __pixel (16 bits arranged as 4
channels of 1, 5, 5, and 5 bits
respectively as packed with the
vpkpx insn. __pixel is only
meaningful as a vector type.
There is no corresponding scalar
__pixel data type.) */
RS6000_BTI_bool_V16QI, /* __vector __bool char */
RS6000_BTI_bool_V8HI, /* __vector __bool short */
RS6000_BTI_bool_V4SI, /* __vector __bool int */
......@@ -2609,11 +2615,11 @@ enum rs6000_builtin_type_index
RS6000_BTI_unsigned_long, /* long_unsigned_type_node */
RS6000_BTI_long_long, /* long_long_integer_type_node */
RS6000_BTI_unsigned_long_long, /* long_long_unsigned_type_node */
RS6000_BTI_INTQI, /* intQI_type_node */
RS6000_BTI_INTQI, /* (signed) intQI_type_node */
RS6000_BTI_UINTQI, /* unsigned_intQI_type_node */
RS6000_BTI_INTHI, /* intHI_type_node */
RS6000_BTI_UINTHI, /* unsigned_intHI_type_node */
RS6000_BTI_INTSI, /* intSI_type_node */
RS6000_BTI_INTSI, /* intSI_type_node (signed) */
RS6000_BTI_UINTSI, /* unsigned_intSI_type_node */
RS6000_BTI_INTDI, /* intDI_type_node */
RS6000_BTI_UINTDI, /* unsigned_intDI_type_node */
......@@ -2654,7 +2660,7 @@ enum rs6000_builtin_type_index
#define bool_char_type_node (rs6000_builtin_types[RS6000_BTI_bool_char])
#define bool_short_type_node (rs6000_builtin_types[RS6000_BTI_bool_short])
#define bool_int_type_node (rs6000_builtin_types[RS6000_BTI_bool_int])
#define bool_long_type_node (rs6000_builtin_types[RS6000_BTI_bool_long])
#define bool_long_long_type_node (rs6000_builtin_types[RS6000_BTI_bool_long_long])
#define pixel_type_node (rs6000_builtin_types[RS6000_BTI_pixel])
#define bool_V16QI_type_node (rs6000_builtin_types[RS6000_BTI_bool_V16QI])
#define bool_V8HI_type_node (rs6000_builtin_types[RS6000_BTI_bool_V8HI])
......
2018-04-10 Kelvin Nilsen <kelvin@gcc.gnu.org>
* gcc.target/powerpc/vec-ldl-1.c: New test.
* gcc.dg/vmx/ops-long-1.c: Correct test programs to reflect
corrections to ABI implementation.
2018-04-10 Thomas Schwinge <thomas@codesourcery.com>
PR target/85056
......
/* { dg-do compile } */
/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mno-vsx -Wno-deprecated" } */
/* { dg-require-effective-target vmx_hw } */
/* { dg-options "-maltivec -mabi=altivec -std=gnu99 -mvsx -Wno-deprecated" } */
/* Checks from the original ops.c that pass pointers to long or
unsigned long for operations that support that in released versions
......@@ -10,28 +11,33 @@
extern int *var_int;
extern long * *var_long_ptr;
extern unsigned long * *var_unsigned_long_ptr;
extern long long int * *var_long_long_ptr;
extern unsigned long long int * *var_unsigned_long_long_ptr;
extern vector signed int * *var_vec_s32_ptr;
extern vector signed int *var_vec_s32;
extern vector unsigned char * *var_vec_u8_ptr;
extern vector unsigned char *var_vec_u8;
extern vector unsigned int * *var_vec_u32_ptr;
extern vector unsigned int *var_vec_u32;
/* Use of long long int types requires -mvsx command-line option. */
extern vector long long int *var_vec_s64;
extern vector unsigned long long int *var_vec_u64;
void f13() {
*var_vec_s32++ = vec_ld(var_int[0], var_long_ptr[1]);
*var_vec_s32++ = vec_lde(var_int[0], var_long_ptr[1]);
*var_vec_s32++ = vec_ldl(var_int[0], var_long_ptr[1]);
*var_vec_s64++ = vec_ldl(var_int[0], var_long_long_ptr[1]);
*var_vec_s32++ = vec_lvewx(var_int[0], var_long_ptr[1]);
*var_vec_s32++ = vec_lvx(var_int[0], var_long_ptr[1]);
*var_vec_s32++ = vec_lvxl(var_int[0], var_long_ptr[1]);
*var_vec_s64++ = vec_lvxl(var_int[0], var_long_long_ptr[1]);
}
void f22() {
*var_vec_u32++ = vec_ld(var_int[0], var_unsigned_long_ptr[1]);
*var_vec_u32++ = vec_lde(var_int[0], var_unsigned_long_ptr[1]);
*var_vec_u32++ = vec_ldl(var_int[0], var_unsigned_long_ptr[1]);
*var_vec_u64++ = vec_ldl(var_int[0], var_unsigned_long_long_ptr[1]);
*var_vec_u32++ = vec_lvewx(var_int[0], var_unsigned_long_ptr[1]);
*var_vec_u32++ = vec_lvx(var_int[0], var_unsigned_long_ptr[1]);
*var_vec_u32++ = vec_lvxl(var_int[0], var_unsigned_long_ptr[1]);
*var_vec_u64++ = vec_lvxl(var_int[0], var_unsigned_long_long_ptr[1]);
}
void f25() {
*var_vec_u8++ = vec_lvsl(var_int[0], var_long_ptr[1]);
......
/* { dg-do run { target powerpc*-*-* } } */
/* { dg-require-effective-target vmx_hw } */
/* { dg-options "-maltivec -O0 -Wall" } */
#include <altivec.h>
#include <stdlib.h>
/* vec_ldl and vec_lvxl (an alias for vec_ldl) do an aligned vector
* load from memory, marking the fetched memory as least recently used
* (hinting that we do not anticipate a need to fetch this vector
* again within the near future.)
*
* vector <TYPE> result = vec_ldl (int offset, <TYPE> *address)
* vector <TYPE> result = vec_ldl (int offset, vector <TYPE> *address)
*
* The effect of these instructions is to perform the following:
*
* resuilt = *((vector <TTYPE> *)((((char *) address) + offset) & ~0x0f))
*
* This test exercises the following new prototypes of the vec_ldl
* service which were added in late March 2018:
*
* vector bool int vec_ldl (int, bool int *)
* vector bool short vec_ldl (int, bool short *)
* vector bool char vec_ldl (int, bool char *)
* vector double vec_ldl (int, double *)
* vector long long int vec_ldl (int, long long int *)
* vector unsigned long long int vec_ldl (int, unsigned long long int *)
* vector bool long long vec_ldl (int, bool long long *)
*/
static signed char ca[64] __attribute__((aligned(16)));
static unsigned char uca[64] __attribute__((aligned(16)));
static vector signed char *vcp = (vector signed char *) ca;
static unsigned vector char *vucp = (vector unsigned char *) uca;
static short sa[32] __attribute__((aligned(16)));
static unsigned short usa[32] __attribute__((aligned(16)));
static vector short *vsp = (vector short *) sa;
static unsigned vector short *vusp = (vector unsigned short *) usa;
static int ia[16] __attribute__((aligned(16)));
static unsigned int uia[16] __attribute__((aligned(16)));
static vector int *vip = (vector int *) ia;
static unsigned vector int *vuip = (vector unsigned int *) uia;
static long long la[8] __attribute__((aligned(16)));
static unsigned long long ula[8] __attribute__((aligned(16)));
static vector long long *vlp = (vector long long *) la;
static unsigned vector long long *vulp = (vector unsigned long long *) ula;
static double da[8] __attribute__((aligned(16)));
static vector double *vdp = (vector double *) da;
void
doInitialization ()
{
unsigned int i;
for (i = 0; i < 64; i++)
ca[i] = uca[i] = i;
for (i = 0; i < 32; i++)
sa[i] = usa[i] = i;
for (i = 0; i < 16; i++)
ia[i] = uia[i] = i;
for (i = 0; i < 8; i++)
la[i] = ula[i] = i;
for (i = 0; i < 8; i++)
da[i] = 0.125 * i;
}
int
main (int argc, char *argv[])
{
vector long long int lv;
vector unsigned long long int ulv;
vector int iv;
vector unsigned int uiv;
vector short sv;
vector unsigned short usv;
vector signed char cv;
vector unsigned char ucv;
vector double dv;
doInitialization ();
/* Do vector of char. */
for (int i = 0; i < 16; i++) {
/* Focus on ca[16] ... ca[31]. */
cv = vec_ldl (i+16, ca); /* compiler: invalid parameter combination */
if (cv[4] != ca[20])
abort ();
/* Focus on uca[32] ... uca[47]. */
ucv = vec_ldl (i+32, uca);
if (ucv[7] != uca[39])
abort ();
/* Focus on ca[0] ... ca[15]. */
cv = vec_ldl (i, vcp);
if (cv[3] != ca[3])
abort ();
/* Focus on ca[0] ... ca[15] while i <= 8.
Focus on ca[16] ... ca[31] while i > 8. */
ucv = vec_ldl (i+7, vucp);
if ((i+7 > 15) && (ucv[13] != uca[29]))
abort ();
if ((i + 7 <= 15) && (ucv[13] != uca[13]))
abort ();
}
/* Do vector of short. */
for (int i = 0; i < 16; i++) {
/* Focus on sa[8] ... sa[15]. */
sv = vec_ldl (i+16, sa);
if (sv[4] != sa[12])
abort ();
/* Focus on usa[24] ... usa[31]. */
usv = vec_ldl (i+48, usa);
if (usv[7] != usa[31])
abort ();
/* Focus on sa[0] ... sa[7]. */
sv = vec_ldl (i, vsp);
if (sv[3] != sa[3])
abort ();
/* Focus on usa[0] ... usa[7] while i <= 8.
Focus on usa[8] ... usa[15] while i > 8. */
usv = vec_ldl (i+7, vusp);
if ((i+7 > 15) && (usv[5] != usa[13]))
abort ();
if ((i + 7 <= 15) && (usv[5] != usa[5]))
abort ();
}
/* Do vector of int. */
for (int i = 0; i < 16; i++) {
/* Focus on ia[8] ... ia[11]. */
iv = vec_ldl (i+32, ia);
if (iv[3] != ia[11])
abort ();
/* Focus on uia[12] ... uia[15]. */
uiv = vec_ldl (i+48, uia);
if (uiv[2] != uia[14])
abort ();
/* Focus on ia[0] ... ia[3]. */
iv = vec_ldl (i, vip);
if (iv[3] != ia[3])
abort ();
/* Focus on uia[0] ... uia[3] while i <= 8.
Focus on uia[4] ... uia[7] while i > 8. */
uiv = vec_ldl (i+7, vuip);
if ((i+7 > 15) && (uiv[1] != uia[5]))
abort ();
if ((i + 7 <= 15) && (uiv[1] != uia[1]))
abort ();
}
/* Do vector of long long int. */
for (int i = 0; i < 16; i++) {
/* Focus on la[4] ... la[5]. */
lv = vec_ldl (i+32, la);
if (lv[1] != la[5])
abort ();
/* Focus on ula[6] ... ula[7]. */
ulv = vec_ldl (i+48, ula);
if (ulv[0] != uia[6])
abort ();
/* Focus on la[0] ... la[1]. */
lv = vec_ldl (i, vlp);
if (iv[1] != la[1])
abort ();
/* Focus on ula[0] ... uia[1] while i <= 8.
Focus on uia[2] ... uia[3] while i > 8. */
ulv = vec_ldl (i+7, vulp);
if ((i+7 > 15) && (ulv[1] != ula[3]))
abort ();
if ((i + 7 <= 15) && (ulv[1] != ula[1]))
abort ();
}
/* Do vector of double. */
for (int i = 0; i < 16; i++) {
/* Focus on da[2] ... da[3]. */
dv = vec_ldl (i+16, da);
if (dv[1] != da[3])
abort ();
/* Focus on da[6] ... da[7]. */
dv = vec_ldl (i+48, vdp);
if (dv[0] != da[6])
abort ();
/* Focus on da[0] ... da[1]. */
dv = vec_ldl (i, da);
if (dv[1] != da[1])
abort ();
/* Focus on da[0] ... da[1] while i <= 8.
Focus on da[2] ... da[3] while i > 8. */
dv = vec_ldl (i+7, vdp);
if ((i+7 <= 15) && (dv[1] != da[1]))
abort ();
if ((i + 7 > 15) && (dv[1] != da[3]))
abort ();
}
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment