62 lines
979 B
ArmAsm
62 lines
979 B
ArmAsm
// SPDX-License-Identifier: GPL-2.0-only
|
|
// Copyright (C) 2021 ARM Limited.
|
|
|
|
#include "sme-inst.h"
|
|
|
|
.arch_extension sve
|
|
|
|
#define MAGIC 42
|
|
|
|
#define MAXVL 2048
|
|
#define MAXVL_B (MAXVL / 8)
|
|
|
|
.pushsection .text
|
|
.data
|
|
.align 4
|
|
scratch:
|
|
.space MAXVL_B
|
|
.popsection
|
|
|
|
.globl fork_test
|
|
fork_test:
|
|
smstart_za
|
|
|
|
// For simplicity just set one word in one vector, other tests
|
|
// cover general data corruption issues.
|
|
ldr x0, =scratch
|
|
mov x1, #MAGIC
|
|
str x1, [x0]
|
|
mov w12, wzr
|
|
_ldr_za 12, 0 // ZA.H[W12] loaded from [X0]
|
|
|
|
// Tail call into the C portion that does the fork & verify
|
|
b fork_test_c
|
|
|
|
.globl verify_fork
|
|
verify_fork:
|
|
// SVCR should have ZA=1, SM=0
|
|
mrs x0, S3_3_C4_C2_2
|
|
and x1, x0, #3
|
|
cmp x1, #2
|
|
beq 1f
|
|
mov x0, xzr
|
|
b 100f
|
|
1:
|
|
|
|
// ZA should still have the value we loaded
|
|
ldr x0, =scratch
|
|
mov w12, wzr
|
|
_str_za 12, 0 // ZA.H[W12] stored to [X0]
|
|
ldr x1, [x0]
|
|
cmp x1, #MAGIC
|
|
beq 2f
|
|
mov x0, xzr
|
|
b 100f
|
|
|
|
2:
|
|
// All tests passed
|
|
mov x0, #1
|
|
100:
|
|
ret
|
|
|