blob: 0ebe85ac59d709e2f9253c0656cbd4cf3a6ea2d4 [file] [log] [blame]
// diagnostic.s Test file for diagnostic quality.
.text
fmul, s0, s1, s2
fmul , s0, s1, s2
fmul , s0, s1, s2
b.random label1
fmull s0
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
sys 1,c1,c3,3,
ext v0.8b, v1.8b, v2.8b, 8
ext v0.16b, v1.16b, v2.16b, 20
svc -1
svc 65536
ccmp w0, 32, 10, le
ccmp x0, -1, 10, le
tlbi alle3is, x0
tlbi vaale1is
tlbi vaale1is x0
msr spsel, 3
fcvtzu x15, d31, #66
scvtf s0, w0, 33
scvtf s0, w0, 0
smlal v0.4s, v31.4h, v16.h[1]
smlal v0.4s, v31.4h, v15.h[8]
add sp, x0, x7, lsr #2
add x0, x0, x7, uxtx #5
add x0, xzr, x7, ror #5
add w0, wzr, w7, asr #32
st2 {v0.4s, v1.4s}, [sp], #24
ldr q0, [x0, w0, uxtw #5]
st2 {v0.4s, v1.4s, v2.4s, v3.4s}, [sp], #64
adds x1, sp, 2134, lsl #4
movz w0, 2134, lsl #8
movz w0, 2134, lsl #32
movz x0, 2134, lsl #47
sbfiz w0, w7, 15, 18
sbfiz w0, w7, 15, 0
shll v1.4s, v2.4h, #15
shll v1.4s, v2.4h, #32
shl v1.2s, v2.2s, 32
sqshrn2 v2.16b, v3.8h, #17
movi v1.4h, 256
movi v1.4h, -129
movi v1.4h, 255, msl #8
movi d0, 256
movi v1.4h, 255, lsl #7
movi v1.4h, 255, lsl #16
movi v2.2s, 255, msl #0
movi v2.2s, 255, msl #15
fmov v1.2s, 1.01
fmov v1.2d, 1.01
fmov s3, 1.01
fmov d3, 1.01
fcmp d0, #1.0
fcmp d0, x0
cmgt v0.4s, v2.4s, #1
fmov d3, 1.00, lsl #3
st2 {v0.4s, v1.4s}, [sp], sp
st2 {v0.4s, v1.4s}, [sp], zr
ldr q0, [x0, w0, lsr #4]
adds x1, sp, 2134, uxtw #12
movz x0, 2134, lsl #64
adds sp, sp, 2134, lsl #12
ldxrb w2, [x0, #1]
ldrb w0, x1, x2, sxtx
prfm PLDL3KEEP, [x9, x15, sxtx #2]
sysl x7, #1, C16, C30, #1
sysl x7, #1, C15, C77, #1
sysl x7, #1, x15, C1, #1
add x0, xzr, x7, uxtx #5
mov x0, ##5
bad expression
mockup-op
orr x0. x0, #0xff, lsl #1
movk x1, #:abs_g1_s:s12
movz x1, #:abs_g1_s:s12, lsl #16
prfm pldl3strm, [sp, w0, sxtw #3]!
prfm 0x2f, LABEL1
dmb #16
tbz w0, #40, 0x17c
st2 {v4.2d, v5.2d, v6.2d}, [x3]
ld2 {v1.4h, v0.4h}, [x1]
isb osh
st2 {v4.2d, v5.2d, v6.2d}, \[x3\]
ldnp w7, w15, [x3, #3]
stnp x7, x15, [x3, #32]!
ldnp w7, w15, [x3, #256]
movi v1.2d, 4294967295, lsl #0
movi v1.8b, 97, lsl #8
msr dummy, x1
fmov s0, 0x42000000
ldp x0, x1, [x2, #4]
ldp x0, x1, [x2, #4]!
ldp x0, x1, [x2], #4
stp w0, w1, [x2, #3]
stp w0, w1, [x2, #2]!
stp w0, w1, [x2], #1
cinc w0, w1, al
cinc w0, w1, nv
cset w0, al
cset w0, nv
# test diagnostic info on optional operand
ret kk
clrex x0
clrex w0
clrex kk
sys #0, c0, c0, #0, kk
sys #0, c0, c0, #0,
casp w0,w1,w2,w3,[x4]
# test warning of unpredictable load pairs
ldp x0, x0, [sp]
ldp d0, d0, [sp]
ldp x0, x0, [sp], #16
ldnp x0, x0, [sp]
# test warning of unpredictable writeback
ldr x0, [x0, #8]!
str x0, [x0, #8]!
str x1, [x1], #8
stp x0, x1, [x0, #16]!
ldp x0, x1, [x1], #16
adr x2, :got:s1
ldr x0, [x0, :got:s1]
# Test error of 32-bit base reg
ldr x1, [wsp, #8]!
ldp x6, x29, [w7, #8]!
str x30, [w11, #8]!
stp x8, x27, [wsp, #8]!
# Test various valid load/store reg combination.
# especially we shouldn't warn on xzr, although
# xzr is with the same encoding 31 as sp.
.macro ldst_pair_wb_2 op, reg1, reg2
.irp base x3, x6, x25, sp
\op \reg1, \reg2, [\base], #16
\op \reg1, \reg2, [\base, #32]!
\op \reg2, \reg1, [\base], #32
\op \reg2, \reg1, [\base, #16]!
.endr
.endm
.macro ldst_pair_wb_1 op, reg1, width
.irp reg2 0, 14, 21, 23, 29
ldst_pair_wb_2 \op, \reg1, \width\reg2
.endr
.endm
.macro ldst_pair_wb_64 op
.irp reg1 x2, x15, x16, x27, x30, xzr
ldst_pair_wb_1 \op, \reg1, x
.endr
.endm
.macro ldst_pair_wb_32 op
.irp reg1 w1, w12, w16, w19, w30, wzr
ldst_pair_wb_1 \op, \reg1, w
.endr
.endm
.macro ldst_single_wb_1 op, reg
.irp base x1, x4, x13, x26, sp
\op \reg, [\base], #16
.endr
.endm
.macro ldst_single_wb_32 op
.irp reg w0, w3, w12, w21, w28, w30, wzr
ldst_single_wb_1 \op, \reg
.endr
.endm
.macro ldst_single_wb_64 op
.irp reg x2, x5, x17, x23, x24, x30, xzr
ldst_single_wb_1 \op, \reg
.endr
.endm
ldst_pair_wb_32 stp
ldst_pair_wb_64 stp
ldst_pair_wb_32 ldp
ldst_pair_wb_64 ldp
ldst_pair_wb_64 ldpsw
ldst_single_wb_32 str
ldst_single_wb_64 str
ldst_single_wb_32 strb
ldst_single_wb_32 strh
ldst_single_wb_32 ldr
ldst_single_wb_64 ldr
ldst_single_wb_32 ldrb
ldst_single_wb_32 ldrh
ldst_single_wb_32 ldrsb
ldst_single_wb_64 ldrsb
ldst_single_wb_32 ldrsh
ldst_single_wb_64 ldrsh
ldst_single_wb_64 ldrsw
dup v0.2d, v1.2d[-1]
dup v0.2d, v1.2d[0]
dup v0.2d, v1.2d[1]
dup v0.2d, v1.2d[2]
dup v0.2d, v1.2d[64]
dup v0.4s, v1.4s[-1]
dup v0.4s, v1.4s[0]
dup v0.4s, v1.4s[3]
dup v0.4s, v1.4s[4]
dup v0.4s, v1.4s[65]
dup v0.8h, v1.8h[-1]
dup v0.8h, v1.8h[0]
dup v0.8h, v1.8h[7]
dup v0.8h, v1.8h[8]
dup v0.8h, v1.8h[66]
dup v0.16b, v1.16b[-1]
dup v0.16b, v1.16b[0]
dup v0.16b, v1.16b[15]
dup v0.16b, v1.16b[16]
dup v0.16b, v1.16b[67]
ld2 {v0.d, v1.d}[-1], [x0]
ld2 {v0.d, v1.d}[0], [x0]
ld2 {v0.d, v1.d}[1], [x0]
ld2 {v0.d, v1.d}[2], [x0]
ld2 {v0.d, v1.d}[64], [x0]
ld2 {v0.s, v1.s}[-1], [x0]
ld2 {v0.s, v1.s}[0], [x0]
ld2 {v0.s, v1.s}[3], [x0]
ld2 {v0.s, v1.s}[4], [x0]
ld2 {v0.s, v1.s}[65], [x0]
ld2 {v0.h, v1.h}[-1], [x0]
ld2 {v0.h, v1.h}[0], [x0]
ld2 {v0.h, v1.h}[7], [x0]
ld2 {v0.h, v1.h}[8], [x0]
ld2 {v0.h, v1.h}[66], [x0]
ld2 {v0.b, v1.b}[-1], [x0]
ld2 {v0.b, v1.b}[0], [x0]
ld2 {v0.b, v1.b}[15], [x0]
ld2 {v0.b, v1.b}[16], [x0]
ld2 {v0.b, v1.b}[67], [x0]
st2 {v0.4s, v1.4s}, [sp], xzr
str x1, [x2, sp]
ldr x0, [x1, #:lo12:foo] // OK
ldnp x1, x2, [x3, #:lo12:foo]
ld1 {v0.4s}, [x3, #:lo12:foo]
stuminl x0, [x3, #:lo12:foo]
prfum pldl1keep, [x3, #:lo12:foo]
ldr x0, [x3], x4
ldnp x1, x2, [x3], x4
ld1 {v0.4s}, [x3], x4 // OK
stuminl x0, [x3], x4
prfum pldl1keep, [x3], x4
ldr x0, [x1, #1, mul vl]
ldr x0, [x1, x2, mul vl]
ldr x0, [x1, x2, mul #1]
ldr x0, [x1, x2, mul #4]
strb w7, [x30, x0, mul]
strb w7, [x30, x0, mul #1]
strb w7, [x30, w0, mul]
strb w7, [x30, w0, mul #2]
adds x1, sp, 1, mul #1
adds x1, sp, 2, mul #255
adds x1, sp, 3, mul #256
orr x0, x0, #0xff, mul #1
orr x0, x0, #0xfe, mul #255
orr x0, x0, #0xfc, mul #256
ip0 .req x0
ip1 .req x1
lr .req x2
fp .req x3
stlxrb w26, w26, [x0]
stlxrh w26, w26, [x1]
stlxr w26, w26, [x2]
stlxrb w26, w27, [x26]
stlxrh w26, w27, [x26]
stlxr w26, w27, [x26]
stlxr w26, x27, [x26]
stlxr w26, x26, [x3]
ldxp x26, x26, [x5]
ldxp x26, x1, [x26]
st4 {v0.16b-v3.16b}[4], [x0]
stlxp w3, w26, w26, [x3]