1// RUN: llvm-mc -triple=aarch64-none-linux-gnu -mattr=+neon -show-encoding < %s | FileCheck %s 2 3// Check that the assembler can handle the documented syntax for AArch64 4 5 6//------------------------------------------------------------------------------ 7// Insert element (vector, from main) 8//------------------------------------------------------------------------------ 9 ins v2.b[2], w1 10 ins v7.h[7], w14 11 ins v20.s[0], w30 12 ins v1.d[1], x7 13 14 mov v2.b[2], w1 15 mov v7.h[7], w14 16 mov v20.s[0], w30 17 mov v1.d[1], x7 18 19// CHECK: {{mov|ins}} v2.b[2], w1 // encoding: [0x22,0x1c,0x05,0x4e] 20// CHECK: {{mov|ins}} v7.h[7], w14 // encoding: [0xc7,0x1d,0x1e,0x4e] 21// CHECK: {{mov|ins}} v20.s[0], w30 // encoding: [0xd4,0x1f,0x04,0x4e] 22// CHECK: {{mov|ins}} v1.d[1], x7 // encoding: [0xe1,0x1c,0x18,0x4e] 23 24// CHECK: {{mov|ins}} v2.b[2], w1 // encoding: [0x22,0x1c,0x05,0x4e] 25// CHECK: {{mov|ins}} v7.h[7], w14 // encoding: [0xc7,0x1d,0x1e,0x4e] 26// CHECK: {{mov|ins}} v20.s[0], w30 // encoding: [0xd4,0x1f,0x04,0x4e] 27// CHECK: {{mov|ins}} v1.d[1], x7 // encoding: [0xe1,0x1c,0x18,0x4e] 28 29 30//------------------------------------------------------------------------------ 31// Signed integer move (main, from element) 32//------------------------------------------------------------------------------ 33 smov w1, v0.b[15] 34 smov w14, v6.h[4] 35 smov x1, v0.b[15] 36 smov x14, v6.h[4] 37 smov x20, v9.s[2] 38 39// CHECK: smov w1, v0.b[15] // encoding: [0x01,0x2c,0x1f,0x0e] 40// CHECK: smov w14, v6.h[4] // encoding: [0xce,0x2c,0x12,0x0e] 41// CHECK: smov x1, v0.b[15] // encoding: [0x01,0x2c,0x1f,0x4e] 42// CHECK: smov x14, v6.h[4] // encoding: [0xce,0x2c,0x12,0x4e] 43// CHECK: smov x20, v9.s[2] // encoding: [0x34,0x2d,0x14,0x4e] 44 45 46//------------------------------------------------------------------------------ 47// Unsigned integer move (main, from element) 48//------------------------------------------------------------------------------ 49 umov w1, v0.b[15] 50 umov w14, v6.h[4] 51 umov w20, v9.s[2] 52 umov x7, v18.d[1] 53 54 mov w20, v9.s[2] 55 mov x7, v18.d[1] 56 57// CHECK: {{mov|umov}} w1, v0.b[15] // encoding: [0x01,0x3c,0x1f,0x0e] 58// CHECK: {{mov|umov}} w14, v6.h[4] // encoding: [0xce,0x3c,0x12,0x0e] 59// CHECK: {{mov|umov}} w20, v9.s[2] // encoding: [0x34,0x3d,0x14,0x0e] 60// CHECK: {{mov|umov}} x7, v18.d[1] // encoding: [0x47,0x3e,0x18,0x4e] 61 62// CHECK: {{mov|umov}} w20, v9.s[2] // encoding: [0x34,0x3d,0x14,0x0e] 63// CHECK: {{mov|umov}} x7, v18.d[1] // encoding: [0x47,0x3e,0x18,0x4e] 64 65//------------------------------------------------------------------------------ 66// Insert element (vector, from element) 67//------------------------------------------------------------------------------ 68 69 ins v1.b[14], v3.b[6] 70 ins v6.h[7], v7.h[5] 71 ins v15.s[3], v22.s[2] 72 ins v0.d[0], v4.d[1] 73 74 mov v1.b[14], v3.b[6] 75 mov v6.h[7], v7.h[5] 76 mov v15.s[3], v22.s[2] 77 mov v0.d[0], v4.d[1] 78 79// CHECK: {{mov|ins}} v1.b[14], v3.b[6] // encoding: [0x61,0x34,0x1d,0x6e] 80// CHECK: {{mov|ins}} v6.h[7], v7.h[5] // encoding: [0xe6,0x54,0x1e,0x6e] 81// CHECK: {{mov|ins}} v15.s[3], v22.s[2] // encoding: [0xcf,0x46,0x1c,0x6e] 82// CHECK: {{mov|ins}} v0.d[0], v4.d[1] // encoding: [0x80,0x44,0x08,0x6e] 83 84// CHECK: {{mov|ins}} v1.b[14], v3.b[6] // encoding: [0x61,0x34,0x1d,0x6e] 85// CHECK: {{mov|ins}} v6.h[7], v7.h[5] // encoding: [0xe6,0x54,0x1e,0x6e] 86// CHECK: {{mov|ins}} v15.s[3], v22.s[2] // encoding: [0xcf,0x46,0x1c,0x6e] 87// CHECK: {{mov|ins}} v0.d[0], v4.d[1] // encoding: [0x80,0x44,0x08,0x6e] 88 89//------------------------------------------------------------------------------ 90// Duplicate to all lanes( vector, from element) 91//------------------------------------------------------------------------------ 92 dup v1.8b, v2.b[2] 93 dup v11.4h, v7.h[7] 94 dup v17.2s, v20.s[0] 95 dup v1.16b, v2.b[2] 96 dup v11.8h, v7.h[7] 97 dup v17.4s, v20.s[0] 98 dup v5.2d, v1.d[1] 99 100// CHECK: {{mov|dup}} v1.8b, v2.b[2] // encoding: [0x41,0x04,0x05,0x0e] 101// CHECK: {{mov|dup}} v11.4h, v7.h[7] // encoding: [0xeb,0x04,0x1e,0x0e] 102// CHECK: {{mov|dup}} v17.2s, v20.s[0] // encoding: [0x91,0x06,0x04,0x0e] 103// CHECK: {{mov|dup}} v1.16b, v2.b[2] // encoding: [0x41,0x04,0x05,0x4e] 104// CHECK: {{mov|dup}} v11.8h, v7.h[7] // encoding: [0xeb,0x04,0x1e,0x4e] 105// CHECK: {{mov|dup}} v17.4s, v20.s[0] // encoding: [0x91,0x06,0x04,0x4e] 106// CHECK: {{mov|dup}} v5.2d, v1.d[1] // encoding: [0x25,0x04,0x18,0x4e] 107 108//------------------------------------------------------------------------------ 109// Duplicate to all lanes( vector, from main) 110//------------------------------------------------------------------------------ 111 dup v1.8b, w1 112 dup v11.4h, w14 113 dup v17.2s, w30 114 dup v1.16b, w2 115 dup v11.8h, w16 116 dup v17.4s, w28 117 dup v5.2d, x0 118 119// CHECK: {{mov|dup}} v1.8b, w1 // encoding: [0x21,0x0c,0x01,0x0e] 120// CHECK: {{mov|dup}} v11.4h, w14 // encoding: [0xcb,0x0d,0x02,0x0e] 121// CHECK: {{mov|dup}} v17.2s, w30 // encoding: [0xd1,0x0f,0x04,0x0e] 122// CHECK: {{mov|dup}} v1.16b, w2 // encoding: [0x41,0x0c,0x01,0x4e] 123// CHECK: {{mov|dup}} v11.8h, w16 // encoding: [0x0b,0x0e,0x02,0x4e] 124// CHECK: {{mov|dup}} v17.4s, w28 // encoding: [0x91,0x0f,0x04,0x4e] 125// CHECK: {{mov|dup}} v5.2d, x0 // encoding: [0x05,0x0c,0x08,0x4e] 126 127 128 129 130 131 132 133 134 135 136