1## Test valid atomic memory access instructions. 2 3# RUN: llvm-mc %s --triple=loongarch32 --show-encoding \ 4# RUN: | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s 5# RUN: llvm-mc %s --triple=loongarch64 --show-encoding --defsym=LA64=1 \ 6# RUN: | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ,CHECK64-ASM,CHECK64-ASM-AND-OBJ %s 7# RUN: llvm-mc %s --triple=loongarch32 --filetype=obj | llvm-objdump -d - \ 8# RUN: | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ %s 9# RUN: llvm-mc %s --triple=loongarch64 --filetype=obj --defsym=LA64=1 | llvm-objdump -d - \ 10# RUN: | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ,CHECK64-ASM-AND-OBJ %s 11 12############################################################# 13## Instructions for both loongarch32 and loongarch64 14############################################################# 15 16# CHECK-ASM-AND-OBJ: ll.w $tp, $s4, 220 17# CHECK-ASM: encoding: [0x62,0xdf,0x00,0x20] 18ll.w $tp, $s4, 220 19 20# CHECK-ASM-AND-OBJ: sc.w $t7, $t2, 56 21# CHECK-ASM: encoding: [0xd3,0x39,0x00,0x21] 22sc.w $t7, $t2, 56 23 24# CHECK-ASM-AND-OBJ: llacq.w $t1, $t2 25# CHECK-ASM: encoding: [0xcd,0x81,0x57,0x38] 26llacq.w $t1, $t2 27 28# CHECK-ASM-AND-OBJ: screl.w $t1, $t2 29# CHECK-ASM: encoding: [0xcd,0x85,0x57,0x38] 30screl.w $t1, $t2 31 32 33 34############################################################# 35## Instructions only for loongarch64 36############################################################# 37 38.ifdef LA64 39 40# CHECK64-ASM-AND-OBJ: amswap.b $a2, $t0, $s1 41# CHECK64-ASM: encoding: [0x06,0x33,0x5c,0x38] 42amswap.b $a2, $t0, $s1, 0 43 44# CHECK64-ASM-AND-OBJ: amswap.h $a2, $t0, $s1 45# CHECK64-ASM: encoding: [0x06,0xb3,0x5c,0x38] 46amswap.h $a2, $t0, $s1, 0 47 48# CHECK64-ASM-AND-OBJ: amswap.w $a2, $t0, $s1 49# CHECK64-ASM: encoding: [0x06,0x33,0x60,0x38] 50amswap.w $a2, $t0, $s1, 0 51 52# CHECK64-ASM-AND-OBJ: amswap.w $zero, $t0, $zero 53# CHECK64-ASM: encoding: [0x00,0x30,0x60,0x38] 54amswap.w $zero, $t0, $zero 55 56# CHECK64-ASM-AND-OBJ: amadd_db.w $zero, $zero, $a1 57# CHECK64-ASM: encoding: [0xa0,0x00,0x6a,0x38] 58amadd_db.w $zero, $zero, $a1 59 60# CHECK64-ASM-AND-OBJ: amswap.b $a2, $t0, $s1 61# CHECK64-ASM: encoding: [0x06,0x33,0x5c,0x38] 62amswap.b $a2, $t0, $s1 63 64# CHECK64-ASM-AND-OBJ: amswap.h $a2, $t0, $s1 65# CHECK64-ASM: encoding: [0x06,0xb3,0x5c,0x38] 66amswap.h $a2, $t0, $s1 67 68# CHECK64-ASM-AND-OBJ: amswap.w $a2, $t0, $s1 69# CHECK64-ASM: encoding: [0x06,0x33,0x60,0x38] 70amswap.w $a2, $t0, $s1 71 72# CHECK64-ASM-AND-OBJ: amswap.d $tp, $t2, $fp 73# CHECK64-ASM: encoding: [0xc2,0xba,0x60,0x38] 74amswap.d $tp, $t2, $fp 75 76# CHECK64-ASM-AND-OBJ: amadd.b $a4, $t0, $r21 77# CHECK64-ASM: encoding: [0xa8,0x32,0x5d,0x38] 78amadd.b $a4, $t0, $r21 79 80# CHECK64-ASM-AND-OBJ: amadd.h $a1, $t5, $s6 81# CHECK64-ASM: encoding: [0xa5,0xc7,0x5d,0x38] 82amadd.h $a1, $t5, $s6 83 84# CHECK64-ASM-AND-OBJ: amadd.w $a4, $t0, $r21 85# CHECK64-ASM: encoding: [0xa8,0x32,0x61,0x38] 86amadd.w $a4, $t0, $r21 87 88# CHECK64-ASM-AND-OBJ: amadd.d $a1, $t5, $s6 89# CHECK64-ASM: encoding: [0xa5,0xc7,0x61,0x38] 90amadd.d $a1, $t5, $s6 91 92# CHECK64-ASM-AND-OBJ: amand.w $a0, $t7, $fp 93# CHECK64-ASM: encoding: [0xc4,0x4e,0x62,0x38] 94amand.w $a0, $t7, $fp 95 96# CHECK64-ASM-AND-OBJ: amand.d $a6, $t6, $s6 97# CHECK64-ASM: encoding: [0xaa,0xcb,0x62,0x38] 98amand.d $a6, $t6, $s6 99 100# CHECK64-ASM-AND-OBJ: amor.w $a2, $t4, $s0 101# CHECK64-ASM: encoding: [0xe6,0x42,0x63,0x38] 102amor.w $a2, $t4, $s0 103 104# CHECK64-ASM-AND-OBJ: amor.d $sp, $t4, $s1 105# CHECK64-ASM: encoding: [0x03,0xc3,0x63,0x38] 106amor.d $sp, $t4, $s1 107 108# CHECK64-ASM-AND-OBJ: amxor.w $tp, $t3, $s0 109# CHECK64-ASM: encoding: [0xe2,0x3e,0x64,0x38] 110amxor.w $tp, $t3, $s0 111 112# CHECK64-ASM-AND-OBJ: amxor.d $a4, $t8, $s5 113# CHECK64-ASM: encoding: [0x88,0xd3,0x64,0x38] 114amxor.d $a4, $t8, $s5 115 116# CHECK64-ASM-AND-OBJ: ammax.w $ra, $a7, $s0 117# CHECK64-ASM: encoding: [0xe1,0x2e,0x65,0x38] 118ammax.w $ra, $a7, $s0 119 120# CHECK64-ASM-AND-OBJ: ammax.d $a5, $t8, $s4 121# CHECK64-ASM: encoding: [0x69,0xd3,0x65,0x38] 122ammax.d $a5, $t8, $s4 123 124# CHECK64-ASM-AND-OBJ: ammin.w $a5, $t2, $s0 125# CHECK64-ASM: encoding: [0xe9,0x3a,0x66,0x38] 126ammin.w $a5, $t2, $s0 127 128# CHECK64-ASM-AND-OBJ: ammin.d $a5, $t1, $fp 129# CHECK64-ASM: encoding: [0xc9,0xb6,0x66,0x38] 130ammin.d $a5, $t1, $fp 131 132# CHECK64-ASM-AND-OBJ: ammax.wu $a5, $a7, $fp 133# CHECK64-ASM: encoding: [0xc9,0x2e,0x67,0x38] 134ammax.wu $a5, $a7, $fp 135 136# CHECK64-ASM-AND-OBJ: ammax.du $a2, $t4, $s2 137# CHECK64-ASM: encoding: [0x26,0xc3,0x67,0x38] 138ammax.du $a2, $t4, $s2 139 140# CHECK64-ASM-AND-OBJ: ammin.wu $a4, $t6, $s7 141# CHECK64-ASM: encoding: [0xc8,0x4b,0x68,0x38] 142ammin.wu $a4, $t6, $s7 143 144# CHECK64-ASM-AND-OBJ: ammin.du $a3, $t4, $s2 145# CHECK64-ASM: encoding: [0x27,0xc3,0x68,0x38] 146ammin.du $a3, $t4, $s2 147 148# CHECK64-ASM-AND-OBJ: amswap_db.b $a2, $t0, $s1 149# CHECK64-ASM: encoding: [0x06,0x33,0x5e,0x38] 150amswap_db.b $a2, $t0, $s1 151 152# CHECK64-ASM-AND-OBJ: amswap_db.h $tp, $t2, $fp 153# CHECK64-ASM: encoding: [0xc2,0xba,0x5e,0x38] 154amswap_db.h $tp, $t2, $fp 155 156# CHECK64-ASM-AND-OBJ: amswap_db.w $a2, $t0, $s1 157# CHECK64-ASM: encoding: [0x06,0x33,0x69,0x38] 158amswap_db.w $a2, $t0, $s1 159 160# CHECK64-ASM-AND-OBJ: amswap_db.d $tp, $t2, $fp 161# CHECK64-ASM: encoding: [0xc2,0xba,0x69,0x38] 162amswap_db.d $tp, $t2, $fp 163 164# CHECK64-ASM-AND-OBJ: amadd_db.b $zero, $zero, $a1 165# CHECK64-ASM: encoding: [0xa0,0x00,0x5f,0x38] 166amadd_db.b $zero, $zero, $a1 167 168# CHECK64-ASM-AND-OBJ: amadd_db.h $a4, $t0, $r21 169# CHECK64-ASM: encoding: [0xa8,0xb2,0x5f,0x38] 170amadd_db.h $a4, $t0, $r21 171 172# CHECK64-ASM-AND-OBJ: amadd_db.w $a4, $t0, $r21 173# CHECK64-ASM: encoding: [0xa8,0x32,0x6a,0x38] 174amadd_db.w $a4, $t0, $r21 175 176# CHECK64-ASM-AND-OBJ: amadd_db.d $a1, $t5, $s6 177# CHECK64-ASM: encoding: [0xa5,0xc7,0x6a,0x38] 178amadd_db.d $a1, $t5, $s6 179 180# CHECK64-ASM-AND-OBJ: amand_db.w $a0, $t7, $fp 181# CHECK64-ASM: encoding: [0xc4,0x4e,0x6b,0x38] 182amand_db.w $a0, $t7, $fp 183 184# CHECK64-ASM-AND-OBJ: amand_db.d $a6, $t6, $s6 185# CHECK64-ASM: encoding: [0xaa,0xcb,0x6b,0x38] 186amand_db.d $a6, $t6, $s6 187 188# CHECK64-ASM-AND-OBJ: amor_db.w $a2, $t4, $s0 189# CHECK64-ASM: encoding: [0xe6,0x42,0x6c,0x38] 190amor_db.w $a2, $t4, $s0 191 192# CHECK64-ASM-AND-OBJ: amor_db.d $sp, $t4, $s1 193# CHECK64-ASM: encoding: [0x03,0xc3,0x6c,0x38] 194amor_db.d $sp, $t4, $s1 195 196# CHECK64-ASM-AND-OBJ: amxor_db.w $tp, $t3, $s0 197# CHECK64-ASM: encoding: [0xe2,0x3e,0x6d,0x38] 198amxor_db.w $tp, $t3, $s0 199 200# CHECK64-ASM-AND-OBJ: amxor_db.d $a4, $t8, $s5 201# CHECK64-ASM: encoding: [0x88,0xd3,0x6d,0x38] 202amxor_db.d $a4, $t8, $s5 203 204# CHECK64-ASM-AND-OBJ: ammax_db.w $ra, $a7, $s0 205# CHECK64-ASM: encoding: [0xe1,0x2e,0x6e,0x38] 206ammax_db.w $ra, $a7, $s0 207 208# CHECK64-ASM-AND-OBJ: ammax_db.d $a5, $t8, $s4 209# CHECK64-ASM: encoding: [0x69,0xd3,0x6e,0x38] 210ammax_db.d $a5, $t8, $s4 211 212# CHECK64-ASM-AND-OBJ: ammin_db.w $a5, $t2, $s0 213# CHECK64-ASM: encoding: [0xe9,0x3a,0x6f,0x38] 214ammin_db.w $a5, $t2, $s0 215 216# CHECK64-ASM-AND-OBJ: ammin_db.d $a5, $t1, $fp 217# CHECK64-ASM: encoding: [0xc9,0xb6,0x6f,0x38] 218ammin_db.d $a5, $t1, $fp 219 220# CHECK64-ASM-AND-OBJ: ammax_db.wu $a5, $a7, $fp 221# CHECK64-ASM: encoding: [0xc9,0x2e,0x70,0x38] 222ammax_db.wu $a5, $a7, $fp 223 224# CHECK64-ASM-AND-OBJ: ammax_db.du $a2, $t4, $s2 225# CHECK64-ASM: encoding: [0x26,0xc3,0x70,0x38] 226ammax_db.du $a2, $t4, $s2 227 228# CHECK64-ASM-AND-OBJ: ammin_db.wu $a4, $t6, $s7 229# CHECK64-ASM: encoding: [0xc8,0x4b,0x71,0x38] 230ammin_db.wu $a4, $t6, $s7 231 232# CHECK64-ASM-AND-OBJ: ammin_db.du $a3, $t4, $s2 233# CHECK64-ASM: encoding: [0x27,0xc3,0x71,0x38] 234ammin_db.du $a3, $t4, $s2 235 236# CHECK64-ASM-AND-OBJ: amcas.b $t1, $t2, $t3 237# CHECK64-ASM: encoding: [0xed,0x39,0x58,0x38] 238amcas.b $t1, $t2, $t3 239 240# CHECK64-ASM-AND-OBJ: amcas.h $t1, $t2, $t3 241# CHECK64-ASM: encoding: [0xed,0xb9,0x58,0x38] 242amcas.h $t1, $t2, $t3 243 244# CHECK64-ASM-AND-OBJ: amcas.w $t1, $t2, $t3 245# CHECK64-ASM: encoding: [0xed,0x39,0x59,0x38] 246amcas.w $t1, $t2, $t3 247 248# CHECK64-ASM-AND-OBJ: amcas.d $t1, $t2, $t3 249# CHECK64-ASM: encoding: [0xed,0xb9,0x59,0x38] 250amcas.d $t1, $t2, $t3 251 252# CHECK64-ASM-AND-OBJ: amcas_db.b $t1, $t2, $t3 253# CHECK64-ASM: encoding: [0xed,0x39,0x5a,0x38] 254amcas_db.b $t1, $t2, $t3 255 256# CHECK64-ASM-AND-OBJ: amcas_db.h $t1, $t2, $t3 257# CHECK64-ASM: encoding: [0xed,0xb9,0x5a,0x38] 258amcas_db.h $t1, $t2, $t3 259 260# CHECK64-ASM-AND-OBJ: amcas_db.w $t1, $t2, $t3 261# CHECK64-ASM: encoding: [0xed,0x39,0x5b,0x38] 262amcas_db.w $t1, $t2, $t3 263 264# CHECK64-ASM-AND-OBJ: amcas_db.d $t1, $t2, $t3 265# CHECK64-ASM: encoding: [0xed,0xb9,0x5b,0x38] 266amcas_db.d $t1, $t2, $t3 267 268# CHECK64-ASM-AND-OBJ: ll.d $s2, $s4, 16 269# CHECK64-ASM: encoding: [0x79,0x13,0x00,0x22] 270ll.d $s2, $s4, 16 271 272# CHECK64-ASM-AND-OBJ: sc.d $t5, $t5, 244 273# CHECK64-ASM: encoding: [0x31,0xf6,0x00,0x23] 274sc.d $t5, $t5, 244 275 276# CHECK64-ASM-AND-OBJ: sc.q $t7, $t2, $t5 277# CHECK64-ASM: encoding: [0x33,0x3a,0x57,0x38] 278sc.q $t7, $t2, $t5 279 280# CHECK64-ASM-AND-OBJ: llacq.d $t1, $t2 281# CHECK64-ASM: encoding: [0xcd,0x89,0x57,0x38] 282llacq.d $t1, $t2 283 284# CHECK64-ASM-AND-OBJ: screl.d $t1, $t2 285# CHECK64-ASM: encoding: [0xcd,0x8d,0x57,0x38] 286screl.d $t1, $t2 287 288.endif 289 290