From patchwork Fri May 26 08:03:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Martin_Storsj=C3=B6?= X-Patchwork-Id: 41834 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c51c:b0:10c:5e6f:955f with SMTP id gm28csp1145287pzb; Fri, 26 May 2023 01:03:55 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7j1i3fbrYgX2wNKUxnuRq12CGeDejgMcHKEGmSRjxGMeiA8zNuFtvygGvtBeJCj2SEWoQk X-Received: by 2002:a05:6402:331:b0:50b:c72a:2b26 with SMTP id q17-20020a056402033100b0050bc72a2b26mr759912edw.9.1685088234842; Fri, 26 May 2023 01:03:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1685088234; cv=none; d=google.com; s=arc-20160816; b=mz2gjgMg2KoEoo6xzAWB2he5pvqA6EtEE35k4yEsMcwKC3GMrijAT8bTtTIG/bPqF9 iPkFz+U/TLjrtHLxam3AsKvQN1jzuIBCz3zclwqTWdczKqHvjqaSogfRNjEbD7M99Kcj Oi9g5PGCUI3eaUbqMUZELLWKsVHSJ+7jq6WUwCLA1QrX4p/EwVfAzJhRRRk8wAfVUeQr GxHpji6sHOhAGRbugb3afX2tcVH+Lajy1iaHWVQMivAtRp7vT106hjDO3djCjpR6qPc8 KK7+dXWfCmNO6EmupCdtfasA+ve7hHSOt9fv+IkhiJsnfo+du3VPR8pqRSfuBvj0Q90a rFuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=r9Rr02HM9jo1b5Q3MZXT2KfoE6xEjXyRB2Lc0BhWh5o=; b=sHjri48COObYmH5EtOxF84bl/XEZOdSyx5dB8JeVOOUoHXpEcLjHMJIZCxfnfkgOtU La0jNB/hUhUhgGqygNafWRtRcF9XU4kPEqLbXMy3a5PmIJTnVewI4GXC9IRnsB3RzhcE Jt4FjAgum2RosTDY8BWJ7TgUvJNRQX8nleBQZQOj+64BKSZNITa0579ohTpT5mX+6ao+ cKwqjzuVOYiucb/6N/8fKX8FVdwFpxkFJ7NcHyUu1Rq2f0k3ulHspXywcGGM5+2zibtS lvAPW3loDK+NlCasFD5+TnKmCKA7gIHIyjPjAOG0XHusuNa8iABqjL381OsEVnbhjUgv 206A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@martin-st.20221208.gappssmtp.com header.s=20221208 header.b=47z0HXwF; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l18-20020a056402345200b00509ee597a42si303648edc.588.2023.05.26.01.03.54; Fri, 26 May 2023 01:03:54 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@martin-st.20221208.gappssmtp.com header.s=20221208 header.b=47z0HXwF; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B0EF668C1A6; Fri, 26 May 2023 11:03:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f51.google.com (mail-lf1-f51.google.com [209.85.167.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6D5D668B9FF for ; Fri, 26 May 2023 11:03:18 +0300 (EEST) Received: by mail-lf1-f51.google.com with SMTP id 2adb3069b0e04-4f13d8f74abso426450e87.0 for ; Fri, 26 May 2023 01:03:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=martin-st.20221208.gappssmtp.com; s=20221208; t=1685088197; x=1687680197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=KiYSRHk3bh+yeQTaKoH8PJNgDjzCiG0kgyUE8zcuBoQ=; b=47z0HXwFYWvZnxfPprzZwxc7wfAkXinMRoyxAJkdin4iZDo2SU4joniVO7euodNNoC 5W3zwUf6yaCKl4lnjljCiB5ZRphnNi8zM1/Bv3BvfMgyvFetl3dx4k8TVoeP8CW0aFrx IThsYLOQz7zJ8S44tsGmK2EOJWIiClq3MlSdXEOG8Op+KLVoibTaiLq1LVPY8KC6xDAC NxUafZdMq8aSJ89zRdcaC/ySWkbNPHTV4nNvkQ3BQn7MerAu8r8WSHCJ3o2wJ700aRao kONk23Bt1FwdzXpraMjDXkA8aVho7n3c3HRY9IeDINQrKotnG71z6gJiSiT4AZqzahWf LnYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1685088197; x=1687680197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KiYSRHk3bh+yeQTaKoH8PJNgDjzCiG0kgyUE8zcuBoQ=; b=YEe82OKy6VfvutycWpOsTzM1UbYR7QTDHxhbWM6/8a4YHLCnOQAtby3iowrSHqCKYh QExYu83n3uYJflEpeTB9MFdZGtfuEENOWD9XOaSr60nmGTn9vbP11IQvEBixjUWs/CiJ 4UvrcY7Dxzggaq4I0BF5I/0aBvGiRzqCzDxIyJqQw8qLIe/SHvA/HosvWTX7fQrA2+RE RHQD9qyfHEsoFKd8MdEqBJCzAuXY+X3Xg2K6X9sIgUPlFvwq/vaAugfcWu3JLLkeF7kn jrV4EmikPhK+RbUV6TG41s09d/GO71yLprfunrL1y4RHsL1JH/R7+dFuWgHqtmX/zwTn MAxw== X-Gm-Message-State: AC+VfDysG5uZpcMvPSENowsbr6cYP8ZzUU9FbK4uCvkBm0jhz35YEBNB QxCQC28ayxpvLSBhKgqSJLROwRVbwuzozxPI2r62Pg== X-Received: by 2002:ac2:5ec4:0:b0:4f3:7a8c:d46c with SMTP id d4-20020ac25ec4000000b004f37a8cd46cmr305610lfq.66.1685088197689; Fri, 26 May 2023 01:03:17 -0700 (PDT) Received: from localhost (dsl-tkubng21-58c01c-243.dhcp.inet.fi. [88.192.28.243]) by smtp.gmail.com with ESMTPSA id r13-20020ac25a4d000000b004f00d3d9df9sm512668lfn.188.2023.05.26.01.03.17 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 26 May 2023 01:03:17 -0700 (PDT) From: =?utf-8?q?Martin_Storsj=C3=B6?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 May 2023 11:03:14 +0300 Message-Id: <20230526080315.83424-3-martin@martin.st> X-Mailer: git-send-email 2.37.1 (Apple Git-137.1) In-Reply-To: <20230526080315.83424-1-martin@martin.st> References: <20230526080315.83424-1-martin@martin.st> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] aarch64: Add linux runtime cpu feature detection using getauxval(AT_HWCAP) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: HOGIUh+LWMey Based on code by Janne Grunau. Using HWCAP_CPUID for user space access to the CPU feature registers. See https://www.kernel.org/doc/html/latest/arm64/cpu-feature-registers.html. --- configure | 2 ++ libavutil/aarch64/cpu.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/configure b/configure index 3c7473efb2..b5357b8d27 100755 --- a/configure +++ b/configure @@ -2207,6 +2207,7 @@ HAVE_LIST_PUB=" HEADERS_LIST=" arpa_inet_h + asm_hwcap_h asm_types_h cdio_paranoia_h cdio_paranoia_paranoia_h @@ -6422,6 +6423,7 @@ check_headers io.h enabled libdrm && check_headers linux/dma-buf.h +check_headers asm/hwcap.h check_headers linux/perf_event.h check_headers libcrystalhd/libcrystalhd_if.h check_headers malloc.h diff --git a/libavutil/aarch64/cpu.c b/libavutil/aarch64/cpu.c index 42b33e4a2d..34c838c2f5 100644 --- a/libavutil/aarch64/cpu.c +++ b/libavutil/aarch64/cpu.c @@ -20,6 +20,42 @@ #include "libavutil/cpu_internal.h" #include "config.h" +#if (defined(__linux__) || defined(__ANDROID__)) && HAVE_GETAUXVAL && HAVE_ASM_HWCAP_H +#include +#include +#include + +#define get_cpu_feature_reg(reg, val) \ + __asm__("mrs %0, " #reg : "=r" (val)) + +static int detect_flags(void) +{ + unsigned long ret = getauxval(AT_HWCAP); + int flags = 0; +#if defined(HWCAP_CPUID) + uint64_t tmp; + if (!(ret & HWCAP_CPUID)) + return flags; + get_cpu_feature_reg(ID_AA64ISAR0_EL1, tmp); + if (((tmp >> 44) & 0xf) == 0x1) + flags |= AV_CPU_FLAG_DOTPROD; + get_cpu_feature_reg(ID_AA64ISAR1_EL1, tmp); + if (((tmp >> 52) & 0xf) == 0x1) + flags |= AV_CPU_FLAG_I8MM; +#endif + + return flags; +} + +#else + +static int detect_flags(void) +{ + return 0; +} + +#endif + int ff_get_cpu_flags_aarch64(void) { int flags = AV_CPU_FLAG_ARMV8 * HAVE_ARMV8 | @@ -33,6 +69,8 @@ int ff_get_cpu_flags_aarch64(void) flags |= AV_CPU_FLAG_I8MM; #endif + flags |= detect_flags(); + return flags; }