Home | History | Annotate | Line # | Download | only in opcode
arc-func.h revision 1.1.1.4
      1 /* Replace functions for the ARC relocs.
      2    Copyright (C) 2015-2020 Free Software Foundation, Inc.
      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
     25 ATTRIBUTE_UNUSED static unsigned
     26 replace_none (unsigned insn, int value ATTRIBUTE_UNUSED)
     27 {
     28   insn = insn & ~0x00;
     29 
     30   return insn;
     31 }
     32 
     33 #endif /* REPLACE_none */
     34 
     35 /* mask  = 11111111.  */
     36 #ifndef REPLACE_bits8
     37 #define REPLACE_bits8
     38 ATTRIBUTE_UNUSED static unsigned
     39 replace_bits8 (unsigned insn, int value ATTRIBUTE_UNUSED)
     40 {
     41   insn = insn & ~0xff;
     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
     52 ATTRIBUTE_UNUSED static unsigned
     53 replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED)
     54 {
     55   insn = insn & ~0xffff;
     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
     66 ATTRIBUTE_UNUSED static unsigned
     67 replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED)
     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
     81 ATTRIBUTE_UNUSED static unsigned
     82 replace_bits24_be (unsigned insn, int value ATTRIBUTE_UNUSED)
     83 {
     84   insn = insn & ~0xffffff00;
     85   insn |= ((value >> 0) & 0xffffff) << 8;
     86 
     87   return insn;
     88 }
     89 
     90 #endif /* REPLACE_bits24_be */
     91 
     92 /* mask  = 11111111111111111111111111111111.  */
     93 #ifndef REPLACE_word32
     94 #define REPLACE_word32
     95 ATTRIBUTE_UNUSED static unsigned
     96 replace_word32 (unsigned insn, int value ATTRIBUTE_UNUSED)
     97 {
     98   insn = insn & ~0xffffffff;
     99   insn |= ((value >> 0) & 0xffffffff) << 0;
    100 
    101   return insn;
    102 }
    103 
    104 #endif /* REPLACE_word32 */
    105 
    106 /* mask  = 0000000000000000000000000000000011111111111111111111111111111111.  */
    107 #ifndef REPLACE_limm
    108 #define REPLACE_limm
    109 ATTRIBUTE_UNUSED static unsigned
    110 replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED)
    111 {
    112   insn = insn & ~0xffffffff;
    113   insn |= ((value >> 0) & 0xffffffff) << 0;
    114 
    115   return insn;
    116 }
    117 
    118 #endif /* REPLACE_limm */
    119 
    120 /* mask  = 000000000000000011111111111111111111111111111111.  */
    121 #ifndef REPLACE_limms
    122 #define REPLACE_limms
    123 ATTRIBUTE_UNUSED static unsigned
    124 replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED)
    125 {
    126   insn = insn & ~0xffffffff;
    127   insn |= ((value >> 0) & 0xffffffff) << 0;
    128 
    129   return insn;
    130 }
    131 
    132 #endif /* REPLACE_limms */
    133 
    134 /* mask  = 00000111111111102222222222000000.  */
    135 #ifndef REPLACE_disp21h
    136 #define REPLACE_disp21h
    137 ATTRIBUTE_UNUSED static unsigned
    138 replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED)
    139 {
    140   insn = insn & ~0x7feffc0;
    141   insn |= ((value >> 0) & 0x03ff) << 17;
    142   insn |= ((value >> 10) & 0x03ff) << 6;
    143 
    144   return insn;
    145 }
    146 
    147 #endif /* REPLACE_disp21h */
    148 
    149 /* mask  = 00000111111111002222222222000000.  */
    150 #ifndef REPLACE_disp21w
    151 #define REPLACE_disp21w
    152 ATTRIBUTE_UNUSED static unsigned
    153 replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED)
    154 {
    155   insn = insn & ~0x7fcffc0;
    156   insn |= ((value >> 0) & 0x01ff) << 18;
    157   insn |= ((value >> 9) & 0x03ff) << 6;
    158 
    159   return insn;
    160 }
    161 
    162 #endif /* REPLACE_disp21w */
    163 
    164 /* mask  = 00000111111111102222222222003333.  */
    165 #ifndef REPLACE_disp25h
    166 #define REPLACE_disp25h
    167 ATTRIBUTE_UNUSED static unsigned
    168 replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED)
    169 {
    170   insn = insn & ~0x7feffcf;
    171   insn |= ((value >> 0) & 0x03ff) << 17;
    172   insn |= ((value >> 10) & 0x03ff) << 6;
    173   insn |= ((value >> 20) & 0x000f) << 0;
    174 
    175   return insn;
    176 }
    177 
    178 #endif /* REPLACE_disp25h */
    179 
    180 /* mask  = 00000111111111002222222222003333.  */
    181 #ifndef REPLACE_disp25w
    182 #define REPLACE_disp25w
    183 ATTRIBUTE_UNUSED static unsigned
    184 replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED)
    185 {
    186   insn = insn & ~0x7fcffcf;
    187   insn |= ((value >> 0) & 0x01ff) << 18;
    188   insn |= ((value >> 9) & 0x03ff) << 6;
    189   insn |= ((value >> 19) & 0x000f) << 0;
    190 
    191   return insn;
    192 }
    193 
    194 #endif /* REPLACE_disp25w */
    195 
    196 /* mask  = 00000000000000000000000111111111.  */
    197 #ifndef REPLACE_disp9
    198 #define REPLACE_disp9
    199 ATTRIBUTE_UNUSED static unsigned
    200 replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED)
    201 {
    202   insn = insn & ~0x1ff;
    203   insn |= ((value >> 0) & 0x01ff) << 0;
    204 
    205   return insn;
    206 }
    207 
    208 #endif /* REPLACE_disp9 */
    209 
    210 /* mask  = 00000000111111112000000000000000.  */
    211 #ifndef REPLACE_disp9ls
    212 #define REPLACE_disp9ls
    213 ATTRIBUTE_UNUSED static unsigned
    214 replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED)
    215 {
    216   insn = insn & ~0xff8000;
    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
    228 ATTRIBUTE_UNUSED static unsigned
    229 replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED)
    230 {
    231   insn = insn & ~0x1ff;
    232   insn |= ((value >> 0) & 0x01ff) << 0;
    233 
    234   return insn;
    235 }
    236 
    237 #endif /* REPLACE_disp9s */
    238 
    239 /* mask  = 0000011111111111.  */
    240 #ifndef REPLACE_disp13s
    241 #define REPLACE_disp13s
    242 ATTRIBUTE_UNUSED static unsigned
    243 replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED)
    244 {
    245   insn = insn & ~0x7ff;
    246   insn |= ((value >> 0) & 0x07ff) << 0;
    247 
    248   return insn;
    249 }
    250 
    251 #endif /* REPLACE_disp13s */
    252 
    253 /* mask  = 0000022222200111.  */
    254 #ifndef REPLACE_disp9s1
    255 #define REPLACE_disp9s1
    256 ATTRIBUTE_UNUSED static unsigned
    257 replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED)
    258 {
    259   insn = insn & ~0x7e7;
    260   insn |= ((value >> 0) & 0x0007) << 0;
    261   insn |= ((value >> 3) & 0x003f) << 5;
    262 
    263   return insn;
    264 }
    265 
    266 #endif /* REPLACE_disp9s1 */
    267 
    268 /* mask  = 00000000000000000000111111222222.  */
    269 #ifndef REPLACE_disp12s
    270 #define REPLACE_disp12s
    271 ATTRIBUTE_UNUSED static unsigned
    272 replace_disp12s (unsigned insn, int value ATTRIBUTE_UNUSED)
    273 {
    274   insn = insn & ~0xfff;
    275   insn |= ((value >> 0) & 0x003f) << 6;
    276   insn |= ((value >> 6) & 0x003f) << 0;
    277   return insn;
    278 }
    279 
    280 #endif /* REPLACE_disp12s */
    281 
    282 /* mask  = 0000001111111111.  */
    283 #ifndef REPLACE_jli
    284 #define REPLACE_jli
    285 ATTRIBUTE_UNUSED static unsigned
    286 replace_jli (unsigned insn, int value)
    287 {
    288   insn = insn & ~0x3ff;
    289   insn |= ((value >> 0) & 0x03ff) << 0;
    290 
    291   return insn;
    292 }
    293 
    294 #endif /* REPLACE_jli */
    295