1 # RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s
2 # Hexagon Programmer's Reference Manual 11.10.8 XTYPE/SHIFT
6 # CHECK: r17:16 = asr(r21:20, #31)
8 # CHECK: r17:16 = lsr(r21:20, #31)
10 # CHECK: r17:16 = asl(r21:20, #31)
12 # CHECK: r17 = asr(r21, #31)
14 # CHECK: r17 = lsr(r21, #31)
16 # CHECK: r17 = asl(r21, #31)
18 # Shift by immediate and accumulate
20 # CHECK: r17:16 -= asr(r21:20, #31)
22 # CHECK: r17:16 -= lsr(r21:20, #31)
24 # CHECK: r17:16 -= asl(r21:20, #31)
26 # CHECK: r17:16 += asr(r21:20, #31)
28 # CHECK: r17:16 += lsr(r21:20, #31)
30 # CHECK: r17:16 += asl(r21:20, #31)
32 # CHECK: r17 -= asr(r21, #31)
34 # CHECK: r17 -= lsr(r21, #31)
36 # CHECK: r17 -= asl(r21, #31)
38 # CHECK: r17 += asr(r21, #31)
40 # CHECK: r17 += lsr(r21, #31)
42 # CHECK: r17 += asl(r21, #31)
44 # CHECK: r17 = add(#21, asl(r17, #23))
46 # CHECK: r17 = sub(#21, asl(r17, #23))
48 # CHECK: r17 = add(#21, lsr(r17, #23))
50 # CHECK: r17 = sub(#21, lsr(r17, #23))
52 # Shift by immediate and add
54 # CHECK: r17 = addasl(r21, r31, #7)
56 # Shift by immediate and logical
58 # CHECK: r17:16 &= asr(r21:20, #31)
60 # CHECK: r17:16 &= lsr(r21:20, #31)
62 # CHECK: r17:16 &= asl(r21:20, #31)
64 # CHECK: r17:16 |= asr(r21:20, #31)
66 # CHECK: r17:16 |= lsr(r21:20, #31)
68 # CHECK: r17:16 |= asl(r21:20, #31)
70 # CHECK: r17:16 ^= lsr(r21:20, #31)
72 # CHECK: r17:16 ^= asl(r21:20, #31)
74 # CHECK: r17 &= asr(r21, #31)
76 # CHECK: r17 &= lsr(r21, #31)
78 # CHECK: r17 &= asl(r21, #31)
80 # CHECK: r17 |= asr(r21, #31)
82 # CHECK: r17 |= lsr(r21, #31)
84 # CHECK: r17 |= asl(r21, #31)
86 # CHECK: r17 ^= lsr(r21, #31)
88 # CHECK: r17 ^= asl(r21, #31)
90 # CHECK: r17 = and(#21, asl(r17, #31))
92 # CHECK: r17 = or(#21, asl(r17, #31))
94 # CHECK: r17 = and(#21, lsr(r17, #31))
96 # CHECK: r17 = or(#21, lsr(r17, #31))
98 # Shift right by immediate with rounding
100 # CHECK: r17:16 = asr(r21:20, #31):rnd
102 # CHECK: r17 = asr(r21, #31):rnd
104 # Shift left by immediate with saturation
106 # CHECK: r17 = asl(r21, #31):sat
110 # CHECK: r17:16 = asr(r21:20, r31)
112 # CHECK: r17:16 = lsr(r21:20, r31)
114 # CHECK: r17:16 = asl(r21:20, r31)
116 # CHECK: r17:16 = lsl(r21:20, r31)
118 # CHECK: r17 = asr(r21, r31)
120 # CHECK: r17 = lsr(r21, r31)
122 # CHECK: r17 = asl(r21, r31)
124 # CHECK: r17 = lsl(r21, r31)
126 # CHECK: r17 = lsl(#21, r31)
128 # Shift by register and accumulate
130 # CHECK: r17:16 -= asr(r21:20, r31)
132 # CHECK: r17:16 -= lsr(r21:20, r31)
134 # CHECK: r17:16 -= asl(r21:20, r31)
136 # CHECK: r17:16 -= lsl(r21:20, r31)
138 # CHECK: r17:16 += asr(r21:20, r31)
140 # CHECK: r17:16 += lsr(r21:20, r31)
142 # CHECK: r17:16 += asl(r21:20, r31)
144 # CHECK: r17:16 += lsl(r21:20, r31)
146 # CHECK: r17 -= asr(r21, r31)
148 # CHECK: r17 -= lsr(r21, r31)
150 # CHECK: r17 -= asl(r21, r31)
152 # CHECK: r17 -= lsl(r21, r31)
154 # CHECK: r17 += asr(r21, r31)
156 # CHECK: r17 += lsr(r21, r31)
158 # CHECK: r17 += asl(r21, r31)
160 # CHECK: r17 += lsl(r21, r31)
162 # Shift by register and logical
164 # CHECK: r17:16 |= asr(r21:20, r31)
166 # CHECK: r17:16 |= lsr(r21:20, r31)
168 # CHECK: r17:16 |= asl(r21:20, r31)
170 # CHECK: r17:16 |= lsl(r21:20, r31)
172 # CHECK: r17:16 &= asr(r21:20, r31)
174 # CHECK: r17:16 &= lsr(r21:20, r31)
176 # CHECK: r17:16 &= asl(r21:20, r31)
178 # CHECK: r17:16 &= lsl(r21:20, r31)
180 # CHECK: r17:16 ^= asr(r21:20, r31)
182 # CHECK: r17:16 ^= lsr(r21:20, r31)
184 # CHECK: r17:16 ^= asl(r21:20, r31)
186 # CHECK: r17:16 ^= lsl(r21:20, r31)
188 # CHECK: r17 |= asr(r21, r31)
190 # CHECK: r17 |= lsr(r21, r31)
192 # CHECK: r17 |= asl(r21, r31)
194 # CHECK: r17 |= lsl(r21, r31)
196 # CHECK: r17 &= asr(r21, r31)
198 # CHECK: r17 &= lsr(r21, r31)
200 # CHECK: r17 &= asl(r21, r31)
202 # CHECK: r17 &= lsl(r21, r31)
204 # Shift by register with saturation
206 # CHECK: r17 = asr(r21, r31):sat
208 # CHECK: r17 = asl(r21, r31):sat
210 # Vector shift halfwords by immediate
212 # CHECK: r17:16 = vasrh(r21:20, #5)
214 # CHECK: r17:16 = vlsrh(r21:20, #5)
216 # CHECK: r17:16 = vaslh(r21:20, #5)
218 # Vector arithmetic shift halfwords with round
220 # CHECK: r17:16 = vasrh(r21:20, #5):raw
222 # Vector arithmetic shift halfwords with saturate and pack
224 # CHECK: r17 = vasrhub(r21:20, #5):raw
226 # CHECK: r17 = vasrhub(r21:20, #5):sat
228 # Vector shift halfwords by register
230 # CHECK: r17:16 = vasrh(r21:20, r31)
232 # CHECK: r17:16 = vlsrh(r21:20, r31)
234 # CHECK: r17:16 = vaslh(r21:20, r31)
236 # CHECK: r17:16 = vlslh(r21:20, r31)
238 # Vector shift words by immediate
240 # CHECK: r17:16 = vasrw(r21:20, #31)
242 # CHECK: r17:16 = vlsrw(r21:20, #31)
244 # CHECK: r17:16 = vaslw(r21:20, #31)
246 # Vector shift words by register
248 # CHECK: r17:16 = vasrw(r21:20, r31)
250 # CHECK: r17:16 = vlsrw(r21:20, r31)
252 # CHECK: r17:16 = vaslw(r21:20, r31)
254 # CHECK: r17:16 = vlslw(r21:20, r31)
256 # Vector shift words with truncate and pack
258 # CHECK: r17 = vasrw(r21:20, #31)
260 # CHECK: r17 = vasrw(r21:20, r31)