# RUN: not llvm-mc %s -triple=riscv32 2>&1 | FileCheck %s # RUN: not llvm-mc %s -triple=riscv64 2>&1 | FileCheck %s # The below tests for lr(.w), sc(.w) and amo*(.w), using `0(reg)` are actually # implemented using a custom parser. These tests ensure the custom parser gives # good error messages. lr.w a1, a0 # CHECK: :[[@LINE]]:10: error: expected '(' or optional integer offset lr.w a1, foo # CHECK: :[[@LINE]]:10: error: expected '(' or optional integer offset lr.w a1, 1(a0) # CHECK: :[[@LINE]]:10: error: optional integer offset must be 0 lr.w a1, (foo) # CHECK: :[[@LINE]]:11: error: expected register lr.w a1, 0(foo) # CHECK: :[[@LINE]]:12: error: expected register lr.w a1, (f0) # CHECK: :[[@LINE]]:11: error: invalid operand for instruction lr.w a1, 0(f0) # CHECK: :[[@LINE]]:12: error: invalid operand for instruction lr.w a1, 0(a0 # CHECK: :[[@LINE]]:17: error: expected ')' lr.w a1, (a0 # CHECK: :[[@LINE]]:17: error: expected ')' sc.w a2, a1, a0 # CHECK: :[[@LINE]]:14: error: expected '(' or optional integer offset sc.w a2, a1, foo # CHECK: :[[@LINE]]:14: error: expected '(' or optional integer offset sc.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:14: error: optional integer offset must be 0 sc.w a2, a1, (foo) # CHECK: :[[@LINE]]:15: error: expected register sc.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:16: error: expected register sc.w a2, a1, (f0) # CHECK: :[[@LINE]]:15: error: invalid operand for instruction sc.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:16: error: invalid operand for instruction sc.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:21: error: expected ')' sc.w a2, a1, (a0 # CHECK: :[[@LINE]]:21: error: expected ')' amoswap.w a2, a1, a0 # CHECK: :[[@LINE]]:19: error: expected '(' or optional integer offset amoswap.w a2, a1, foo # CHECK: :[[@LINE]]:19: error: expected '(' or optional integer offset amoswap.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:19: error: optional integer offset must be 0 amoswap.w a2, a1, (foo) # CHECK: :[[@LINE]]:20: error: expected register amoswap.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:21: error: expected register amoswap.w a2, a1, (f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amoswap.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:21: error: invalid operand for instruction amoswap.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:26: error: expected ')' amoswap.w a2, a1, (a0 # CHECK: :[[@LINE]]:26: error: expected ')' amoadd.w a2, a1, a0 # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amoadd.w a2, a1, foo # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amoadd.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:18: error: optional integer offset must be 0 amoadd.w a2, a1, (foo) # CHECK: :[[@LINE]]:19: error: expected register amoadd.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:20: error: expected register amoadd.w a2, a1, (f0) # CHECK: :[[@LINE]]:19: error: invalid operand for instruction amoadd.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amoadd.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:25: error: expected ')' amoadd.w a2, a1, (a0 # CHECK: :[[@LINE]]:25: error: expected ')' amoxor.w a2, a1, a0 # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amoxor.w a2, a1, foo # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amoxor.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:18: error: optional integer offset must be 0 amoxor.w a2, a1, (foo) # CHECK: :[[@LINE]]:19: error: expected register amoxor.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:20: error: expected register amoxor.w a2, a1, (f0) # CHECK: :[[@LINE]]:19: error: invalid operand for instruction amoxor.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amoxor.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:25: error: expected ')' amoxor.w a2, a1, (a0 # CHECK: :[[@LINE]]:25: error: expected ')' amoand.w a2, a1, a0 # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amoand.w a2, a1, foo # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amoand.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:18: error: optional integer offset must be 0 amoand.w a2, a1, (foo) # CHECK: :[[@LINE]]:19: error: expected register amoand.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:20: error: expected register amoand.w a2, a1, (f0) # CHECK: :[[@LINE]]:19: error: invalid operand for instruction amoand.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amoand.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:25: error: expected ')' amoand.w a2, a1, (a0 # CHECK: :[[@LINE]]:25: error: expected ')' amoor.w a2, a1, a0 # CHECK: :[[@LINE]]:17: error: expected '(' or optional integer offset amoor.w a2, a1, foo # CHECK: :[[@LINE]]:17: error: expected '(' or optional integer offset amoor.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:17: error: optional integer offset must be 0 amoor.w a2, a1, (foo) # CHECK: :[[@LINE]]:18: error: expected register amoor.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:19: error: expected register amoor.w a2, a1, (f0) # CHECK: :[[@LINE]]:18: error: invalid operand for instruction amoor.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:19: error: invalid operand for instruction amoor.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:24: error: expected ')' amoor.w a2, a1, (a0 # CHECK: :[[@LINE]]:24: error: expected ')' amomin.w a2, a1, a0 # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amomin.w a2, a1, foo # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amomin.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:18: error: optional integer offset must be 0 amomin.w a2, a1, (foo) # CHECK: :[[@LINE]]:19: error: expected register amomin.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:20: error: expected register amomin.w a2, a1, (f0) # CHECK: :[[@LINE]]:19: error: invalid operand for instruction amomin.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amomin.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:25: error: expected ')' amomin.w a2, a1, (a0 # CHECK: :[[@LINE]]:25: error: expected ')' amomax.w a2, a1, a0 # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amomax.w a2, a1, foo # CHECK: :[[@LINE]]:18: error: expected '(' or optional integer offset amomax.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:18: error: optional integer offset must be 0 amomax.w a2, a1, (foo) # CHECK: :[[@LINE]]:19: error: expected register amomax.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:20: error: expected register amomax.w a2, a1, (f0) # CHECK: :[[@LINE]]:19: error: invalid operand for instruction amomax.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amomax.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:25: error: expected ')' amomax.w a2, a1, (a0 # CHECK: :[[@LINE]]:25: error: expected ')' amominu.w a2, a1, a0 # CHECK: :[[@LINE]]:19: error: expected '(' or optional integer offset amominu.w a2, a1, foo # CHECK: :[[@LINE]]:19: error: expected '(' or optional integer offset amominu.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:19: error: optional integer offset must be 0 amominu.w a2, a1, (foo) # CHECK: :[[@LINE]]:20: error: expected register amominu.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:21: error: expected register amominu.w a2, a1, (f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amominu.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:21: error: invalid operand for instruction amominu.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:26: error: expected ')' amominu.w a2, a1, (a0 # CHECK: :[[@LINE]]:26: error: expected ')' amomaxu.w a2, a1, a0 # CHECK: :[[@LINE]]:19: error: expected '(' or optional integer offset amomaxu.w a2, a1, foo # CHECK: :[[@LINE]]:19: error: expected '(' or optional integer offset amomaxu.w a2, a1, 1(a0) # CHECK: :[[@LINE]]:19: error: optional integer offset must be 0 amomaxu.w a2, a1, (foo) # CHECK: :[[@LINE]]:20: error: expected register amomaxu.w a2, a1, 0(foo) # CHECK: :[[@LINE]]:21: error: expected register amomaxu.w a2, a1, (f0) # CHECK: :[[@LINE]]:20: error: invalid operand for instruction amomaxu.w a2, a1, 0(f0) # CHECK: :[[@LINE]]:21: error: invalid operand for instruction amomaxu.w a2, a1, 0(a0 # CHECK: :[[@LINE]]:26: error: expected ')' amomaxu.w a2, a1, (a0 # CHECK: :[[@LINE]]:26: error: expected ')'