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// Vector Integer Halving Add (Signed)
8//------------------------------------------------------------------------------
9         shadd v0.8b, v1.8b, v2.8b
10         shadd v0.16b, v1.16b, v2.16b
11         shadd v0.4h, v1.4h, v2.4h
12         shadd v0.8h, v1.8h, v2.8h
13         shadd v0.2s, v1.2s, v2.2s
14         shadd v0.4s, v1.4s, v2.4s
15
16// CHECK: shadd v0.8b, v1.8b, v2.8b        // encoding: [0x20,0x04,0x22,0x0e]
17// CHECK: shadd v0.16b, v1.16b, v2.16b     // encoding: [0x20,0x04,0x22,0x4e]
18// CHECK: shadd v0.4h, v1.4h, v2.4h        // encoding: [0x20,0x04,0x62,0x0e]
19// CHECK: shadd v0.8h, v1.8h, v2.8h        // encoding: [0x20,0x04,0x62,0x4e]
20// CHECK: shadd v0.2s, v1.2s, v2.2s        // encoding: [0x20,0x04,0xa2,0x0e]
21// CHECK: shadd v0.4s, v1.4s, v2.4s        // encoding: [0x20,0x04,0xa2,0x4e]
22
23
24//------------------------------------------------------------------------------
25// Vector Integer Halving Add (Unsigned)
26//------------------------------------------------------------------------------
27         uhadd v0.8b, v1.8b, v2.8b
28         uhadd v0.16b, v1.16b, v2.16b
29         uhadd v0.4h, v1.4h, v2.4h
30         uhadd v0.8h, v1.8h, v2.8h
31         uhadd v0.2s, v1.2s, v2.2s
32         uhadd v0.4s, v1.4s, v2.4s
33
34// CHECK: uhadd v0.8b, v1.8b, v2.8b        // encoding: [0x20,0x04,0x22,0x2e]
35// CHECK: uhadd v0.16b, v1.16b, v2.16b     // encoding: [0x20,0x04,0x22,0x6e]
36// CHECK: uhadd v0.4h, v1.4h, v2.4h        // encoding: [0x20,0x04,0x62,0x2e]
37// CHECK: uhadd v0.8h, v1.8h, v2.8h        // encoding: [0x20,0x04,0x62,0x6e]
38// CHECK: uhadd v0.2s, v1.2s, v2.2s        // encoding: [0x20,0x04,0xa2,0x2e]
39// CHECK: uhadd v0.4s, v1.4s, v2.4s        // encoding: [0x20,0x04,0xa2,0x6e]
40
41//------------------------------------------------------------------------------
42// Vector Integer Halving Sub (Signed)
43//------------------------------------------------------------------------------
44         shsub v0.8b, v1.8b, v2.8b
45         shsub v0.16b, v1.16b, v2.16b
46         shsub v0.4h, v1.4h, v2.4h
47         shsub v0.8h, v1.8h, v2.8h
48         shsub v0.2s, v1.2s, v2.2s
49         shsub v0.4s, v1.4s, v2.4s
50
51// CHECK: shsub v0.8b, v1.8b, v2.8b        // encoding: [0x20,0x24,0x22,0x0e]
52// CHECK: shsub v0.16b, v1.16b, v2.16b     // encoding: [0x20,0x24,0x22,0x4e]
53// CHECK: shsub v0.4h, v1.4h, v2.4h        // encoding: [0x20,0x24,0x62,0x0e]
54// CHECK: shsub v0.8h, v1.8h, v2.8h        // encoding: [0x20,0x24,0x62,0x4e]
55// CHECK: shsub v0.2s, v1.2s, v2.2s        // encoding: [0x20,0x24,0xa2,0x0e]
56// CHECK: shsub v0.4s, v1.4s, v2.4s        // encoding: [0x20,0x24,0xa2,0x4e]
57
58//------------------------------------------------------------------------------
59// Vector Integer Halving Sub (Unsigned)
60//------------------------------------------------------------------------------
61         uhsub v0.8b, v1.8b, v2.8b
62         uhsub v0.16b, v1.16b, v2.16b
63         uhsub v0.4h, v1.4h, v2.4h
64         uhsub v0.8h, v1.8h, v2.8h
65         uhsub v0.2s, v1.2s, v2.2s
66         uhsub v0.4s, v1.4s, v2.4s
67
68// CHECK: uhsub v0.8b, v1.8b, v2.8b        // encoding: [0x20,0x24,0x22,0x2e]
69// CHECK: uhsub v0.16b, v1.16b, v2.16b     // encoding: [0x20,0x24,0x22,0x6e]
70// CHECK: uhsub v0.4h, v1.4h, v2.4h        // encoding: [0x20,0x24,0x62,0x2e]
71// CHECK: uhsub v0.8h, v1.8h, v2.8h        // encoding: [0x20,0x24,0x62,0x6e]
72// CHECK: uhsub v0.2s, v1.2s, v2.2s        // encoding: [0x20,0x24,0xa2,0x2e]
73// CHECK: uhsub v0.4s, v1.4s, v2.4s        // encoding: [0x20,0x24,0xa2,0x6e]
74
75