1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=-neon,+sme < %s \
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
// RUN: not llvm-mc -triple=aarch64 -show-encoding -mattr=-neon < %s 2>&1 \
// RUN: | FileCheck %s --check-prefix=CHECK-ERROR
// RUN: llvm-mc -triple=aarch64 -filetype=obj -mattr=-neon,+sme < %s \
// RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
// Disassemble encoding and check the re-encoding (-show-encoding) matches.
// RUN: llvm-mc -triple=aarch64 -show-encoding -mattr=-neon,+sme < %s \
// RUN: | sed '/.text/d' | sed 's/.*encoding: //g' \
// RUN: | llvm-mc -triple=aarch64 -mattr=-neon,+sme -disassemble -show-encoding \
// RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
// Scalar FP instructions
fmulx s0, s1, s2
// CHECK-INST: fmulx s0, s1, s2
// CHECK-ENCODING: [0x20,0xdc,0x22,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
fmulx d0, d1, d2
// CHECK-INST: fmulx d0, d1, d2
// CHECK-ENCODING: [0x20,0xdc,0x62,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frecps s0, s1, s2
// CHECK-INST: frecps s0, s1, s2
// CHECK-ENCODING: [0x20,0xfc,0x22,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frecps d0, d1, d2
// CHECK-INST: frecps d0, d1, d2
// CHECK-ENCODING: [0x20,0xfc,0x62,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frsqrts s0, s1, s2
// CHECK-INST: frsqrts s0, s1, s2
// CHECK-ENCODING: [0x20,0xfc,0xa2,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frsqrts d0, d1, d2
// CHECK-INST: frsqrts d0, d1, d2
// CHECK-ENCODING: [0x20,0xfc,0xe2,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frecpe s0, s1
// CHECK-INST: frecpe s0, s1
// CHECK-ENCODING: [0x20,0xd8,0xa1,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frecpe d0, d1
// CHECK-INST: frecpe d0, d1
// CHECK-ENCODING: [0x20,0xd8,0xe1,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frecpx s0, s1
// CHECK-INST: frecpx s0, s1
// CHECK-ENCODING: [0x20,0xf8,0xa1,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frecpx d0, d1
// CHECK-INST: frecpx d0, d1
// CHECK-ENCODING: [0x20,0xf8,0xe1,0x5e]
// CHECK-ERROR: instruction requires: neon or sme
frsqrte s0, s1
// CHECK-INST: frsqrte s0, s1
// CHECK-ENCODING: [0x20,0xd8,0xa1,0x7e]
// CHECK-ERROR: instruction requires: neon or sme
frsqrte d0, d1
// CHECK-INST: frsqrte d0, d1
// CHECK-ENCODING: [0x20,0xd8,0xe1,0x7e]
// CHECK-ERROR: instruction requires: neon or sme
// Vector to GPR integer move instructions
smov w0, v0.b[0]
// CHECK-INST: smov w0, v0.b[0]
// CHECK-ENCODING: [0x00,0x2c,0x01,0x0e]
// CHECK-ERROR: instruction requires: neon
smov x0, v0.b[0]
// CHECK-INST: smov x0, v0.b[0]
// CHECK-ENCODING: [0x00,0x2c,0x01,0x4e]
// CHECK-ERROR: instruction requires: neon
smov w0, v0.h[0]
// CHECK-INST: smov w0, v0.h[0]
// CHECK-ENCODING: [0x00,0x2c,0x02,0x0e]
// CHECK-ERROR: instruction requires: neon
smov x0, v0.h[0]
// CHECK-INST: smov x0, v0.h[0]
// CHECK-ENCODING: [0x00,0x2c,0x02,0x4e]
// CHECK-ERROR: instruction requires: neon
smov x0, v0.s[0]
// CHECK-INST: smov x0, v0.s[0]
// CHECK-ENCODING: [0x00,0x2c,0x04,0x4e]
// CHECK-ERROR: instruction requires: neon
umov w0, v0.b[0]
// CHECK-INST: umov w0, v0.b[0]
// CHECK-ENCODING: [0x00,0x3c,0x01,0x0e]
// CHECK-ERROR: instruction requires: neon
umov w0, v0.h[0]
// CHECK-INST: umov w0, v0.h[0]
// CHECK-ENCODING: [0x00,0x3c,0x02,0x0e]
// CHECK-ERROR: instruction requires: neon
umov w0, v0.s[0]
// CHECK-INST: mov w0, v0.s[0]
// CHECK-ENCODING: [0x00,0x3c,0x04,0x0e]
// CHECK-ERROR: instruction requires: neon
umov x0, v0.d[0]
// CHECK-INST: mov x0, v0.d[0]
// CHECK-ENCODING: [0x00,0x3c,0x08,0x4e]
// CHECK-ERROR: instruction requires: neon
// Aliases
mov w0, v0.s[0]
// CHECK-INST: mov w0, v0.s[0]
// CHECK-ENCODING: [0x00,0x3c,0x04,0x0e]
// CHECK-ERROR: instruction requires: neon
mov x0, v0.d[0]
// CHECK-INST: mov x0, v0.d[0]
// CHECK-ENCODING: [0x00,0x3c,0x08,0x4e]
// CHECK-ERROR: instruction requires: neon
|