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. 9 10#include <asm/unistd.h> 11#include "assembler.h" 12 13.arch_extension sve 14 15.macro test_loop per_loop 16 mov x10, x20 17 mov x8, #__NR_getpid 18 mrs x11, CNTVCT_EL0 191: 20 \per_loop 21 svc #0 22 sub x10, x10, #1 23 cbnz x10, 1b 24 25 mrs x12, CNTVCT_EL0 26 sub x0, x12, x11 27 bl putdec 28 puts "\n" 29.endm 30 31// Main program entry point 32.globl _start 33function _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" 40 41 // Test having never used SVE 42 puts "No SVE: " 43 test_loop 44 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 511: 52 53 // Execute a SVE instruction 54 puts "SVE VL: " 55 rdvl x0, #8 56 bl putdec 57 puts "\n" 58 59 puts "SVE used once: " 60 test_loop 61 62 // Use SVE per syscall 63 puts "SVE used per syscall: " 64 test_loop "rdvl x0, #8" 65 66 // And we're done 67out: 68 mov x0, #0 69 mov x8, #__NR_exit 70 svc #0 71