| // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+mops,+mte < %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR |
| // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.8a,+mte < %s 2>&1 | FileCheck %s --check-prefix=CHECK-ERROR |
| |
| |
| // All operand must be different from each other |
| |
| // CHECK-ERROR: error: invalid CPY instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, source and size registers are the same |
| cpyfp [x0]!, [x0]!, x1! |
| cpyfp [x0]!, [x1]!, x0! |
| cpyfp [x1]!, [x0]!, x0! |
| |
| // CHECK-ERROR: error: invalid CPY instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, source and size registers are the same |
| cpyfm [x0]!, [x0]!, x1! |
| cpyfm [x0]!, [x1]!, x0! |
| cpyfm [x1]!, [x0]!, x0! |
| |
| // CHECK-ERROR: error: invalid CPY instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, source and size registers are the same |
| cpyfe [x0]!, [x0]!, x1! |
| cpyfe [x0]!, [x1]!, x0! |
| cpyfe [x1]!, [x0]!, x0! |
| |
| // CHECK-ERROR: error: invalid CPY instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, source and size registers are the same |
| cpyp [x0]!, [x0]!, x1! |
| cpyp [x0]!, [x1]!, x0! |
| cpyp [x1]!, [x0]!, x0! |
| |
| // CHECK-ERROR: error: invalid CPY instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, source and size registers are the same |
| cpym [x0]!, [x0]!, x1! |
| cpym [x0]!, [x1]!, x0! |
| cpym [x1]!, [x0]!, x0! |
| |
| // CHECK-ERROR: error: invalid CPY instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid CPY instruction, source and size registers are the same |
| cpye [x0]!, [x0]!, x1! |
| cpye [x0]!, [x1]!, x0! |
| cpye [x1]!, [x0]!, x0! |
| |
| // CHECK-ERROR: error: invalid SET instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, source and size registers are the same |
| setp [x0]!, x0!, x1 |
| setp [x0]!, x1!, x0 |
| setp [x1]!, x0!, x0 |
| |
| // CHECK-ERROR: error: invalid SET instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, source and size registers are the same |
| setm [x0]!, x0!, x1 |
| setm [x0]!, x1!, x0 |
| setm [x1]!, x0!, x0 |
| |
| // CHECK-ERROR: error: invalid SET instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, source and size registers are the same |
| sete [x0]!, x0!, x1 |
| sete [x0]!, x1!, x0 |
| sete [x1]!, x0!, x0 |
| |
| // CHECK-ERROR: error: invalid SET instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, source and size registers are the same |
| setgp [x0]!, x0!, x1 |
| setgp [x0]!, x1!, x0 |
| setgp [x1]!, x0!, x0 |
| |
| // CHECK-ERROR: error: invalid SET instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, source and size registers are the same |
| setgm [x0]!, x0!, x1 |
| setgm [x0]!, x1!, x0 |
| setgm [x1]!, x0!, x0 |
| |
| // CHECK-ERROR: error: invalid SET instruction, destination and size registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, destination and source registers are the same |
| // CHECK-ERROR: error: invalid SET instruction, source and size registers are the same |
| setge [x0]!, x0!, x1 |
| setge [x0]!, x1!, x0 |
| setge [x1]!, x0!, x0 |
| |
| // SP cannot be used as argument at any position |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyfp [sp]!, [x1]!, x2! |
| cpyfp [x0]!, [sp]!, x2! |
| cpyfp [x0]!, [x1]!, sp! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyfm [sp]!, [x1]!, x2! |
| cpyfm [x0]!, [sp]!, x2! |
| cpyfm [x0]!, [x1]!, sp! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyfe [sp]!, [x1]!, x2! |
| cpyfe [x0]!, [sp]!, x2! |
| cpyfe [x0]!, [x1]!, sp! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyp [sp]!, [x2]!, x2! |
| cpyp [x0]!, [sp]!, x2! |
| cpyp [x0]!, [x1]!, sp! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpym [sp]!, [x2]!, x2! |
| cpym [x0]!, [sp]!, x2! |
| cpym [x0]!, [x1]!, sp! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpye [sp]!, [x2]!, x2! |
| cpye [x0]!, [sp]!, x2! |
| cpye [x0]!, [x1]!, sp! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| setp [sp]!, x1!, x2 |
| setp [x0]!, sp!, x2 |
| setp [x0]!, x1!, sp |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| setm [sp]!, x1!, x2 |
| setm [x0]!, sp!, x2 |
| setm [x0]!, x1!, sp |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| sete [sp]!, x1!, x2 |
| sete [x0]!, sp!, x2 |
| sete [x0]!, x1!, sp |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| setgp [sp]!, x1!, x2 |
| setgp [x0]!, sp!, x2 |
| setgp [x0]!, x1!, sp |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| setgm [sp]!, x1!, x2 |
| setgm [x0]!, sp!, x2 |
| setgm [x0]!, x1!, sp |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| setge [sp]!, x1!, x2 |
| setge [x0]!, sp!, x2 |
| setge [x0]!, x1!, sp |
| |
| // XZR can only be used at: |
| // - the size operand in CPY. |
| // - the size or source operands in SET. |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyfp [xzr]!, [x1]!, x2! |
| cpyfp [x0]!, [xzr]!, x2! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyfm [xzr]!, [x1]!, x2! |
| cpyfm [x0]!, [xzr]!, x2! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyfe [xzr]!, [x1]!, x2! |
| cpyfe [x0]!, [xzr]!, x2! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpyp [xzr]!, [x2]!, x2! |
| cpyp [x0]!, [xzr]!, x2! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpym [xzr]!, [x2]!, x2! |
| cpym [x0]!, [xzr]!, x2! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| cpye [xzr]!, [x2]!, x2! |
| cpye [x0]!, [xzr]!, x2! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| setp [xzr]!, x1!, x2 |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| setm [xzr]!, x1!, x2 |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| sete [xzr]!, x1!, x2 |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| setgp [xzr]!, x1!, x2 |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| setgm [xzr]!, x1!, x2 |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| setge [xzr]!, x1!, x2 |