xref: /netbsd-src/external/gpl3/gdb.old/dist/include/opcode/arc-func.h (revision 6881a4007f077b54e5f51159c52b9b25f57deb0d)
1ed8eb4c2Schristos /* Replace functions for the ARC relocs.
2*6881a400Schristos    Copyright (C) 2015-2022 Free Software Foundation, Inc.
3ed8eb4c2Schristos 
4ed8eb4c2Schristos    This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
5ed8eb4c2Schristos    the GNU Binutils.
6ed8eb4c2Schristos 
7ed8eb4c2Schristos    GAS/GDB is free software; you can redistribute it and/or modify
8ed8eb4c2Schristos    it under the terms of the GNU General Public License as published by
9ed8eb4c2Schristos    the Free Software Foundation; either version 3, or (at your option)
10ed8eb4c2Schristos    any later version.
11ed8eb4c2Schristos 
12ed8eb4c2Schristos    GAS/GDB is distributed in the hope that it will be useful,
13ed8eb4c2Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
14ed8eb4c2Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
15ed8eb4c2Schristos    GNU General Public License for more details.
16ed8eb4c2Schristos 
17ed8eb4c2Schristos    You should have received a copy of the GNU General Public License
18ed8eb4c2Schristos    along with GAS or GDB; see the file COPYING3.  If not, write to
19ed8eb4c2Schristos    the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
20ed8eb4c2Schristos    MA 02110-1301, USA.  */
21ed8eb4c2Schristos 
22ed8eb4c2Schristos /* mask  = 00000000000000000000000000000000.  */
23ed8eb4c2Schristos #ifndef REPLACE_none
24ed8eb4c2Schristos #define REPLACE_none
25ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
26ed8eb4c2Schristos replace_none (unsigned insn, int value ATTRIBUTE_UNUSED)
27ed8eb4c2Schristos {
28ed8eb4c2Schristos   insn = insn & ~0x00;
29ed8eb4c2Schristos 
30ed8eb4c2Schristos   return insn;
31ed8eb4c2Schristos }
32ed8eb4c2Schristos 
33ed8eb4c2Schristos #endif /* REPLACE_none */
34ed8eb4c2Schristos 
35ed8eb4c2Schristos /* mask  = 11111111.  */
36ed8eb4c2Schristos #ifndef REPLACE_bits8
37ed8eb4c2Schristos #define REPLACE_bits8
38ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
39ed8eb4c2Schristos replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED)
40ed8eb4c2Schristos {
41ed8eb4c2Schristos   insn = insn & ~0xff;
42ed8eb4c2Schristos   insn |= ((value >> 0) & 0x00ff) << 0;
43ed8eb4c2Schristos 
44ed8eb4c2Schristos   return insn;
45ed8eb4c2Schristos }
46ed8eb4c2Schristos 
47ed8eb4c2Schristos #endif /* REPLACE_bits8 */
48ed8eb4c2Schristos 
49ed8eb4c2Schristos /* mask  = 1111111111111111.  */
50ed8eb4c2Schristos #ifndef REPLACE_bits16
51ed8eb4c2Schristos #define REPLACE_bits16
52ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
53ed8eb4c2Schristos replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED)
54ed8eb4c2Schristos {
55ed8eb4c2Schristos   insn = insn & ~0xffff;
56ed8eb4c2Schristos   insn |= ((value >> 0) & 0xffff) << 0;
57ed8eb4c2Schristos 
58ed8eb4c2Schristos   return insn;
59ed8eb4c2Schristos }
60ed8eb4c2Schristos 
61ed8eb4c2Schristos #endif /* REPLACE_bits16 */
62ed8eb4c2Schristos 
63ed8eb4c2Schristos /* mask  = 111111111111111111111111.  */
64ed8eb4c2Schristos #ifndef REPLACE_bits24
65ed8eb4c2Schristos #define REPLACE_bits24
66ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
67ed8eb4c2Schristos replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED)
68ed8eb4c2Schristos {
69ed8eb4c2Schristos   insn = insn & ~0xffffff;
70ed8eb4c2Schristos   insn |= ((value >> 0) & 0xffffff) << 0;
71ed8eb4c2Schristos 
72ed8eb4c2Schristos   return insn;
73ed8eb4c2Schristos }
74ed8eb4c2Schristos 
75ed8eb4c2Schristos #endif /* REPLACE_bits24 */
76ed8eb4c2Schristos 
77ed8eb4c2Schristos /* Special 24 bit replace for big endian.  */
78ed8eb4c2Schristos /* mask  = 111111111111111111111111.  */
79ed8eb4c2Schristos #ifndef REPLACE_bits24_be
80ed8eb4c2Schristos #define REPLACE_bits24_be
81ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
82ed8eb4c2Schristos replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED)
83ed8eb4c2Schristos {
84ed8eb4c2Schristos   insn = insn & ~0xffffff00;
85ed8eb4c2Schristos   insn |= ((value >> 0) & 0xffffff) << 8;
86ed8eb4c2Schristos 
87ed8eb4c2Schristos   return insn;
88ed8eb4c2Schristos }
89ed8eb4c2Schristos 
90ed8eb4c2Schristos #endif /* REPLACE_bits24_be */
91ed8eb4c2Schristos 
92ed8eb4c2Schristos /* mask  = 11111111111111111111111111111111.  */
93ed8eb4c2Schristos #ifndef REPLACE_word32
94ed8eb4c2Schristos #define REPLACE_word32
95ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
96ed8eb4c2Schristos replace_word32 (unsigned insn, int value ATTRIBUTE_UNUSED)
97ed8eb4c2Schristos {
98ed8eb4c2Schristos   insn = insn & ~0xffffffff;
99ed8eb4c2Schristos   insn |= ((value >> 0) & 0xffffffff) << 0;
100ed8eb4c2Schristos 
101ed8eb4c2Schristos   return insn;
102ed8eb4c2Schristos }
103ed8eb4c2Schristos 
104ed8eb4c2Schristos #endif /* REPLACE_word32 */
105ed8eb4c2Schristos 
106ed8eb4c2Schristos /* mask  = 0000000000000000000000000000000011111111111111111111111111111111.  */
107ed8eb4c2Schristos #ifndef REPLACE_limm
108ed8eb4c2Schristos #define REPLACE_limm
109ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
110ed8eb4c2Schristos replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED)
111ed8eb4c2Schristos {
112ed8eb4c2Schristos   insn = insn & ~0xffffffff;
113ed8eb4c2Schristos   insn |= ((value >> 0) & 0xffffffff) << 0;
114ed8eb4c2Schristos 
115ed8eb4c2Schristos   return insn;
116ed8eb4c2Schristos }
117ed8eb4c2Schristos 
118ed8eb4c2Schristos #endif /* REPLACE_limm */
119ed8eb4c2Schristos 
120ed8eb4c2Schristos /* mask  = 000000000000000011111111111111111111111111111111.  */
121ed8eb4c2Schristos #ifndef REPLACE_limms
122ed8eb4c2Schristos #define REPLACE_limms
123ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
124ed8eb4c2Schristos replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED)
125ed8eb4c2Schristos {
126ed8eb4c2Schristos   insn = insn & ~0xffffffff;
127ed8eb4c2Schristos   insn |= ((value >> 0) & 0xffffffff) << 0;
128ed8eb4c2Schristos 
129ed8eb4c2Schristos   return insn;
130ed8eb4c2Schristos }
131ed8eb4c2Schristos 
132ed8eb4c2Schristos #endif /* REPLACE_limms */
133ed8eb4c2Schristos 
134ed8eb4c2Schristos /* mask  = 00000111111111102222222222000000.  */
135ed8eb4c2Schristos #ifndef REPLACE_disp21h
136ed8eb4c2Schristos #define REPLACE_disp21h
137ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
138ed8eb4c2Schristos replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED)
139ed8eb4c2Schristos {
140ed8eb4c2Schristos   insn = insn & ~0x7feffc0;
141ed8eb4c2Schristos   insn |= ((value >> 0) & 0x03ff) << 17;
142ed8eb4c2Schristos   insn |= ((value >> 10) & 0x03ff) << 6;
143ed8eb4c2Schristos 
144ed8eb4c2Schristos   return insn;
145ed8eb4c2Schristos }
146ed8eb4c2Schristos 
147ed8eb4c2Schristos #endif /* REPLACE_disp21h */
148ed8eb4c2Schristos 
149ed8eb4c2Schristos /* mask  = 00000111111111002222222222000000.  */
150ed8eb4c2Schristos #ifndef REPLACE_disp21w
151ed8eb4c2Schristos #define REPLACE_disp21w
152ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
153ed8eb4c2Schristos replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED)
154ed8eb4c2Schristos {
155ed8eb4c2Schristos   insn = insn & ~0x7fcffc0;
156ed8eb4c2Schristos   insn |= ((value >> 0) & 0x01ff) << 18;
157ed8eb4c2Schristos   insn |= ((value >> 9) & 0x03ff) << 6;
158ed8eb4c2Schristos 
159ed8eb4c2Schristos   return insn;
160ed8eb4c2Schristos }
161ed8eb4c2Schristos 
162ed8eb4c2Schristos #endif /* REPLACE_disp21w */
163ed8eb4c2Schristos 
164ed8eb4c2Schristos /* mask  = 00000111111111102222222222003333.  */
165ed8eb4c2Schristos #ifndef REPLACE_disp25h
166ed8eb4c2Schristos #define REPLACE_disp25h
167ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
168ed8eb4c2Schristos replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED)
169ed8eb4c2Schristos {
170ed8eb4c2Schristos   insn = insn & ~0x7feffcf;
171ed8eb4c2Schristos   insn |= ((value >> 0) & 0x03ff) << 17;
172ed8eb4c2Schristos   insn |= ((value >> 10) & 0x03ff) << 6;
173ed8eb4c2Schristos   insn |= ((value >> 20) & 0x000f) << 0;
174ed8eb4c2Schristos 
175ed8eb4c2Schristos   return insn;
176ed8eb4c2Schristos }
177ed8eb4c2Schristos 
178ed8eb4c2Schristos #endif /* REPLACE_disp25h */
179ed8eb4c2Schristos 
180ed8eb4c2Schristos /* mask  = 00000111111111002222222222003333.  */
181ed8eb4c2Schristos #ifndef REPLACE_disp25w
182ed8eb4c2Schristos #define REPLACE_disp25w
183ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
184ed8eb4c2Schristos replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED)
185ed8eb4c2Schristos {
186ed8eb4c2Schristos   insn = insn & ~0x7fcffcf;
187ed8eb4c2Schristos   insn |= ((value >> 0) & 0x01ff) << 18;
188ed8eb4c2Schristos   insn |= ((value >> 9) & 0x03ff) << 6;
189ed8eb4c2Schristos   insn |= ((value >> 19) & 0x000f) << 0;
190ed8eb4c2Schristos 
191ed8eb4c2Schristos   return insn;
192ed8eb4c2Schristos }
193ed8eb4c2Schristos 
194ed8eb4c2Schristos #endif /* REPLACE_disp25w */
195ed8eb4c2Schristos 
196ed8eb4c2Schristos /* mask  = 00000000000000000000000111111111.  */
197ed8eb4c2Schristos #ifndef REPLACE_disp9
198ed8eb4c2Schristos #define REPLACE_disp9
199ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
200ed8eb4c2Schristos replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED)
201ed8eb4c2Schristos {
202ed8eb4c2Schristos   insn = insn & ~0x1ff;
203ed8eb4c2Schristos   insn |= ((value >> 0) & 0x01ff) << 0;
204ed8eb4c2Schristos 
205ed8eb4c2Schristos   return insn;
206ed8eb4c2Schristos }
207ed8eb4c2Schristos 
208ed8eb4c2Schristos #endif /* REPLACE_disp9 */
209ed8eb4c2Schristos 
210ed8eb4c2Schristos /* mask  = 00000000111111112000000000000000.  */
211ed8eb4c2Schristos #ifndef REPLACE_disp9ls
212ed8eb4c2Schristos #define REPLACE_disp9ls
213ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
214ed8eb4c2Schristos replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED)
215ed8eb4c2Schristos {
216ed8eb4c2Schristos   insn = insn & ~0xff8000;
217ed8eb4c2Schristos   insn |= ((value >> 0) & 0x00ff) << 16;
218ed8eb4c2Schristos   insn |= ((value >> 8) & 0x0001) << 15;
219ed8eb4c2Schristos 
220ed8eb4c2Schristos   return insn;
221ed8eb4c2Schristos }
222ed8eb4c2Schristos 
223ed8eb4c2Schristos #endif /* REPLACE_disp9ls */
224ed8eb4c2Schristos 
225ed8eb4c2Schristos /* mask  = 0000000111111111.  */
226ed8eb4c2Schristos #ifndef REPLACE_disp9s
227ed8eb4c2Schristos #define REPLACE_disp9s
228ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
229ed8eb4c2Schristos replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED)
230ed8eb4c2Schristos {
231ed8eb4c2Schristos   insn = insn & ~0x1ff;
232ed8eb4c2Schristos   insn |= ((value >> 0) & 0x01ff) << 0;
233ed8eb4c2Schristos 
234ed8eb4c2Schristos   return insn;
235ed8eb4c2Schristos }
236ed8eb4c2Schristos 
237ed8eb4c2Schristos #endif /* REPLACE_disp9s */
238ed8eb4c2Schristos 
239ed8eb4c2Schristos /* mask  = 0000011111111111.  */
240ed8eb4c2Schristos #ifndef REPLACE_disp13s
241ed8eb4c2Schristos #define REPLACE_disp13s
242ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
243ed8eb4c2Schristos replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED)
244ed8eb4c2Schristos {
245ed8eb4c2Schristos   insn = insn & ~0x7ff;
246ed8eb4c2Schristos   insn |= ((value >> 0) & 0x07ff) << 0;
247ed8eb4c2Schristos 
248ed8eb4c2Schristos   return insn;
249ed8eb4c2Schristos }
250ed8eb4c2Schristos 
251ed8eb4c2Schristos #endif /* REPLACE_disp13s */
252ed8eb4c2Schristos 
253ed8eb4c2Schristos /* mask  = 0000022222200111.  */
254ed8eb4c2Schristos #ifndef REPLACE_disp9s1
255ed8eb4c2Schristos #define REPLACE_disp9s1
256ed8eb4c2Schristos ATTRIBUTE_UNUSED static unsigned
257ed8eb4c2Schristos replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED)
258ed8eb4c2Schristos {
259ed8eb4c2Schristos   insn = insn & ~0x7e7;
260ed8eb4c2Schristos   insn |= ((value >> 0) & 0x0007) << 0;
261ed8eb4c2Schristos   insn |= ((value >> 3) & 0x003f) << 5;
262ed8eb4c2Schristos 
263ed8eb4c2Schristos   return insn;
264ed8eb4c2Schristos }
265ed8eb4c2Schristos 
266ed8eb4c2Schristos #endif /* REPLACE_disp9s1 */
267699b0f92Schristos 
268699b0f92Schristos /* mask  = 00000000000000000000111111222222.  */
269699b0f92Schristos #ifndef REPLACE_disp12s
270699b0f92Schristos #define REPLACE_disp12s
271699b0f92Schristos ATTRIBUTE_UNUSED static unsigned
272699b0f92Schristos replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED)
273699b0f92Schristos {
274699b0f92Schristos   insn = insn & ~0xfff;
275699b0f92Schristos   insn |= ((value >> 0) & 0x003f) << 6;
276699b0f92Schristos   insn |= ((value >> 6) & 0x003f) << 0;
277699b0f92Schristos   return insn;
278699b0f92Schristos }
279699b0f92Schristos 
280699b0f92Schristos #endif /* REPLACE_disp12s */
2817f2ac410Schristos 
2827f2ac410Schristos /* mask  = 0000001111111111.  */
2837f2ac410Schristos #ifndef REPLACE_jli
2847f2ac410Schristos #define REPLACE_jli
2857f2ac410Schristos ATTRIBUTE_UNUSED static unsigned
2867f2ac410Schristos replace_jli (unsigned insn, int value)
2877f2ac410Schristos {
2887f2ac410Schristos   insn = insn & ~0x3ff;
2897f2ac410Schristos   insn |= ((value >> 0) & 0x03ff) << 0;
2907f2ac410Schristos 
2917f2ac410Schristos   return insn;
2927f2ac410Schristos }
2937f2ac410Schristos 
2947f2ac410Schristos #endif /* REPLACE_jli */
295