aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.target/aarch64/narrow_high-intrinsics.c
blob: 0f23cc9c7b51ddc06915b6b3d41dd0fa362c5d56 (plain)
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* { dg-do compile } */
/* { dg-options "-O3" } */

#include "arm_neon.h"

#define TWO(name, rettype, rmwtype, intype, fs) \
  rettype test_ ## name ## _ ## fs \
		(rmwtype a, intype b, intype c) \
	{ \
		return name ## _ ## fs (a, b, c); \
	}

TWO (vsubhn_high, int8x16_t, int8x8_t, int16x8_t,  s16)
TWO (vsubhn_high, int16x8_t, int16x4_t, int32x4_t, s32)
TWO (vsubhn_high, int32x4_t, int32x2_t, int64x2_t, s64)
TWO (vsubhn_high, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWO (vsubhn_high, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWO (vsubhn_high, uint32x4_t, uint32x2_t, uint64x2_t, u64)

TWO (vaddhn_high, int8x16_t, int8x8_t, int16x8_t,  s16)
TWO (vaddhn_high, int16x8_t, int16x4_t, int32x4_t, s32)
TWO (vaddhn_high, int32x4_t, int32x2_t, int64x2_t, s64)
TWO (vaddhn_high, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWO (vaddhn_high, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWO (vaddhn_high, uint32x4_t, uint32x2_t, uint64x2_t, u64)

TWO (vrsubhn_high, int8x16_t, int8x8_t, int16x8_t,  s16)
TWO (vrsubhn_high, int16x8_t, int16x4_t, int32x4_t, s32)
TWO (vrsubhn_high, int32x4_t, int32x2_t, int64x2_t, s64)
TWO (vrsubhn_high, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWO (vrsubhn_high, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWO (vrsubhn_high, uint32x4_t, uint32x2_t, uint64x2_t, u64)

TWO (vraddhn_high, int8x16_t, int8x8_t, int16x8_t,  s16)
TWO (vraddhn_high, int16x8_t, int16x4_t, int32x4_t, s32)
TWO (vraddhn_high, int32x4_t, int32x2_t, int64x2_t, s64)
TWO (vraddhn_high, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWO (vraddhn_high, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWO (vraddhn_high, uint32x4_t, uint32x2_t, uint64x2_t, u64)

#define TWOn(name, rettype, rmwtype, intype, fs) \
  rettype test_ ## name ## _ ## fs \
		(rmwtype a, intype b) \
	{ \
		return name ## _ ## fs (a, b, 4); \
	}

TWOn (vrshrn_high_n, int8x16_t, int8x8_t, int16x8_t,  s16)
TWOn (vrshrn_high_n, int16x8_t, int16x4_t, int32x4_t, s32)
TWOn (vrshrn_high_n, int32x4_t, int32x2_t, int64x2_t, s64)
TWOn (vrshrn_high_n, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWOn (vrshrn_high_n, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWOn (vrshrn_high_n, uint32x4_t, uint32x2_t, uint64x2_t, u64)

TWOn (vshrn_high_n, int8x16_t, int8x8_t, int16x8_t,  s16)
TWOn (vshrn_high_n, int16x8_t, int16x4_t, int32x4_t, s32)
TWOn (vshrn_high_n, int32x4_t, int32x2_t, int64x2_t, s64)
TWOn (vshrn_high_n, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWOn (vshrn_high_n, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWOn (vshrn_high_n, uint32x4_t, uint32x2_t, uint64x2_t, u64)

TWOn (vqshrun_high_n, uint8x16_t, uint8x8_t, int16x8_t,  s16)
TWOn (vqshrun_high_n, uint16x8_t, uint16x4_t, int32x4_t, s32)
TWOn (vqshrun_high_n, uint32x4_t, uint32x2_t, int64x2_t, s64)

TWOn (vqrshrun_high_n, uint8x16_t, uint8x8_t, int16x8_t,  s16)
TWOn (vqrshrun_high_n, uint16x8_t, uint16x4_t, int32x4_t, s32)
TWOn (vqrshrun_high_n, uint32x4_t, uint32x2_t, int64x2_t, s64)

TWOn (vqshrn_high_n, int8x16_t, int8x8_t, int16x8_t,  s16)
TWOn (vqshrn_high_n, int16x8_t, int16x4_t, int32x4_t, s32)
TWOn (vqshrn_high_n, int32x4_t, int32x2_t, int64x2_t, s64)
TWOn (vqshrn_high_n, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWOn (vqshrn_high_n, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWOn (vqshrn_high_n, uint32x4_t, uint32x2_t, uint64x2_t, u64)

TWOn (vqrshrn_high_n, int8x16_t, int8x8_t, int16x8_t,  s16)
TWOn (vqrshrn_high_n, int16x8_t, int16x4_t, int32x4_t, s32)
TWOn (vqrshrn_high_n, int32x4_t, int32x2_t, int64x2_t, s64)
TWOn (vqrshrn_high_n, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
TWOn (vqrshrn_high_n, uint16x8_t, uint16x4_t, uint32x4_t, u32)
TWOn (vqrshrn_high_n, uint32x4_t, uint32x2_t, uint64x2_t, u64)

#define ONE(name, rettype, rmwtype, intype, fs) \
  rettype test_ ## name ## _ ## fs \
		(rmwtype a, intype b) \
	{ \
		return name ## _ ## fs (a, b); \
	}

ONE (vqmovn_high, int8x16_t, int8x8_t, int16x8_t,  s16)
ONE (vqmovn_high, int16x8_t, int16x4_t, int32x4_t, s32)
ONE (vqmovn_high, int32x4_t, int32x2_t, int64x2_t, s64)
ONE (vqmovn_high, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
ONE (vqmovn_high, uint16x8_t, uint16x4_t, uint32x4_t, u32)
ONE (vqmovn_high, uint32x4_t, uint32x2_t, uint64x2_t, u64)

ONE (vqmovun_high, uint8x16_t, uint8x8_t, int16x8_t,  s16)
ONE (vqmovun_high, uint16x8_t, uint16x4_t, int32x4_t, s32)
ONE (vqmovun_high, uint32x4_t, uint32x2_t, int64x2_t, s64)

ONE (vmovn_high, int8x16_t, int8x8_t, int16x8_t,  s16)
ONE (vmovn_high, int16x8_t, int16x4_t, int32x4_t, s32)
ONE (vmovn_high, int32x4_t, int32x2_t, int64x2_t, s64)
ONE (vmovn_high, uint8x16_t, uint8x8_t, uint16x8_t,  u16)
ONE (vmovn_high, uint16x8_t, uint16x4_t, uint32x4_t, u32)
ONE (vmovn_high, uint32x4_t, uint32x2_t, uint64x2_t, u64)


/* { dg-final { scan-assembler-times "\\tsubhn2 v" 6} }  */
/* { dg-final { scan-assembler-times "\\taddhn2\\tv" 6} }  */
/* { dg-final { scan-assembler-times "rsubhn2 v" 6} }  */
/* { dg-final { scan-assembler-times "raddhn2\\tv" 6} }  */
/* { dg-final { scan-assembler-times "\\trshrn2 v" 6} }  */
/* { dg-final { scan-assembler-times "\\tshrn2 v" 6} }  */
/* { dg-final { scan-assembler-times "sqshrun2 v" 3} }  */
/* { dg-final { scan-assembler-times "sqrshrun2 v" 3} }  */
/* { dg-final { scan-assembler-times "sqshrn2 v" 3} }  */
/* { dg-final { scan-assembler-times "uqshrn2 v" 3} }  */
/* { dg-final { scan-assembler-times "sqrshrn2 v" 3} }  */
/* { dg-final { scan-assembler-times "uqrshrn2 v" 3} }  */
/* { dg-final { scan-assembler-times "uqxtn2 v" 3} }  */
/* { dg-final { scan-assembler-times "sqxtn2 v" 3} }  */
/* { dg-final { scan-assembler-times "sqxtun2 v" 3} }  */
/* { dg-final { scan-assembler-times "\\txtn2 v" 6} }  */