[mips][ias] Range check uimm6 operands and fix a bug this revealed.
[oota-llvm.git] / test / MC / Mips / rotations64.s
1 # RUN: llvm-mc  %s -arch=mips -mcpu=mips64 -show-encoding | FileCheck %s -check-prefix=CHECK-64
2 # RUN: llvm-mc  %s -arch=mips -mcpu=mips64r2 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
3 # RUN: llvm-mc  %s -arch=mips -mcpu=mips64r3 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
4 # RUN: llvm-mc  %s -arch=mips -mcpu=mips64r5 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
5 # RUN: llvm-mc  %s -arch=mips -mcpu=mips64r6 -show-encoding | FileCheck %s -check-prefix=CHECK-64R
6
7   .text
8 foo:
9   rol $4,$5
10 # CHECK-64:     subu    $1, $zero, $5       # encoding: [0x00,0x05,0x08,0x23]
11 # CHECK-64:     srlv    $1, $4, $1          # encoding: [0x00,0x24,0x08,0x06]
12 # CHECK-64:     sllv    $4, $4, $5          # encoding: [0x00,0xa4,0x20,0x04]
13 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
14 # CHECK-64R:    subu    $1, $zero, $5       # encoding: [0x00,0x05,0x08,0x23]
15 # CHECK-64R:    rotrv   $4, $4, $1          # encoding: [0x00,0x24,0x20,0x46]
16   rol $4,$5,$6
17 # CHECK-64:     subu    $1, $zero, $6       # encoding: [0x00,0x06,0x08,0x23]
18 # CHECK-64:     srlv    $1, $5, $1          # encoding: [0x00,0x25,0x08,0x06]
19 # CHECK-64:     sllv    $4, $5, $6          # encoding: [0x00,0xc5,0x20,0x04]
20 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
21 # CHECK-64R:    negu    $4, $6              # encoding: [0x00,0x06,0x20,0x23]
22 # CHECK-64R:    rotrv   $4, $5, $4          # encoding: [0x00,0x85,0x20,0x46]
23   rol $4,0
24 # CHECK-64:     srl     $4, $4, 0           # encoding: [0x00,0x04,0x20,0x02]
25 # CHECK-64R:    rotr    $4, $4, 0           # encoding: [0x00,0x24,0x20,0x02]
26   rol $4,$5,0
27 # CHECK-64:     srl     $4, $5, 0           # encoding: [0x00,0x05,0x20,0x02]
28 # CHECK-64R:    rotr    $4, $5, 0           # encoding: [0x00,0x25,0x20,0x02]
29   rol $4,1
30 # CHECK-64:     sll     $1, $4, 1           # encoding: [0x00,0x04,0x08,0x40]
31 # CHECK-64:     srl     $4, $4, 31          # encoding: [0x00,0x04,0x27,0xc2]
32 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
33 # CHECK-64R:    rotr    $4, $4, 31          # encoding: [0x00,0x24,0x27,0xc2]
34   rol $4,$5,1
35 # CHECK-64:     sll     $1, $5, 1           # encoding: [0x00,0x05,0x08,0x40]
36 # CHECK-64:     srl     $4, $5, 31          # encoding: [0x00,0x05,0x27,0xc2]
37 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
38 # CHECK-64R:    rotr    $4, $5, 31          # encoding: [0x00,0x25,0x27,0xc2]
39   rol $4,2
40 # CHECK-64:     sll     $1, $4, 2           # encoding: [0x00,0x04,0x08,0x80]
41 # CHECK-64:     srl     $4, $4, 30          # encoding: [0x00,0x04,0x27,0x82]
42 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
43 # CHECK-64R:    rotr    $4, $4, 30          # encoding: [0x00,0x24,0x27,0x82]
44   rol $4,$5,2
45 # CHECK-64:     sll     $1, $5, 2           # encoding: [0x00,0x05,0x08,0x80]
46 # CHECK-64:     srl     $4, $5, 30          # encoding: [0x00,0x05,0x27,0x82]
47 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
48 # CHECK-64R:    rotr    $4, $5, 30          # encoding: [0x00,0x25,0x27,0x82]
49
50   ror $4,$5
51 # CHECK-64:     subu    $1, $zero, $5       # encoding: [0x00,0x05,0x08,0x23]
52 # CHECK-64:     sllv    $1, $4, $1          # encoding: [0x00,0x24,0x08,0x04]
53 # CHECK-64:     srlv    $4, $4, $5          # encoding: [0x00,0xa4,0x20,0x06]
54 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
55 # CHECK-64R:    rotrv   $4, $4, $5          # encoding: [0x00,0xa4,0x20,0x46]
56   ror $4,$5,$6
57 # CHECK-64:     subu    $1, $zero, $6       # encoding: [0x00,0x06,0x08,0x23]
58 # CHECK-64:     sllv    $1, $5, $1          # encoding: [0x00,0x25,0x08,0x04]
59 # CHECK-64:     srlv    $4, $5, $6          # encoding: [0x00,0xc5,0x20,0x06]
60 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
61 # CHECK-64R:    rotrv   $4, $5, $6          # encoding: [0x00,0xc5,0x20,0x46]
62   ror $4,0
63 # CHECK-64:     srl     $4, $4, 0           # encoding: [0x00,0x04,0x20,0x02]
64 # CHECK-64R:    rotr    $4, $4, 0           # encoding: [0x00,0x24,0x20,0x02]
65   ror $4,$5,0
66 # CHECK-64:     srl     $4, $5, 0           # encoding: [0x00,0x05,0x20,0x02]
67 # CHECK-64R:    rotr    $4, $5, 0           # encoding: [0x00,0x25,0x20,0x02]
68   ror $4,1
69 # CHECK-64:     srl     $1, $4, 1           # encoding: [0x00,0x04,0x08,0x42]
70 # CHECK-64:     sll     $4, $4, 31          # encoding: [0x00,0x04,0x27,0xc0]
71 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
72 # CHECK-64R:    rotr    $4, $4, 1           # encoding: [0x00,0x24,0x20,0x42]
73   ror $4,$5,1
74 # CHECK-64:     srl     $1, $5, 1           # encoding: [0x00,0x05,0x08,0x42]
75 # CHECK-64:     sll     $4, $5, 31          # encoding: [0x00,0x05,0x27,0xc0]
76 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
77 # CHECK-64R:    rotr    $4, $5, 1           # encoding: [0x00,0x25,0x20,0x42]
78   ror $4,2
79 # CHECK-64:     srl     $1, $4, 2           # encoding: [0x00,0x04,0x08,0x82]
80 # CHECK-64:     sll     $4, $4, 30          # encoding: [0x00,0x04,0x27,0x80]
81 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
82 # CHECK-64R:    rotr    $4, $4, 2           # encoding: [0x00,0x24,0x20,0x82]
83   ror $4,$5,2
84 # CHECK-64:     srl     $1, $5, 2           # encoding: [0x00,0x05,0x08,0x82]
85 # CHECK-64:     sll     $4, $5, 30          # encoding: [0x00,0x05,0x27,0x80]
86 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
87 # CHECK-64R:    rotr    $4, $5, 2           # encoding: [0x00,0x25,0x20,0x82]
88
89   drol $4,$5
90 # CHECK-64:     dsubu   $1, $zero, $5       # encoding: [0x00,0x05,0x08,0x2f]
91 # CHECK-64:     dsrlv   $1, $4, $1          # encoding: [0x00,0x24,0x08,0x16]
92 # CHECK-64:     dsllv   $4, $4, $5          # encoding: [0x00,0xa4,0x20,0x14]
93 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
94 # CHECK-64R:    dsubu   $1, $zero, $5       # encoding: [0x00,0x05,0x08,0x2f]
95 # CHECK-64R:    drotrv  $4, $4, $1          # encoding: [0x00,0x24,0x20,0x56]
96   drol $4,$5,$6
97 # CHECK-64:     dsubu   $1, $zero, $6       # encoding: [0x00,0x06,0x08,0x2f]
98 # CHECK-64:     dsrlv   $1, $5, $1          # encoding: [0x00,0x25,0x08,0x16]
99 # CHECK-64:     dsllv   $4, $5, $6          # encoding: [0x00,0xc5,0x20,0x14]
100 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
101 # CHECK-64R:    dsubu   $4, $zero, $6       # encoding: [0x00,0x06,0x20,0x2f]
102 # CHECK-64R:    drotrv  $4, $5, $4          # encoding: [0x00,0x85,0x20,0x56]
103
104   drol $4,1
105 # CHECK-64:     dsll    $1, $4, 1           # encoding: [0x00,0x04,0x08,0x78]
106 # CHECK-64:     dsrl32  $4, $4, 31          # encoding: [0x00,0x04,0x27,0xfe]
107 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
108 # CHECK-64R:    drotr32 $4, $4, 31          # encoding: [0x00,0x24,0x27,0xfe]
109   drol $4,$5,0
110 # CHECK-64:     dsrl    $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3a]
111 # CHECK-64R:    drotr   $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3a]
112   drol $4,$5,1
113 # CHECK-64:     dsll    $1, $5, 1           # encoding: [0x00,0x05,0x08,0x78]
114 # CHECK-64:     dsrl32  $4, $5, 31          # encoding: [0x00,0x05,0x27,0xfe]
115 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
116 # CHECK-64R:    drotr32 $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfe]
117   drol $4,$5,31
118 # CHECK-64:     dsll    $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xf8]
119 # CHECK-64:     dsrl32  $4, $5, 1           # encoding: [0x00,0x05,0x20,0x7e]
120 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
121 # CHECK-64R:    drotr32 $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7e]
122   drol $4,$5,32
123 # CHECK-64:     dsll32  $1, $5, 0           # encoding: [0x00,0x05,0x08,0x3c]
124 # CHECK-64:     dsrl32  $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3e]
125 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
126 # CHECK-64R:    drotr32 $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3e]
127   drol $4,$5,33
128 # CHECK-64:     dsll32  $1, $5, 1           # encoding: [0x00,0x05,0x08,0x7c]
129 # CHECK-64:     dsrl    $4, $5, 31          # encoding: [0x00,0x05,0x27,0xfa]
130 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
131 # CHECK-64R:    drotr   $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfa]
132   drol $4,$5,63
133 # CHECK-64:     dsll32  $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xfc]
134 # CHECK-64:     dsrl    $4, $5, 1           # encoding: [0x00,0x05,0x20,0x7a]
135 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
136 # CHECK-64R:    drotr   $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7a]
137   drol $4,$5,64
138 # CHECK-64:     dsrl    $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3a]
139 # CHECK-64R:    drotr   $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3a]
140   drol $4,$5,65
141 # CHECK-64:     dsll    $1, $5, 1           # encoding: [0x00,0x05,0x08,0x78]
142 # CHECK-64:     dsrl32  $4, $5, 31          # encoding: [0x00,0x05,0x27,0xfe]
143 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
144 # CHECK-64R:    drotr32 $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfe]
145   drol $4,$5,95
146 # CHECK-64:     dsll    $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xf8]
147 # CHECK-64:     dsrl32  $4, $5, 1           # encoding: [0x00,0x05,0x20,0x7e]
148 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
149 # CHECK-64R:    drotr32 $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7e]
150   drol $4,$5,96
151 # CHECK-64:     dsll32  $1, $5, 0           # encoding: [0x00,0x05,0x08,0x3c]
152 # CHECK-64:     dsrl32  $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3e]
153 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
154 # CHECK-64R:    drotr32 $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3e]
155   drol $4,$5,97
156 # CHECK-64:     dsll32  $1, $5, 1           # encoding: [0x00,0x05,0x08,0x7c]
157 # CHECK-64:     dsrl    $4, $5, 31          # encoding: [0x00,0x05,0x27,0xfa]
158 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
159 # CHECK-64R:    drotr   $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfa]
160   drol $4,$5,127
161 # CHECK-64:     dsll32  $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xfc]
162 # CHECK-64:     dsrl    $4, $5, 1           # encoding: [0x00,0x05,0x20,0x7a]
163 # CHECK-64:     or  $4, $4, $1              # encoding: [0x00,0x81,0x20,0x25]
164 # CHECK-64R:    drotr   $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7a]
165
166   dror $4,$5
167 # CHECK-64:     dsubu   $1, $zero, $5       # encoding: [0x00,0x05,0x08,0x2f]
168 # CHECK-64:     dsllv   $1, $4, $1          # encoding: [0x00,0x24,0x08,0x14]
169 # CHECK-64:     dsrlv   $4, $4, $5          # encoding: [0x00,0xa4,0x20,0x16]
170 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
171 # CHECK-64R:    drotrv  $4, $4, $5          # encoding: [0x00,0xa4,0x20,0x56]
172   dror $4,$5,$6
173 # CHECK-64:     dsubu   $1, $zero, $6       # encoding: [0x00,0x06,0x08,0x2f]
174 # CHECK-64:     dsllv   $1, $5, $1          # encoding: [0x00,0x25,0x08,0x14]
175 # CHECK-64:     dsrlv   $4, $5, $6          # encoding: [0x00,0xc5,0x20,0x16]
176 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
177 # CHECK-64R:    drotrv  $4, $5, $6          # encoding: [0x00,0xc5,0x20,0x56]
178   dror $4,1
179 # CHECK-64:     dsrl    $1, $4, 1           # encoding: [0x00,0x04,0x08,0x7a]
180 # CHECK-64:     dsll32  $4, $4, 31          # encoding: [0x00,0x04,0x27,0xfc]
181 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
182 # CHECK-64R:    drotr   $4, $4, 1           # encoding: [0x00,0x24,0x20,0x7a]
183   dror $4,$5,0
184 # CHECK-64:     dsrl    $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3a]
185 # CHECK-64R:    drotr   $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3a]
186   dror $4,$5,1
187 # CHECK-64:     dsrl    $1, $5, 1           # encoding: [0x00,0x05,0x08,0x7a]
188 # CHECK-64:     dsll32  $4, $5, 31          # encoding: [0x00,0x05,0x27,0xfc]
189 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
190 # CHECK-64R:    drotr   $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7a]
191   dror $4,$5,31
192 # CHECK-64:     dsrl    $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xfa]
193 # CHECK-64:     dsll32  $4, $5, 1           # encoding: [0x00,0x05,0x20,0x7c]
194 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
195 # CHECK-64R:    drotr   $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfa]
196   dror $4,$5,32
197 # CHECK-64:     dsrl32  $1, $5, 0           # encoding: [0x00,0x05,0x08,0x3e]
198 # CHECK-64:     dsll32  $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3c]
199 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
200 # CHECK-64R:    drotr32 $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3e]
201   dror $4,$5,33
202 # CHECK-64:     dsrl32  $1, $5, 1           # encoding: [0x00,0x05,0x08,0x7e]
203 # CHECK-64:     dsll    $4, $5, 31          # encoding: [0x00,0x05,0x27,0xf8]
204 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
205 # CHECK-64R:    drotr32 $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7e]
206   dror $4,$5,63
207 # CHECK-64:     dsrl32  $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xfe]
208 # CHECK-64:     dsll    $4, $5, 1           # encoding: [0x00,0x05,0x20,0x78]
209 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
210 # CHECK-64R:    drotr32 $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfe]
211   dror $4,$5,64
212 # CHECK-64:     dsrl    $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3a]
213 # CHECK-64R:    drotr   $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3a]
214   dror $4,$5,65
215 # CHECK-64:     dsrl    $1, $5, 1           # encoding: [0x00,0x05,0x08,0x7a]
216 # CHECK-64:     dsll32  $4, $5, 31          # encoding: [0x00,0x05,0x27,0xfc]
217 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
218 # CHECK-64R:    drotr   $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7a]
219   dror $4,$5,95
220 # CHECK-64:     dsrl    $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xfa]
221 # CHECK-64:     dsll32  $4, $5, 1           # encoding: [0x00,0x05,0x20,0x7c]
222 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
223 # CHECK-64R:    drotr   $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfa]
224   dror $4,$5,96
225 # CHECK-64:     dsrl32  $1, $5, 0           # encoding: [0x00,0x05,0x08,0x3e]
226 # CHECK-64:     dsll32  $4, $5, 0           # encoding: [0x00,0x05,0x20,0x3c]
227 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
228 # CHECK-64R:    drotr32 $4, $5, 0           # encoding: [0x00,0x25,0x20,0x3e]
229   dror $4,$5,97
230 # CHECK-64:     dsrl32  $1, $5, 1           # encoding: [0x00,0x05,0x08,0x7e]
231 # CHECK-64:     dsll    $4, $5, 31          # encoding: [0x00,0x05,0x27,0xf8]
232 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
233 # CHECK-64R:    drotr32 $4, $5, 1           # encoding: [0x00,0x25,0x20,0x7e]
234   dror $4,$5,127
235 # CHECK-64:     dsrl32  $1, $5, 31          # encoding: [0x00,0x05,0x0f,0xfe]
236 # CHECK-64:     dsll    $4, $5, 1           # encoding: [0x00,0x05,0x20,0x78]
237 # CHECK-64:     or      $4, $4, $1          # encoding: [0x00,0x81,0x20,0x25]
238 # CHECK-64R:    drotr32 $4, $5, 31          # encoding: [0x00,0x25,0x27,0xfe]