| // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+mops,+mte < %s 2> %t | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-MTE |
| // RUN: FileCheck --check-prefix=CHECK-ERROR %s < %t |
| // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.8a,+mte < %s 2> %t | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-MTE |
| // RUN: FileCheck --check-prefix=CHECK-ERROR %s < %t |
| // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+mops < %s 2> %t | FileCheck %s --check-prefix=CHECK |
| // RUN: FileCheck --check-prefix=CHECK-NO-MTE-ERR %s < %t |
| // RUN: not llvm-mc -triple aarch64-none-linux-gnu -show-encoding -mattr=+v8.8a < %s 2> %t | FileCheck %s --check-prefix=CHECK |
| // RUN: FileCheck --check-prefix=CHECK-NO-MTE-ERR %s < %t |
| // RUN: not llvm-mc -triple aarch64-none-linux-gnu < %s 2> %t |
| // RUN: FileCheck --check-prefix=CHECK-NO-MOPS-ERR --check-prefix=CHECK-NO-MOPSMTE-ERR %s < %t |
| |
| // CHECK: [0x40,0x04,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x44,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x84,0x01,0x19] |
| // CHECK-NEXT: [0x40,0xc4,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x14,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x54,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x94,0x01,0x19] |
| // CHECK-NEXT: [0x40,0xd4,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x24,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x64,0x01,0x19] |
| // CHECK-NEXT: [0x40,0xa4,0x01,0x19] |
| // CHECK-NEXT: [0x40,0xe4,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x34,0x01,0x19] |
| // CHECK-NEXT: [0x40,0x74,0x01,0x19] |
| // CHECK-NEXT: [0x40,0xb4,0x01,0x19] |
| // CHECK-NEXT: [0x40,0xf4,0x01,0x19] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| cpyfp [x0]!, [x1]!, x2! |
| cpyfpwn [x0]!, [x1]!, x2! |
| cpyfprn [x0]!, [x1]!, x2! |
| cpyfpn [x0]!, [x1]!, x2! |
| cpyfpwt [x0]!, [x1]!, x2! |
| cpyfpwtwn [x0]!, [x1]!, x2! |
| cpyfpwtrn [x0]!, [x1]!, x2! |
| cpyfpwtn [x0]!, [x1]!, x2! |
| cpyfprt [x0]!, [x1]!, x2! |
| cpyfprtwn [x0]!, [x1]!, x2! |
| cpyfprtrn [x0]!, [x1]!, x2! |
| cpyfprtn [x0]!, [x1]!, x2! |
| cpyfpt [x0]!, [x1]!, x2! |
| cpyfptwn [x0]!, [x1]!, x2! |
| cpyfptrn [x0]!, [x1]!, x2! |
| cpyfptn [x0]!, [x1]!, x2! |
| |
| // CHECK: [0x40,0x04,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x44,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x84,0x41,0x19] |
| // CHECK-NEXT: [0x40,0xc4,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x14,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x54,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x94,0x41,0x19] |
| // CHECK-NEXT: [0x40,0xd4,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x24,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x64,0x41,0x19] |
| // CHECK-NEXT: [0x40,0xa4,0x41,0x19] |
| // CHECK-NEXT: [0x40,0xe4,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x34,0x41,0x19] |
| // CHECK-NEXT: [0x40,0x74,0x41,0x19] |
| // CHECK-NEXT: [0x40,0xb4,0x41,0x19] |
| // CHECK-NEXT: [0x40,0xf4,0x41,0x19] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| cpyfm [x0]!, [x1]!, x2! |
| cpyfmwn [x0]!, [x1]!, x2! |
| cpyfmrn [x0]!, [x1]!, x2! |
| cpyfmn [x0]!, [x1]!, x2! |
| cpyfmwt [x0]!, [x1]!, x2! |
| cpyfmwtwn [x0]!, [x1]!, x2! |
| cpyfmwtrn [x0]!, [x1]!, x2! |
| cpyfmwtn [x0]!, [x1]!, x2! |
| cpyfmrt [x0]!, [x1]!, x2! |
| cpyfmrtwn [x0]!, [x1]!, x2! |
| cpyfmrtrn [x0]!, [x1]!, x2! |
| cpyfmrtn [x0]!, [x1]!, x2! |
| cpyfmt [x0]!, [x1]!, x2! |
| cpyfmtwn [x0]!, [x1]!, x2! |
| cpyfmtrn [x0]!, [x1]!, x2! |
| cpyfmtn [x0]!, [x1]!, x2! |
| |
| // CHECK: [0x40,0x04,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x44,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x84,0x81,0x19] |
| // CHECK-NEXT: [0x40,0xc4,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x14,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x54,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x94,0x81,0x19] |
| // CHECK-NEXT: [0x40,0xd4,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x24,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x64,0x81,0x19] |
| // CHECK-NEXT: [0x40,0xa4,0x81,0x19] |
| // CHECK-NEXT: [0x40,0xe4,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x34,0x81,0x19] |
| // CHECK-NEXT: [0x40,0x74,0x81,0x19] |
| // CHECK-NEXT: [0x40,0xb4,0x81,0x19] |
| // CHECK-NEXT: [0x40,0xf4,0x81,0x19] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| cpyfe [x0]!, [x1]!, x2! |
| cpyfewn [x0]!, [x1]!, x2! |
| cpyfern [x0]!, [x1]!, x2! |
| cpyfen [x0]!, [x1]!, x2! |
| cpyfewt [x0]!, [x1]!, x2! |
| cpyfewtwn [x0]!, [x1]!, x2! |
| cpyfewtrn [x0]!, [x1]!, x2! |
| cpyfewtn [x0]!, [x1]!, x2! |
| cpyfert [x0]!, [x1]!, x2! |
| cpyfertwn [x0]!, [x1]!, x2! |
| cpyfertrn [x0]!, [x1]!, x2! |
| cpyfertn [x0]!, [x1]!, x2! |
| cpyfet [x0]!, [x1]!, x2! |
| cpyfetwn [x0]!, [x1]!, x2! |
| cpyfetrn [x0]!, [x1]!, x2! |
| cpyfetn [x0]!, [x1]!, x2! |
| |
| // CHECK: [0x40,0x04,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x44,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x84,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0xc4,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x14,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x54,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x94,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0xd4,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x24,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x64,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0xa4,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0xe4,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x34,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0x74,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0xb4,0x01,0x1d] |
| // CHECK-NEXT: [0x40,0xf4,0x01,0x1d] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| cpyp [x0]!, [x1]!, x2! |
| cpypwn [x0]!, [x1]!, x2! |
| cpyprn [x0]!, [x1]!, x2! |
| cpypn [x0]!, [x1]!, x2! |
| cpypwt [x0]!, [x1]!, x2! |
| cpypwtwn [x0]!, [x1]!, x2! |
| cpypwtrn [x0]!, [x1]!, x2! |
| cpypwtn [x0]!, [x1]!, x2! |
| cpyprt [x0]!, [x1]!, x2! |
| cpyprtwn [x0]!, [x1]!, x2! |
| cpyprtrn [x0]!, [x1]!, x2! |
| cpyprtn [x0]!, [x1]!, x2! |
| cpypt [x0]!, [x1]!, x2! |
| cpyptwn [x0]!, [x1]!, x2! |
| cpyptrn [x0]!, [x1]!, x2! |
| cpyptn [x0]!, [x1]!, x2! |
| |
| // CHECK: [0x40,0x04,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x44,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x84,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0xc4,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x14,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x54,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x94,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0xd4,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x24,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x64,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0xa4,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0xe4,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x34,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0x74,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0xb4,0x41,0x1d] |
| // CHECK-NEXT: [0x40,0xf4,0x41,0x1d] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| cpym [x0]!, [x1]!, x2! |
| cpymwn [x0]!, [x1]!, x2! |
| cpymrn [x0]!, [x1]!, x2! |
| cpymn [x0]!, [x1]!, x2! |
| cpymwt [x0]!, [x1]!, x2! |
| cpymwtwn [x0]!, [x1]!, x2! |
| cpymwtrn [x0]!, [x1]!, x2! |
| cpymwtn [x0]!, [x1]!, x2! |
| cpymrt [x0]!, [x1]!, x2! |
| cpymrtwn [x0]!, [x1]!, x2! |
| cpymrtrn [x0]!, [x1]!, x2! |
| cpymrtn [x0]!, [x1]!, x2! |
| cpymt [x0]!, [x1]!, x2! |
| cpymtwn [x0]!, [x1]!, x2! |
| cpymtrn [x0]!, [x1]!, x2! |
| cpymtn [x0]!, [x1]!, x2! |
| |
| // CHECK: [0x40,0x04,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x44,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x84,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0xc4,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x14,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x54,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x94,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0xd4,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x24,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x64,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0xa4,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0xe4,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x34,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0x74,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0xb4,0x81,0x1d] |
| // CHECK-NEXT: [0x40,0xf4,0x81,0x1d] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| cpye [x0]!, [x1]!, x2! |
| cpyewn [x0]!, [x1]!, x2! |
| cpyern [x0]!, [x1]!, x2! |
| cpyen [x0]!, [x1]!, x2! |
| cpyewt [x0]!, [x1]!, x2! |
| cpyewtwn [x0]!, [x1]!, x2! |
| cpyewtrn [x0]!, [x1]!, x2! |
| cpyewtn [x0]!, [x1]!, x2! |
| cpyert [x0]!, [x1]!, x2! |
| cpyertwn [x0]!, [x1]!, x2! |
| cpyertrn [x0]!, [x1]!, x2! |
| cpyertn [x0]!, [x1]!, x2! |
| cpyet [x0]!, [x1]!, x2! |
| cpyetwn [x0]!, [x1]!, x2! |
| cpyetrn [x0]!, [x1]!, x2! |
| cpyetn [x0]!, [x1]!, x2! |
| |
| // CHECK: [0x20,0x04,0xc2,0x19] |
| // CHECK-NEXT: [0x20,0x14,0xc2,0x19] |
| // CHECK-NEXT: [0x20,0x24,0xc2,0x19] |
| // CHECK-NEXT: [0x20,0x34,0xc2,0x19] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| setp [x0]!, x1!, x2 |
| setpt [x0]!, x1!, x2 |
| setpn [x0]!, x1!, x2 |
| setptn [x0]!, x1!, x2 |
| |
| // CHECK: [0x20,0x44,0xc2,0x19] |
| // CHECK: [0x20,0x54,0xc2,0x19] |
| // CHECK: [0x20,0x64,0xc2,0x19] |
| // CHECK: [0x20,0x74,0xc2,0x19] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| setm [x0]!, x1!, x2 |
| setmt [x0]!, x1!, x2 |
| setmn [x0]!, x1!, x2 |
| setmtn [x0]!, x1!, x2 |
| |
| // CHECK: [0x20,0x84,0xc2,0x19] |
| // CHECK: [0x20,0x94,0xc2,0x19] |
| // CHECK: [0x20,0xa4,0xc2,0x19] |
| // CHECK: [0x20,0xb4,0xc2,0x19] |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| // CHECK-NO-MOPS-ERR: error: instruction requires: mops |
| sete [x0]!, x1!, x2 |
| setet [x0]!, x1!, x2 |
| seten [x0]!, x1!, x2 |
| setetn [x0]!, x1!, x2 |
| |
| // CHECK-MTE: [0x20,0x04,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0x14,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0x24,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0x34,0xc2,0x1d] |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| setgp [x0]!, x1!, x2 |
| setgpt [x0]!, x1!, x2 |
| setgpn [x0]!, x1!, x2 |
| setgptn [x0]!, x1!, x2 |
| |
| // CHECK-MTE: [0x20,0x44,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0x54,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0x64,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0x74,0xc2,0x1d] |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| setgm [x0]!, x1!, x2 |
| setgmt [x0]!, x1!, x2 |
| setgmn [x0]!, x1!, x2 |
| setgmtn [x0]!, x1!, x2 |
| |
| // CHECK-MTE: [0x20,0x84,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0x94,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0xa4,0xc2,0x1d] |
| // CHECK-MTE: [0x20,0xb4,0xc2,0x1d] |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MTE-ERR: error: instruction requires: mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| // CHECK-NO-MOPSMTE-ERR: error: instruction requires: mops mte |
| setge [x0]!, x1!, x2 |
| setget [x0]!, x1!, x2 |
| setgen [x0]!, x1!, x2 |
| setgetn [x0]!, x1!, x2 |
| |
| // 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 |
| // CHECK: cpyfp [x0]!, [x1]!, xzr! |
| cpyfp [xzr]!, [x1]!, x2! |
| cpyfp [x0]!, [xzr]!, x2! |
| cpyfp [x0]!, [x1]!, xzr! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: cpyfm [x0]!, [x1]!, xzr! |
| cpyfm [xzr]!, [x1]!, x2! |
| cpyfm [x0]!, [xzr]!, x2! |
| cpyfm [x0]!, [x1]!, xzr! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: cpyfe [x0]!, [x1]!, xzr! |
| cpyfe [xzr]!, [x1]!, x2! |
| cpyfe [x0]!, [xzr]!, x2! |
| cpyfe [x0]!, [x1]!, xzr! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: cpyp [x0]!, [x1]!, xzr! |
| cpyp [xzr]!, [x2]!, x2! |
| cpyp [x0]!, [xzr]!, x2! |
| cpyp [x0]!, [x1]!, xzr! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: cpym [x0]!, [x1]!, xzr! |
| cpym [xzr]!, [x2]!, x2! |
| cpym [x0]!, [xzr]!, x2! |
| cpym [x0]!, [x1]!, xzr! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: cpye [x0]!, [x1]!, xzr! |
| cpye [xzr]!, [x2]!, x2! |
| cpye [x0]!, [xzr]!, x2! |
| cpye [x0]!, [x1]!, xzr! |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: setp [x0]!, xzr!, x2 |
| // CHECK: setp [x0]!, x1!, xzr |
| setp [xzr]!, x1!, x2 |
| setp [x0]!, xzr!, x2 |
| setp [x0]!, x1!, xzr |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: setm [x0]!, xzr!, x2 |
| // CHECK: setm [x0]!, x1!, xzr |
| setm [xzr]!, x1!, x2 |
| setm [x0]!, xzr!, x2 |
| setm [x0]!, x1!, xzr |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK: sete [x0]!, xzr!, x2 |
| // CHECK: sete [x0]!, x1!, xzr |
| sete [xzr]!, x1!, x2 |
| sete [x0]!, xzr!, x2 |
| sete [x0]!, x1!, xzr |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-MTE: setgp [x0]!, xzr!, x2 |
| // CHECK-MTE: setgp [x0]!, x1!, xzr |
| setgp [xzr]!, x1!, x2 |
| setgp [x0]!, xzr!, x2 |
| setgp [x0]!, x1!, xzr |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-MTE: setgm [x0]!, xzr!, x2 |
| // CHECK-MTE: setgm [x0]!, x1!, xzr |
| setgm [xzr]!, x1!, x2 |
| setgm [x0]!, xzr!, x2 |
| setgm [x0]!, x1!, xzr |
| |
| // CHECK-ERROR: error: invalid operand for instruction |
| // CHECK-MTE: setge [x0]!, xzr!, x2 |
| // CHECK-MTE: setge [x0]!, x1!, xzr |
| setge [xzr]!, x1!, x2 |
| setge [x0]!, xzr!, x2 |
| setge [x0]!, x1!, xzr |