# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s # Hexagon Programmer's Reference Manual 11.10.8 XTYPE/SHIFT # Shift by immediate # CHECK: 10 df 14 80 r17:16 = asr(r21:20, #31) # CHECK: 30 df 14 80 r17:16 = lsr(r21:20, #31) # CHECK: 50 df 14 80 r17:16 = asl(r21:20, #31) # CHECK: 11 df 15 8c r17 = asr(r21, #31) # CHECK: 31 df 15 8c r17 = lsr(r21, #31) # CHECK: 51 df 15 8c r17 = asl(r21, #31) # Shift by immediate and accumulate # CHECK: 10 df 14 82 r17:16 -= asr(r21:20, #31) # CHECK: 30 df 14 82 r17:16 -= lsr(r21:20, #31) # CHECK: 50 df 14 82 r17:16 -= asl(r21:20, #31) # CHECK: 90 df 14 82 r17:16 += asr(r21:20, #31) # CHECK: b0 df 14 82 r17:16 += lsr(r21:20, #31) # CHECK: d0 df 14 82 r17:16 += asl(r21:20, #31) # CHECK: 11 df 15 8e r17 -= asr(r21, #31) # CHECK: 31 df 15 8e r17 -= lsr(r21, #31) # CHECK: 51 df 15 8e r17 -= asl(r21, #31) # CHECK: 91 df 15 8e r17 += asr(r21, #31) # CHECK: b1 df 15 8e r17 += lsr(r21, #31) # CHECK: d1 df 15 8e r17 += asl(r21, #31) # CHECK: 4c f7 11 de r17 = add(#21, asl(r17, #23)) # CHECK: 4e f7 11 de r17 = sub(#21, asl(r17, #23)) # CHECK: 5c f7 11 de r17 = add(#21, lsr(r17, #23)) # CHECK: 5e f7 11 de r17 = sub(#21, lsr(r17, #23)) # Shift by immediate and add # CHECK: f1 d5 1f c4 r17 = addasl(r21, r31, #7) # Shift by immediate and logical # CHECK: 10 df 54 82 r17:16 &= asr(r21:20, #31) # CHECK: 30 df 54 82 r17:16 &= lsr(r21:20, #31) # CHECK: 50 df 54 82 r17:16 &= asl(r21:20, #31) # CHECK: 90 df 54 82 r17:16 |= asr(r21:20, #31) # CHECK: b0 df 54 82 r17:16 |= lsr(r21:20, #31) # CHECK: d0 df 54 82 r17:16 |= asl(r21:20, #31) # CHECK: 30 df 94 82 r17:16 ^= lsr(r21:20, #31) # CHECK: 50 df 94 82 r17:16 ^= asl(r21:20, #31) # CHECK: 11 df 55 8e r17 &= asr(r21, #31) # CHECK: 31 df 55 8e r17 &= lsr(r21, #31) # CHECK: 51 df 55 8e r17 &= asl(r21, #31) # CHECK: 91 df 55 8e r17 |= asr(r21, #31) # CHECK: b1 df 55 8e r17 |= lsr(r21, #31) # CHECK: d1 df 55 8e r17 |= asl(r21, #31) # CHECK: 31 df 95 8e r17 ^= lsr(r21, #31) # CHECK: 51 df 95 8e r17 ^= asl(r21, #31) # CHECK: 48 ff 11 de r17 = and(#21, asl(r17, #31)) # CHECK: 4a ff 11 de r17 = or(#21, asl(r17, #31)) # CHECK: 58 ff 11 de r17 = and(#21, lsr(r17, #31)) # CHECK: 5a ff 11 de r17 = or(#21, lsr(r17, #31)) # Shift right by immediate with rounding # CHECK: f0 df d4 80 r17:16 = asr(r21:20, #31):rnd # CHECK: 11 df 55 8c r17 = asr(r21, #31):rnd # Shift left by immediate with saturation # CHECK: 51 df 55 8c r17 = asl(r21, #31):sat # Shift by register # CHECK: 10 df 94 c3 r17:16 = asr(r21:20, r31) # CHECK: 50 df 94 c3 r17:16 = lsr(r21:20, r31) # CHECK: 90 df 94 c3 r17:16 = asl(r21:20, r31) # CHECK: d0 df 94 c3 r17:16 = lsl(r21:20, r31) # CHECK: 11 df 55 c6 r17 = asr(r21, r31) # CHECK: 51 df 55 c6 r17 = lsr(r21, r31) # CHECK: 91 df 55 c6 r17 = asl(r21, r31) # CHECK: d1 df 55 c6 r17 = lsl(r21, r31) # CHECK: f1 df 8a c6 r17 = lsl(#21, r31) # Shift by register and accumulate # CHECK: 10 df 94 cb r17:16 -= asr(r21:20, r31) # CHECK: 50 df 94 cb r17:16 -= lsr(r21:20, r31) # CHECK: 90 df 94 cb r17:16 -= asl(r21:20, r31) # CHECK: d0 df 94 cb r17:16 -= lsl(r21:20, r31) # CHECK: 10 df d4 cb r17:16 += asr(r21:20, r31) # CHECK: 50 df d4 cb r17:16 += lsr(r21:20, r31) # CHECK: 90 df d4 cb r17:16 += asl(r21:20, r31) # CHECK: d0 df d4 cb r17:16 += lsl(r21:20, r31) # CHECK: 11 df 95 cc r17 -= asr(r21, r31) # CHECK: 51 df 95 cc r17 -= lsr(r21, r31) # CHECK: 91 df 95 cc r17 -= asl(r21, r31) # CHECK: d1 df 95 cc r17 -= lsl(r21, r31) # CHECK: 11 df d5 cc r17 += asr(r21, r31) # CHECK: 51 df d5 cc r17 += lsr(r21, r31) # CHECK: 91 df d5 cc r17 += asl(r21, r31) # CHECK: d1 df d5 cc r17 += lsl(r21, r31) # Shift by register and logical # CHECK: 10 df 14 cb r17:16 |= asr(r21:20, r31) # CHECK: 50 df 14 cb r17:16 |= lsr(r21:20, r31) # CHECK: 90 df 14 cb r17:16 |= asl(r21:20, r31) # CHECK: d0 df 14 cb r17:16 |= lsl(r21:20, r31) # CHECK: 10 df 54 cb r17:16 &= asr(r21:20, r31) # CHECK: 50 df 54 cb r17:16 &= lsr(r21:20, r31) # CHECK: 90 df 54 cb r17:16 &= asl(r21:20, r31) # CHECK: d0 df 54 cb r17:16 &= lsl(r21:20, r31) # CHECK: 10 df 74 cb r17:16 ^= asr(r21:20, r31) # CHECK: 50 df 74 cb r17:16 ^= lsr(r21:20, r31) # CHECK: 90 df 74 cb r17:16 ^= asl(r21:20, r31) # CHECK: d0 df 74 cb r17:16 ^= lsl(r21:20, r31) # CHECK: 11 df 15 cc r17 |= asr(r21, r31) # CHECK: 51 df 15 cc r17 |= lsr(r21, r31) # CHECK: 91 df 15 cc r17 |= asl(r21, r31) # CHECK: d1 df 15 cc r17 |= lsl(r21, r31) # CHECK: 11 df 55 cc r17 &= asr(r21, r31) # CHECK: 51 df 55 cc r17 &= lsr(r21, r31) # CHECK: 91 df 55 cc r17 &= asl(r21, r31) # CHECK: d1 df 55 cc r17 &= lsl(r21, r31) # Shift by register with saturation # CHECK: 11 df 15 c6 r17 = asr(r21, r31):sat # CHECK: 91 df 15 c6 r17 = asl(r21, r31):sat # Vector shift halfwords by immediate # CHECK: 10 c5 94 80 r17:16 = vasrh(r21:20, #5) # CHECK: 30 c5 94 80 r17:16 = vlsrh(r21:20, #5) # CHECK: 50 c5 94 80 r17:16 = vaslh(r21:20, #5) # Vector arithmetic shift halfwords with round # CHECK: 10 c5 34 80 r17:16 = vasrh(r21:20, #5):raw # Vector arithmetic shift halfwords with saturate and pack # CHECK: 91 c5 74 88 r17 = vasrhub(r21:20, #5):raw # CHECK: b1 c5 74 88 r17 = vasrhub(r21:20, #5):sat # Vector shift halfwords by register # CHECK: 10 df 54 c3 r17:16 = vasrh(r21:20, r31) # CHECK: 50 df 54 c3 r17:16 = vlsrh(r21:20, r31) # CHECK: 90 df 54 c3 r17:16 = vaslh(r21:20, r31) # CHECK: d0 df 54 c3 r17:16 = vlslh(r21:20, r31) # Vector shift words by immediate # CHECK: 10 df 54 80 r17:16 = vasrw(r21:20, #31) # CHECK: 30 df 54 80 r17:16 = vlsrw(r21:20, #31) # CHECK: 50 df 54 80 r17:16 = vaslw(r21:20, #31) # Vector shift words by register # CHECK: 10 df 14 c3 r17:16 = vasrw(r21:20, r31) # CHECK: 50 df 14 c3 r17:16 = vlsrw(r21:20, r31) # CHECK: 90 df 14 c3 r17:16 = vaslw(r21:20, r31) # CHECK: d0 df 14 c3 r17:16 = vlslw(r21:20, r31) # Vector shift words with truncate and pack # CHECK: 51 df d4 88 r17 = vasrw(r21:20, #31) # CHECK: 51 df 14 c5 r17 = vasrw(r21:20, r31)