1# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s 2# Hexagon Programmer's Reference Manual 11.10.8 XTYPE/SHIFT 3 4# Shift by immediate 5# CHECK: 10 df 14 80 6r17:16 = asr(r21:20, #31) 7# CHECK: 30 df 14 80 8r17:16 = lsr(r21:20, #31) 9# CHECK: 50 df 14 80 10r17:16 = asl(r21:20, #31) 11# CHECK: 11 df 15 8c 12r17 = asr(r21, #31) 13# CHECK: 31 df 15 8c 14r17 = lsr(r21, #31) 15# CHECK: 51 df 15 8c 16r17 = asl(r21, #31) 17 18# Shift by immediate and accumulate 19# CHECK: 10 df 14 82 20r17:16 -= asr(r21:20, #31) 21# CHECK: 30 df 14 82 22r17:16 -= lsr(r21:20, #31) 23# CHECK: 50 df 14 82 24r17:16 -= asl(r21:20, #31) 25# CHECK: 90 df 14 82 26r17:16 += asr(r21:20, #31) 27# CHECK: b0 df 14 82 28r17:16 += lsr(r21:20, #31) 29# CHECK: d0 df 14 82 30r17:16 += asl(r21:20, #31) 31# CHECK: 11 df 15 8e 32r17 -= asr(r21, #31) 33# CHECK: 31 df 15 8e 34r17 -= lsr(r21, #31) 35# CHECK: 51 df 15 8e 36r17 -= asl(r21, #31) 37# CHECK: 91 df 15 8e 38r17 += asr(r21, #31) 39# CHECK: b1 df 15 8e 40r17 += lsr(r21, #31) 41# CHECK: d1 df 15 8e 42r17 += asl(r21, #31) 43# CHECK: 4c f7 11 de 44r17 = add(#21, asl(r17, #23)) 45# CHECK: 4e f7 11 de 46r17 = sub(#21, asl(r17, #23)) 47# CHECK: 5c f7 11 de 48r17 = add(#21, lsr(r17, #23)) 49# CHECK: 5e f7 11 de 50r17 = sub(#21, lsr(r17, #23)) 51 52# Shift by immediate and add 53# CHECK: f1 d5 1f c4 54r17 = addasl(r21, r31, #7) 55 56# Shift by immediate and logical 57# CHECK: 10 df 54 82 58r17:16 &= asr(r21:20, #31) 59# CHECK: 30 df 54 82 60r17:16 &= lsr(r21:20, #31) 61# CHECK: 50 df 54 82 62r17:16 &= asl(r21:20, #31) 63# CHECK: 90 df 54 82 64r17:16 |= asr(r21:20, #31) 65# CHECK: b0 df 54 82 66r17:16 |= lsr(r21:20, #31) 67# CHECK: d0 df 54 82 68r17:16 |= asl(r21:20, #31) 69# CHECK: 30 df 94 82 70r17:16 ^= lsr(r21:20, #31) 71# CHECK: 50 df 94 82 72r17:16 ^= asl(r21:20, #31) 73# CHECK: 11 df 55 8e 74r17 &= asr(r21, #31) 75# CHECK: 31 df 55 8e 76r17 &= lsr(r21, #31) 77# CHECK: 51 df 55 8e 78r17 &= asl(r21, #31) 79# CHECK: 91 df 55 8e 80r17 |= asr(r21, #31) 81# CHECK: b1 df 55 8e 82r17 |= lsr(r21, #31) 83# CHECK: d1 df 55 8e 84r17 |= asl(r21, #31) 85# CHECK: 31 df 95 8e 86r17 ^= lsr(r21, #31) 87# CHECK: 51 df 95 8e 88r17 ^= asl(r21, #31) 89# CHECK: 48 ff 11 de 90r17 = and(#21, asl(r17, #31)) 91# CHECK: 4a ff 11 de 92r17 = or(#21, asl(r17, #31)) 93# CHECK: 58 ff 11 de 94r17 = and(#21, lsr(r17, #31)) 95# CHECK: 5a ff 11 de 96r17 = or(#21, lsr(r17, #31)) 97 98# Shift right by immediate with rounding 99# CHECK: f0 df d4 80 100r17:16 = asr(r21:20, #31):rnd 101# CHECK: 11 df 55 8c 102r17 = asr(r21, #31):rnd 103 104# Shift left by immediate with saturation 105# CHECK: 51 df 55 8c 106r17 = asl(r21, #31):sat 107 108# Shift by register 109# CHECK: 10 df 94 c3 110r17:16 = asr(r21:20, r31) 111# CHECK: 50 df 94 c3 112r17:16 = lsr(r21:20, r31) 113# CHECK: 90 df 94 c3 114r17:16 = asl(r21:20, r31) 115# CHECK: d0 df 94 c3 116r17:16 = lsl(r21:20, r31) 117# CHECK: 11 df 55 c6 118r17 = asr(r21, r31) 119# CHECK: 51 df 55 c6 120r17 = lsr(r21, r31) 121# CHECK: 91 df 55 c6 122r17 = asl(r21, r31) 123# CHECK: d1 df 55 c6 124r17 = lsl(r21, r31) 125# CHECK: f1 df 8a c6 126r17 = lsl(#21, r31) 127 128# Shift by register and accumulate 129# CHECK: 10 df 94 cb 130r17:16 -= asr(r21:20, r31) 131# CHECK: 50 df 94 cb 132r17:16 -= lsr(r21:20, r31) 133# CHECK: 90 df 94 cb 134r17:16 -= asl(r21:20, r31) 135# CHECK: d0 df 94 cb 136r17:16 -= lsl(r21:20, r31) 137# CHECK: 10 df d4 cb 138r17:16 += asr(r21:20, r31) 139# CHECK: 50 df d4 cb 140r17:16 += lsr(r21:20, r31) 141# CHECK: 90 df d4 cb 142r17:16 += asl(r21:20, r31) 143# CHECK: d0 df d4 cb 144r17:16 += lsl(r21:20, r31) 145# CHECK: 11 df 95 cc 146r17 -= asr(r21, r31) 147# CHECK: 51 df 95 cc 148r17 -= lsr(r21, r31) 149# CHECK: 91 df 95 cc 150r17 -= asl(r21, r31) 151# CHECK: d1 df 95 cc 152r17 -= lsl(r21, r31) 153# CHECK: 11 df d5 cc 154r17 += asr(r21, r31) 155# CHECK: 51 df d5 cc 156r17 += lsr(r21, r31) 157# CHECK: 91 df d5 cc 158r17 += asl(r21, r31) 159# CHECK: d1 df d5 cc 160r17 += lsl(r21, r31) 161 162# Shift by register and logical 163# CHECK: 10 df 14 cb 164r17:16 |= asr(r21:20, r31) 165# CHECK: 50 df 14 cb 166r17:16 |= lsr(r21:20, r31) 167# CHECK: 90 df 14 cb 168r17:16 |= asl(r21:20, r31) 169# CHECK: d0 df 14 cb 170r17:16 |= lsl(r21:20, r31) 171# CHECK: 10 df 54 cb 172r17:16 &= asr(r21:20, r31) 173# CHECK: 50 df 54 cb 174r17:16 &= lsr(r21:20, r31) 175# CHECK: 90 df 54 cb 176r17:16 &= asl(r21:20, r31) 177# CHECK: d0 df 54 cb 178r17:16 &= lsl(r21:20, r31) 179# CHECK: 10 df 74 cb 180r17:16 ^= asr(r21:20, r31) 181# CHECK: 50 df 74 cb 182r17:16 ^= lsr(r21:20, r31) 183# CHECK: 90 df 74 cb 184r17:16 ^= asl(r21:20, r31) 185# CHECK: d0 df 74 cb 186r17:16 ^= lsl(r21:20, r31) 187# CHECK: 11 df 15 cc 188r17 |= asr(r21, r31) 189# CHECK: 51 df 15 cc 190r17 |= lsr(r21, r31) 191# CHECK: 91 df 15 cc 192r17 |= asl(r21, r31) 193# CHECK: d1 df 15 cc 194r17 |= lsl(r21, r31) 195# CHECK: 11 df 55 cc 196r17 &= asr(r21, r31) 197# CHECK: 51 df 55 cc 198r17 &= lsr(r21, r31) 199# CHECK: 91 df 55 cc 200r17 &= asl(r21, r31) 201# CHECK: d1 df 55 cc 202r17 &= lsl(r21, r31) 203 204# Shift by register with saturation 205# CHECK: 11 df 15 c6 206r17 = asr(r21, r31):sat 207# CHECK: 91 df 15 c6 208r17 = asl(r21, r31):sat 209 210# Vector shift halfwords by immediate 211# CHECK: 10 c5 94 80 212r17:16 = vasrh(r21:20, #5) 213# CHECK: 30 c5 94 80 214r17:16 = vlsrh(r21:20, #5) 215# CHECK: 50 c5 94 80 216r17:16 = vaslh(r21:20, #5) 217 218# Vector arithmetic shift halfwords with round 219# CHECK: 10 c5 34 80 220r17:16 = vasrh(r21:20, #5):raw 221 222# Vector arithmetic shift halfwords with saturate and pack 223# CHECK: 91 c5 74 88 224r17 = vasrhub(r21:20, #5):raw 225# CHECK: b1 c5 74 88 226r17 = vasrhub(r21:20, #5):sat 227 228# Vector shift halfwords by register 229# CHECK: 10 df 54 c3 230r17:16 = vasrh(r21:20, r31) 231# CHECK: 50 df 54 c3 232r17:16 = vlsrh(r21:20, r31) 233# CHECK: 90 df 54 c3 234r17:16 = vaslh(r21:20, r31) 235# CHECK: d0 df 54 c3 236r17:16 = vlslh(r21:20, r31) 237 238# Vector shift words by immediate 239# CHECK: 10 df 54 80 240r17:16 = vasrw(r21:20, #31) 241# CHECK: 30 df 54 80 242r17:16 = vlsrw(r21:20, #31) 243# CHECK: 50 df 54 80 244r17:16 = vaslw(r21:20, #31) 245 246# Vector shift words by register 247# CHECK: 10 df 14 c3 248r17:16 = vasrw(r21:20, r31) 249# CHECK: 50 df 14 c3 250r17:16 = vlsrw(r21:20, r31) 251# CHECK: 90 df 14 c3 252r17:16 = vaslw(r21:20, r31) 253# CHECK: d0 df 14 c3 254r17:16 = vlslw(r21:20, r31) 255 256# Vector shift words with truncate and pack 257# CHECK: 51 df d4 88 258r17 = vasrw(r21:20, #31) 259# CHECK: 51 df 14 c5 260r17 = vasrw(r21:20, r31) 261