1/* Macro helpers for VEC_{type}({vec_num})
2 All versions must be listed in ifunc-impl-list.c.
3 Copyright (C) 2022 Free Software Foundation, Inc.
4 This file is part of the GNU C Library.
5
6 The GNU C Library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
10
11 The GNU C Library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with the GNU C Library; if not, see
18 <https://www.gnu.org/licenses/>. */
19
20#ifndef _VEC_MACROS_H
21#define _VEC_MACROS_H 1
22
23#ifndef VEC_SIZE
24# error "Never include this file directly. Always include a vector config."
25#endif
26
27/* Defines so we can use SSE2 / AVX2 / EVEX / EVEX512 encoding with same
28 VEC(N) values. */
29#define VEC_hi_xmm0 xmm16
30#define VEC_hi_xmm1 xmm17
31#define VEC_hi_xmm2 xmm18
32#define VEC_hi_xmm3 xmm19
33#define VEC_hi_xmm4 xmm20
34#define VEC_hi_xmm5 xmm21
35#define VEC_hi_xmm6 xmm22
36#define VEC_hi_xmm7 xmm23
37#define VEC_hi_xmm8 xmm24
38#define VEC_hi_xmm9 xmm25
39#define VEC_hi_xmm10 xmm26
40#define VEC_hi_xmm11 xmm27
41#define VEC_hi_xmm12 xmm28
42#define VEC_hi_xmm13 xmm29
43#define VEC_hi_xmm14 xmm30
44#define VEC_hi_xmm15 xmm31
45
46#define VEC_hi_ymm0 ymm16
47#define VEC_hi_ymm1 ymm17
48#define VEC_hi_ymm2 ymm18
49#define VEC_hi_ymm3 ymm19
50#define VEC_hi_ymm4 ymm20
51#define VEC_hi_ymm5 ymm21
52#define VEC_hi_ymm6 ymm22
53#define VEC_hi_ymm7 ymm23
54#define VEC_hi_ymm8 ymm24
55#define VEC_hi_ymm9 ymm25
56#define VEC_hi_ymm10 ymm26
57#define VEC_hi_ymm11 ymm27
58#define VEC_hi_ymm12 ymm28
59#define VEC_hi_ymm13 ymm29
60#define VEC_hi_ymm14 ymm30
61#define VEC_hi_ymm15 ymm31
62
63#define VEC_hi_zmm0 zmm16
64#define VEC_hi_zmm1 zmm17
65#define VEC_hi_zmm2 zmm18
66#define VEC_hi_zmm3 zmm19
67#define VEC_hi_zmm4 zmm20
68#define VEC_hi_zmm5 zmm21
69#define VEC_hi_zmm6 zmm22
70#define VEC_hi_zmm7 zmm23
71#define VEC_hi_zmm8 zmm24
72#define VEC_hi_zmm9 zmm25
73#define VEC_hi_zmm10 zmm26
74#define VEC_hi_zmm11 zmm27
75#define VEC_hi_zmm12 zmm28
76#define VEC_hi_zmm13 zmm29
77#define VEC_hi_zmm14 zmm30
78#define VEC_hi_zmm15 zmm31
79
80#define PRIMITIVE_VEC(vec, num) vec##num
81
82#define VEC_any_xmm(i) PRIMITIVE_VEC(xmm, i)
83#define VEC_any_ymm(i) PRIMITIVE_VEC(ymm, i)
84#define VEC_any_zmm(i) PRIMITIVE_VEC(zmm, i)
85
86#define VEC_hi_xmm(i) PRIMITIVE_VEC(VEC_hi_xmm, i)
87#define VEC_hi_ymm(i) PRIMITIVE_VEC(VEC_hi_ymm, i)
88#define VEC_hi_zmm(i) PRIMITIVE_VEC(VEC_hi_zmm, i)
89
90#endif
91