Coverage Report

Created: 2025-07-23 08:13

/src/cairo/subprojects/pixman-0.44.2/pixman/pixman-riscv.c
Line
Count
Source
1
/*
2
 * Copyright © 2024 Filip Wasil, Samsung Electronics
3
 *
4
 * Permission to use, copy, modify, distribute, and sell this software and its
5
 * documentation for any purpose is hereby granted without fee, provided that
6
 * the above copyright notice appear in all copies and that both that
7
 * copyright notice and this permission notice appear in supporting
8
 * documentation, and that the name of Keith Packard not be used in
9
 * advertising or publicity pertaining to distribution of the software without
10
 * specific, written prior permission.  Keith Packard makes no
11
 * representations about the suitability of this software for any purpose.  It
12
 * is provided "as is" without express or implied warranty.
13
 *
14
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
15
 * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
16
 * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
17
 * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
19
 * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
20
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
21
 * SOFTWARE.
22
 */
23
24
#ifdef HAVE_CONFIG_H
25
#include <pixman-config.h>
26
#endif
27
28
#include "pixman-private.h"
29
30
#ifdef USE_RVV
31
32
#if defined(__linux__)
33
#include <asm/hwcap.h>
34
#include <sys/auxv.h>
35
#endif
36
37
typedef enum
38
{
39
    RVV = (1 << 0),
40
} riscv_cpu_features_t;
41
42
static riscv_cpu_features_t
43
detect_cpu_features (void)
44
{
45
    riscv_cpu_features_t features = 0;
46
47
#if defined(__linux__)
48
    if (getauxval (AT_HWCAP) & COMPAT_HWCAP_ISA_V)
49
    {
50
  features |= RVV;
51
    }
52
#else
53
#pragma message(                                                               \
54
    "warning: RISC-V Vector Extension runtime check not implemented for this platform. RVV will be disabled")
55
#endif
56
    return features;
57
}
58
59
#endif
60
61
pixman_implementation_t *
62
_pixman_riscv_get_implementations (pixman_implementation_t *imp)
63
12
{
64
#ifdef USE_RVV
65
    if (!_pixman_disabled ("rvv") && (detect_cpu_features () & RVV))
66
    {
67
  imp = _pixman_implementation_create_rvv (imp);
68
    }
69
#endif
70
12
    return imp;
71
12
}