1 /* Replace functions for the ARC relocs. 2 Copyright 2015 3 Free Software Foundation, Inc. 4 5 This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and 6 the GNU Binutils. 7 8 GAS/GDB is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3, or (at your option) 11 any later version. 12 13 GAS/GDB is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GAS or GDB; see the file COPYING3. If not, write to 20 the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, 21 MA 02110-1301, USA. */ 22 23 /* mask = 00000000000000000000000000000000. */ 24 #ifndef REPLACE_none 25 #define REPLACE_none 26 ATTRIBUTE_UNUSED static unsigned 27 replace_none (unsigned insn, int value ATTRIBUTE_UNUSED) 28 { 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 |= ((value >> 0) & 0x00ff) << 0; 42 43 return insn; 44 } 45 46 #endif /* REPLACE_bits8 */ 47 48 /* mask = 1111111111111111. */ 49 #ifndef REPLACE_bits16 50 #define REPLACE_bits16 51 ATTRIBUTE_UNUSED static unsigned 52 replace_bits16 (unsigned insn, int value ATTRIBUTE_UNUSED) 53 { 54 insn |= ((value >> 0) & 0xffff) << 0; 55 56 return insn; 57 } 58 59 #endif /* REPLACE_bits16 */ 60 61 /* mask = 111111111111111111111111. */ 62 #ifndef REPLACE_bits24 63 #define REPLACE_bits24 64 ATTRIBUTE_UNUSED static unsigned 65 replace_bits24 (unsigned insn, int value ATTRIBUTE_UNUSED) 66 { 67 insn |= ((value >> 0) & 0xffffff) << 0; 68 69 return insn; 70 } 71 72 #endif /* REPLACE_bits24 */ 73 74 /* mask = 11111111111111111111111111111111. */ 75 #ifndef REPLACE_word32 76 #define REPLACE_word32 77 ATTRIBUTE_UNUSED static unsigned 78 replace_word32 (unsigned insn, int value ATTRIBUTE_UNUSED) 79 { 80 insn |= ((value >> 0) & 0xffffffff) << 0; 81 82 return insn; 83 } 84 85 #endif /* REPLACE_word32 */ 86 87 /* mask = 0000000000000000000000000000000011111111111111111111111111111111. */ 88 #ifndef REPLACE_limm 89 #define REPLACE_limm 90 ATTRIBUTE_UNUSED static unsigned 91 replace_limm (unsigned insn, int value ATTRIBUTE_UNUSED) 92 { 93 insn |= ((value >> 0) & 0xffffffff) << 0; 94 95 return insn; 96 } 97 98 #endif /* REPLACE_limm */ 99 100 /* mask = 000000000000000011111111111111111111111111111111. */ 101 #ifndef REPLACE_limms 102 #define REPLACE_limms 103 ATTRIBUTE_UNUSED static unsigned 104 replace_limms (unsigned insn, int value ATTRIBUTE_UNUSED) 105 { 106 insn |= ((value >> 0) & 0xffffffff) << 0; 107 108 return insn; 109 } 110 111 #endif /* REPLACE_limms */ 112 113 /* mask = 00000111111111102222222222000000. */ 114 #ifndef REPLACE_disp21h 115 #define REPLACE_disp21h 116 ATTRIBUTE_UNUSED static unsigned 117 replace_disp21h (unsigned insn, int value ATTRIBUTE_UNUSED) 118 { 119 insn |= ((value >> 0) & 0x03ff) << 17; 120 insn |= ((value >> 10) & 0x03ff) << 6; 121 122 return insn; 123 } 124 125 #endif /* REPLACE_disp21h */ 126 127 /* mask = 00000111111111002222222222000000. */ 128 #ifndef REPLACE_disp21w 129 #define REPLACE_disp21w 130 ATTRIBUTE_UNUSED static unsigned 131 replace_disp21w (unsigned insn, int value ATTRIBUTE_UNUSED) 132 { 133 insn |= ((value >> 0) & 0x01ff) << 18; 134 insn |= ((value >> 9) & 0x03ff) << 6; 135 136 return insn; 137 } 138 139 #endif /* REPLACE_disp21w */ 140 141 /* mask = 00000111111111102222222222003333. */ 142 #ifndef REPLACE_disp25h 143 #define REPLACE_disp25h 144 ATTRIBUTE_UNUSED static unsigned 145 replace_disp25h (unsigned insn, int value ATTRIBUTE_UNUSED) 146 { 147 insn |= ((value >> 0) & 0x03ff) << 17; 148 insn |= ((value >> 10) & 0x03ff) << 6; 149 insn |= ((value >> 20) & 0x000f) << 0; 150 151 return insn; 152 } 153 154 #endif /* REPLACE_disp25h */ 155 156 /* mask = 00000111111111002222222222003333. */ 157 #ifndef REPLACE_disp25w 158 #define REPLACE_disp25w 159 ATTRIBUTE_UNUSED static unsigned 160 replace_disp25w (unsigned insn, int value ATTRIBUTE_UNUSED) 161 { 162 insn |= ((value >> 0) & 0x01ff) << 18; 163 insn |= ((value >> 9) & 0x03ff) << 6; 164 insn |= ((value >> 19) & 0x000f) << 0; 165 166 return insn; 167 } 168 169 #endif /* REPLACE_disp25w */ 170 171 /* mask = 00000000000000000000000111111111. */ 172 #ifndef REPLACE_disp9 173 #define REPLACE_disp9 174 ATTRIBUTE_UNUSED static unsigned 175 replace_disp9 (unsigned insn, int value ATTRIBUTE_UNUSED) 176 { 177 insn |= ((value >> 0) & 0x01ff) << 0; 178 179 return insn; 180 } 181 182 #endif /* REPLACE_disp9 */ 183 184 /* mask = 00000000111111112000000000000000. */ 185 #ifndef REPLACE_disp9ls 186 #define REPLACE_disp9ls 187 ATTRIBUTE_UNUSED static unsigned 188 replace_disp9ls (unsigned insn, int value ATTRIBUTE_UNUSED) 189 { 190 insn |= ((value >> 0) & 0x00ff) << 16; 191 insn |= ((value >> 8) & 0x0001) << 15; 192 193 return insn; 194 } 195 196 #endif /* REPLACE_disp9ls */ 197 198 /* mask = 0000000111111111. */ 199 #ifndef REPLACE_disp9s 200 #define REPLACE_disp9s 201 ATTRIBUTE_UNUSED static unsigned 202 replace_disp9s (unsigned insn, int value ATTRIBUTE_UNUSED) 203 { 204 insn |= ((value >> 0) & 0x01ff) << 0; 205 206 return insn; 207 } 208 209 #endif /* REPLACE_disp9s */ 210 211 /* mask = 0000011111111111. */ 212 #ifndef REPLACE_disp13s 213 #define REPLACE_disp13s 214 ATTRIBUTE_UNUSED static unsigned 215 replace_disp13s (unsigned insn, int value ATTRIBUTE_UNUSED) 216 { 217 insn |= ((value >> 0) & 0x07ff) << 0; 218 219 return insn; 220 } 221 222 #endif /* REPLACE_disp13s */ 223 224 /* mask = 0000022222200111. */ 225 #ifndef REPLACE_disp9s1 226 #define REPLACE_disp9s1 227 ATTRIBUTE_UNUSED static unsigned 228 replace_disp9s1 (unsigned insn, int value ATTRIBUTE_UNUSED) 229 { 230 insn |= ((value >> 0) & 0x0007) << 0; 231 insn |= ((value >> 3) & 0x003f) << 5; 232 233 return insn; 234 } 235 236 #endif /* REPLACE_disp9s1 */ 237