1 // RUN: not llvm-mc -triple aarch64-none-linux-gnu -mattr=+v8.1a -show-encoding < %s 2> %t | FileCheck %s 2 // RUN: FileCheck --check-prefix=CHECK-ERROR <%t %s 3 .text 4 5 //8 bits 6 casb w0, w1, [x2] 7 casab w0, w1, [x2] 8 caslb w0, w1, [x2] 9 casalb w0, w1, [x2] 10 11 //CHECK: casb w0, w1, [x2] // encoding: [0x41,0x7c,0xa0,0x08] 12 //CHECK: casab w0, w1, [x2] // encoding: [0x41,0x7c,0xe0,0x08] 13 //CHECK: caslb w0, w1, [x2] // encoding: [0x41,0xfc,0xa0,0x08] 14 //CHECK: casalb w0, w1, [x2] // encoding: [0x41,0xfc,0xe0,0x08] 15 16 casb w0, w1, [w2] 17 casalb x0, x1, [x2] 18 //CHECK-ERROR: error: invalid operand for instruction 19 //CHECK-ERROR: casb w0, w1, [w2] 20 //CHECK-ERROR: ^ 21 //CHECK-ERROR: error: invalid operand for instruction 22 //CHECK-ERROR: casalb x0, x1, [x2] 23 //CHECK-ERROR: ^ 24 25 //16 bits 26 cash w0, w1, [x2] 27 casah w0, w1, [x2] 28 caslh w0, w1, [x2] 29 casalh w0, w1, [x2] 30 31 //CHECK: cash w0, w1, [x2] // encoding: [0x41,0x7c,0xa0,0x48] 32 //CHECK: casah w0, w1, [x2] // encoding: [0x41,0x7c,0xe0,0x48] 33 //CHECK: caslh w0, w1, [x2] // encoding: [0x41,0xfc,0xa0,0x48] 34 //CHECK: casalh w0, w1, [x2] // encoding: [0x41,0xfc,0xe0,0x48] 35 36 //32 bits 37 cas w0, w1, [x2] 38 casa w0, w1, [x2] 39 casl w0, w1, [x2] 40 casal w0, w1, [x2] 41 42 //CHECK: cas w0, w1, [x2] // encoding: [0x41,0x7c,0xa0,0x88] 43 //CHECK: casa w0, w1, [x2] // encoding: [0x41,0x7c,0xe0,0x88] 44 //CHECK: casl w0, w1, [x2] // encoding: [0x41,0xfc,0xa0,0x88] 45 //CHECK: casal w0, w1, [x2] // encoding: [0x41,0xfc,0xe0,0x88] 46 47 cas w0, w1, [w2] 48 casl w0, x1, [x2] 49 50 //CHECK-ERROR: error: invalid operand for instruction 51 //CHECK-ERROR: cas w0, w1, [w2] 52 //CHECK-ERROR: ^ 53 //CHECK-ERROR: error: invalid operand for instruction 54 //CHECK-ERROR: casl w0, x1, [x2] 55 //CHECK-ERROR: ^ 56 57 //64 bits 58 cas x0, x1, [x2] 59 casa x0, x1, [x2] 60 casl x0, x1, [x2] 61 casal x0, x1, [x2] 62 63 //CHECK: cas x0, x1, [x2] // encoding: [0x41,0x7c,0xa0,0xc8] 64 //CHECK: casa x0, x1, [x2] // encoding: [0x41,0x7c,0xe0,0xc8] 65 //CHECK: casl x0, x1, [x2] // encoding: [0x41,0xfc,0xa0,0xc8] 66 //CHECK: casal x0, x1, [x2] // encoding: [0x41,0xfc,0xe0,0xc8] 67 68 casa x0, x1, [w2] 69 casal x0, w1, [x2] 70 71 //CHECK-ERROR: error: invalid operand for instruction 72 //CHECK-ERROR: casa x0, x1, [w2] 73 //CHECK-ERROR: ^ 74 //CHECK-ERROR: error: invalid operand for instruction 75 //CHECK-ERROR: casal x0, w1, [x2] 76 //CHECK-ERROR: ^ 77 78 // LD<OP> intructions 79 ldadda x0, x1, [x2] 80 ldclrl x0, x1, [x2] 81 ldeoral x0, x1, [x2] 82 ldset x0, x1, [x2] 83 ldsmaxa w0, w1, [x2] 84 ldsminlb w0, w1, [x2] 85 ldumaxalh w0, w1, [x2] 86 ldumin w0, w1, [x2] 87 ldsminb w2, w3, [x5] 88 //CHECK: ldadda x0, x1, [x2] // encoding: [0x41,0x00,0xa0,0xf8] 89 //CHECK: ldclrl x0, x1, [x2] // encoding: [0x41,0x10,0x60,0xf8] 90 //CHECK: ldeoral x0, x1, [x2] // encoding: [0x41,0x20,0xe0,0xf8] 91 //CHECK: ldset x0, x1, [x2] // encoding: [0x41,0x30,0x20,0xf8] 92 //CHECK: ldsmaxa w0, w1, [x2] // encoding: [0x41,0x40,0xa0,0xb8] 93 //CHECK: ldsminlb w0, w1, [x2] // encoding: [0x41,0x50,0x60,0x38] 94 //CHECK: ldumaxalh w0, w1, [x2] // encoding: [0x41,0x60,0xe0,0x78] 95 //CHECK: ldumin w0, w1, [x2] // encoding: [0x41,0x70,0x20,0xb8] 96 //CHECK: ldsminb w2, w3, [x5] // encoding: [0xa3,0x50,0x22,0x38] 97 98 // ST<OP> intructions: aliases to LD<OP> 99 stADDlb w0, [x2] 100 stclrlh w0, [x2] 101 steorl w0, [x2] 102 stsetl x0, [x2] 103 stsmaxb w0, [x2] 104 stsminh w0, [x2] 105 stumax w0, [x2] 106 stumin x0, [x2] 107 stsminl x29, [sp] 108 //CHECK: staddlb w0, [x2] // encoding: [0x5f,0x00,0x60,0x38] 109 //CHECK: stclrlh w0, [x2] // encoding: [0x5f,0x10,0x60,0x78] 110 //CHECK: steorl w0, [x2] // encoding: [0x5f,0x20,0x60,0xb8] 111 //CHECK: stsetl x0, [x2] // encoding: [0x5f,0x30,0x60,0xf8] 112 //CHECK: stsmaxb w0, [x2] // encoding: [0x5f,0x40,0x20,0x38] 113 //CHECK: stsminh w0, [x2] // encoding: [0x5f,0x50,0x20,0x78] 114 //CHECK: stumax w0, [x2] // encoding: [0x5f,0x60,0x20,0xb8] 115 //CHECK: stumin x0, [x2] // encoding: [0x5f,0x70,0x20,0xf8] 116 //CHECK: stsminl x29, [sp] // encoding: [0xff,0x53,0x7d,0xf8] 117 118 119 ldsmax x0, x1, [w2] 120 ldeorl w0, w1, [w2] 121 //CHECK-ERROR: error: invalid operand for instruction 122 //CHECK-ERROR: ldsmax x0, x1, [w2] 123 //CHECK-ERROR: ^ 124 //CHECK-ERROR: error: invalid operand for instruction 125 //CHECK-ERROR: ldeorl w0, w1, [w2] 126 //CHECK-ERROR: ^ 127 128 //SWP instruction 129 swp x0, x1, [x2] 130 swpb w0, w1, [x2] 131 swplh w0, w1, [x2] 132 swpal x0, x1, [sp] 133 //CHECK: swp x0, x1, [x2] // encoding: [0x41,0x80,0x20,0xf8] 134 //CHECK: swpb w0, w1, [x2] // encoding: [0x41,0x80,0x20,0x38] 135 //CHECK: swplh w0, w1, [x2] // encoding: [0x41,0x80,0x60,0x78] 136 //CHECK: swpal x0, x1, [sp] // encoding: [0xe1,0x83,0xe0,0xf8] 137 138 swp x0, x1, [w2] 139 swp x0, x1, [xzr] 140 //CHECK-ERROR: error: invalid operand for instruction 141 //CHECK-ERROR: swp x0, x1, [w2] 142 //CHECK-ERROR: ^ 143 //CHECK-ERROR: error: invalid operand for instruction 144 //CHECK-ERROR: swp x0, x1, [xzr] 145 //CHECK-ERROR: ^ 146 147 //CASP instruction 148 casp x0, x1, x2, x3, [x4] 149 casp w0, w1, w2, w3, [x4] 150 //CHECK: casp x0, x1, x2, x3, [x4] // encoding: [0x82,0x7c,0x20,0x48] 151 //CHECK: casp w0, w1, w2, w3, [x4] // encoding: [0x82,0x7c,0x20,0x08] 152 153 casp x1, x2, x4, x5, [x6] 154 casp x0, x1, x3, x4, [x5] 155 casp x0, x2, x4, x5, [x6] 156 casp x0, x1, x2, x4, [x5] 157 casp x0, w1, x2, x3, [x5] 158 casp w0, x1, x2, x3, [x5] 159 casp w0, x1, w2, w3, [x5] 160 casp x0, x1, w2, w3, [x5] 161 //CHECK-ERROR: error: expected first even register of a consecutive same-size even/odd register pair 162 //CHECK-ERROR: casp x1, x2, x4, x5, [x6] 163 //CHECK-ERROR: ^ 164 //CHECK-ERROR: error: expected first even register of a consecutive same-size even/odd register pair 165 //CHECK-ERROR: casp x0, x1, x3, x4, [x5] 166 //CHECK-ERROR: ^ 167 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair 168 //CHECK-ERROR: casp x0, x2, x4, x5, [x6] 169 //CHECK-ERROR: ^ 170 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair 171 //CHECK-ERROR: casp x0, x1, x2, x4, [x5] 172 //CHECK-ERROR: ^ 173 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair 174 //CHECK-ERROR: casp x0, w1, x2, x3, [x5] 175 //CHECK-ERROR: ^ 176 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair 177 //CHECK-ERROR: casp w0, x1, x2, x3, [x5] 178 //CHECK-ERROR: ^ 179 //CHECK-ERROR: error: expected second odd register of a consecutive same-size even/odd register pair 180 //CHECK-ERROR: casp w0, x1, w2, w3, [x5] 181 //CHECK-ERROR: ^ 182 //CHECK-ERROR: error: invalid operand for instruction 183 //CHECK-ERROR: casp x0, x1, w2, w3, [x5] 184 //CHECK-ERROR: ^ 185