105 lines · plain
1## Test invalid instructions on loongarch64 target.2 3# RUN: not llvm-mc --triple=loongarch64 %s 2>&1 | FileCheck %s4 5## Out of range immediates6## uimm2_plus17alsl.wu $a0, $a0, $a0, 08# CHECK: :[[#@LINE-1]]:24: error: immediate must be an integer in the range [1, 4]9alsl.d $a0, $a0, $a0, 510# CHECK: :[[#@LINE-1]]:23: error: immediate must be an integer in the range [1, 4]11 12## uimm313bytepick.d $a0, $a0, $a0, -114# CHECK: :[[#@LINE-1]]:27: error: immediate must be an integer in the range [0, 7]15bytepick.d $a0, $a0, $a0, 816# CHECK: :[[#@LINE-1]]:27: error: immediate must be an integer in the range [0, 7]17 18## uimm619slli.d $a0, $a0, -120# CHECK: :[[#@LINE-1]]:18: error: immediate must be an integer in the range [0, 63]21srli.d $a0, $a0, -122# CHECK: :[[#@LINE-1]]:18: error: immediate must be an integer in the range [0, 63]23srai.d $a0, $a0, 6424# CHECK: :[[#@LINE-1]]:18: error: immediate must be an integer in the range [0, 63]25rotri.d $a0, $a0, 6426# CHECK: :[[#@LINE-1]]:19: error: immediate must be an integer in the range [0, 63]27bstrins.d $a0, $a0, 63, -128# CHECK: :[[#@LINE-1]]:25: error: immediate must be an integer in the range [0, 63]29bstrpick.d $a0, $a0, 64, 030# CHECK: :[[#@LINE-1]]:22: error: immediate must be an integer in the range [0, 63]31 32## simm12_addlike33addi.d $a0, $a0, -204934# CHECK: :[[#@LINE-1]]:18: error: operand must be a symbol with modifier (e.g. %pc_lo12) or an integer in the range [-2048, 2047]35ld.wu $a0, $a0, 204836# CHECK: :[[#@LINE-1]]:17: error: operand must be a symbol with modifier (e.g. %pc_lo12) or an integer in the range [-2048, 2047]37ld.d $a0, $a0, 204838# CHECK: :[[#@LINE-1]]:16: error: operand must be a symbol with modifier (e.g. %pc_lo12) or an integer in the range [-2048, 2047]39st.d $a0, $a0, 204840# CHECK: :[[#@LINE-1]]:16: error: operand must be a symbol with modifier (e.g. %pc_lo12) or an integer in the range [-2048, 2047]41 42## simm12_lu52id43lu52i.d $a0, $a0, 204844# CHECK-LA64: :[[#@LINE-1]]:19: error: operand must be a symbol with modifier (e.g. %pc64_hi12) or an integer in the range [-2048, 2047]45 46## simm14_lsl247ldptr.w $a0, $a0, -3277248# CHECK: :[[#@LINE-1]]:19: error: immediate must be a multiple of 4 in the range [-32768, 32764]49ldptr.d $a0, $a0, -3277250# CHECK: :[[#@LINE-1]]:19: error: immediate must be a multiple of 4 in the range [-32768, 32764]51stptr.w $a0, $a0, -3276952# CHECK: :[[#@LINE-1]]:19: error: immediate must be a multiple of 4 in the range [-32768, 32764]53stptr.d $a0, $a0, -3276954# CHECK: :[[#@LINE-1]]:19: error: immediate must be a multiple of 4 in the range [-32768, 32764]55ll.w $a0, $a0, 3276756# CHECK: :[[#@LINE-1]]:16: error: immediate must be a multiple of 4 in the range [-32768, 32764]57sc.w $a0, $a0, 3276858# CHECK: :[[#@LINE-1]]:16: error: immediate must be a multiple of 4 in the range [-32768, 32764]59 60## simm1661addu16i.d $a0, $a0, -3276962# CHECK: :[[#@LINE-1]]:21: error: immediate must be an integer in the range [-32768, 32767]63addu16i.d $a0, $a0, 3276864# CHECK: :[[#@LINE-1]]:21: error: immediate must be an integer in the range [-32768, 32767]65 66## simm2067pcaddu18i $a0, 0x8000068# CHECK: :[[#@LINE-1]]:16: error: operand must be a symbol with modifier (e.g. %call36) or an integer in the range [-524288, 524287]69 70## simm20_lu32id71lu32i.d $a0, 0x8000072# CHECK-LA64: :[[#@LINE-1]]:14: error: operand must be a symbol with modifier (e.g. %abs64_lo20) or an integer in the range [-524288, 524287]73 74## msbd < lsbd75# CHECK: :[[#@LINE+1]]:21: error: msb is less than lsb76bstrins.d $a0, $a0, 1, 277# CHECK: ^~~~78 79# CHECK: :[[#@LINE+1]]:22: error: msb is less than lsb80bstrpick.d $a0, $a0, 32, 6381# CHECK: ^~~~~~82 83# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj84amadd.d $a0, $a0, $a085# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj86ammin.w $a0, $a0, $a187# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj88amxor.w $a0, $a1, $a089 90# CHECK: :[[#@LINE+1]]:24: error: expected optional integer offset91amadd.d $a0, $a1, $a2, $a392# CHECK: :[[#@LINE+1]]:24: error: optional integer offset must be 093amadd.d $a0, $a1, $a2, 194 95## According to experiment results on real LA664 HW, the AMCAS instructions96## are subject to the same constraint as the other 3-register atomic insns.97## This is undocumented in v1.10 of the LoongArch Reference Manual.98 99# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj100amcas.b $a0, $a0, $a0101# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj102amcas.h $a0, $a0, $a1103# CHECK: :[[#@LINE+1]]:13: error: $rd must be different from both $rk and $rj104amcas_db.w $a0, $a1, $a0105