162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci// Copyright (C) 2021 ARM Limited. 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include "sme-inst.h" 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci.arch_extension sve 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#define MAGIC 42 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define MAXVL 2048 1162306a36Sopenharmony_ci#define MAXVL_B (MAXVL / 8) 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci.pushsection .text 1462306a36Sopenharmony_ci.data 1562306a36Sopenharmony_ci.align 4 1662306a36Sopenharmony_ciscratch: 1762306a36Sopenharmony_ci .space MAXVL_B 1862306a36Sopenharmony_ci.popsection 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci.globl fork_test 2162306a36Sopenharmony_cifork_test: 2262306a36Sopenharmony_ci smstart_za 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci // For simplicity just set one word in one vector, other tests 2562306a36Sopenharmony_ci // cover general data corruption issues. 2662306a36Sopenharmony_ci ldr x0, =scratch 2762306a36Sopenharmony_ci mov x1, #MAGIC 2862306a36Sopenharmony_ci str x1, [x0] 2962306a36Sopenharmony_ci mov w12, wzr 3062306a36Sopenharmony_ci _ldr_za 12, 0 // ZA.H[W12] loaded from [X0] 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci // Tail call into the C portion that does the fork & verify 3362306a36Sopenharmony_ci b fork_test_c 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci.globl verify_fork 3662306a36Sopenharmony_civerify_fork: 3762306a36Sopenharmony_ci // SVCR should have ZA=1, SM=0 3862306a36Sopenharmony_ci mrs x0, S3_3_C4_C2_2 3962306a36Sopenharmony_ci and x1, x0, #3 4062306a36Sopenharmony_ci cmp x1, #2 4162306a36Sopenharmony_ci beq 1f 4262306a36Sopenharmony_ci mov x0, xzr 4362306a36Sopenharmony_ci b 100f 4462306a36Sopenharmony_ci1: 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci // ZA should still have the value we loaded 4762306a36Sopenharmony_ci ldr x0, =scratch 4862306a36Sopenharmony_ci mov w12, wzr 4962306a36Sopenharmony_ci _str_za 12, 0 // ZA.H[W12] stored to [X0] 5062306a36Sopenharmony_ci ldr x1, [x0] 5162306a36Sopenharmony_ci cmp x1, #MAGIC 5262306a36Sopenharmony_ci beq 2f 5362306a36Sopenharmony_ci mov x0, xzr 5462306a36Sopenharmony_ci b 100f 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci2: 5762306a36Sopenharmony_ci // All tests passed 5862306a36Sopenharmony_ci mov x0, #1 5962306a36Sopenharmony_ci100: 6062306a36Sopenharmony_ci ret 6162306a36Sopenharmony_ci 62