about summary refs log tree commit diff
path: root/sysdeps/x86_64/multiarch/reg-macros.h
blob: 97de4efae74092f3bcfc36321e88f4ea85d1db3d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/* This file was generated by: gen-reg-macros.py.

   Copyright (C) 2022-2023 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <https://www.gnu.org/licenses/>.  */

#ifndef _REG_MACROS_H
#define _REG_MACROS_H	1

#define rax_8	al
#define rax_16	ax
#define rax_32	eax
#define rax_64	rax
#define rbx_8	bl
#define rbx_16	bx
#define rbx_32	ebx
#define rbx_64	rbx
#define rcx_8	cl
#define rcx_16	cx
#define rcx_32	ecx
#define rcx_64	rcx
#define rdx_8	dl
#define rdx_16	dx
#define rdx_32	edx
#define rdx_64	rdx
#define rbp_8	bpl
#define rbp_16	bp
#define rbp_32	ebp
#define rbp_64	rbp
#define rsp_8	spl
#define rsp_16	sp
#define rsp_32	esp
#define rsp_64	rsp
#define rsi_8	sil
#define rsi_16	si
#define rsi_32	esi
#define rsi_64	rsi
#define rdi_8	dil
#define rdi_16	di
#define rdi_32	edi
#define rdi_64	rdi
#define r8_8	r8b
#define r8_16	r8w
#define r8_32	r8d
#define r8_64	r8
#define r9_8	r9b
#define r9_16	r9w
#define r9_32	r9d
#define r9_64	r9
#define r10_8	r10b
#define r10_16	r10w
#define r10_32	r10d
#define r10_64	r10
#define r11_8	r11b
#define r11_16	r11w
#define r11_32	r11d
#define r11_64	r11
#define r12_8	r12b
#define r12_16	r12w
#define r12_32	r12d
#define r12_64	r12
#define r13_8	r13b
#define r13_16	r13w
#define r13_32	r13d
#define r13_64	r13
#define r14_8	r14b
#define r14_16	r14w
#define r14_32	r14d
#define r14_64	r14
#define r15_8	r15b
#define r15_16	r15w
#define r15_32	r15d
#define r15_64	r15

#define kmov_8	kmovb
#define kmov_16	kmovw
#define kmov_32	kmovd
#define kmov_64	kmovq
#define kortest_8	kortestb
#define kortest_16	kortestw
#define kortest_32	kortestd
#define kortest_64	kortestq
#define kor_8	korb
#define kor_16	korw
#define kor_32	kord
#define kor_64	korq
#define ktest_8	ktestb
#define ktest_16	ktestw
#define ktest_32	ktestd
#define ktest_64	ktestq
#define kand_8	kandb
#define kand_16	kandw
#define kand_32	kandd
#define kand_64	kandq
#define kxor_8	kxorb
#define kxor_16	kxorw
#define kxor_32	kxord
#define kxor_64	kxorq
#define knot_8	knotb
#define knot_16	knotw
#define knot_32	knotd
#define knot_64	knotq
#define kxnor_8	kxnorb
#define kxnor_16	kxnorw
#define kxnor_32	kxnord
#define kxnor_64	kxnorq
#define kunpack_8	kunpackbw
#define kunpack_16	kunpackwd
#define kunpack_32	kunpackdq

/* Common API for accessing proper width GPR is V{upcase_GPR_name}.  */
#define VRAX	VGPR(rax)
#define VRBX	VGPR(rbx)
#define VRCX	VGPR(rcx)
#define VRDX	VGPR(rdx)
#define VRBP	VGPR(rbp)
#define VRSP	VGPR(rsp)
#define VRSI	VGPR(rsi)
#define VRDI	VGPR(rdi)
#define VR8	VGPR(r8)
#define VR9	VGPR(r9)
#define VR10	VGPR(r10)
#define VR11	VGPR(r11)
#define VR12	VGPR(r12)
#define VR13	VGPR(r13)
#define VR14	VGPR(r14)
#define VR15	VGPR(r15)

/* Common API for accessing proper width mask insn is {upcase_mask_insn}.  */
#define KMOV 	VKINSN(kmov)
#define KORTEST 	VKINSN(kortest)
#define KOR 	VKINSN(kor)
#define KTEST 	VKINSN(ktest)
#define KAND 	VKINSN(kand)
#define KXOR 	VKINSN(kxor)
#define KNOT 	VKINSN(knot)
#define KXNOR 	VKINSN(kxnor)
#define KUNPACK 	VKINSN(kunpack)

#ifdef USE_WIDE_CHAR
# define REG_WIDTH 32
#else
# define REG_WIDTH VEC_SIZE
#endif

#define VPASTER(x, y)	x##_##y
#define VEVALUATOR(x, y)	VPASTER(x, y)

#define VGPR_SZ(reg_name, reg_size)	VEVALUATOR(reg_name, reg_size)
#define VKINSN_SZ(insn, reg_size)	VEVALUATOR(insn, reg_size)

#define VGPR(reg_name)	VGPR_SZ(reg_name, REG_WIDTH)
#define VKINSN(mask_insn)	VKINSN_SZ(mask_insn, REG_WIDTH)

#endif