| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // 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
|