/* Replace functions for the ARC relocs.
   Copyright (C) 2015-2021 Free Software Foundation, Inc.

   This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
   the GNU Binutils.

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

   GAS/GDB 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 General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with GAS or GDB; see the file COPYING3.  If not, write to
   the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

/* mask  = 00000000000000000000000000000000.  */
#ifndef REPLACE_none
#define REPLACE_none
ATTRIBUTE_UNUSED static unsigned
replace_none (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x00;

  return insn;
}

#endif /* REPLACE_none */

/* mask  = 11111111.  */
#ifndef REPLACE_bits8
#define REPLACE_bits8
ATTRIBUTE_UNUSED static unsigned
replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xff;
  insn |= ((value >> 0) & 0x00ff) << 0;

  return insn;
}

#endif /* REPLACE_bits8 */

/* mask  = 1111111111111111.  */
#ifndef REPLACE_bits16
#define REPLACE_bits16
ATTRIBUTE_UNUSED static unsigned
replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xffff;
  insn |= ((value >> 0) & 0xffff) << 0;

  return insn;
}

#endif /* REPLACE_bits16 */

/* mask  = 111111111111111111111111.  */
#ifndef REPLACE_bits24
#define REPLACE_bits24
ATTRIBUTE_UNUSED static unsigned
replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xffffff;
  insn |= ((value >> 0) & 0xffffff) << 0;

  return insn;
}

#endif /* REPLACE_bits24 */

/* Special 24 bit replace for big endian.  */
/* mask  = 111111111111111111111111.  */
#ifndef REPLACE_bits24_be
#define REPLACE_bits24_be
ATTRIBUTE_UNUSED static unsigned
replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xffffff00;
  insn |= ((value >> 0) & 0xffffff) << 8;

  return insn;
}

#endif /* REPLACE_bits24_be */

/* mask  = 11111111111111111111111111111111.  */
#ifndef REPLACE_word32
#define REPLACE_word32
ATTRIBUTE_UNUSED static unsigned
replace_word32 (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xffffffff;
  insn |= ((value >> 0) & 0xffffffff) << 0;

  return insn;
}

#endif /* REPLACE_word32 */

/* mask  = 0000000000000000000000000000000011111111111111111111111111111111.  */
#ifndef REPLACE_limm
#define REPLACE_limm
ATTRIBUTE_UNUSED static unsigned
replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xffffffff;
  insn |= ((value >> 0) & 0xffffffff) << 0;

  return insn;
}

#endif /* REPLACE_limm */

/* mask  = 000000000000000011111111111111111111111111111111.  */
#ifndef REPLACE_limms
#define REPLACE_limms
ATTRIBUTE_UNUSED static unsigned
replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xffffffff;
  insn |= ((value >> 0) & 0xffffffff) << 0;

  return insn;
}

#endif /* REPLACE_limms */

/* mask  = 00000111111111102222222222000000.  */
#ifndef REPLACE_disp21h
#define REPLACE_disp21h
ATTRIBUTE_UNUSED static unsigned
replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x7feffc0;
  insn |= ((value >> 0) & 0x03ff) << 17;
  insn |= ((value >> 10) & 0x03ff) << 6;

  return insn;
}

#endif /* REPLACE_disp21h */

/* mask  = 00000111111111002222222222000000.  */
#ifndef REPLACE_disp21w
#define REPLACE_disp21w
ATTRIBUTE_UNUSED static unsigned
replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x7fcffc0;
  insn |= ((value >> 0) & 0x01ff) << 18;
  insn |= ((value >> 9) & 0x03ff) << 6;

  return insn;
}

#endif /* REPLACE_disp21w */

/* mask  = 00000111111111102222222222003333.  */
#ifndef REPLACE_disp25h
#define REPLACE_disp25h
ATTRIBUTE_UNUSED static unsigned
replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x7feffcf;
  insn |= ((value >> 0) & 0x03ff) << 17;
  insn |= ((value >> 10) & 0x03ff) << 6;
  insn |= ((value >> 20) & 0x000f) << 0;

  return insn;
}

#endif /* REPLACE_disp25h */

/* mask  = 00000111111111002222222222003333.  */
#ifndef REPLACE_disp25w
#define REPLACE_disp25w
ATTRIBUTE_UNUSED static unsigned
replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x7fcffcf;
  insn |= ((value >> 0) & 0x01ff) << 18;
  insn |= ((value >> 9) & 0x03ff) << 6;
  insn |= ((value >> 19) & 0x000f) << 0;

  return insn;
}

#endif /* REPLACE_disp25w */

/* mask  = 00000000000000000000000111111111.  */
#ifndef REPLACE_disp9
#define REPLACE_disp9
ATTRIBUTE_UNUSED static unsigned
replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x1ff;
  insn |= ((value >> 0) & 0x01ff) << 0;

  return insn;
}

#endif /* REPLACE_disp9 */

/* mask  = 00000000111111112000000000000000.  */
#ifndef REPLACE_disp9ls
#define REPLACE_disp9ls
ATTRIBUTE_UNUSED static unsigned
replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xff8000;
  insn |= ((value >> 0) & 0x00ff) << 16;
  insn |= ((value >> 8) & 0x0001) << 15;

  return insn;
}

#endif /* REPLACE_disp9ls */

/* mask  = 0000000111111111.  */
#ifndef REPLACE_disp9s
#define REPLACE_disp9s
ATTRIBUTE_UNUSED static unsigned
replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x1ff;
  insn |= ((value >> 0) & 0x01ff) << 0;

  return insn;
}

#endif /* REPLACE_disp9s */

/* mask  = 0000011111111111.  */
#ifndef REPLACE_disp13s
#define REPLACE_disp13s
ATTRIBUTE_UNUSED static unsigned
replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x7ff;
  insn |= ((value >> 0) & 0x07ff) << 0;

  return insn;
}

#endif /* REPLACE_disp13s */

/* mask  = 0000022222200111.  */
#ifndef REPLACE_disp9s1
#define REPLACE_disp9s1
ATTRIBUTE_UNUSED static unsigned
replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0x7e7;
  insn |= ((value >> 0) & 0x0007) << 0;
  insn |= ((value >> 3) & 0x003f) << 5;

  return insn;
}

#endif /* REPLACE_disp9s1 */

/* mask  = 00000000000000000000111111222222.  */
#ifndef REPLACE_disp12s
#define REPLACE_disp12s
ATTRIBUTE_UNUSED static unsigned
replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED)
{
  insn = insn & ~0xfff;
  insn |= ((value >> 0) & 0x003f) << 6;
  insn |= ((value >> 6) & 0x003f) << 0;
  return insn;
}

#endif /* REPLACE_disp12s */

/* mask  = 0000001111111111.  */
#ifndef REPLACE_jli
#define REPLACE_jli
ATTRIBUTE_UNUSED static unsigned
replace_jli (unsigned insn, int value)
{
  insn = insn & ~0x3ff;
  insn |= ((value >> 0) & 0x03ff) << 0;

  return insn;
}

#endif /* REPLACE_jli */
