# RUN: llvm-mc -triple=hexagon -disassemble < %s | FileCheck %s # Hexagon Programmer's Reference Manual 11.10.8 XTYPE/SHIFT # Shift by immediate 0x10 0xdf 0x14 0x80 # CHECK: r17:16 = asr(r21:20, #31) 0x30 0xdf 0x14 0x80 # CHECK: r17:16 = lsr(r21:20, #31) 0x50 0xdf 0x14 0x80 # CHECK: r17:16 = asl(r21:20, #31) 0x11 0xdf 0x15 0x8c # CHECK: r17 = asr(r21, #31) 0x31 0xdf 0x15 0x8c # CHECK: r17 = lsr(r21, #31) 0x51 0xdf 0x15 0x8c # CHECK: r17 = asl(r21, #31) # Shift by immediate and accumulate 0x10 0xdf 0x14 0x82 # CHECK: r17:16 -= asr(r21:20, #31) 0x30 0xdf 0x14 0x82 # CHECK: r17:16 -= lsr(r21:20, #31) 0x50 0xdf 0x14 0x82 # CHECK: r17:16 -= asl(r21:20, #31) 0x90 0xdf 0x14 0x82 # CHECK: r17:16 += asr(r21:20, #31) 0xb0 0xdf 0x14 0x82 # CHECK: r17:16 += lsr(r21:20, #31) 0xd0 0xdf 0x14 0x82 # CHECK: r17:16 += asl(r21:20, #31) 0x11 0xdf 0x15 0x8e # CHECK: r17 -= asr(r21, #31) 0x31 0xdf 0x15 0x8e # CHECK: r17 -= lsr(r21, #31) 0x51 0xdf 0x15 0x8e # CHECK: r17 -= asl(r21, #31) 0x91 0xdf 0x15 0x8e # CHECK: r17 += asr(r21, #31) 0xb1 0xdf 0x15 0x8e # CHECK: r17 += lsr(r21, #31) 0xd1 0xdf 0x15 0x8e # CHECK: r17 += asl(r21, #31) 0x4c 0xf7 0x11 0xde # CHECK: r17 = add(#21, asl(r17, #23)) 0x4e 0xf7 0x11 0xde # CHECK: r17 = sub(#21, asl(r17, #23)) 0x5c 0xf7 0x11 0xde # CHECK: r17 = add(#21, lsr(r17, #23)) 0x5e 0xf7 0x11 0xde # CHECK: r17 = sub(#21, lsr(r17, #23)) # Shift by immediate and add 0xf1 0xd5 0x1f 0xc4 # CHECK: r17 = addasl(r21, r31, #7) # Shift by immediate and logical 0x10 0xdf 0x54 0x82 # CHECK: r17:16 &= asr(r21:20, #31) 0x30 0xdf 0x54 0x82 # CHECK: r17:16 &= lsr(r21:20, #31) 0x50 0xdf 0x54 0x82 # CHECK: r17:16 &= asl(r21:20, #31) 0x90 0xdf 0x54 0x82 # CHECK: r17:16 |= asr(r21:20, #31) 0xb0 0xdf 0x54 0x82 # CHECK: r17:16 |= lsr(r21:20, #31) 0xd0 0xdf 0x54 0x82 # CHECK: r17:16 |= asl(r21:20, #31) 0x30 0xdf 0x94 0x82 # CHECK: r17:16 ^= lsr(r21:20, #31) 0x50 0xdf 0x94 0x82 # CHECK: r17:16 ^= asl(r21:20, #31) 0x11 0xdf 0x55 0x8e # CHECK: r17 &= asr(r21, #31) 0x31 0xdf 0x55 0x8e # CHECK: r17 &= lsr(r21, #31) 0x51 0xdf 0x55 0x8e # CHECK: r17 &= asl(r21, #31) 0x91 0xdf 0x55 0x8e # CHECK: r17 |= asr(r21, #31) 0xb1 0xdf 0x55 0x8e # CHECK: r17 |= lsr(r21, #31) 0xd1 0xdf 0x55 0x8e # CHECK: r17 |= asl(r21, #31) 0x31 0xdf 0x95 0x8e # CHECK: r17 ^= lsr(r21, #31) 0x51 0xdf 0x95 0x8e # CHECK: r17 ^= asl(r21, #31) 0x48 0xff 0x11 0xde # CHECK: r17 = and(#21, asl(r17, #31)) 0x4a 0xff 0x11 0xde # CHECK: r17 = or(#21, asl(r17, #31)) 0x58 0xff 0x11 0xde # CHECK: r17 = and(#21, lsr(r17, #31)) 0x5a 0xff 0x11 0xde # CHECK: r17 = or(#21, lsr(r17, #31)) # Shift right by immediate with rounding 0xf0 0xdf 0xd4 0x80 # CHECK: r17:16 = asr(r21:20, #31):rnd 0x11 0xdf 0x55 0x8c # CHECK: r17 = asr(r21, #31):rnd # Shift left by immediate with saturation 0x51 0xdf 0x55 0x8c # CHECK: r17 = asl(r21, #31):sat # Shift by register 0x10 0xdf 0x94 0xc3 # CHECK: r17:16 = asr(r21:20, r31) 0x50 0xdf 0x94 0xc3 # CHECK: r17:16 = lsr(r21:20, r31) 0x90 0xdf 0x94 0xc3 # CHECK: r17:16 = asl(r21:20, r31) 0xd0 0xdf 0x94 0xc3 # CHECK: r17:16 = lsl(r21:20, r31) 0x11 0xdf 0x55 0xc6 # CHECK: r17 = asr(r21, r31) 0x51 0xdf 0x55 0xc6 # CHECK: r17 = lsr(r21, r31) 0x91 0xdf 0x55 0xc6 # CHECK: r17 = asl(r21, r31) 0xd1 0xdf 0x55 0xc6 # CHECK: r17 = lsl(r21, r31) 0xf1 0xdf 0x8a 0xc6 # CHECK: r17 = lsl(#21, r31) # Shift by register and accumulate 0x10 0xdf 0x94 0xcb # CHECK: r17:16 -= asr(r21:20, r31) 0x50 0xdf 0x94 0xcb # CHECK: r17:16 -= lsr(r21:20, r31) 0x90 0xdf 0x94 0xcb # CHECK: r17:16 -= asl(r21:20, r31) 0xd0 0xdf 0x94 0xcb # CHECK: r17:16 -= lsl(r21:20, r31) 0x10 0xdf 0xd4 0xcb # CHECK: r17:16 += asr(r21:20, r31) 0x50 0xdf 0xd4 0xcb # CHECK: r17:16 += lsr(r21:20, r31) 0x90 0xdf 0xd4 0xcb # CHECK: r17:16 += asl(r21:20, r31) 0xd0 0xdf 0xd4 0xcb # CHECK: r17:16 += lsl(r21:20, r31) 0x11 0xdf 0x95 0xcc # CHECK: r17 -= asr(r21, r31) 0x51 0xdf 0x95 0xcc # CHECK: r17 -= lsr(r21, r31) 0x91 0xdf 0x95 0xcc # CHECK: r17 -= asl(r21, r31) 0xd1 0xdf 0x95 0xcc # CHECK: r17 -= lsl(r21, r31) 0x11 0xdf 0xd5 0xcc # CHECK: r17 += asr(r21, r31) 0x51 0xdf 0xd5 0xcc # CHECK: r17 += lsr(r21, r31) 0x91 0xdf 0xd5 0xcc # CHECK: r17 += asl(r21, r31) 0xd1 0xdf 0xd5 0xcc # CHECK: r17 += lsl(r21, r31) # Shift by register and logical 0x10 0xdf 0x14 0xcb # CHECK: r17:16 |= asr(r21:20, r31) 0x50 0xdf 0x14 0xcb # CHECK: r17:16 |= lsr(r21:20, r31) 0x90 0xdf 0x14 0xcb # CHECK: r17:16 |= asl(r21:20, r31) 0xd0 0xdf 0x14 0xcb # CHECK: r17:16 |= lsl(r21:20, r31) 0x10 0xdf 0x54 0xcb # CHECK: r17:16 &= asr(r21:20, r31) 0x50 0xdf 0x54 0xcb # CHECK: r17:16 &= lsr(r21:20, r31) 0x90 0xdf 0x54 0xcb # CHECK: r17:16 &= asl(r21:20, r31) 0xd0 0xdf 0x54 0xcb # CHECK: r17:16 &= lsl(r21:20, r31) 0x10 0xdf 0x74 0xcb # CHECK: r17:16 ^= asr(r21:20, r31) 0x50 0xdf 0x74 0xcb # CHECK: r17:16 ^= lsr(r21:20, r31) 0x90 0xdf 0x74 0xcb # CHECK: r17:16 ^= asl(r21:20, r31) 0xd0 0xdf 0x74 0xcb # CHECK: r17:16 ^= lsl(r21:20, r31) 0x11 0xdf 0x15 0xcc # CHECK: r17 |= asr(r21, r31) 0x51 0xdf 0x15 0xcc # CHECK: r17 |= lsr(r21, r31) 0x91 0xdf 0x15 0xcc # CHECK: r17 |= asl(r21, r31) 0xd1 0xdf 0x15 0xcc # CHECK: r17 |= lsl(r21, r31) 0x11 0xdf 0x55 0xcc # CHECK: r17 &= asr(r21, r31) 0x51 0xdf 0x55 0xcc # CHECK: r17 &= lsr(r21, r31) 0x91 0xdf 0x55 0xcc # CHECK: r17 &= asl(r21, r31) 0xd1 0xdf 0x55 0xcc # CHECK: r17 &= lsl(r21, r31) # Shift by register with saturation 0x11 0xdf 0x15 0xc6 # CHECK: r17 = asr(r21, r31):sat 0x91 0xdf 0x15 0xc6 # CHECK: r17 = asl(r21, r31):sat # Vector shift halfwords by immediate 0x10 0xc5 0x94 0x80 # CHECK: r17:16 = vasrh(r21:20, #5) 0x30 0xc5 0x94 0x80 # CHECK: r17:16 = vlsrh(r21:20, #5) 0x50 0xc5 0x94 0x80 # CHECK: r17:16 = vaslh(r21:20, #5) # Vector arithmetic shift halfwords with round 0x10 0xc5 0x34 0x80 # CHECK: r17:16 = vasrh(r21:20, #5):raw # Vector arithmetic shift halfwords with saturate and pack 0x91 0xc5 0x74 0x88 # CHECK: r17 = vasrhub(r21:20, #5):raw 0xb1 0xc5 0x74 0x88 # CHECK: r17 = vasrhub(r21:20, #5):sat # Vector shift halfwords by register 0x10 0xdf 0x54 0xc3 # CHECK: r17:16 = vasrh(r21:20, r31) 0x50 0xdf 0x54 0xc3 # CHECK: r17:16 = vlsrh(r21:20, r31) 0x90 0xdf 0x54 0xc3 # CHECK: r17:16 = vaslh(r21:20, r31) 0xd0 0xdf 0x54 0xc3 # CHECK: r17:16 = vlslh(r21:20, r31) # Vector shift words by immediate 0x10 0xdf 0x54 0x80 # CHECK: r17:16 = vasrw(r21:20, #31) 0x30 0xdf 0x54 0x80 # CHECK: r17:16 = vlsrw(r21:20, #31) 0x50 0xdf 0x54 0x80 # CHECK: r17:16 = vaslw(r21:20, #31) # Vector shift words by register 0x10 0xdf 0x14 0xc3 # CHECK: r17:16 = vasrw(r21:20, r31) 0x50 0xdf 0x14 0xc3 # CHECK: r17:16 = vlsrw(r21:20, r31) 0x90 0xdf 0x14 0xc3 # CHECK: r17:16 = vaslw(r21:20, r31) 0xd0 0xdf 0x14 0xc3 # CHECK: r17:16 = vlslw(r21:20, r31) # Vector shift words with truncate and pack 0x51 0xdf 0xd4 0x88 # CHECK: r17 = vasrw(r21:20, #31) 0x51 0xdf 0x14 0xc5 # CHECK: r17 = vasrw(r21:20, r31)