drm/atomic-helper: document drm_atomic_helper_check() restrictions
[drm/drm-misc.git] / tools / testing / selftests / arm64 / fp / fp-pidbench.S
blob73830f6bc99b69f4de006145956eee9af3821579
1 // SPDX-License-Identifier: GPL-2.0-only
2 // Copyright (C) 2021 ARM Limited.
3 // Original author: Mark Brown <broonie@kernel.org>
4 //
5 // Trivial syscall overhead benchmark.
6 //
7 // This is implemented in asm to ensure that we don't have any issues with
8 // system libraries using instructions that disrupt the test.
10 #include <asm/unistd.h>
11 #include "assembler.h"
13 .arch_extension sve
15 .macro test_loop per_loop
16         mov     x10, x20
17         mov     x8, #__NR_getpid
18         mrs     x11, CNTVCT_EL0
20         \per_loop
21         svc     #0
22         sub     x10, x10, #1
23         cbnz    x10, 1b
25         mrs     x12, CNTVCT_EL0
26         sub     x0, x12, x11
27         bl      putdec
28         puts    "\n"
29 .endm
31 // Main program entry point
32 .globl _start
33 function _start
34         puts    "Iterations per test: "
35         mov     x20, #10000
36         lsl     x20, x20, #8
37         mov     x0, x20
38         bl      putdec
39         puts    "\n"
41         // Test having never used SVE
42         puts    "No SVE: "
43         test_loop
45         // Check for SVE support - should use hwcap but that's hard in asm
46         mrs     x0, ID_AA64PFR0_EL1
47         ubfx    x0, x0, #32, #4
48         cbnz    x0, 1f
49         puts    "System does not support SVE\n"
50         b       out
53         // Execute a SVE instruction
54         puts    "SVE VL: "
55         rdvl    x0, #8
56         bl      putdec
57         puts    "\n"
59         puts    "SVE used once: "
60         test_loop
62         // Use SVE per syscall
63         puts    "SVE used per syscall: "
64         test_loop "rdvl x0, #8"
66         //  And we're done
67 out:
68         mov     x0, #0
69         mov     x8, #__NR_exit
70         svc     #0