290 lines · plain
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 %s5# 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 %s7# RUN: llvm-mc %s --triple=loongarch32 --filetype=obj | llvm-objdump -d - \8# RUN: | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ %s9# 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 %s11 12#############################################################13## Instructions for both loongarch32 and loongarch6414#############################################################15 16# CHECK-ASM-AND-OBJ: ll.w $tp, $s4, 22017# CHECK-ASM: encoding: [0x62,0xdf,0x00,0x20]18ll.w $tp, $s4, 22019 20# CHECK-ASM-AND-OBJ: sc.w $t7, $t2, 5621# CHECK-ASM: encoding: [0xd3,0x39,0x00,0x21]22sc.w $t7, $t2, 5623 24 25 26#############################################################27## Instructions only for loongarch6428#############################################################29 30.ifdef LA6431 32# CHECK64-ASM-AND-OBJ: amswap.b $a2, $t0, $s133# CHECK64-ASM: encoding: [0x06,0x33,0x5c,0x38]34amswap.b $a2, $t0, $s1, 035 36# CHECK64-ASM-AND-OBJ: amswap.h $a2, $t0, $s137# CHECK64-ASM: encoding: [0x06,0xb3,0x5c,0x38]38amswap.h $a2, $t0, $s1, 039 40# CHECK64-ASM-AND-OBJ: amswap.w $a2, $t0, $s141# CHECK64-ASM: encoding: [0x06,0x33,0x60,0x38]42amswap.w $a2, $t0, $s1, 043 44# CHECK64-ASM-AND-OBJ: amswap.w $zero, $t0, $zero45# CHECK64-ASM: encoding: [0x00,0x30,0x60,0x38]46amswap.w $zero, $t0, $zero47 48# CHECK64-ASM-AND-OBJ: amadd_db.w $zero, $zero, $a149# CHECK64-ASM: encoding: [0xa0,0x00,0x6a,0x38]50amadd_db.w $zero, $zero, $a151 52# CHECK64-ASM-AND-OBJ: amswap.b $a2, $t0, $s153# CHECK64-ASM: encoding: [0x06,0x33,0x5c,0x38]54amswap.b $a2, $t0, $s155 56# CHECK64-ASM-AND-OBJ: amswap.h $a2, $t0, $s157# CHECK64-ASM: encoding: [0x06,0xb3,0x5c,0x38]58amswap.h $a2, $t0, $s159 60# CHECK64-ASM-AND-OBJ: amswap.w $a2, $t0, $s161# CHECK64-ASM: encoding: [0x06,0x33,0x60,0x38]62amswap.w $a2, $t0, $s163 64# CHECK64-ASM-AND-OBJ: amswap.d $tp, $t2, $fp65# CHECK64-ASM: encoding: [0xc2,0xba,0x60,0x38]66amswap.d $tp, $t2, $fp67 68# CHECK64-ASM-AND-OBJ: amadd.b $a4, $t0, $r2169# CHECK64-ASM: encoding: [0xa8,0x32,0x5d,0x38]70amadd.b $a4, $t0, $r2171 72# CHECK64-ASM-AND-OBJ: amadd.h $a1, $t5, $s673# CHECK64-ASM: encoding: [0xa5,0xc7,0x5d,0x38]74amadd.h $a1, $t5, $s675 76# CHECK64-ASM-AND-OBJ: amadd.w $a4, $t0, $r2177# CHECK64-ASM: encoding: [0xa8,0x32,0x61,0x38]78amadd.w $a4, $t0, $r2179 80# CHECK64-ASM-AND-OBJ: amadd.d $a1, $t5, $s681# CHECK64-ASM: encoding: [0xa5,0xc7,0x61,0x38]82amadd.d $a1, $t5, $s683 84# CHECK64-ASM-AND-OBJ: amand.w $a0, $t7, $fp85# CHECK64-ASM: encoding: [0xc4,0x4e,0x62,0x38]86amand.w $a0, $t7, $fp87 88# CHECK64-ASM-AND-OBJ: amand.d $a6, $t6, $s689# CHECK64-ASM: encoding: [0xaa,0xcb,0x62,0x38]90amand.d $a6, $t6, $s691 92# CHECK64-ASM-AND-OBJ: amor.w $a2, $t4, $s093# CHECK64-ASM: encoding: [0xe6,0x42,0x63,0x38]94amor.w $a2, $t4, $s095 96# CHECK64-ASM-AND-OBJ: amor.d $sp, $t4, $s197# CHECK64-ASM: encoding: [0x03,0xc3,0x63,0x38]98amor.d $sp, $t4, $s199 100# CHECK64-ASM-AND-OBJ: amxor.w $tp, $t3, $s0101# CHECK64-ASM: encoding: [0xe2,0x3e,0x64,0x38]102amxor.w $tp, $t3, $s0103 104# CHECK64-ASM-AND-OBJ: amxor.d $a4, $t8, $s5105# CHECK64-ASM: encoding: [0x88,0xd3,0x64,0x38]106amxor.d $a4, $t8, $s5107 108# CHECK64-ASM-AND-OBJ: ammax.w $ra, $a7, $s0109# CHECK64-ASM: encoding: [0xe1,0x2e,0x65,0x38]110ammax.w $ra, $a7, $s0111 112# CHECK64-ASM-AND-OBJ: ammax.d $a5, $t8, $s4113# CHECK64-ASM: encoding: [0x69,0xd3,0x65,0x38]114ammax.d $a5, $t8, $s4115 116# CHECK64-ASM-AND-OBJ: ammin.w $a5, $t2, $s0117# CHECK64-ASM: encoding: [0xe9,0x3a,0x66,0x38]118ammin.w $a5, $t2, $s0119 120# CHECK64-ASM-AND-OBJ: ammin.d $a5, $t1, $fp121# CHECK64-ASM: encoding: [0xc9,0xb6,0x66,0x38]122ammin.d $a5, $t1, $fp123 124# CHECK64-ASM-AND-OBJ: ammax.wu $a5, $a7, $fp125# CHECK64-ASM: encoding: [0xc9,0x2e,0x67,0x38]126ammax.wu $a5, $a7, $fp127 128# CHECK64-ASM-AND-OBJ: ammax.du $a2, $t4, $s2129# CHECK64-ASM: encoding: [0x26,0xc3,0x67,0x38]130ammax.du $a2, $t4, $s2131 132# CHECK64-ASM-AND-OBJ: ammin.wu $a4, $t6, $s7133# CHECK64-ASM: encoding: [0xc8,0x4b,0x68,0x38]134ammin.wu $a4, $t6, $s7135 136# CHECK64-ASM-AND-OBJ: ammin.du $a3, $t4, $s2137# CHECK64-ASM: encoding: [0x27,0xc3,0x68,0x38]138ammin.du $a3, $t4, $s2139 140# CHECK64-ASM-AND-OBJ: amswap_db.b $a2, $t0, $s1141# CHECK64-ASM: encoding: [0x06,0x33,0x5e,0x38]142amswap_db.b $a2, $t0, $s1143 144# CHECK64-ASM-AND-OBJ: amswap_db.h $tp, $t2, $fp145# CHECK64-ASM: encoding: [0xc2,0xba,0x5e,0x38]146amswap_db.h $tp, $t2, $fp147 148# CHECK64-ASM-AND-OBJ: amswap_db.w $a2, $t0, $s1149# CHECK64-ASM: encoding: [0x06,0x33,0x69,0x38]150amswap_db.w $a2, $t0, $s1151 152# CHECK64-ASM-AND-OBJ: amswap_db.d $tp, $t2, $fp153# CHECK64-ASM: encoding: [0xc2,0xba,0x69,0x38]154amswap_db.d $tp, $t2, $fp155 156# CHECK64-ASM-AND-OBJ: amadd_db.b $zero, $zero, $a1157# CHECK64-ASM: encoding: [0xa0,0x00,0x5f,0x38]158amadd_db.b $zero, $zero, $a1159 160# CHECK64-ASM-AND-OBJ: amadd_db.h $a4, $t0, $r21161# CHECK64-ASM: encoding: [0xa8,0xb2,0x5f,0x38]162amadd_db.h $a4, $t0, $r21163 164# CHECK64-ASM-AND-OBJ: amadd_db.w $a4, $t0, $r21165# CHECK64-ASM: encoding: [0xa8,0x32,0x6a,0x38]166amadd_db.w $a4, $t0, $r21167 168# CHECK64-ASM-AND-OBJ: amadd_db.d $a1, $t5, $s6169# CHECK64-ASM: encoding: [0xa5,0xc7,0x6a,0x38]170amadd_db.d $a1, $t5, $s6171 172# CHECK64-ASM-AND-OBJ: amand_db.w $a0, $t7, $fp173# CHECK64-ASM: encoding: [0xc4,0x4e,0x6b,0x38]174amand_db.w $a0, $t7, $fp175 176# CHECK64-ASM-AND-OBJ: amand_db.d $a6, $t6, $s6177# CHECK64-ASM: encoding: [0xaa,0xcb,0x6b,0x38]178amand_db.d $a6, $t6, $s6179 180# CHECK64-ASM-AND-OBJ: amor_db.w $a2, $t4, $s0181# CHECK64-ASM: encoding: [0xe6,0x42,0x6c,0x38]182amor_db.w $a2, $t4, $s0183 184# CHECK64-ASM-AND-OBJ: amor_db.d $sp, $t4, $s1185# CHECK64-ASM: encoding: [0x03,0xc3,0x6c,0x38]186amor_db.d $sp, $t4, $s1187 188# CHECK64-ASM-AND-OBJ: amxor_db.w $tp, $t3, $s0189# CHECK64-ASM: encoding: [0xe2,0x3e,0x6d,0x38]190amxor_db.w $tp, $t3, $s0191 192# CHECK64-ASM-AND-OBJ: amxor_db.d $a4, $t8, $s5193# CHECK64-ASM: encoding: [0x88,0xd3,0x6d,0x38]194amxor_db.d $a4, $t8, $s5195 196# CHECK64-ASM-AND-OBJ: ammax_db.w $ra, $a7, $s0197# CHECK64-ASM: encoding: [0xe1,0x2e,0x6e,0x38]198ammax_db.w $ra, $a7, $s0199 200# CHECK64-ASM-AND-OBJ: ammax_db.d $a5, $t8, $s4201# CHECK64-ASM: encoding: [0x69,0xd3,0x6e,0x38]202ammax_db.d $a5, $t8, $s4203 204# CHECK64-ASM-AND-OBJ: ammin_db.w $a5, $t2, $s0205# CHECK64-ASM: encoding: [0xe9,0x3a,0x6f,0x38]206ammin_db.w $a5, $t2, $s0207 208# CHECK64-ASM-AND-OBJ: ammin_db.d $a5, $t1, $fp209# CHECK64-ASM: encoding: [0xc9,0xb6,0x6f,0x38]210ammin_db.d $a5, $t1, $fp211 212# CHECK64-ASM-AND-OBJ: ammax_db.wu $a5, $a7, $fp213# CHECK64-ASM: encoding: [0xc9,0x2e,0x70,0x38]214ammax_db.wu $a5, $a7, $fp215 216# CHECK64-ASM-AND-OBJ: ammax_db.du $a2, $t4, $s2217# CHECK64-ASM: encoding: [0x26,0xc3,0x70,0x38]218ammax_db.du $a2, $t4, $s2219 220# CHECK64-ASM-AND-OBJ: ammin_db.wu $a4, $t6, $s7221# CHECK64-ASM: encoding: [0xc8,0x4b,0x71,0x38]222ammin_db.wu $a4, $t6, $s7223 224# CHECK64-ASM-AND-OBJ: ammin_db.du $a3, $t4, $s2225# CHECK64-ASM: encoding: [0x27,0xc3,0x71,0x38]226ammin_db.du $a3, $t4, $s2227 228# CHECK64-ASM-AND-OBJ: amcas.b $t1, $t2, $t3229# CHECK64-ASM: encoding: [0xed,0x39,0x58,0x38]230amcas.b $t1, $t2, $t3231 232# CHECK64-ASM-AND-OBJ: amcas.h $t1, $t2, $t3233# CHECK64-ASM: encoding: [0xed,0xb9,0x58,0x38]234amcas.h $t1, $t2, $t3235 236# CHECK64-ASM-AND-OBJ: amcas.w $t1, $t2, $t3237# CHECK64-ASM: encoding: [0xed,0x39,0x59,0x38]238amcas.w $t1, $t2, $t3239 240# CHECK64-ASM-AND-OBJ: amcas.d $t1, $t2, $t3241# CHECK64-ASM: encoding: [0xed,0xb9,0x59,0x38]242amcas.d $t1, $t2, $t3243 244# CHECK64-ASM-AND-OBJ: amcas_db.b $t1, $t2, $t3245# CHECK64-ASM: encoding: [0xed,0x39,0x5a,0x38]246amcas_db.b $t1, $t2, $t3247 248# CHECK64-ASM-AND-OBJ: amcas_db.h $t1, $t2, $t3249# CHECK64-ASM: encoding: [0xed,0xb9,0x5a,0x38]250amcas_db.h $t1, $t2, $t3251 252# CHECK64-ASM-AND-OBJ: amcas_db.w $t1, $t2, $t3253# CHECK64-ASM: encoding: [0xed,0x39,0x5b,0x38]254amcas_db.w $t1, $t2, $t3255 256# CHECK64-ASM-AND-OBJ: amcas_db.d $t1, $t2, $t3257# CHECK64-ASM: encoding: [0xed,0xb9,0x5b,0x38]258amcas_db.d $t1, $t2, $t3259 260# CHECK64-ASM-AND-OBJ: ll.d $s2, $s4, 16261# CHECK64-ASM: encoding: [0x79,0x13,0x00,0x22]262ll.d $s2, $s4, 16263 264# CHECK64-ASM-AND-OBJ: sc.d $t5, $t5, 244265# CHECK64-ASM: encoding: [0x31,0xf6,0x00,0x23]266sc.d $t5, $t5, 244267 268# CHECK64-ASM-AND-OBJ: sc.q $t7, $t2, $t5269# CHECK64-ASM: encoding: [0x33,0x3a,0x57,0x38]270sc.q $t7, $t2, $t5271 272# CHECK64-ASM-AND-OBJ: llacq.w $t1, $t2273# CHECK64-ASM: encoding: [0xcd,0x81,0x57,0x38]274llacq.w $t1, $t2275 276# CHECK64-ASM-AND-OBJ: screl.w $t1, $t2277# CHECK64-ASM: encoding: [0xcd,0x85,0x57,0x38]278screl.w $t1, $t2279 280# CHECK64-ASM-AND-OBJ: llacq.d $t1, $t2281# CHECK64-ASM: encoding: [0xcd,0x89,0x57,0x38]282llacq.d $t1, $t2283 284# CHECK64-ASM-AND-OBJ: screl.d $t1, $t2285# CHECK64-ASM: encoding: [0xcd,0x8d,0x57,0x38]286screl.d $t1, $t2287 288.endif289 290