1! Test the DSHIFTL and DSHIFTR intrinsics.
2!
3! { dg-do run }
4! { dg-options "-ffree-line-length-none" }
5
6  implicit none
7
8  interface run_dshiftl
9    procedure dshiftl_1
10    procedure dshiftl_2
11    procedure dshiftl_4
12    procedure dshiftl_8
13  end interface
14  interface run_dshiftr
15    procedure dshiftr_1
16    procedure dshiftr_2
17    procedure dshiftr_4
18    procedure dshiftr_8
19  end interface
20
21#define RESL(I,J,SHIFT) \
22  IOR(SHIFTL(I,SHIFT),SHIFTR(J,BIT_SIZE(J)-SHIFT))
23#define RESR(I,J,SHIFT) \
24  IOR(SHIFTL(I,BIT_SIZE(I)-SHIFT),SHIFTR(J,SHIFT))
25
26#define CHECK(I,J,SHIFT) \
27  if (dshiftl(I,J,SHIFT) /= RESL(I,J,SHIFT)) STOP 1; \
28  if (dshiftr(I,J,SHIFT) /= RESR(I,J,SHIFT)) STOP 2; \
29  if (run_dshiftl(I,J,SHIFT) /= RESL(I,J,SHIFT)) STOP 3; \
30  if (run_dshiftr(I,J,SHIFT) /= RESR(I,J,SHIFT)) STOP 4
31
32  CHECK(0_1,0_1,0)
33  CHECK(0_1,0_1,1)
34  CHECK(0_1,0_1,7)
35  CHECK(0_1,0_1,8)
36  CHECK(28_1,79_1,0)
37  CHECK(28_1,79_1,1)
38  CHECK(28_1,79_1,5)
39  CHECK(28_1,79_1,7)
40  CHECK(28_1,79_1,8)
41  CHECK(-28_1,79_1,0)
42  CHECK(-28_1,79_1,1)
43  CHECK(-28_1,79_1,5)
44  CHECK(-28_1,79_1,7)
45  CHECK(-28_1,79_1,8)
46  CHECK(28_1,-79_1,0)
47  CHECK(28_1,-79_1,1)
48  CHECK(28_1,-79_1,5)
49  CHECK(28_1,-79_1,7)
50  CHECK(28_1,-79_1,8)
51  CHECK(-28_1,-79_1,0)
52  CHECK(-28_1,-79_1,1)
53  CHECK(-28_1,-79_1,5)
54  CHECK(-28_1,-79_1,7)
55  CHECK(-28_1,-79_1,8)
56
57  CHECK(0_2,0_2,0)
58  CHECK(0_2,0_2,1)
59  CHECK(0_2,0_2,7)
60  CHECK(0_2,0_2,8)
61  CHECK(28_2,79_2,0)
62  CHECK(28_2,79_2,1)
63  CHECK(28_2,79_2,5)
64  CHECK(28_2,79_2,7)
65  CHECK(28_2,79_2,8)
66  CHECK(-28_2,79_2,0)
67  CHECK(-28_2,79_2,1)
68  CHECK(-28_2,79_2,5)
69  CHECK(-28_2,79_2,7)
70  CHECK(-28_2,79_2,8)
71  CHECK(28_2,-79_2,0)
72  CHECK(28_2,-79_2,1)
73  CHECK(28_2,-79_2,5)
74  CHECK(28_2,-79_2,7)
75  CHECK(28_2,-79_2,8)
76  CHECK(-28_2,-79_2,0)
77  CHECK(-28_2,-79_2,1)
78  CHECK(-28_2,-79_2,5)
79  CHECK(-28_2,-79_2,7)
80  CHECK(-28_2,-79_2,8)
81
82  CHECK(0_4,0_4,0)
83  CHECK(0_4,0_4,1)
84  CHECK(0_4,0_4,7)
85  CHECK(0_4,0_4,8)
86  CHECK(28_4,79_4,0)
87  CHECK(28_4,79_4,1)
88  CHECK(28_4,79_4,5)
89  CHECK(28_4,79_4,7)
90  CHECK(28_4,79_4,8)
91  CHECK(-28_4,79_4,0)
92  CHECK(-28_4,79_4,1)
93  CHECK(-28_4,79_4,5)
94  CHECK(-28_4,79_4,7)
95  CHECK(-28_4,79_4,8)
96  CHECK(28_4,-79_4,0)
97  CHECK(28_4,-79_4,1)
98  CHECK(28_4,-79_4,5)
99  CHECK(28_4,-79_4,7)
100  CHECK(28_4,-79_4,8)
101  CHECK(-28_4,-79_4,0)
102  CHECK(-28_4,-79_4,1)
103  CHECK(-28_4,-79_4,5)
104  CHECK(-28_4,-79_4,7)
105  CHECK(-28_4,-79_4,8)
106
107  CHECK(0_8,0_8,0)
108  CHECK(0_8,0_8,1)
109  CHECK(0_8,0_8,7)
110  CHECK(0_8,0_8,8)
111  CHECK(28_8,79_8,0)
112  CHECK(28_8,79_8,1)
113  CHECK(28_8,79_8,5)
114  CHECK(28_8,79_8,7)
115  CHECK(28_8,79_8,8)
116  CHECK(-28_8,79_8,0)
117  CHECK(-28_8,79_8,1)
118  CHECK(-28_8,79_8,5)
119  CHECK(-28_8,79_8,7)
120  CHECK(-28_8,79_8,8)
121  CHECK(28_8,-79_8,0)
122  CHECK(28_8,-79_8,1)
123  CHECK(28_8,-79_8,5)
124  CHECK(28_8,-79_8,7)
125  CHECK(28_8,-79_8,8)
126  CHECK(-28_8,-79_8,0)
127  CHECK(-28_8,-79_8,1)
128  CHECK(-28_8,-79_8,5)
129  CHECK(-28_8,-79_8,7)
130  CHECK(-28_8,-79_8,8)
131
132
133contains
134
135  function dshiftl_1 (i, j, shift) result(res)
136    integer(kind=1) :: i, j, res
137    integer :: shift
138    res = dshiftl(i,j,shift)
139  end function
140  function dshiftl_2 (i, j, shift) result(res)
141    integer(kind=2) :: i, j, res
142    integer :: shift
143    res = dshiftl(i,j,shift)
144  end function
145  function dshiftl_4 (i, j, shift) result(res)
146    integer(kind=4) :: i, j, res
147    integer :: shift
148    res = dshiftl(i,j,shift)
149  end function
150  function dshiftl_8 (i, j, shift) result(res)
151    integer(kind=8) :: i, j, res
152    integer :: shift
153    res = dshiftl(i,j,shift)
154  end function
155
156  function dshiftr_1 (i, j, shift) result(res)
157    integer(kind=1) :: i, j, res
158    integer :: shift
159    res = dshiftr(i,j,shift)
160  end function
161  function dshiftr_2 (i, j, shift) result(res)
162    integer(kind=2) :: i, j, res
163    integer :: shift
164    res = dshiftr(i,j,shift)
165  end function
166  function dshiftr_4 (i, j, shift) result(res)
167    integer(kind=4) :: i, j, res
168    integer :: shift
169    res = dshiftr(i,j,shift)
170  end function
171  function dshiftr_8 (i, j, shift) result(res)
172    integer(kind=8) :: i, j, res
173    integer :: shift
174    res = dshiftr(i,j,shift)
175  end function
176
177end
178