Merge tag 'trace-printf-v6.13' of git://git.kernel.org/pub/scm/linux/kernel/git/trace...
[drm/drm-misc.git] / tools / testing / selftests / arm64 / fp / za-fork-asm.S
blob2fafadd491c326a31d6193551d6b26835ac7ade0
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (C) 2021 ARM Limited.
4 #include "sme-inst.h"
6 .arch_extension sve
8 #define MAGIC     42
10 #define MAXVL     2048
11 #define MAXVL_B   (MAXVL / 8)
13 .pushsection .text
14 .data
15 .align 4
16 scratch:
17         .space  MAXVL_B
18 .popsection
20 .globl fork_test
21 fork_test:
22         smstart_za
24         // For simplicity just set one word in one vector, other tests
25         // cover general data corruption issues.
26         ldr     x0, =scratch
27         mov     x1, #MAGIC
28         str     x1, [x0]
29         mov     w12, wzr
30         _ldr_za 12, 0                   // ZA.H[W12] loaded from [X0]
32         // Tail call into the C portion that does the fork & verify
33         b       fork_test_c
35 .globl verify_fork
36 verify_fork:
37         // SVCR should have ZA=1, SM=0
38         mrs     x0, S3_3_C4_C2_2
39         and     x1, x0, #3
40         cmp     x1, #2
41         beq     1f
42         mov     x0, xzr
43         b       100f
46         // ZA should still have the value we loaded
47         ldr     x0, =scratch
48         mov     w12, wzr
49         _str_za 12, 0                   // ZA.H[W12] stored to [X0]
50         ldr     x1, [x0]
51         cmp     x1, #MAGIC
52         beq     2f
53         mov     x0, xzr
54         b       100f
57         // All tests passed
58         mov     x0, #1
59 100:
60         ret