blob: d4a5e1f9805606ffc477da613e7eab96a94b9bc4 [file] [log] [blame]
// RUN: llvm-mc -triple aarch64 -mattr=+lsui -show-encoding %s | FileCheck %s
// RUN: not llvm-mc -triple aarch64 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR
_func:
// CHECK: _func:
//------------------------------------------------------------------------------
// Unprivileged load/store operations
//------------------------------------------------------------------------------
ldtxr x9, [sp]
// CHECK: ldtxr x9, [sp] // encoding: [0xe9,0x7f,0x5f,0xc9]
// ERROR: error: instruction requires: lsui
ldtxr x9, [sp, #0]
// CHECK: ldtxr x9, [sp] // encoding: [0xe9,0x7f,0x5f,0xc9]
// ERROR: error: instruction requires: lsui
ldtxr x10, [x11]
// CHECK: ldtxr x10, [x11] // encoding: [0x6a,0x7d,0x5f,0xc9]
// ERROR: error: instruction requires: lsui
ldtxr x10, [x11, #0]
// CHECK: ldtxr x10, [x11] // encoding: [0x6a,0x7d,0x5f,0xc9]
// ERROR: error: instruction requires: lsui
ldatxr x9, [sp]
// CHECK: ldatxr x9, [sp] // encoding: [0xe9,0xff,0x5f,0xc9]
// ERROR: error: instruction requires: lsui
ldatxr x10, [x11]
// CHECK: ldatxr x10, [x11] // encoding: [0x6a,0xfd,0x5f,0xc9]
// ERROR: error: instruction requires: lsui
sttxr wzr, w4, [sp]
// CHECK: sttxr wzr, w4, [sp] // encoding: [0xe4,0x7f,0x1f,0x89]
// ERROR: error: instruction requires: lsui
sttxr wzr, w4, [sp, #0]
// CHECK: sttxr wzr, w4, [sp] // encoding: [0xe4,0x7f,0x1f,0x89]
// ERROR: error: instruction requires: lsui
sttxr w5, x6, [x7]
// CHECK: sttxr w5, x6, [x7] // encoding: [0xe6,0x7c,0x05,0xc9]
// ERROR: error: instruction requires: lsui
sttxr w5, x6, [x7, #0]
// CHECK: sttxr w5, x6, [x7] // encoding: [0xe6,0x7c,0x05,0xc9]
// ERROR: error: instruction requires: lsui
stltxr w2, w4, [sp]
// CHECK: stltxr w2, w4, [sp] // encoding: [0xe4,0xff,0x02,0x89]
// ERROR: error: instruction requires: lsui
stltxr w5, x6, [x7]
// CHECK: stltxr w5, x6, [x7] // encoding: [0xe6,0xfc,0x05,0xc9]
// ERROR: error: instruction requires: lsui
//------------------------------------------------------------------------------
// Unprivileged load/store register pair (offset)
//------------------------------------------------------------------------------
ldtp x21, x29, [x2, #504]
// CHECK: ldtp x21, x29, [x2, #504] // encoding: [0x55,0xf4,0x5f,0xe9]
// ERROR: instruction requires: lsui
ldtp x22, x23, [x3, #-512]
// CHECK: ldtp x22, x23, [x3, #-512] // encoding: [0x76,0x5c,0x60,0xe9]
// ERROR: instruction requires: lsui
ldtp x24, x25, [x4, #8]
// CHECK: ldtp x24, x25, [x4, #8] // encoding: [0x98,0xe4,0x40,0xe9]
// ERROR: instruction requires: lsui
sttp x3, x5, [sp], #16
// CHECK: sttp x3, x5, [sp], #16 // encoding: [0xe3,0x17,0x81,0xe8]
// ERROR: instruction requires: lsui
sttp x3, x5, [sp, #8]!
// CHECK: sttp x3, x5, [sp, #8]! // encoding: [0xe3,0x97,0x80,0xe9]
// ERROR: instruction requires: lsui
sttp q3, q5, [sp]
// CHECK: sttp q3, q5, [sp] // encoding: [0xe3,0x17,0x00,0xed]
// ERROR: instruction requires: lsui
sttp q17, q19, [sp, #1008]
// CHECK: sttp q17, q19, [sp, #1008] // encoding: [0xf1,0xcf,0x1f,0xed]
// ERROR: instruction requires: lsui
//------------------------------------------------------------------------------
// Load/store register pair (post-indexed)
//------------------------------------------------------------------------------
ldtp x21, x29, [x2], #504
// CHECK: ldtp x21, x29, [x2], #504 // encoding: [0x55,0xf4,0xdf,0xe8]
// ERROR: instruction requires: lsui
ldtp x22, x23, [x3], #-512
// CHECK: ldtp x22, x23, [x3], #-512 // encoding: [0x76,0x5c,0xe0,0xe8]
// ERROR: instruction requires: lsui
ldtp x24, x25, [x4], #8
// CHECK: ldtp x24, x25, [x4], #8 // encoding: [0x98,0xe4,0xc0,0xe8]
// ERROR: instruction requires: lsui
sttp q3, q5, [sp], #0
// CHECK: sttp q3, q5, [sp], #0 // encoding: [0xe3,0x17,0x80,0xec]
// ERROR: instruction requires: lsui
sttp q17, q19, [sp], #1008
// CHECK: sttp q17, q19, [sp], #1008 // encoding: [0xf1,0xcf,0x9f,0xec]
// ERROR: instruction requires: lsui
ldtp q23, q29, [x1], #-1024
// CHECK: ldtp q23, q29, [x1], #-1024 // encoding: [0x37,0x74,0xe0,0xec]
// ERROR: instruction requires: lsui
//------------------------------------------------------------------------------
// Load/store register pair (pre-indexed)
//------------------------------------------------------------------------------
ldtp x21, x29, [x2, #504]!
// CHECK: ldtp x21, x29, [x2, #504]! // encoding: [0x55,0xf4,0xdf,0xe9]
// ERROR: instruction requires: lsui
ldtp x22, x23, [x3, #-512]!
// CHECK: ldtp x22, x23, [x3, #-512]! // encoding: [0x76,0x5c,0xe0,0xe9]
// ERROR: instruction requires: lsui
ldtp x24, x25, [x4, #8]!
// CHECK: ldtp x24, x25, [x4, #8]! // encoding: [0x98,0xe4,0xc0,0xe9]
// ERROR: instruction requires: lsui
sttp q3, q5, [sp, #0]!
// CHECK: sttp q3, q5, [sp, #0]! // encoding: [0xe3,0x17,0x80,0xed]
// ERROR: instruction requires: lsui
sttp q17, q19, [sp, #1008]!
// CHECK: sttp q17, q19, [sp, #1008]! // encoding: [0xf1,0xcf,0x9f,0xed]
// ERROR: instruction requires: lsui
ldtp q23, q29, [x1, #-1024]!
// CHECK: ldtp q23, q29, [x1, #-1024]! // encoding: [0x37,0x74,0xe0,0xed]
// ERROR: instruction requires: lsui
//------------------------------------------------------------------------------
// CAS(P)T instructions
//------------------------------------------------------------------------------
//64 bits
cast x0, x1, [x2]
// CHECK: cast x0, x1, [x2] // encoding: [0x41,0x7c,0x80,0xc9]
// ERROR: instruction requires: lsui
cast x0, x1, [sp, #0]
// CHECK: cast x0, x1, [sp] // encoding: [0xe1,0x7f,0x80,0xc9]
// ERROR: instruction requires: lsui
casat x0, x1, [x2]
// CHECK: casat x0, x1, [x2] // encoding: [0x41,0x7c,0xc0,0xc9]
// ERROR: instruction requires: lsui
casat x0, x1, [sp, #0]
// CHECK: casat x0, x1, [sp] // encoding: [0xe1,0x7f,0xc0,0xc9]
// ERROR: instruction requires: lsui
casalt x0, x1, [x2]
// CHECK: casalt x0, x1, [x2] // encoding: [0x41,0xfc,0xc0,0xc9]
// ERROR: instruction requires: lsui
casalt x0, x1, [sp, #0]
// CHECK: casalt x0, x1, [sp] // encoding: [0xe1,0xff,0xc0,0xc9]
// ERROR: instruction requires: lsui
caslt x0, x1, [x2]
// CHECK: caslt x0, x1, [x2] // encoding: [0x41,0xfc,0x80,0xc9]
// ERROR: instruction requires: lsui
caslt x0, x1, [sp, #0]
// CHECK: caslt x0, x1, [sp] // encoding: [0xe1,0xff,0x80,0xc9]
// ERROR: instruction requires: lsui
//CASP instruction
caspt x0, x1, x2, x3, [x4]
// CHECK: caspt x0, x1, x2, x3, [x4] // encoding: [0x82,0x7c,0x80,0x49]
// ERROR: instruction requires: lsui
caspt x0, x1, x2, x3, [sp, #0]
// CHECK: caspt x0, x1, x2, x3, [sp] // encoding: [0xe2,0x7f,0x80,0x49]
// ERROR: instruction requires: lsui
caspat x0, x1, x2, x3, [x4]
// CHECK: caspat x0, x1, x2, x3, [x4] // encoding: [0x82,0x7c,0xc0,0x49]
// ERROR: instruction requires: lsui
caspat x0, x1, x2, x3, [sp, #0]
// CHECK: caspat x0, x1, x2, x3, [sp] // encoding: [0xe2,0x7f,0xc0,0x49]
// ERROR: instruction requires: lsui
casplt x0, x1, x2, x3, [x4]
// CHECK: casplt x0, x1, x2, x3, [x4] // encoding: [0x82,0xfc,0x80,0x49]
// ERROR: instruction requires: lsui
casplt x0, x1, x2, x3, [sp, #0]
// CHECK: casplt x0, x1, x2, x3, [sp] // encoding: [0xe2,0xff,0x80,0x49]
// ERROR: instruction requires: lsui
caspalt x0, x1, x2, x3, [x4]
// CHECK: caspalt x0, x1, x2, x3, [x4] // encoding: [0x82,0xfc,0xc0,0x49]
// ERROR: instruction requires: lsui
caspalt x0, x1, x2, x3, [sp, #0]
// CHECK: caspalt x0, x1, x2, x3, [sp] // encoding: [0xe2,0xff,0xc0,0x49]
// ERROR: instruction requires: lsui
//------------------------------------------------------------------------------
// SWP(A|L)T instructions
//------------------------------------------------------------------------------
swpt w7, wzr, [x5]
// CHECK: swpt w7, wzr, [x5] // encoding: [0xbf,0x84,0x27,0x19]
// ERROR: instruction requires: lsui
swpt x9, xzr, [sp]
// CHECK: swpt x9, xzr, [sp] // encoding: [0xff,0x87,0x29,0x59]
// ERROR: instruction requires: lsui
swpta w7, wzr, [x5]
// CHECK: swpta w7, wzr, [x5] // encoding: [0xbf,0x84,0xa7,0x19]
// ERROR: instruction requires: lsui
swpta x9, xzr, [sp]
// CHECK: swpta x9, xzr, [sp] // encoding: [0xff,0x87,0xa9,0x59]
// ERROR: instruction requires: lsui
swptl w7, wzr, [x5]
// CHECK: swptl w7, wzr, [x5] // encoding: [0xbf,0x84,0x67,0x19]
// ERROR: instruction requires: lsui
swptl x9, xzr, [sp]
// CHECK: swptl x9, xzr, [sp] // encoding: [0xff,0x87,0x69,0x59]
// ERROR: instruction requires: lsui
swptal w7, wzr, [x5]
// CHECK: swptal w7, wzr, [x5] // encoding: [0xbf,0x84,0xe7,0x19]
// ERROR: instruction requires: lsui
swptal x9, xzr, [sp]
// CHECK: swptal x9, xzr, [sp] // encoding: [0xff,0x87,0xe9,0x59]
// ERROR: instruction requires: lsui
//------------------------------------------------------------------------------
// LD{ADD|CLR|SET)(A|L|AL)T instructions
//------------------------------------------------------------------------------
ldtadd w7, wzr, [x5]
// CHECK: ldtadd w7, wzr, [x5] // encoding: [0xbf,0x04,0x27,0x19]
// ERROR: instruction requires: lsui
ldtadd x9, xzr, [sp]
// CHECK: ldtadd x9, xzr, [sp] // encoding: [0xff,0x07,0x29,0x59]
// ERROR: instruction requires: lsui
ldtadda w7, wzr, [x5]
// CHECK: ldtadda w7, wzr, [x5] // encoding: [0xbf,0x04,0xa7,0x19]
// ERROR: instruction requires: lsui
ldtadda x9, xzr, [sp]
// CHECK: ldtadda x9, xzr, [sp] // encoding: [0xff,0x07,0xa9,0x59]
// ERROR: instruction requires: lsui
ldtaddl w7, wzr, [x5]
// CHECK: ldtaddl w7, wzr, [x5] // encoding: [0xbf,0x04,0x67,0x19]
// ERROR: instruction requires: lsui
ldtaddl x9, xzr, [sp]
// CHECK: ldtaddl x9, xzr, [sp] // encoding: [0xff,0x07,0x69,0x59]
// ERROR: instruction requires: lsui
ldtaddal w7, wzr, [x5]
// CHECK: ldtaddal w7, wzr, [x5] // encoding: [0xbf,0x04,0xe7,0x19]
// ERROR: instruction requires: lsui
ldtaddal x9, xzr, [sp]
// CHECK: ldtaddal x9, xzr, [sp] // encoding: [0xff,0x07,0xe9,0x59]
// ERROR: instruction requires: lsui
ldtclr w7, wzr, [x5]
// CHECK: ldtclr w7, wzr, [x5] // encoding: [0xbf,0x14,0x27,0x19]
// ERROR: instruction requires: lsui
ldtclr x9, xzr, [sp]
// CHECK: ldtclr x9, xzr, [sp] // encoding: [0xff,0x17,0x29,0x59]
// ERROR: instruction requires: lsui
ldtclrl w7, wzr, [x5]
// CHECK: ldtclrl w7, wzr, [x5] // encoding: [0xbf,0x14,0x67,0x19]
// ERROR: instruction requires: lsui
ldtclrl x9, xzr, [sp]
// CHECK: ldtclrl x9, xzr, [sp] // encoding: [0xff,0x17,0x69,0x59]
// ERROR: instruction requires: lsui
ldtclra w7, wzr, [x5]
// CHECK: ldtclra w7, wzr, [x5] // encoding: [0xbf,0x14,0xa7,0x19]
// ERROR: instruction requires: lsui
ldtclra x9, xzr, [sp]
// CHECK: ldtclra x9, xzr, [sp] // encoding: [0xff,0x17,0xa9,0x59]
// ERROR: instruction requires: lsui
ldtclral w7, wzr, [x5]
// CHECK: ldtclral w7, wzr, [x5] // encoding: [0xbf,0x14,0xe7,0x19]
// ERROR: instruction requires: lsui
ldtclral x9, xzr, [sp]
// CHECK: ldtclral x9, xzr, [sp] // encoding: [0xff,0x17,0xe9,0x59]
// ERROR: instruction requires: lsui
ldtset w7, wzr, [x5]
// CHECK: ldtset w7, wzr, [x5] // encoding: [0xbf,0x34,0x27,0x19]
// ERROR: instruction requires: lsui
ldtset x9, xzr, [sp]
// CHECK: ldtset x9, xzr, [sp] // encoding: [0xff,0x37,0x29,0x59]
// ERROR: instruction requires: lsui
ldtsetl w7, wzr, [x5]
// CHECK: ldtsetl w7, wzr, [x5] // encoding: [0xbf,0x34,0x67,0x19]
// ERROR: instruction requires: lsui
ldtsetl x9, xzr, [sp]
// CHECK: ldtsetl x9, xzr, [sp] // encoding: [0xff,0x37,0x69,0x59]
// ERROR: instruction requires: lsui
ldtseta w7, wzr, [x5]
// CHECK: ldtseta w7, wzr, [x5] // encoding: [0xbf,0x34,0xa7,0x19]
// ERROR: instruction requires: lsui
ldtseta x9, xzr, [sp]
// CHECK: ldtseta x9, xzr, [sp] // encoding: [0xff,0x37,0xa9,0x59]
// ERROR: instruction requires: lsui
ldtsetal w7, wzr, [x5]
// CHECK: ldtsetal w7, wzr, [x5] // encoding: [0xbf,0x34,0xe7,0x19]
// ERROR: instruction requires: lsui
ldtsetal x9, xzr, [sp]
// CHECK: ldtsetal x9, xzr, [sp] // encoding: [0xff,0x37,0xe9,0x59]
// ERROR: instruction requires: lsui
//------------------------------------------------------------------------------
// ST{ADD|CLR|SET)(A|L|AL)T instructions
//------------------------------------------------------------------------------
sttadd w0, [x2]
// CHECK: ldtadd w0, wzr, [x2] // encoding: [0x5f,0x04,0x20,0x19]
// ERROR: instruction requires: lsui
sttadd w2, [sp]
// CHECK: ldtadd w2, wzr, [sp] // encoding: [0xff,0x07,0x22,0x19]
// ERROR: instruction requires: lsui
sttadd x0, [x2]
// CHECK: ldtadd x0, xzr, [x2] // encoding: [0x5f,0x04,0x20,0x59]
// ERROR: instruction requires: lsui
sttadd x2, [sp]
// CHECK: ldtadd x2, xzr, [sp] // encoding: [0xff,0x07,0x22,0x59]
// ERROR: instruction requires: lsui
sttaddl w0, [x2]
// CHECK: ldtaddl w0, wzr, [x2] // encoding: [0x5f,0x04,0x60,0x19]
// ERROR: instruction requires: lsui
sttaddl w2, [sp]
// CHECK: ldtaddl w2, wzr, [sp] // encoding: [0xff,0x07,0x62,0x19]
// ERROR: instruction requires: lsui
sttaddl x0, [x2]
// CHECK: ldtaddl x0, xzr, [x2] // encoding: [0x5f,0x04,0x60,0x59]
// ERROR: instruction requires: lsui
sttaddl x2, [sp]
// CHECK: ldtaddl x2, xzr, [sp] // encoding: [0xff,0x07,0x62,0x59]
// ERROR: instruction requires: lsui
sttclr w0, [x2]
// CHECK: ldtclr w0, wzr, [x2] // encoding: [0x5f,0x14,0x20,0x19]
// ERROR: instruction requires: lsui
sttclr w2, [sp]
// CHECK: ldtclr w2, wzr, [sp] // encoding: [0xff,0x17,0x22,0x19]
// ERROR: instruction requires: lsui
sttclr x0, [x2]
// CHECK: ldtclr x0, xzr, [x2] // encoding: [0x5f,0x14,0x20,0x59]
// ERROR: instruction requires: lsui
sttclr x2, [sp]
// CHECK: ldtclr x2, xzr, [sp] // encoding: [0xff,0x17,0x22,0x59]
// ERROR: instruction requires: lsui
sttclrl w0, [x2]
// CHECK: ldtclrl w0, wzr, [x2] // encoding: [0x5f,0x14,0x60,0x19]
// ERROR: instruction requires: lsui
sttclrl w2, [sp]
// CHECK: ldtclrl w2, wzr, [sp] // encoding: [0xff,0x17,0x62,0x19]
// ERROR: instruction requires: lsui
sttclrl x0, [x2]
// CHECK: ldtclrl x0, xzr, [x2] // encoding: [0x5f,0x14,0x60,0x59]
// ERROR: instruction requires: lsui
sttclrl x2, [sp]
// CHECK: ldtclrl x2, xzr, [sp] // encoding: [0xff,0x17,0x62,0x59]
// ERROR: instruction requires: lsui
sttset w0, [x2]
// CHECK: ldtset w0, wzr, [x2] // encoding: [0x5f,0x34,0x20,0x19]
// ERROR: instruction requires: lsui
sttset w2, [sp]
// CHECK: ldtset w2, wzr, [sp] // encoding: [0xff,0x37,0x22,0x19]
// ERROR: instruction requires: lsui
sttset x0, [x2]
// CHECK: ldtset x0, xzr, [x2] // encoding: [0x5f,0x34,0x20,0x59]
// ERROR: instruction requires: lsui
sttset x2, [sp]
// CHECK: ldtset x2, xzr, [sp] // encoding: [0xff,0x37,0x22,0x59]
// ERROR: instruction requires: lsui
sttsetl w0, [x2]
// CHECK: ldtsetl w0, wzr, [x2] // encoding: [0x5f,0x34,0x60,0x19]
// ERROR: instruction requires: lsui
sttsetl w2, [sp]
// CHECK: ldtsetl w2, wzr, [sp] // encoding: [0xff,0x37,0x62,0x19]
// ERROR: instruction requires: lsui
sttsetl x0, [x2]
// CHECK: ldtsetl x0, xzr, [x2] // encoding: [0x5f,0x34,0x60,0x59]
// ERROR: instruction requires: lsui
sttsetl x2, [sp]
// CHECK: ldtsetl x2, xzr, [sp] // encoding: [0xff,0x37,0x62,0x59]
// ERROR: instruction requires: lsui
//------------------------------------------------------------------------------
// Load/store non-temporal register pair (offset)
//------------------------------------------------------------------------------
ldtnp x21, x29, [x2, #504]
// CHECK: ldtnp x21, x29, [x2, #504] // encoding: [0x55,0xf4,0x5f,0xe8]
// ERROR: instruction requires: lsui
ldtnp x22, x23, [x3, #-512]
// CHECK: ldtnp x22, x23, [x3, #-512] // encoding: [0x76,0x5c,0x60,0xe8]
// ERROR: instruction requires: lsui
ldtnp x24, x25, [x4, #8]
// CHECK: ldtnp x24, x25, [x4, #8] // encoding: [0x98,0xe4,0x40,0xe8]
// ERROR: instruction requires: lsui
ldtnp q23, q29, [x1, #-1024]
// CHECK: ldtnp q23, q29, [x1, #-1024] // encoding: [0x37,0x74,0x60,0xec]
// ERROR: instruction requires: lsui
sttnp x3, x5, [sp]
// CHECK: sttnp x3, x5, [sp] // encoding: [0xe3,0x17,0x00,0xe8]
// ERROR: instruction requires: lsui
sttnp x17, x19, [sp, #64]
// CHECK: sttnp x17, x19, [sp, #64] // encoding: [0xf1,0x4f,0x04,0xe8]
// ERROR: instruction requires: lsui
sttnp q3, q5, [sp]
// CHECK: sttnp q3, q5, [sp] // encoding: [0xe3,0x17,0x00,0xec]
// ERROR: instruction requires: lsui
sttnp q17, q19, [sp, #1008]
// CHECK: sttnp q17, q19, [sp, #1008] // encoding: [0xf1,0xcf,0x1f,0xec]
// ERROR: instruction requires: lsui