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
|
/* { dg-do run { target { riscv_vector } } } */
/* { dg-additional-options "-std=c99 -fno-vect-cost-model --param=riscv-autovec-preference=fixed-vlmax" } */
#include "shift-template.h"
#include <stdio.h>
#include <assert.h>
#define SZ 512
#define RUN(TYPE,VAL) \
TYPE a##TYPE[SZ]; \
TYPE b##TYPE[SZ]; \
for (int i = 0; i < SZ; i++) \
{ \
a##TYPE[i] = VAL; \
b##TYPE[i] = i % 4; \
} \
vshl_##TYPE (a##TYPE, a##TYPE, b##TYPE, SZ); \
for (int i = 0; i < SZ; i++) \
assert (a##TYPE[i] == (VAL << (i % 4)));
#define RUN2(TYPE,VAL) \
TYPE as##TYPE[SZ]; \
TYPE bs##TYPE[SZ]; \
for (int i = 0; i < SZ; i++) \
{ \
as##TYPE[i] = VAL; \
bs##TYPE[i] = i % 4; \
} \
vshiftr_##TYPE (as##TYPE, as##TYPE, bs##TYPE, SZ); \
for (int i = 0; i < SZ; i++) \
assert (as##TYPE[i] == (VAL >> (i % 4)));
#define RUN_ALL() \
RUN(int16_t, 1) \
RUN(uint16_t, 2) \
RUN(int32_t, 3) \
RUN(uint32_t, 4) \
RUN(int64_t, 5) \
RUN(uint64_t, 6) \
RUN2(int16_t, -7) \
RUN2(uint16_t, 8) \
RUN2(int32_t, -9) \
RUN2(uint32_t, 10) \
RUN2(int64_t, -11) \
RUN2(uint64_t, 12)
int main ()
{
RUN_ALL()
}
|