xref: /netbsd-src/external/gpl3/binutils.old/dist/include/opcode/arc-func.h (revision e992f068c547fd6e84b3f104dc2340adcc955732)
175fd0b74Schristos /* Replace functions for the ARC relocs.
2*e992f068Schristos    Copyright (C) 2015-2022 Free Software Foundation, Inc.
375fd0b74Schristos 
475fd0b74Schristos    This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
575fd0b74Schristos    the GNU Binutils.
675fd0b74Schristos 
775fd0b74Schristos    GAS/GDB is free software; you can redistribute it and/or modify
875fd0b74Schristos    it under the terms of the GNU General Public License as published by
975fd0b74Schristos    the Free Software Foundation; either version 3, or (at your option)
1075fd0b74Schristos    any later version.
1175fd0b74Schristos 
1275fd0b74Schristos    GAS/GDB is distributed in the hope that it will be useful,
1375fd0b74Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
1475fd0b74Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
1575fd0b74Schristos    GNU General Public License for more details.
1675fd0b74Schristos 
1775fd0b74Schristos    You should have received a copy of the GNU General Public License
1875fd0b74Schristos    along with GAS or GDB; see the file COPYING3.  If not, write to
1975fd0b74Schristos    the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
2075fd0b74Schristos    MA 02110-1301, USA.  */
2175fd0b74Schristos 
2275fd0b74Schristos /* mask  = 00000000000000000000000000000000.  */
2375fd0b74Schristos #ifndef REPLACE_none
2475fd0b74Schristos #define REPLACE_none
2575fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_none(unsigned insn,int value ATTRIBUTE_UNUSED)2675fd0b74Schristos replace_none (unsigned insn, int value ATTRIBUTE_UNUSED)
2775fd0b74Schristos {
2875fd0b74Schristos   insn = insn & ~0x00;
2975fd0b74Schristos 
3075fd0b74Schristos   return insn;
3175fd0b74Schristos }
3275fd0b74Schristos 
3375fd0b74Schristos #endif /* REPLACE_none */
3475fd0b74Schristos 
3575fd0b74Schristos /* mask  = 11111111.  */
3675fd0b74Schristos #ifndef REPLACE_bits8
3775fd0b74Schristos #define REPLACE_bits8
3875fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_bits8(unsigned insn,int value ATTRIBUTE_UNUSED)3975fd0b74Schristos replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED)
4075fd0b74Schristos {
4175fd0b74Schristos   insn = insn & ~0xff;
4275fd0b74Schristos   insn |= ((value >> 0) & 0x00ff) << 0;
4375fd0b74Schristos 
4475fd0b74Schristos   return insn;
4575fd0b74Schristos }
4675fd0b74Schristos 
4775fd0b74Schristos #endif /* REPLACE_bits8 */
4875fd0b74Schristos 
4975fd0b74Schristos /* mask  = 1111111111111111.  */
5075fd0b74Schristos #ifndef REPLACE_bits16
5175fd0b74Schristos #define REPLACE_bits16
5275fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_bits16(unsigned insn,int value ATTRIBUTE_UNUSED)5375fd0b74Schristos replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED)
5475fd0b74Schristos {
5575fd0b74Schristos   insn = insn & ~0xffff;
5675fd0b74Schristos   insn |= ((value >> 0) & 0xffff) << 0;
5775fd0b74Schristos 
5875fd0b74Schristos   return insn;
5975fd0b74Schristos }
6075fd0b74Schristos 
6175fd0b74Schristos #endif /* REPLACE_bits16 */
6275fd0b74Schristos 
6375fd0b74Schristos /* mask  = 111111111111111111111111.  */
6475fd0b74Schristos #ifndef REPLACE_bits24
6575fd0b74Schristos #define REPLACE_bits24
6675fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_bits24(unsigned insn,int value ATTRIBUTE_UNUSED)6775fd0b74Schristos replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED)
6875fd0b74Schristos {
6975fd0b74Schristos   insn = insn & ~0xffffff;
7075fd0b74Schristos   insn |= ((value >> 0) & 0xffffff) << 0;
7175fd0b74Schristos 
7275fd0b74Schristos   return insn;
7375fd0b74Schristos }
7475fd0b74Schristos 
7575fd0b74Schristos #endif /* REPLACE_bits24 */
7675fd0b74Schristos 
7775fd0b74Schristos /* Special 24 bit replace for big endian.  */
7875fd0b74Schristos /* mask  = 111111111111111111111111.  */
7975fd0b74Schristos #ifndef REPLACE_bits24_be
8075fd0b74Schristos #define REPLACE_bits24_be
8175fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_bits24_be(unsigned insn,int value ATTRIBUTE_UNUSED)8275fd0b74Schristos replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED)
8375fd0b74Schristos {
8475fd0b74Schristos   insn = insn & ~0xffffff00;
8575fd0b74Schristos   insn |= ((value >> 0) & 0xffffff) << 8;
8675fd0b74Schristos 
8775fd0b74Schristos   return insn;
8875fd0b74Schristos }
8975fd0b74Schristos 
9075fd0b74Schristos #endif /* REPLACE_bits24_be */
9175fd0b74Schristos 
9275fd0b74Schristos /* mask  = 11111111111111111111111111111111.  */
9375fd0b74Schristos #ifndef REPLACE_word32
9475fd0b74Schristos #define REPLACE_word32
9575fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_word32(unsigned insn,int value ATTRIBUTE_UNUSED)9675fd0b74Schristos replace_word32 (unsigned insn, int value ATTRIBUTE_UNUSED)
9775fd0b74Schristos {
9875fd0b74Schristos   insn = insn & ~0xffffffff;
9975fd0b74Schristos   insn |= ((value >> 0) & 0xffffffff) << 0;
10075fd0b74Schristos 
10175fd0b74Schristos   return insn;
10275fd0b74Schristos }
10375fd0b74Schristos 
10475fd0b74Schristos #endif /* REPLACE_word32 */
10575fd0b74Schristos 
10675fd0b74Schristos /* mask  = 0000000000000000000000000000000011111111111111111111111111111111.  */
10775fd0b74Schristos #ifndef REPLACE_limm
10875fd0b74Schristos #define REPLACE_limm
10975fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_limm(unsigned insn,int value ATTRIBUTE_UNUSED)11075fd0b74Schristos replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED)
11175fd0b74Schristos {
11275fd0b74Schristos   insn = insn & ~0xffffffff;
11375fd0b74Schristos   insn |= ((value >> 0) & 0xffffffff) << 0;
11475fd0b74Schristos 
11575fd0b74Schristos   return insn;
11675fd0b74Schristos }
11775fd0b74Schristos 
11875fd0b74Schristos #endif /* REPLACE_limm */
11975fd0b74Schristos 
12075fd0b74Schristos /* mask  = 000000000000000011111111111111111111111111111111.  */
12175fd0b74Schristos #ifndef REPLACE_limms
12275fd0b74Schristos #define REPLACE_limms
12375fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_limms(unsigned insn,int value ATTRIBUTE_UNUSED)12475fd0b74Schristos replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED)
12575fd0b74Schristos {
12675fd0b74Schristos   insn = insn & ~0xffffffff;
12775fd0b74Schristos   insn |= ((value >> 0) & 0xffffffff) << 0;
12875fd0b74Schristos 
12975fd0b74Schristos   return insn;
13075fd0b74Schristos }
13175fd0b74Schristos 
13275fd0b74Schristos #endif /* REPLACE_limms */
13375fd0b74Schristos 
13475fd0b74Schristos /* mask  = 00000111111111102222222222000000.  */
13575fd0b74Schristos #ifndef REPLACE_disp21h
13675fd0b74Schristos #define REPLACE_disp21h
13775fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp21h(unsigned insn,int value ATTRIBUTE_UNUSED)13875fd0b74Schristos replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED)
13975fd0b74Schristos {
14075fd0b74Schristos   insn = insn & ~0x7feffc0;
14175fd0b74Schristos   insn |= ((value >> 0) & 0x03ff) << 17;
14275fd0b74Schristos   insn |= ((value >> 10) & 0x03ff) << 6;
14375fd0b74Schristos 
14475fd0b74Schristos   return insn;
14575fd0b74Schristos }
14675fd0b74Schristos 
14775fd0b74Schristos #endif /* REPLACE_disp21h */
14875fd0b74Schristos 
14975fd0b74Schristos /* mask  = 00000111111111002222222222000000.  */
15075fd0b74Schristos #ifndef REPLACE_disp21w
15175fd0b74Schristos #define REPLACE_disp21w
15275fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp21w(unsigned insn,int value ATTRIBUTE_UNUSED)15375fd0b74Schristos replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED)
15475fd0b74Schristos {
15575fd0b74Schristos   insn = insn & ~0x7fcffc0;
15675fd0b74Schristos   insn |= ((value >> 0) & 0x01ff) << 18;
15775fd0b74Schristos   insn |= ((value >> 9) & 0x03ff) << 6;
15875fd0b74Schristos 
15975fd0b74Schristos   return insn;
16075fd0b74Schristos }
16175fd0b74Schristos 
16275fd0b74Schristos #endif /* REPLACE_disp21w */
16375fd0b74Schristos 
16475fd0b74Schristos /* mask  = 00000111111111102222222222003333.  */
16575fd0b74Schristos #ifndef REPLACE_disp25h
16675fd0b74Schristos #define REPLACE_disp25h
16775fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp25h(unsigned insn,int value ATTRIBUTE_UNUSED)16875fd0b74Schristos replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED)
16975fd0b74Schristos {
17075fd0b74Schristos   insn = insn & ~0x7feffcf;
17175fd0b74Schristos   insn |= ((value >> 0) & 0x03ff) << 17;
17275fd0b74Schristos   insn |= ((value >> 10) & 0x03ff) << 6;
17375fd0b74Schristos   insn |= ((value >> 20) & 0x000f) << 0;
17475fd0b74Schristos 
17575fd0b74Schristos   return insn;
17675fd0b74Schristos }
17775fd0b74Schristos 
17875fd0b74Schristos #endif /* REPLACE_disp25h */
17975fd0b74Schristos 
18075fd0b74Schristos /* mask  = 00000111111111002222222222003333.  */
18175fd0b74Schristos #ifndef REPLACE_disp25w
18275fd0b74Schristos #define REPLACE_disp25w
18375fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp25w(unsigned insn,int value ATTRIBUTE_UNUSED)18475fd0b74Schristos replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED)
18575fd0b74Schristos {
18675fd0b74Schristos   insn = insn & ~0x7fcffcf;
18775fd0b74Schristos   insn |= ((value >> 0) & 0x01ff) << 18;
18875fd0b74Schristos   insn |= ((value >> 9) & 0x03ff) << 6;
18975fd0b74Schristos   insn |= ((value >> 19) & 0x000f) << 0;
19075fd0b74Schristos 
19175fd0b74Schristos   return insn;
19275fd0b74Schristos }
19375fd0b74Schristos 
19475fd0b74Schristos #endif /* REPLACE_disp25w */
19575fd0b74Schristos 
19675fd0b74Schristos /* mask  = 00000000000000000000000111111111.  */
19775fd0b74Schristos #ifndef REPLACE_disp9
19875fd0b74Schristos #define REPLACE_disp9
19975fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp9(unsigned insn,int value ATTRIBUTE_UNUSED)20075fd0b74Schristos replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED)
20175fd0b74Schristos {
20275fd0b74Schristos   insn = insn & ~0x1ff;
20375fd0b74Schristos   insn |= ((value >> 0) & 0x01ff) << 0;
20475fd0b74Schristos 
20575fd0b74Schristos   return insn;
20675fd0b74Schristos }
20775fd0b74Schristos 
20875fd0b74Schristos #endif /* REPLACE_disp9 */
20975fd0b74Schristos 
21075fd0b74Schristos /* mask  = 00000000111111112000000000000000.  */
21175fd0b74Schristos #ifndef REPLACE_disp9ls
21275fd0b74Schristos #define REPLACE_disp9ls
21375fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp9ls(unsigned insn,int value ATTRIBUTE_UNUSED)21475fd0b74Schristos replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED)
21575fd0b74Schristos {
21675fd0b74Schristos   insn = insn & ~0xff8000;
21775fd0b74Schristos   insn |= ((value >> 0) & 0x00ff) << 16;
21875fd0b74Schristos   insn |= ((value >> 8) & 0x0001) << 15;
21975fd0b74Schristos 
22075fd0b74Schristos   return insn;
22175fd0b74Schristos }
22275fd0b74Schristos 
22375fd0b74Schristos #endif /* REPLACE_disp9ls */
22475fd0b74Schristos 
22575fd0b74Schristos /* mask  = 0000000111111111.  */
22675fd0b74Schristos #ifndef REPLACE_disp9s
22775fd0b74Schristos #define REPLACE_disp9s
22875fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp9s(unsigned insn,int value ATTRIBUTE_UNUSED)22975fd0b74Schristos replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED)
23075fd0b74Schristos {
23175fd0b74Schristos   insn = insn & ~0x1ff;
23275fd0b74Schristos   insn |= ((value >> 0) & 0x01ff) << 0;
23375fd0b74Schristos 
23475fd0b74Schristos   return insn;
23575fd0b74Schristos }
23675fd0b74Schristos 
23775fd0b74Schristos #endif /* REPLACE_disp9s */
23875fd0b74Schristos 
23975fd0b74Schristos /* mask  = 0000011111111111.  */
24075fd0b74Schristos #ifndef REPLACE_disp13s
24175fd0b74Schristos #define REPLACE_disp13s
24275fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp13s(unsigned insn,int value ATTRIBUTE_UNUSED)24375fd0b74Schristos replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED)
24475fd0b74Schristos {
24575fd0b74Schristos   insn = insn & ~0x7ff;
24675fd0b74Schristos   insn |= ((value >> 0) & 0x07ff) << 0;
24775fd0b74Schristos 
24875fd0b74Schristos   return insn;
24975fd0b74Schristos }
25075fd0b74Schristos 
25175fd0b74Schristos #endif /* REPLACE_disp13s */
25275fd0b74Schristos 
25375fd0b74Schristos /* mask  = 0000022222200111.  */
25475fd0b74Schristos #ifndef REPLACE_disp9s1
25575fd0b74Schristos #define REPLACE_disp9s1
25675fd0b74Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp9s1(unsigned insn,int value ATTRIBUTE_UNUSED)25775fd0b74Schristos replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED)
25875fd0b74Schristos {
25975fd0b74Schristos   insn = insn & ~0x7e7;
26075fd0b74Schristos   insn |= ((value >> 0) & 0x0007) << 0;
26175fd0b74Schristos   insn |= ((value >> 3) & 0x003f) << 5;
26275fd0b74Schristos 
26375fd0b74Schristos   return insn;
26475fd0b74Schristos }
26575fd0b74Schristos 
26675fd0b74Schristos #endif /* REPLACE_disp9s1 */
267ede78133Schristos 
268ede78133Schristos /* mask  = 00000000000000000000111111222222.  */
269ede78133Schristos #ifndef REPLACE_disp12s
270ede78133Schristos #define REPLACE_disp12s
271ede78133Schristos ATTRIBUTE_UNUSED static unsigned
replace_disp12s(unsigned insn,int value ATTRIBUTE_UNUSED)272ede78133Schristos replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED)
273ede78133Schristos {
274ede78133Schristos   insn = insn & ~0xfff;
275ede78133Schristos   insn |= ((value >> 0) & 0x003f) << 6;
276ede78133Schristos   insn |= ((value >> 6) & 0x003f) << 0;
277ede78133Schristos   return insn;
278ede78133Schristos }
279ede78133Schristos 
280ede78133Schristos #endif /* REPLACE_disp12s */
281ede78133Schristos 
282ede78133Schristos /* mask  = 0000001111111111.  */
283ede78133Schristos #ifndef REPLACE_jli
284ede78133Schristos #define REPLACE_jli
285ede78133Schristos ATTRIBUTE_UNUSED static unsigned
replace_jli(unsigned insn,int value)286ede78133Schristos replace_jli (unsigned insn, int value)
287ede78133Schristos {
288ede78133Schristos   insn = insn & ~0x3ff;
289ede78133Schristos   insn |= ((value >> 0) & 0x03ff) << 0;
290ede78133Schristos 
291ede78133Schristos   return insn;
292ede78133Schristos }
293ede78133Schristos 
294ede78133Schristos #endif /* REPLACE_jli */
295