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