1 1.1 christos /* TILEPro opcode information. 2 1.1 christos * 3 1.1.1.9 christos * Copyright (C) 2011-2026 Free Software Foundation, Inc. 4 1.1 christos * 5 1.1 christos * This program is free software; you can redistribute it and/or modify 6 1.1 christos * it under the terms of the GNU General Public License as published by 7 1.1 christos * the Free Software Foundation; either version 3 of the License, or 8 1.1 christos * (at your option) any later version. 9 1.1 christos * 10 1.1 christos * This program is distributed in the hope that it will be useful, 11 1.1 christos * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 1.1 christos * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 1.1 christos * GNU General Public License for more details. 14 1.1 christos * 15 1.1 christos * You should have received a copy of the GNU General Public License 16 1.1 christos * along with this program; if not, write to the Free Software 17 1.1 christos * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 18 1.1 christos * MA 02110-1301, USA. 19 1.1 christos */ 20 1.1 christos 21 1.1 christos #ifndef opcode_tilepro_h 22 1.1 christos #define opcode_tilepro_h 23 1.1 christos 24 1.1 christos typedef unsigned long long tilepro_bundle_bits; 25 1.1 christos 26 1.1 christos 27 1.1 christos enum 28 1.1 christos { 29 1.1 christos TILEPRO_MAX_OPERANDS = 5 /* mm */ 30 1.1 christos }; 31 1.1 christos 32 1.1 christos typedef enum 33 1.1 christos { 34 1.1 christos TILEPRO_OPC_BPT, 35 1.1 christos TILEPRO_OPC_INFO, 36 1.1 christos TILEPRO_OPC_INFOL, 37 1.1 christos TILEPRO_OPC_J, 38 1.1 christos TILEPRO_OPC_JAL, 39 1.1 christos TILEPRO_OPC_LW_TLS, 40 1.1 christos TILEPRO_OPC_LW_TLS_SN, 41 1.1 christos TILEPRO_OPC_MOVE, 42 1.1 christos TILEPRO_OPC_MOVE_SN, 43 1.1 christos TILEPRO_OPC_MOVEI, 44 1.1 christos TILEPRO_OPC_MOVEI_SN, 45 1.1 christos TILEPRO_OPC_MOVELI, 46 1.1 christos TILEPRO_OPC_MOVELI_SN, 47 1.1 christos TILEPRO_OPC_MOVELIS, 48 1.1 christos TILEPRO_OPC_PREFETCH, 49 1.1 christos TILEPRO_OPC_RAISE, 50 1.1 christos TILEPRO_OPC_ADD, 51 1.1 christos TILEPRO_OPC_ADD_SN, 52 1.1 christos TILEPRO_OPC_ADDB, 53 1.1 christos TILEPRO_OPC_ADDB_SN, 54 1.1 christos TILEPRO_OPC_ADDBS_U, 55 1.1 christos TILEPRO_OPC_ADDBS_U_SN, 56 1.1 christos TILEPRO_OPC_ADDH, 57 1.1 christos TILEPRO_OPC_ADDH_SN, 58 1.1 christos TILEPRO_OPC_ADDHS, 59 1.1 christos TILEPRO_OPC_ADDHS_SN, 60 1.1 christos TILEPRO_OPC_ADDI, 61 1.1 christos TILEPRO_OPC_ADDI_SN, 62 1.1 christos TILEPRO_OPC_ADDIB, 63 1.1 christos TILEPRO_OPC_ADDIB_SN, 64 1.1 christos TILEPRO_OPC_ADDIH, 65 1.1 christos TILEPRO_OPC_ADDIH_SN, 66 1.1 christos TILEPRO_OPC_ADDLI, 67 1.1 christos TILEPRO_OPC_ADDLI_SN, 68 1.1 christos TILEPRO_OPC_ADDLIS, 69 1.1 christos TILEPRO_OPC_ADDS, 70 1.1 christos TILEPRO_OPC_ADDS_SN, 71 1.1 christos TILEPRO_OPC_ADIFFB_U, 72 1.1 christos TILEPRO_OPC_ADIFFB_U_SN, 73 1.1 christos TILEPRO_OPC_ADIFFH, 74 1.1 christos TILEPRO_OPC_ADIFFH_SN, 75 1.1 christos TILEPRO_OPC_AND, 76 1.1 christos TILEPRO_OPC_AND_SN, 77 1.1 christos TILEPRO_OPC_ANDI, 78 1.1 christos TILEPRO_OPC_ANDI_SN, 79 1.1 christos TILEPRO_OPC_AULI, 80 1.1 christos TILEPRO_OPC_AVGB_U, 81 1.1 christos TILEPRO_OPC_AVGB_U_SN, 82 1.1 christos TILEPRO_OPC_AVGH, 83 1.1 christos TILEPRO_OPC_AVGH_SN, 84 1.1 christos TILEPRO_OPC_BBNS, 85 1.1 christos TILEPRO_OPC_BBNS_SN, 86 1.1 christos TILEPRO_OPC_BBNST, 87 1.1 christos TILEPRO_OPC_BBNST_SN, 88 1.1 christos TILEPRO_OPC_BBS, 89 1.1 christos TILEPRO_OPC_BBS_SN, 90 1.1 christos TILEPRO_OPC_BBST, 91 1.1 christos TILEPRO_OPC_BBST_SN, 92 1.1 christos TILEPRO_OPC_BGEZ, 93 1.1 christos TILEPRO_OPC_BGEZ_SN, 94 1.1 christos TILEPRO_OPC_BGEZT, 95 1.1 christos TILEPRO_OPC_BGEZT_SN, 96 1.1 christos TILEPRO_OPC_BGZ, 97 1.1 christos TILEPRO_OPC_BGZ_SN, 98 1.1 christos TILEPRO_OPC_BGZT, 99 1.1 christos TILEPRO_OPC_BGZT_SN, 100 1.1 christos TILEPRO_OPC_BITX, 101 1.1 christos TILEPRO_OPC_BITX_SN, 102 1.1 christos TILEPRO_OPC_BLEZ, 103 1.1 christos TILEPRO_OPC_BLEZ_SN, 104 1.1 christos TILEPRO_OPC_BLEZT, 105 1.1 christos TILEPRO_OPC_BLEZT_SN, 106 1.1 christos TILEPRO_OPC_BLZ, 107 1.1 christos TILEPRO_OPC_BLZ_SN, 108 1.1 christos TILEPRO_OPC_BLZT, 109 1.1 christos TILEPRO_OPC_BLZT_SN, 110 1.1 christos TILEPRO_OPC_BNZ, 111 1.1 christos TILEPRO_OPC_BNZ_SN, 112 1.1 christos TILEPRO_OPC_BNZT, 113 1.1 christos TILEPRO_OPC_BNZT_SN, 114 1.1 christos TILEPRO_OPC_BYTEX, 115 1.1 christos TILEPRO_OPC_BYTEX_SN, 116 1.1 christos TILEPRO_OPC_BZ, 117 1.1 christos TILEPRO_OPC_BZ_SN, 118 1.1 christos TILEPRO_OPC_BZT, 119 1.1 christos TILEPRO_OPC_BZT_SN, 120 1.1 christos TILEPRO_OPC_CLZ, 121 1.1 christos TILEPRO_OPC_CLZ_SN, 122 1.1 christos TILEPRO_OPC_CRC32_32, 123 1.1 christos TILEPRO_OPC_CRC32_32_SN, 124 1.1 christos TILEPRO_OPC_CRC32_8, 125 1.1 christos TILEPRO_OPC_CRC32_8_SN, 126 1.1 christos TILEPRO_OPC_CTZ, 127 1.1 christos TILEPRO_OPC_CTZ_SN, 128 1.1 christos TILEPRO_OPC_DRAIN, 129 1.1 christos TILEPRO_OPC_DTLBPR, 130 1.1 christos TILEPRO_OPC_DWORD_ALIGN, 131 1.1 christos TILEPRO_OPC_DWORD_ALIGN_SN, 132 1.1 christos TILEPRO_OPC_FINV, 133 1.1 christos TILEPRO_OPC_FLUSH, 134 1.1 christos TILEPRO_OPC_FNOP, 135 1.1 christos TILEPRO_OPC_ICOH, 136 1.1 christos TILEPRO_OPC_ILL, 137 1.1 christos TILEPRO_OPC_INTHB, 138 1.1 christos TILEPRO_OPC_INTHB_SN, 139 1.1 christos TILEPRO_OPC_INTHH, 140 1.1 christos TILEPRO_OPC_INTHH_SN, 141 1.1 christos TILEPRO_OPC_INTLB, 142 1.1 christos TILEPRO_OPC_INTLB_SN, 143 1.1 christos TILEPRO_OPC_INTLH, 144 1.1 christos TILEPRO_OPC_INTLH_SN, 145 1.1 christos TILEPRO_OPC_INV, 146 1.1 christos TILEPRO_OPC_IRET, 147 1.1 christos TILEPRO_OPC_JALB, 148 1.1 christos TILEPRO_OPC_JALF, 149 1.1 christos TILEPRO_OPC_JALR, 150 1.1 christos TILEPRO_OPC_JALRP, 151 1.1 christos TILEPRO_OPC_JB, 152 1.1 christos TILEPRO_OPC_JF, 153 1.1 christos TILEPRO_OPC_JR, 154 1.1 christos TILEPRO_OPC_JRP, 155 1.1 christos TILEPRO_OPC_LB, 156 1.1 christos TILEPRO_OPC_LB_SN, 157 1.1 christos TILEPRO_OPC_LB_U, 158 1.1 christos TILEPRO_OPC_LB_U_SN, 159 1.1 christos TILEPRO_OPC_LBADD, 160 1.1 christos TILEPRO_OPC_LBADD_SN, 161 1.1 christos TILEPRO_OPC_LBADD_U, 162 1.1 christos TILEPRO_OPC_LBADD_U_SN, 163 1.1 christos TILEPRO_OPC_LH, 164 1.1 christos TILEPRO_OPC_LH_SN, 165 1.1 christos TILEPRO_OPC_LH_U, 166 1.1 christos TILEPRO_OPC_LH_U_SN, 167 1.1 christos TILEPRO_OPC_LHADD, 168 1.1 christos TILEPRO_OPC_LHADD_SN, 169 1.1 christos TILEPRO_OPC_LHADD_U, 170 1.1 christos TILEPRO_OPC_LHADD_U_SN, 171 1.1 christos TILEPRO_OPC_LNK, 172 1.1 christos TILEPRO_OPC_LNK_SN, 173 1.1 christos TILEPRO_OPC_LW, 174 1.1 christos TILEPRO_OPC_LW_SN, 175 1.1 christos TILEPRO_OPC_LW_NA, 176 1.1 christos TILEPRO_OPC_LW_NA_SN, 177 1.1 christos TILEPRO_OPC_LWADD, 178 1.1 christos TILEPRO_OPC_LWADD_SN, 179 1.1 christos TILEPRO_OPC_LWADD_NA, 180 1.1 christos TILEPRO_OPC_LWADD_NA_SN, 181 1.1 christos TILEPRO_OPC_MAXB_U, 182 1.1 christos TILEPRO_OPC_MAXB_U_SN, 183 1.1 christos TILEPRO_OPC_MAXH, 184 1.1 christos TILEPRO_OPC_MAXH_SN, 185 1.1 christos TILEPRO_OPC_MAXIB_U, 186 1.1 christos TILEPRO_OPC_MAXIB_U_SN, 187 1.1 christos TILEPRO_OPC_MAXIH, 188 1.1 christos TILEPRO_OPC_MAXIH_SN, 189 1.1 christos TILEPRO_OPC_MF, 190 1.1 christos TILEPRO_OPC_MFSPR, 191 1.1 christos TILEPRO_OPC_MINB_U, 192 1.1 christos TILEPRO_OPC_MINB_U_SN, 193 1.1 christos TILEPRO_OPC_MINH, 194 1.1 christos TILEPRO_OPC_MINH_SN, 195 1.1 christos TILEPRO_OPC_MINIB_U, 196 1.1 christos TILEPRO_OPC_MINIB_U_SN, 197 1.1 christos TILEPRO_OPC_MINIH, 198 1.1 christos TILEPRO_OPC_MINIH_SN, 199 1.1 christos TILEPRO_OPC_MM, 200 1.1 christos TILEPRO_OPC_MNZ, 201 1.1 christos TILEPRO_OPC_MNZ_SN, 202 1.1 christos TILEPRO_OPC_MNZB, 203 1.1 christos TILEPRO_OPC_MNZB_SN, 204 1.1 christos TILEPRO_OPC_MNZH, 205 1.1 christos TILEPRO_OPC_MNZH_SN, 206 1.1 christos TILEPRO_OPC_MTSPR, 207 1.1 christos TILEPRO_OPC_MULHH_SS, 208 1.1 christos TILEPRO_OPC_MULHH_SS_SN, 209 1.1 christos TILEPRO_OPC_MULHH_SU, 210 1.1 christos TILEPRO_OPC_MULHH_SU_SN, 211 1.1 christos TILEPRO_OPC_MULHH_UU, 212 1.1 christos TILEPRO_OPC_MULHH_UU_SN, 213 1.1 christos TILEPRO_OPC_MULHHA_SS, 214 1.1 christos TILEPRO_OPC_MULHHA_SS_SN, 215 1.1 christos TILEPRO_OPC_MULHHA_SU, 216 1.1 christos TILEPRO_OPC_MULHHA_SU_SN, 217 1.1 christos TILEPRO_OPC_MULHHA_UU, 218 1.1 christos TILEPRO_OPC_MULHHA_UU_SN, 219 1.1 christos TILEPRO_OPC_MULHHSA_UU, 220 1.1 christos TILEPRO_OPC_MULHHSA_UU_SN, 221 1.1 christos TILEPRO_OPC_MULHL_SS, 222 1.1 christos TILEPRO_OPC_MULHL_SS_SN, 223 1.1 christos TILEPRO_OPC_MULHL_SU, 224 1.1 christos TILEPRO_OPC_MULHL_SU_SN, 225 1.1 christos TILEPRO_OPC_MULHL_US, 226 1.1 christos TILEPRO_OPC_MULHL_US_SN, 227 1.1 christos TILEPRO_OPC_MULHL_UU, 228 1.1 christos TILEPRO_OPC_MULHL_UU_SN, 229 1.1 christos TILEPRO_OPC_MULHLA_SS, 230 1.1 christos TILEPRO_OPC_MULHLA_SS_SN, 231 1.1 christos TILEPRO_OPC_MULHLA_SU, 232 1.1 christos TILEPRO_OPC_MULHLA_SU_SN, 233 1.1 christos TILEPRO_OPC_MULHLA_US, 234 1.1 christos TILEPRO_OPC_MULHLA_US_SN, 235 1.1 christos TILEPRO_OPC_MULHLA_UU, 236 1.1 christos TILEPRO_OPC_MULHLA_UU_SN, 237 1.1 christos TILEPRO_OPC_MULHLSA_UU, 238 1.1 christos TILEPRO_OPC_MULHLSA_UU_SN, 239 1.1 christos TILEPRO_OPC_MULLL_SS, 240 1.1 christos TILEPRO_OPC_MULLL_SS_SN, 241 1.1 christos TILEPRO_OPC_MULLL_SU, 242 1.1 christos TILEPRO_OPC_MULLL_SU_SN, 243 1.1 christos TILEPRO_OPC_MULLL_UU, 244 1.1 christos TILEPRO_OPC_MULLL_UU_SN, 245 1.1 christos TILEPRO_OPC_MULLLA_SS, 246 1.1 christos TILEPRO_OPC_MULLLA_SS_SN, 247 1.1 christos TILEPRO_OPC_MULLLA_SU, 248 1.1 christos TILEPRO_OPC_MULLLA_SU_SN, 249 1.1 christos TILEPRO_OPC_MULLLA_UU, 250 1.1 christos TILEPRO_OPC_MULLLA_UU_SN, 251 1.1 christos TILEPRO_OPC_MULLLSA_UU, 252 1.1 christos TILEPRO_OPC_MULLLSA_UU_SN, 253 1.1 christos TILEPRO_OPC_MVNZ, 254 1.1 christos TILEPRO_OPC_MVNZ_SN, 255 1.1 christos TILEPRO_OPC_MVZ, 256 1.1 christos TILEPRO_OPC_MVZ_SN, 257 1.1 christos TILEPRO_OPC_MZ, 258 1.1 christos TILEPRO_OPC_MZ_SN, 259 1.1 christos TILEPRO_OPC_MZB, 260 1.1 christos TILEPRO_OPC_MZB_SN, 261 1.1 christos TILEPRO_OPC_MZH, 262 1.1 christos TILEPRO_OPC_MZH_SN, 263 1.1 christos TILEPRO_OPC_NAP, 264 1.1 christos TILEPRO_OPC_NOP, 265 1.1 christos TILEPRO_OPC_NOR, 266 1.1 christos TILEPRO_OPC_NOR_SN, 267 1.1 christos TILEPRO_OPC_OR, 268 1.1 christos TILEPRO_OPC_OR_SN, 269 1.1 christos TILEPRO_OPC_ORI, 270 1.1 christos TILEPRO_OPC_ORI_SN, 271 1.1 christos TILEPRO_OPC_PACKBS_U, 272 1.1 christos TILEPRO_OPC_PACKBS_U_SN, 273 1.1 christos TILEPRO_OPC_PACKHB, 274 1.1 christos TILEPRO_OPC_PACKHB_SN, 275 1.1 christos TILEPRO_OPC_PACKHS, 276 1.1 christos TILEPRO_OPC_PACKHS_SN, 277 1.1 christos TILEPRO_OPC_PACKLB, 278 1.1 christos TILEPRO_OPC_PACKLB_SN, 279 1.1 christos TILEPRO_OPC_PCNT, 280 1.1 christos TILEPRO_OPC_PCNT_SN, 281 1.1 christos TILEPRO_OPC_RL, 282 1.1 christos TILEPRO_OPC_RL_SN, 283 1.1 christos TILEPRO_OPC_RLI, 284 1.1 christos TILEPRO_OPC_RLI_SN, 285 1.1 christos TILEPRO_OPC_S1A, 286 1.1 christos TILEPRO_OPC_S1A_SN, 287 1.1 christos TILEPRO_OPC_S2A, 288 1.1 christos TILEPRO_OPC_S2A_SN, 289 1.1 christos TILEPRO_OPC_S3A, 290 1.1 christos TILEPRO_OPC_S3A_SN, 291 1.1 christos TILEPRO_OPC_SADAB_U, 292 1.1 christos TILEPRO_OPC_SADAB_U_SN, 293 1.1 christos TILEPRO_OPC_SADAH, 294 1.1 christos TILEPRO_OPC_SADAH_SN, 295 1.1 christos TILEPRO_OPC_SADAH_U, 296 1.1 christos TILEPRO_OPC_SADAH_U_SN, 297 1.1 christos TILEPRO_OPC_SADB_U, 298 1.1 christos TILEPRO_OPC_SADB_U_SN, 299 1.1 christos TILEPRO_OPC_SADH, 300 1.1 christos TILEPRO_OPC_SADH_SN, 301 1.1 christos TILEPRO_OPC_SADH_U, 302 1.1 christos TILEPRO_OPC_SADH_U_SN, 303 1.1 christos TILEPRO_OPC_SB, 304 1.1 christos TILEPRO_OPC_SBADD, 305 1.1 christos TILEPRO_OPC_SEQ, 306 1.1 christos TILEPRO_OPC_SEQ_SN, 307 1.1 christos TILEPRO_OPC_SEQB, 308 1.1 christos TILEPRO_OPC_SEQB_SN, 309 1.1 christos TILEPRO_OPC_SEQH, 310 1.1 christos TILEPRO_OPC_SEQH_SN, 311 1.1 christos TILEPRO_OPC_SEQI, 312 1.1 christos TILEPRO_OPC_SEQI_SN, 313 1.1 christos TILEPRO_OPC_SEQIB, 314 1.1 christos TILEPRO_OPC_SEQIB_SN, 315 1.1 christos TILEPRO_OPC_SEQIH, 316 1.1 christos TILEPRO_OPC_SEQIH_SN, 317 1.1 christos TILEPRO_OPC_SH, 318 1.1 christos TILEPRO_OPC_SHADD, 319 1.1 christos TILEPRO_OPC_SHL, 320 1.1 christos TILEPRO_OPC_SHL_SN, 321 1.1 christos TILEPRO_OPC_SHLB, 322 1.1 christos TILEPRO_OPC_SHLB_SN, 323 1.1 christos TILEPRO_OPC_SHLH, 324 1.1 christos TILEPRO_OPC_SHLH_SN, 325 1.1 christos TILEPRO_OPC_SHLI, 326 1.1 christos TILEPRO_OPC_SHLI_SN, 327 1.1 christos TILEPRO_OPC_SHLIB, 328 1.1 christos TILEPRO_OPC_SHLIB_SN, 329 1.1 christos TILEPRO_OPC_SHLIH, 330 1.1 christos TILEPRO_OPC_SHLIH_SN, 331 1.1 christos TILEPRO_OPC_SHR, 332 1.1 christos TILEPRO_OPC_SHR_SN, 333 1.1 christos TILEPRO_OPC_SHRB, 334 1.1 christos TILEPRO_OPC_SHRB_SN, 335 1.1 christos TILEPRO_OPC_SHRH, 336 1.1 christos TILEPRO_OPC_SHRH_SN, 337 1.1 christos TILEPRO_OPC_SHRI, 338 1.1 christos TILEPRO_OPC_SHRI_SN, 339 1.1 christos TILEPRO_OPC_SHRIB, 340 1.1 christos TILEPRO_OPC_SHRIB_SN, 341 1.1 christos TILEPRO_OPC_SHRIH, 342 1.1 christos TILEPRO_OPC_SHRIH_SN, 343 1.1 christos TILEPRO_OPC_SLT, 344 1.1 christos TILEPRO_OPC_SLT_SN, 345 1.1 christos TILEPRO_OPC_SLT_U, 346 1.1 christos TILEPRO_OPC_SLT_U_SN, 347 1.1 christos TILEPRO_OPC_SLTB, 348 1.1 christos TILEPRO_OPC_SLTB_SN, 349 1.1 christos TILEPRO_OPC_SLTB_U, 350 1.1 christos TILEPRO_OPC_SLTB_U_SN, 351 1.1 christos TILEPRO_OPC_SLTE, 352 1.1 christos TILEPRO_OPC_SLTE_SN, 353 1.1 christos TILEPRO_OPC_SLTE_U, 354 1.1 christos TILEPRO_OPC_SLTE_U_SN, 355 1.1 christos TILEPRO_OPC_SLTEB, 356 1.1 christos TILEPRO_OPC_SLTEB_SN, 357 1.1 christos TILEPRO_OPC_SLTEB_U, 358 1.1 christos TILEPRO_OPC_SLTEB_U_SN, 359 1.1 christos TILEPRO_OPC_SLTEH, 360 1.1 christos TILEPRO_OPC_SLTEH_SN, 361 1.1 christos TILEPRO_OPC_SLTEH_U, 362 1.1 christos TILEPRO_OPC_SLTEH_U_SN, 363 1.1 christos TILEPRO_OPC_SLTH, 364 1.1 christos TILEPRO_OPC_SLTH_SN, 365 1.1 christos TILEPRO_OPC_SLTH_U, 366 1.1 christos TILEPRO_OPC_SLTH_U_SN, 367 1.1 christos TILEPRO_OPC_SLTI, 368 1.1 christos TILEPRO_OPC_SLTI_SN, 369 1.1 christos TILEPRO_OPC_SLTI_U, 370 1.1 christos TILEPRO_OPC_SLTI_U_SN, 371 1.1 christos TILEPRO_OPC_SLTIB, 372 1.1 christos TILEPRO_OPC_SLTIB_SN, 373 1.1 christos TILEPRO_OPC_SLTIB_U, 374 1.1 christos TILEPRO_OPC_SLTIB_U_SN, 375 1.1 christos TILEPRO_OPC_SLTIH, 376 1.1 christos TILEPRO_OPC_SLTIH_SN, 377 1.1 christos TILEPRO_OPC_SLTIH_U, 378 1.1 christos TILEPRO_OPC_SLTIH_U_SN, 379 1.1 christos TILEPRO_OPC_SNE, 380 1.1 christos TILEPRO_OPC_SNE_SN, 381 1.1 christos TILEPRO_OPC_SNEB, 382 1.1 christos TILEPRO_OPC_SNEB_SN, 383 1.1 christos TILEPRO_OPC_SNEH, 384 1.1 christos TILEPRO_OPC_SNEH_SN, 385 1.1 christos TILEPRO_OPC_SRA, 386 1.1 christos TILEPRO_OPC_SRA_SN, 387 1.1 christos TILEPRO_OPC_SRAB, 388 1.1 christos TILEPRO_OPC_SRAB_SN, 389 1.1 christos TILEPRO_OPC_SRAH, 390 1.1 christos TILEPRO_OPC_SRAH_SN, 391 1.1 christos TILEPRO_OPC_SRAI, 392 1.1 christos TILEPRO_OPC_SRAI_SN, 393 1.1 christos TILEPRO_OPC_SRAIB, 394 1.1 christos TILEPRO_OPC_SRAIB_SN, 395 1.1 christos TILEPRO_OPC_SRAIH, 396 1.1 christos TILEPRO_OPC_SRAIH_SN, 397 1.1 christos TILEPRO_OPC_SUB, 398 1.1 christos TILEPRO_OPC_SUB_SN, 399 1.1 christos TILEPRO_OPC_SUBB, 400 1.1 christos TILEPRO_OPC_SUBB_SN, 401 1.1 christos TILEPRO_OPC_SUBBS_U, 402 1.1 christos TILEPRO_OPC_SUBBS_U_SN, 403 1.1 christos TILEPRO_OPC_SUBH, 404 1.1 christos TILEPRO_OPC_SUBH_SN, 405 1.1 christos TILEPRO_OPC_SUBHS, 406 1.1 christos TILEPRO_OPC_SUBHS_SN, 407 1.1 christos TILEPRO_OPC_SUBS, 408 1.1 christos TILEPRO_OPC_SUBS_SN, 409 1.1 christos TILEPRO_OPC_SW, 410 1.1 christos TILEPRO_OPC_SWADD, 411 1.1 christos TILEPRO_OPC_SWINT0, 412 1.1 christos TILEPRO_OPC_SWINT1, 413 1.1 christos TILEPRO_OPC_SWINT2, 414 1.1 christos TILEPRO_OPC_SWINT3, 415 1.1 christos TILEPRO_OPC_TBLIDXB0, 416 1.1 christos TILEPRO_OPC_TBLIDXB0_SN, 417 1.1 christos TILEPRO_OPC_TBLIDXB1, 418 1.1 christos TILEPRO_OPC_TBLIDXB1_SN, 419 1.1 christos TILEPRO_OPC_TBLIDXB2, 420 1.1 christos TILEPRO_OPC_TBLIDXB2_SN, 421 1.1 christos TILEPRO_OPC_TBLIDXB3, 422 1.1 christos TILEPRO_OPC_TBLIDXB3_SN, 423 1.1 christos TILEPRO_OPC_TNS, 424 1.1 christos TILEPRO_OPC_TNS_SN, 425 1.1 christos TILEPRO_OPC_WH64, 426 1.1 christos TILEPRO_OPC_XOR, 427 1.1 christos TILEPRO_OPC_XOR_SN, 428 1.1 christos TILEPRO_OPC_XORI, 429 1.1 christos TILEPRO_OPC_XORI_SN, 430 1.1 christos TILEPRO_OPC_NONE 431 1.1 christos } tilepro_mnemonic; 432 1.1 christos 433 1.1 christos /* 64-bit pattern for a { bpt ; nop } bundle. */ 434 1.1 christos #define TILEPRO_BPT_BUNDLE 0x400b3cae70166000ULL 435 1.1 christos 436 1.1 christos #ifndef DISASM_ONLY 437 1.1 christos 438 1.1 christos enum 439 1.1 christos { 440 1.1 christos TILEPRO_SN_MAX_OPERANDS = 6 /* route */ 441 1.1 christos }; 442 1.1 christos 443 1.1 christos typedef enum 444 1.1 christos { 445 1.1 christos TILEPRO_SN_OPC_BZ, 446 1.1 christos TILEPRO_SN_OPC_BNZ, 447 1.1 christos TILEPRO_SN_OPC_JRR, 448 1.1 christos TILEPRO_SN_OPC_FNOP, 449 1.1 christos TILEPRO_SN_OPC_BLZ, 450 1.1 christos TILEPRO_SN_OPC_NOP, 451 1.1 christos TILEPRO_SN_OPC_MOVEI, 452 1.1 christos TILEPRO_SN_OPC_MOVE, 453 1.1 christos TILEPRO_SN_OPC_BGEZ, 454 1.1 christos TILEPRO_SN_OPC_JR, 455 1.1 christos TILEPRO_SN_OPC_BLEZ, 456 1.1 christos TILEPRO_SN_OPC_BBNS, 457 1.1 christos TILEPRO_SN_OPC_JALRR, 458 1.1 christos TILEPRO_SN_OPC_BPT, 459 1.1 christos TILEPRO_SN_OPC_JALR, 460 1.1 christos TILEPRO_SN_OPC_SHR1, 461 1.1 christos TILEPRO_SN_OPC_BGZ, 462 1.1 christos TILEPRO_SN_OPC_BBS, 463 1.1 christos TILEPRO_SN_OPC_SHL8II, 464 1.1 christos TILEPRO_SN_OPC_ADDI, 465 1.1 christos TILEPRO_SN_OPC_HALT, 466 1.1 christos TILEPRO_SN_OPC_ROUTE, 467 1.1 christos TILEPRO_SN_OPC_NONE 468 1.1 christos } tilepro_sn_mnemonic; 469 1.1 christos 470 1.1 christos extern const unsigned char tilepro_sn_route_encode[6 * 6 * 6]; 471 1.1 christos extern const signed char tilepro_sn_route_decode[256][3]; 472 1.1 christos extern const char tilepro_sn_direction_names[6][5]; 473 1.1 christos extern const signed char tilepro_sn_dest_map[6][6]; 474 1.1 christos #endif /* DISASM_ONLY */ 475 1.1 christos 476 1.1 christos 477 1.1 christos static __inline unsigned int 478 1.1 christos get_BrOff_SN(tilepro_bundle_bits num) 479 1.1 christos { 480 1.1 christos const unsigned int n = (unsigned int)num; 481 1.1 christos return (((n >> 0)) & 0x3ff); 482 1.1 christos } 483 1.1 christos 484 1.1 christos static __inline unsigned int 485 1.1 christos get_BrOff_X1(tilepro_bundle_bits n) 486 1.1 christos { 487 1.1 christos return (((unsigned int)(n >> 43)) & 0x00007fff) | 488 1.1 christos (((unsigned int)(n >> 20)) & 0x00018000); 489 1.1 christos } 490 1.1 christos 491 1.1 christos static __inline unsigned int 492 1.1 christos get_BrType_X1(tilepro_bundle_bits n) 493 1.1 christos { 494 1.1 christos return (((unsigned int)(n >> 31)) & 0xf); 495 1.1 christos } 496 1.1 christos 497 1.1 christos static __inline unsigned int 498 1.1 christos get_Dest_Imm8_X1(tilepro_bundle_bits n) 499 1.1 christos { 500 1.1 christos return (((unsigned int)(n >> 31)) & 0x0000003f) | 501 1.1 christos (((unsigned int)(n >> 43)) & 0x000000c0); 502 1.1 christos } 503 1.1 christos 504 1.1 christos static __inline unsigned int 505 1.1 christos get_Dest_SN(tilepro_bundle_bits num) 506 1.1 christos { 507 1.1 christos const unsigned int n = (unsigned int)num; 508 1.1 christos return (((n >> 2)) & 0x3); 509 1.1 christos } 510 1.1 christos 511 1.1 christos static __inline unsigned int 512 1.1 christos get_Dest_X0(tilepro_bundle_bits num) 513 1.1 christos { 514 1.1 christos const unsigned int n = (unsigned int)num; 515 1.1 christos return (((n >> 0)) & 0x3f); 516 1.1 christos } 517 1.1 christos 518 1.1 christos static __inline unsigned int 519 1.1 christos get_Dest_X1(tilepro_bundle_bits n) 520 1.1 christos { 521 1.1 christos return (((unsigned int)(n >> 31)) & 0x3f); 522 1.1 christos } 523 1.1 christos 524 1.1 christos static __inline unsigned int 525 1.1 christos get_Dest_Y0(tilepro_bundle_bits num) 526 1.1 christos { 527 1.1 christos const unsigned int n = (unsigned int)num; 528 1.1 christos return (((n >> 0)) & 0x3f); 529 1.1 christos } 530 1.1 christos 531 1.1 christos static __inline unsigned int 532 1.1 christos get_Dest_Y1(tilepro_bundle_bits n) 533 1.1 christos { 534 1.1 christos return (((unsigned int)(n >> 31)) & 0x3f); 535 1.1 christos } 536 1.1 christos 537 1.1 christos static __inline unsigned int 538 1.1 christos get_Imm16_X0(tilepro_bundle_bits num) 539 1.1 christos { 540 1.1 christos const unsigned int n = (unsigned int)num; 541 1.1 christos return (((n >> 12)) & 0xffff); 542 1.1 christos } 543 1.1 christos 544 1.1 christos static __inline unsigned int 545 1.1 christos get_Imm16_X1(tilepro_bundle_bits n) 546 1.1 christos { 547 1.1 christos return (((unsigned int)(n >> 43)) & 0xffff); 548 1.1 christos } 549 1.1 christos 550 1.1 christos static __inline unsigned int 551 1.1 christos get_Imm8_SN(tilepro_bundle_bits num) 552 1.1 christos { 553 1.1 christos const unsigned int n = (unsigned int)num; 554 1.1 christos return (((n >> 0)) & 0xff); 555 1.1 christos } 556 1.1 christos 557 1.1 christos static __inline unsigned int 558 1.1 christos get_Imm8_X0(tilepro_bundle_bits num) 559 1.1 christos { 560 1.1 christos const unsigned int n = (unsigned int)num; 561 1.1 christos return (((n >> 12)) & 0xff); 562 1.1 christos } 563 1.1 christos 564 1.1 christos static __inline unsigned int 565 1.1 christos get_Imm8_X1(tilepro_bundle_bits n) 566 1.1 christos { 567 1.1 christos return (((unsigned int)(n >> 43)) & 0xff); 568 1.1 christos } 569 1.1 christos 570 1.1 christos static __inline unsigned int 571 1.1 christos get_Imm8_Y0(tilepro_bundle_bits num) 572 1.1 christos { 573 1.1 christos const unsigned int n = (unsigned int)num; 574 1.1 christos return (((n >> 12)) & 0xff); 575 1.1 christos } 576 1.1 christos 577 1.1 christos static __inline unsigned int 578 1.1 christos get_Imm8_Y1(tilepro_bundle_bits n) 579 1.1 christos { 580 1.1 christos return (((unsigned int)(n >> 43)) & 0xff); 581 1.1 christos } 582 1.1 christos 583 1.1 christos static __inline unsigned int 584 1.1 christos get_ImmOpcodeExtension_X0(tilepro_bundle_bits num) 585 1.1 christos { 586 1.1 christos const unsigned int n = (unsigned int)num; 587 1.1 christos return (((n >> 20)) & 0x7f); 588 1.1 christos } 589 1.1 christos 590 1.1 christos static __inline unsigned int 591 1.1 christos get_ImmOpcodeExtension_X1(tilepro_bundle_bits n) 592 1.1 christos { 593 1.1 christos return (((unsigned int)(n >> 51)) & 0x7f); 594 1.1 christos } 595 1.1 christos 596 1.1 christos static __inline unsigned int 597 1.1 christos get_ImmRROpcodeExtension_SN(tilepro_bundle_bits num) 598 1.1 christos { 599 1.1 christos const unsigned int n = (unsigned int)num; 600 1.1 christos return (((n >> 8)) & 0x3); 601 1.1 christos } 602 1.1 christos 603 1.1 christos static __inline unsigned int 604 1.1 christos get_JOffLong_X1(tilepro_bundle_bits n) 605 1.1 christos { 606 1.1 christos return (((unsigned int)(n >> 43)) & 0x00007fff) | 607 1.1 christos (((unsigned int)(n >> 20)) & 0x00018000) | 608 1.1 christos (((unsigned int)(n >> 14)) & 0x001e0000) | 609 1.1 christos (((unsigned int)(n >> 16)) & 0x07e00000) | 610 1.1 christos (((unsigned int)(n >> 31)) & 0x18000000); 611 1.1 christos } 612 1.1 christos 613 1.1 christos static __inline unsigned int 614 1.1 christos get_JOff_X1(tilepro_bundle_bits n) 615 1.1 christos { 616 1.1 christos return (((unsigned int)(n >> 43)) & 0x00007fff) | 617 1.1 christos (((unsigned int)(n >> 20)) & 0x00018000) | 618 1.1 christos (((unsigned int)(n >> 14)) & 0x001e0000) | 619 1.1 christos (((unsigned int)(n >> 16)) & 0x07e00000) | 620 1.1 christos (((unsigned int)(n >> 31)) & 0x08000000); 621 1.1 christos } 622 1.1 christos 623 1.1 christos static __inline unsigned int 624 1.1 christos get_MF_Imm15_X1(tilepro_bundle_bits n) 625 1.1 christos { 626 1.1 christos return (((unsigned int)(n >> 37)) & 0x00003fff) | 627 1.1 christos (((unsigned int)(n >> 44)) & 0x00004000); 628 1.1 christos } 629 1.1 christos 630 1.1 christos static __inline unsigned int 631 1.1 christos get_MMEnd_X0(tilepro_bundle_bits num) 632 1.1 christos { 633 1.1 christos const unsigned int n = (unsigned int)num; 634 1.1 christos return (((n >> 18)) & 0x1f); 635 1.1 christos } 636 1.1 christos 637 1.1 christos static __inline unsigned int 638 1.1 christos get_MMEnd_X1(tilepro_bundle_bits n) 639 1.1 christos { 640 1.1 christos return (((unsigned int)(n >> 49)) & 0x1f); 641 1.1 christos } 642 1.1 christos 643 1.1 christos static __inline unsigned int 644 1.1 christos get_MMStart_X0(tilepro_bundle_bits num) 645 1.1 christos { 646 1.1 christos const unsigned int n = (unsigned int)num; 647 1.1 christos return (((n >> 23)) & 0x1f); 648 1.1 christos } 649 1.1 christos 650 1.1 christos static __inline unsigned int 651 1.1 christos get_MMStart_X1(tilepro_bundle_bits n) 652 1.1 christos { 653 1.1 christos return (((unsigned int)(n >> 54)) & 0x1f); 654 1.1 christos } 655 1.1 christos 656 1.1 christos static __inline unsigned int 657 1.1 christos get_MT_Imm15_X1(tilepro_bundle_bits n) 658 1.1 christos { 659 1.1 christos return (((unsigned int)(n >> 31)) & 0x0000003f) | 660 1.1 christos (((unsigned int)(n >> 37)) & 0x00003fc0) | 661 1.1 christos (((unsigned int)(n >> 44)) & 0x00004000); 662 1.1 christos } 663 1.1 christos 664 1.1 christos static __inline unsigned int 665 1.1 christos get_Mode(tilepro_bundle_bits n) 666 1.1 christos { 667 1.1 christos return (((unsigned int)(n >> 63)) & 0x1); 668 1.1 christos } 669 1.1 christos 670 1.1 christos static __inline unsigned int 671 1.1 christos get_NoRegOpcodeExtension_SN(tilepro_bundle_bits num) 672 1.1 christos { 673 1.1 christos const unsigned int n = (unsigned int)num; 674 1.1 christos return (((n >> 0)) & 0xf); 675 1.1 christos } 676 1.1 christos 677 1.1 christos static __inline unsigned int 678 1.1 christos get_Opcode_SN(tilepro_bundle_bits num) 679 1.1 christos { 680 1.1 christos const unsigned int n = (unsigned int)num; 681 1.1 christos return (((n >> 10)) & 0x3f); 682 1.1 christos } 683 1.1 christos 684 1.1 christos static __inline unsigned int 685 1.1 christos get_Opcode_X0(tilepro_bundle_bits num) 686 1.1 christos { 687 1.1 christos const unsigned int n = (unsigned int)num; 688 1.1 christos return (((n >> 28)) & 0x7); 689 1.1 christos } 690 1.1 christos 691 1.1 christos static __inline unsigned int 692 1.1 christos get_Opcode_X1(tilepro_bundle_bits n) 693 1.1 christos { 694 1.1 christos return (((unsigned int)(n >> 59)) & 0xf); 695 1.1 christos } 696 1.1 christos 697 1.1 christos static __inline unsigned int 698 1.1 christos get_Opcode_Y0(tilepro_bundle_bits num) 699 1.1 christos { 700 1.1 christos const unsigned int n = (unsigned int)num; 701 1.1 christos return (((n >> 27)) & 0xf); 702 1.1 christos } 703 1.1 christos 704 1.1 christos static __inline unsigned int 705 1.1 christos get_Opcode_Y1(tilepro_bundle_bits n) 706 1.1 christos { 707 1.1 christos return (((unsigned int)(n >> 59)) & 0xf); 708 1.1 christos } 709 1.1 christos 710 1.1 christos static __inline unsigned int 711 1.1 christos get_Opcode_Y2(tilepro_bundle_bits n) 712 1.1 christos { 713 1.1 christos return (((unsigned int)(n >> 56)) & 0x7); 714 1.1 christos } 715 1.1 christos 716 1.1 christos static __inline unsigned int 717 1.1 christos get_RROpcodeExtension_SN(tilepro_bundle_bits num) 718 1.1 christos { 719 1.1 christos const unsigned int n = (unsigned int)num; 720 1.1 christos return (((n >> 4)) & 0xf); 721 1.1 christos } 722 1.1 christos 723 1.1 christos static __inline unsigned int 724 1.1 christos get_RRROpcodeExtension_X0(tilepro_bundle_bits num) 725 1.1 christos { 726 1.1 christos const unsigned int n = (unsigned int)num; 727 1.1 christos return (((n >> 18)) & 0x1ff); 728 1.1 christos } 729 1.1 christos 730 1.1 christos static __inline unsigned int 731 1.1 christos get_RRROpcodeExtension_X1(tilepro_bundle_bits n) 732 1.1 christos { 733 1.1 christos return (((unsigned int)(n >> 49)) & 0x1ff); 734 1.1 christos } 735 1.1 christos 736 1.1 christos static __inline unsigned int 737 1.1 christos get_RRROpcodeExtension_Y0(tilepro_bundle_bits num) 738 1.1 christos { 739 1.1 christos const unsigned int n = (unsigned int)num; 740 1.1 christos return (((n >> 18)) & 0x3); 741 1.1 christos } 742 1.1 christos 743 1.1 christos static __inline unsigned int 744 1.1 christos get_RRROpcodeExtension_Y1(tilepro_bundle_bits n) 745 1.1 christos { 746 1.1 christos return (((unsigned int)(n >> 49)) & 0x3); 747 1.1 christos } 748 1.1 christos 749 1.1 christos static __inline unsigned int 750 1.1 christos get_RouteOpcodeExtension_SN(tilepro_bundle_bits num) 751 1.1 christos { 752 1.1 christos const unsigned int n = (unsigned int)num; 753 1.1 christos return (((n >> 0)) & 0x3ff); 754 1.1 christos } 755 1.1 christos 756 1.1 christos static __inline unsigned int 757 1.1 christos get_S_X0(tilepro_bundle_bits num) 758 1.1 christos { 759 1.1 christos const unsigned int n = (unsigned int)num; 760 1.1 christos return (((n >> 27)) & 0x1); 761 1.1 christos } 762 1.1 christos 763 1.1 christos static __inline unsigned int 764 1.1 christos get_S_X1(tilepro_bundle_bits n) 765 1.1 christos { 766 1.1 christos return (((unsigned int)(n >> 58)) & 0x1); 767 1.1 christos } 768 1.1 christos 769 1.1 christos static __inline unsigned int 770 1.1 christos get_ShAmt_X0(tilepro_bundle_bits num) 771 1.1 christos { 772 1.1 christos const unsigned int n = (unsigned int)num; 773 1.1 christos return (((n >> 12)) & 0x1f); 774 1.1 christos } 775 1.1 christos 776 1.1 christos static __inline unsigned int 777 1.1 christos get_ShAmt_X1(tilepro_bundle_bits n) 778 1.1 christos { 779 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f); 780 1.1 christos } 781 1.1 christos 782 1.1 christos static __inline unsigned int 783 1.1 christos get_ShAmt_Y0(tilepro_bundle_bits num) 784 1.1 christos { 785 1.1 christos const unsigned int n = (unsigned int)num; 786 1.1 christos return (((n >> 12)) & 0x1f); 787 1.1 christos } 788 1.1 christos 789 1.1 christos static __inline unsigned int 790 1.1 christos get_ShAmt_Y1(tilepro_bundle_bits n) 791 1.1 christos { 792 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f); 793 1.1 christos } 794 1.1 christos 795 1.1 christos static __inline unsigned int 796 1.1 christos get_SrcA_X0(tilepro_bundle_bits num) 797 1.1 christos { 798 1.1 christos const unsigned int n = (unsigned int)num; 799 1.1 christos return (((n >> 6)) & 0x3f); 800 1.1 christos } 801 1.1 christos 802 1.1 christos static __inline unsigned int 803 1.1 christos get_SrcA_X1(tilepro_bundle_bits n) 804 1.1 christos { 805 1.1 christos return (((unsigned int)(n >> 37)) & 0x3f); 806 1.1 christos } 807 1.1 christos 808 1.1 christos static __inline unsigned int 809 1.1 christos get_SrcA_Y0(tilepro_bundle_bits num) 810 1.1 christos { 811 1.1 christos const unsigned int n = (unsigned int)num; 812 1.1 christos return (((n >> 6)) & 0x3f); 813 1.1 christos } 814 1.1 christos 815 1.1 christos static __inline unsigned int 816 1.1 christos get_SrcA_Y1(tilepro_bundle_bits n) 817 1.1 christos { 818 1.1 christos return (((unsigned int)(n >> 37)) & 0x3f); 819 1.1 christos } 820 1.1 christos 821 1.1 christos static __inline unsigned int 822 1.1 christos get_SrcA_Y2(tilepro_bundle_bits n) 823 1.1 christos { 824 1.1 christos return (((n >> 26)) & 0x00000001) | 825 1.1 christos (((unsigned int)(n >> 50)) & 0x0000003e); 826 1.1 christos } 827 1.1 christos 828 1.1 christos static __inline unsigned int 829 1.1 christos get_SrcBDest_Y2(tilepro_bundle_bits num) 830 1.1 christos { 831 1.1 christos const unsigned int n = (unsigned int)num; 832 1.1 christos return (((n >> 20)) & 0x3f); 833 1.1 christos } 834 1.1 christos 835 1.1 christos static __inline unsigned int 836 1.1 christos get_SrcB_X0(tilepro_bundle_bits num) 837 1.1 christos { 838 1.1 christos const unsigned int n = (unsigned int)num; 839 1.1 christos return (((n >> 12)) & 0x3f); 840 1.1 christos } 841 1.1 christos 842 1.1 christos static __inline unsigned int 843 1.1 christos get_SrcB_X1(tilepro_bundle_bits n) 844 1.1 christos { 845 1.1 christos return (((unsigned int)(n >> 43)) & 0x3f); 846 1.1 christos } 847 1.1 christos 848 1.1 christos static __inline unsigned int 849 1.1 christos get_SrcB_Y0(tilepro_bundle_bits num) 850 1.1 christos { 851 1.1 christos const unsigned int n = (unsigned int)num; 852 1.1 christos return (((n >> 12)) & 0x3f); 853 1.1 christos } 854 1.1 christos 855 1.1 christos static __inline unsigned int 856 1.1 christos get_SrcB_Y1(tilepro_bundle_bits n) 857 1.1 christos { 858 1.1 christos return (((unsigned int)(n >> 43)) & 0x3f); 859 1.1 christos } 860 1.1 christos 861 1.1 christos static __inline unsigned int 862 1.1 christos get_Src_SN(tilepro_bundle_bits num) 863 1.1 christos { 864 1.1 christos const unsigned int n = (unsigned int)num; 865 1.1 christos return (((n >> 0)) & 0x3); 866 1.1 christos } 867 1.1 christos 868 1.1 christos static __inline unsigned int 869 1.1 christos get_UnOpcodeExtension_X0(tilepro_bundle_bits num) 870 1.1 christos { 871 1.1 christos const unsigned int n = (unsigned int)num; 872 1.1 christos return (((n >> 12)) & 0x1f); 873 1.1 christos } 874 1.1 christos 875 1.1 christos static __inline unsigned int 876 1.1 christos get_UnOpcodeExtension_X1(tilepro_bundle_bits n) 877 1.1 christos { 878 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f); 879 1.1 christos } 880 1.1 christos 881 1.1 christos static __inline unsigned int 882 1.1 christos get_UnOpcodeExtension_Y0(tilepro_bundle_bits num) 883 1.1 christos { 884 1.1 christos const unsigned int n = (unsigned int)num; 885 1.1 christos return (((n >> 12)) & 0x1f); 886 1.1 christos } 887 1.1 christos 888 1.1 christos static __inline unsigned int 889 1.1 christos get_UnOpcodeExtension_Y1(tilepro_bundle_bits n) 890 1.1 christos { 891 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f); 892 1.1 christos } 893 1.1 christos 894 1.1 christos static __inline unsigned int 895 1.1 christos get_UnShOpcodeExtension_X0(tilepro_bundle_bits num) 896 1.1 christos { 897 1.1 christos const unsigned int n = (unsigned int)num; 898 1.1 christos return (((n >> 17)) & 0x3ff); 899 1.1 christos } 900 1.1 christos 901 1.1 christos static __inline unsigned int 902 1.1 christos get_UnShOpcodeExtension_X1(tilepro_bundle_bits n) 903 1.1 christos { 904 1.1 christos return (((unsigned int)(n >> 48)) & 0x3ff); 905 1.1 christos } 906 1.1 christos 907 1.1 christos static __inline unsigned int 908 1.1 christos get_UnShOpcodeExtension_Y0(tilepro_bundle_bits num) 909 1.1 christos { 910 1.1 christos const unsigned int n = (unsigned int)num; 911 1.1 christos return (((n >> 17)) & 0x7); 912 1.1 christos } 913 1.1 christos 914 1.1 christos static __inline unsigned int 915 1.1 christos get_UnShOpcodeExtension_Y1(tilepro_bundle_bits n) 916 1.1 christos { 917 1.1 christos return (((unsigned int)(n >> 48)) & 0x7); 918 1.1 christos } 919 1.1 christos 920 1.1 christos 921 1.1 christos static __inline int 922 1.1 christos sign_extend(int n, int num_bits) 923 1.1 christos { 924 1.1 christos int shift = (int)(sizeof(int) * 8 - num_bits); 925 1.1 christos return (n << shift) >> shift; 926 1.1 christos } 927 1.1 christos 928 1.1 christos 929 1.1 christos 930 1.1 christos static __inline tilepro_bundle_bits 931 1.1 christos create_BrOff_SN(int num) 932 1.1 christos { 933 1.1 christos const unsigned int n = (unsigned int)num; 934 1.1 christos return ((n & 0x3ff) << 0); 935 1.1 christos } 936 1.1 christos 937 1.1 christos static __inline tilepro_bundle_bits 938 1.1 christos create_BrOff_X1(int num) 939 1.1 christos { 940 1.1 christos const unsigned int n = (unsigned int)num; 941 1.1 christos return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) | 942 1.1 christos (((tilepro_bundle_bits)(n & 0x00018000)) << 20); 943 1.1 christos } 944 1.1 christos 945 1.1 christos static __inline tilepro_bundle_bits 946 1.1 christos create_BrType_X1(int num) 947 1.1 christos { 948 1.1 christos const unsigned int n = (unsigned int)num; 949 1.1 christos return (((tilepro_bundle_bits)(n & 0xf)) << 31); 950 1.1 christos } 951 1.1 christos 952 1.1 christos static __inline tilepro_bundle_bits 953 1.1 christos create_Dest_Imm8_X1(int num) 954 1.1 christos { 955 1.1 christos const unsigned int n = (unsigned int)num; 956 1.1 christos return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) | 957 1.1 christos (((tilepro_bundle_bits)(n & 0x000000c0)) << 43); 958 1.1 christos } 959 1.1 christos 960 1.1 christos static __inline tilepro_bundle_bits 961 1.1 christos create_Dest_SN(int num) 962 1.1 christos { 963 1.1 christos const unsigned int n = (unsigned int)num; 964 1.1 christos return ((n & 0x3) << 2); 965 1.1 christos } 966 1.1 christos 967 1.1 christos static __inline tilepro_bundle_bits 968 1.1 christos create_Dest_X0(int num) 969 1.1 christos { 970 1.1 christos const unsigned int n = (unsigned int)num; 971 1.1 christos return ((n & 0x3f) << 0); 972 1.1 christos } 973 1.1 christos 974 1.1 christos static __inline tilepro_bundle_bits 975 1.1 christos create_Dest_X1(int num) 976 1.1 christos { 977 1.1 christos const unsigned int n = (unsigned int)num; 978 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 31); 979 1.1 christos } 980 1.1 christos 981 1.1 christos static __inline tilepro_bundle_bits 982 1.1 christos create_Dest_Y0(int num) 983 1.1 christos { 984 1.1 christos const unsigned int n = (unsigned int)num; 985 1.1 christos return ((n & 0x3f) << 0); 986 1.1 christos } 987 1.1 christos 988 1.1 christos static __inline tilepro_bundle_bits 989 1.1 christos create_Dest_Y1(int num) 990 1.1 christos { 991 1.1 christos const unsigned int n = (unsigned int)num; 992 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 31); 993 1.1 christos } 994 1.1 christos 995 1.1 christos static __inline tilepro_bundle_bits 996 1.1 christos create_Imm16_X0(int num) 997 1.1 christos { 998 1.1 christos const unsigned int n = (unsigned int)num; 999 1.1 christos return ((n & 0xffff) << 12); 1000 1.1 christos } 1001 1.1 christos 1002 1.1 christos static __inline tilepro_bundle_bits 1003 1.1 christos create_Imm16_X1(int num) 1004 1.1 christos { 1005 1.1 christos const unsigned int n = (unsigned int)num; 1006 1.1 christos return (((tilepro_bundle_bits)(n & 0xffff)) << 43); 1007 1.1 christos } 1008 1.1 christos 1009 1.1 christos static __inline tilepro_bundle_bits 1010 1.1 christos create_Imm8_SN(int num) 1011 1.1 christos { 1012 1.1 christos const unsigned int n = (unsigned int)num; 1013 1.1 christos return ((n & 0xff) << 0); 1014 1.1 christos } 1015 1.1 christos 1016 1.1 christos static __inline tilepro_bundle_bits 1017 1.1 christos create_Imm8_X0(int num) 1018 1.1 christos { 1019 1.1 christos const unsigned int n = (unsigned int)num; 1020 1.1 christos return ((n & 0xff) << 12); 1021 1.1 christos } 1022 1.1 christos 1023 1.1 christos static __inline tilepro_bundle_bits 1024 1.1 christos create_Imm8_X1(int num) 1025 1.1 christos { 1026 1.1 christos const unsigned int n = (unsigned int)num; 1027 1.1 christos return (((tilepro_bundle_bits)(n & 0xff)) << 43); 1028 1.1 christos } 1029 1.1 christos 1030 1.1 christos static __inline tilepro_bundle_bits 1031 1.1 christos create_Imm8_Y0(int num) 1032 1.1 christos { 1033 1.1 christos const unsigned int n = (unsigned int)num; 1034 1.1 christos return ((n & 0xff) << 12); 1035 1.1 christos } 1036 1.1 christos 1037 1.1 christos static __inline tilepro_bundle_bits 1038 1.1 christos create_Imm8_Y1(int num) 1039 1.1 christos { 1040 1.1 christos const unsigned int n = (unsigned int)num; 1041 1.1 christos return (((tilepro_bundle_bits)(n & 0xff)) << 43); 1042 1.1 christos } 1043 1.1 christos 1044 1.1 christos static __inline tilepro_bundle_bits 1045 1.1 christos create_ImmOpcodeExtension_X0(int num) 1046 1.1 christos { 1047 1.1 christos const unsigned int n = (unsigned int)num; 1048 1.1 christos return ((n & 0x7f) << 20); 1049 1.1 christos } 1050 1.1 christos 1051 1.1 christos static __inline tilepro_bundle_bits 1052 1.1 christos create_ImmOpcodeExtension_X1(int num) 1053 1.1 christos { 1054 1.1 christos const unsigned int n = (unsigned int)num; 1055 1.1 christos return (((tilepro_bundle_bits)(n & 0x7f)) << 51); 1056 1.1 christos } 1057 1.1 christos 1058 1.1 christos static __inline tilepro_bundle_bits 1059 1.1 christos create_ImmRROpcodeExtension_SN(int num) 1060 1.1 christos { 1061 1.1 christos const unsigned int n = (unsigned int)num; 1062 1.1 christos return ((n & 0x3) << 8); 1063 1.1 christos } 1064 1.1 christos 1065 1.1 christos static __inline tilepro_bundle_bits 1066 1.1 christos create_JOffLong_X1(int num) 1067 1.1 christos { 1068 1.1 christos const unsigned int n = (unsigned int)num; 1069 1.1 christos return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) | 1070 1.1 christos (((tilepro_bundle_bits)(n & 0x00018000)) << 20) | 1071 1.1 christos (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) | 1072 1.1 christos (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) | 1073 1.1 christos (((tilepro_bundle_bits)(n & 0x18000000)) << 31); 1074 1.1 christos } 1075 1.1 christos 1076 1.1 christos static __inline tilepro_bundle_bits 1077 1.1 christos create_JOff_X1(int num) 1078 1.1 christos { 1079 1.1 christos const unsigned int n = (unsigned int)num; 1080 1.1 christos return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) | 1081 1.1 christos (((tilepro_bundle_bits)(n & 0x00018000)) << 20) | 1082 1.1 christos (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) | 1083 1.1 christos (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) | 1084 1.1 christos (((tilepro_bundle_bits)(n & 0x08000000)) << 31); 1085 1.1 christos } 1086 1.1 christos 1087 1.1 christos static __inline tilepro_bundle_bits 1088 1.1 christos create_MF_Imm15_X1(int num) 1089 1.1 christos { 1090 1.1 christos const unsigned int n = (unsigned int)num; 1091 1.1 christos return (((tilepro_bundle_bits)(n & 0x00003fff)) << 37) | 1092 1.1 christos (((tilepro_bundle_bits)(n & 0x00004000)) << 44); 1093 1.1 christos } 1094 1.1 christos 1095 1.1 christos static __inline tilepro_bundle_bits 1096 1.1 christos create_MMEnd_X0(int num) 1097 1.1 christos { 1098 1.1 christos const unsigned int n = (unsigned int)num; 1099 1.1 christos return ((n & 0x1f) << 18); 1100 1.1 christos } 1101 1.1 christos 1102 1.1 christos static __inline tilepro_bundle_bits 1103 1.1 christos create_MMEnd_X1(int num) 1104 1.1 christos { 1105 1.1 christos const unsigned int n = (unsigned int)num; 1106 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 49); 1107 1.1 christos } 1108 1.1 christos 1109 1.1 christos static __inline tilepro_bundle_bits 1110 1.1 christos create_MMStart_X0(int num) 1111 1.1 christos { 1112 1.1 christos const unsigned int n = (unsigned int)num; 1113 1.1 christos return ((n & 0x1f) << 23); 1114 1.1 christos } 1115 1.1 christos 1116 1.1 christos static __inline tilepro_bundle_bits 1117 1.1 christos create_MMStart_X1(int num) 1118 1.1 christos { 1119 1.1 christos const unsigned int n = (unsigned int)num; 1120 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 54); 1121 1.1 christos } 1122 1.1 christos 1123 1.1 christos static __inline tilepro_bundle_bits 1124 1.1 christos create_MT_Imm15_X1(int num) 1125 1.1 christos { 1126 1.1 christos const unsigned int n = (unsigned int)num; 1127 1.1 christos return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) | 1128 1.1 christos (((tilepro_bundle_bits)(n & 0x00003fc0)) << 37) | 1129 1.1 christos (((tilepro_bundle_bits)(n & 0x00004000)) << 44); 1130 1.1 christos } 1131 1.1 christos 1132 1.1 christos static __inline tilepro_bundle_bits 1133 1.1 christos create_Mode(int num) 1134 1.1 christos { 1135 1.1 christos const unsigned int n = (unsigned int)num; 1136 1.1 christos return (((tilepro_bundle_bits)(n & 0x1)) << 63); 1137 1.1 christos } 1138 1.1 christos 1139 1.1 christos static __inline tilepro_bundle_bits 1140 1.1 christos create_NoRegOpcodeExtension_SN(int num) 1141 1.1 christos { 1142 1.1 christos const unsigned int n = (unsigned int)num; 1143 1.1 christos return ((n & 0xf) << 0); 1144 1.1 christos } 1145 1.1 christos 1146 1.1 christos static __inline tilepro_bundle_bits 1147 1.1 christos create_Opcode_SN(int num) 1148 1.1 christos { 1149 1.1 christos const unsigned int n = (unsigned int)num; 1150 1.1 christos return ((n & 0x3f) << 10); 1151 1.1 christos } 1152 1.1 christos 1153 1.1 christos static __inline tilepro_bundle_bits 1154 1.1 christos create_Opcode_X0(int num) 1155 1.1 christos { 1156 1.1 christos const unsigned int n = (unsigned int)num; 1157 1.1 christos return ((n & 0x7) << 28); 1158 1.1 christos } 1159 1.1 christos 1160 1.1 christos static __inline tilepro_bundle_bits 1161 1.1 christos create_Opcode_X1(int num) 1162 1.1 christos { 1163 1.1 christos const unsigned int n = (unsigned int)num; 1164 1.1 christos return (((tilepro_bundle_bits)(n & 0xf)) << 59); 1165 1.1 christos } 1166 1.1 christos 1167 1.1 christos static __inline tilepro_bundle_bits 1168 1.1 christos create_Opcode_Y0(int num) 1169 1.1 christos { 1170 1.1 christos const unsigned int n = (unsigned int)num; 1171 1.1 christos return ((n & 0xf) << 27); 1172 1.1 christos } 1173 1.1 christos 1174 1.1 christos static __inline tilepro_bundle_bits 1175 1.1 christos create_Opcode_Y1(int num) 1176 1.1 christos { 1177 1.1 christos const unsigned int n = (unsigned int)num; 1178 1.1 christos return (((tilepro_bundle_bits)(n & 0xf)) << 59); 1179 1.1 christos } 1180 1.1 christos 1181 1.1 christos static __inline tilepro_bundle_bits 1182 1.1 christos create_Opcode_Y2(int num) 1183 1.1 christos { 1184 1.1 christos const unsigned int n = (unsigned int)num; 1185 1.1 christos return (((tilepro_bundle_bits)(n & 0x7)) << 56); 1186 1.1 christos } 1187 1.1 christos 1188 1.1 christos static __inline tilepro_bundle_bits 1189 1.1 christos create_RROpcodeExtension_SN(int num) 1190 1.1 christos { 1191 1.1 christos const unsigned int n = (unsigned int)num; 1192 1.1 christos return ((n & 0xf) << 4); 1193 1.1 christos } 1194 1.1 christos 1195 1.1 christos static __inline tilepro_bundle_bits 1196 1.1 christos create_RRROpcodeExtension_X0(int num) 1197 1.1 christos { 1198 1.1 christos const unsigned int n = (unsigned int)num; 1199 1.1 christos return ((n & 0x1ff) << 18); 1200 1.1 christos } 1201 1.1 christos 1202 1.1 christos static __inline tilepro_bundle_bits 1203 1.1 christos create_RRROpcodeExtension_X1(int num) 1204 1.1 christos { 1205 1.1 christos const unsigned int n = (unsigned int)num; 1206 1.1 christos return (((tilepro_bundle_bits)(n & 0x1ff)) << 49); 1207 1.1 christos } 1208 1.1 christos 1209 1.1 christos static __inline tilepro_bundle_bits 1210 1.1 christos create_RRROpcodeExtension_Y0(int num) 1211 1.1 christos { 1212 1.1 christos const unsigned int n = (unsigned int)num; 1213 1.1 christos return ((n & 0x3) << 18); 1214 1.1 christos } 1215 1.1 christos 1216 1.1 christos static __inline tilepro_bundle_bits 1217 1.1 christos create_RRROpcodeExtension_Y1(int num) 1218 1.1 christos { 1219 1.1 christos const unsigned int n = (unsigned int)num; 1220 1.1 christos return (((tilepro_bundle_bits)(n & 0x3)) << 49); 1221 1.1 christos } 1222 1.1 christos 1223 1.1 christos static __inline tilepro_bundle_bits 1224 1.1 christos create_RouteOpcodeExtension_SN(int num) 1225 1.1 christos { 1226 1.1 christos const unsigned int n = (unsigned int)num; 1227 1.1 christos return ((n & 0x3ff) << 0); 1228 1.1 christos } 1229 1.1 christos 1230 1.1 christos static __inline tilepro_bundle_bits 1231 1.1 christos create_S_X0(int num) 1232 1.1 christos { 1233 1.1 christos const unsigned int n = (unsigned int)num; 1234 1.1 christos return ((n & 0x1) << 27); 1235 1.1 christos } 1236 1.1 christos 1237 1.1 christos static __inline tilepro_bundle_bits 1238 1.1 christos create_S_X1(int num) 1239 1.1 christos { 1240 1.1 christos const unsigned int n = (unsigned int)num; 1241 1.1 christos return (((tilepro_bundle_bits)(n & 0x1)) << 58); 1242 1.1 christos } 1243 1.1 christos 1244 1.1 christos static __inline tilepro_bundle_bits 1245 1.1 christos create_ShAmt_X0(int num) 1246 1.1 christos { 1247 1.1 christos const unsigned int n = (unsigned int)num; 1248 1.1 christos return ((n & 0x1f) << 12); 1249 1.1 christos } 1250 1.1 christos 1251 1.1 christos static __inline tilepro_bundle_bits 1252 1.1 christos create_ShAmt_X1(int num) 1253 1.1 christos { 1254 1.1 christos const unsigned int n = (unsigned int)num; 1255 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43); 1256 1.1 christos } 1257 1.1 christos 1258 1.1 christos static __inline tilepro_bundle_bits 1259 1.1 christos create_ShAmt_Y0(int num) 1260 1.1 christos { 1261 1.1 christos const unsigned int n = (unsigned int)num; 1262 1.1 christos return ((n & 0x1f) << 12); 1263 1.1 christos } 1264 1.1 christos 1265 1.1 christos static __inline tilepro_bundle_bits 1266 1.1 christos create_ShAmt_Y1(int num) 1267 1.1 christos { 1268 1.1 christos const unsigned int n = (unsigned int)num; 1269 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43); 1270 1.1 christos } 1271 1.1 christos 1272 1.1 christos static __inline tilepro_bundle_bits 1273 1.1 christos create_SrcA_X0(int num) 1274 1.1 christos { 1275 1.1 christos const unsigned int n = (unsigned int)num; 1276 1.1 christos return ((n & 0x3f) << 6); 1277 1.1 christos } 1278 1.1 christos 1279 1.1 christos static __inline tilepro_bundle_bits 1280 1.1 christos create_SrcA_X1(int num) 1281 1.1 christos { 1282 1.1 christos const unsigned int n = (unsigned int)num; 1283 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 37); 1284 1.1 christos } 1285 1.1 christos 1286 1.1 christos static __inline tilepro_bundle_bits 1287 1.1 christos create_SrcA_Y0(int num) 1288 1.1 christos { 1289 1.1 christos const unsigned int n = (unsigned int)num; 1290 1.1 christos return ((n & 0x3f) << 6); 1291 1.1 christos } 1292 1.1 christos 1293 1.1 christos static __inline tilepro_bundle_bits 1294 1.1 christos create_SrcA_Y1(int num) 1295 1.1 christos { 1296 1.1 christos const unsigned int n = (unsigned int)num; 1297 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 37); 1298 1.1 christos } 1299 1.1 christos 1300 1.1 christos static __inline tilepro_bundle_bits 1301 1.1 christos create_SrcA_Y2(int num) 1302 1.1 christos { 1303 1.1 christos const unsigned int n = (unsigned int)num; 1304 1.1 christos return ((n & 0x00000001) << 26) | 1305 1.1 christos (((tilepro_bundle_bits)(n & 0x0000003e)) << 50); 1306 1.1 christos } 1307 1.1 christos 1308 1.1 christos static __inline tilepro_bundle_bits 1309 1.1 christos create_SrcBDest_Y2(int num) 1310 1.1 christos { 1311 1.1 christos const unsigned int n = (unsigned int)num; 1312 1.1 christos return ((n & 0x3f) << 20); 1313 1.1 christos } 1314 1.1 christos 1315 1.1 christos static __inline tilepro_bundle_bits 1316 1.1 christos create_SrcB_X0(int num) 1317 1.1 christos { 1318 1.1 christos const unsigned int n = (unsigned int)num; 1319 1.1 christos return ((n & 0x3f) << 12); 1320 1.1 christos } 1321 1.1 christos 1322 1.1 christos static __inline tilepro_bundle_bits 1323 1.1 christos create_SrcB_X1(int num) 1324 1.1 christos { 1325 1.1 christos const unsigned int n = (unsigned int)num; 1326 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 43); 1327 1.1 christos } 1328 1.1 christos 1329 1.1 christos static __inline tilepro_bundle_bits 1330 1.1 christos create_SrcB_Y0(int num) 1331 1.1 christos { 1332 1.1 christos const unsigned int n = (unsigned int)num; 1333 1.1 christos return ((n & 0x3f) << 12); 1334 1.1 christos } 1335 1.1 christos 1336 1.1 christos static __inline tilepro_bundle_bits 1337 1.1 christos create_SrcB_Y1(int num) 1338 1.1 christos { 1339 1.1 christos const unsigned int n = (unsigned int)num; 1340 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 43); 1341 1.1 christos } 1342 1.1 christos 1343 1.1 christos static __inline tilepro_bundle_bits 1344 1.1 christos create_Src_SN(int num) 1345 1.1 christos { 1346 1.1 christos const unsigned int n = (unsigned int)num; 1347 1.1 christos return ((n & 0x3) << 0); 1348 1.1 christos } 1349 1.1 christos 1350 1.1 christos static __inline tilepro_bundle_bits 1351 1.1 christos create_UnOpcodeExtension_X0(int num) 1352 1.1 christos { 1353 1.1 christos const unsigned int n = (unsigned int)num; 1354 1.1 christos return ((n & 0x1f) << 12); 1355 1.1 christos } 1356 1.1 christos 1357 1.1 christos static __inline tilepro_bundle_bits 1358 1.1 christos create_UnOpcodeExtension_X1(int num) 1359 1.1 christos { 1360 1.1 christos const unsigned int n = (unsigned int)num; 1361 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43); 1362 1.1 christos } 1363 1.1 christos 1364 1.1 christos static __inline tilepro_bundle_bits 1365 1.1 christos create_UnOpcodeExtension_Y0(int num) 1366 1.1 christos { 1367 1.1 christos const unsigned int n = (unsigned int)num; 1368 1.1 christos return ((n & 0x1f) << 12); 1369 1.1 christos } 1370 1.1 christos 1371 1.1 christos static __inline tilepro_bundle_bits 1372 1.1 christos create_UnOpcodeExtension_Y1(int num) 1373 1.1 christos { 1374 1.1 christos const unsigned int n = (unsigned int)num; 1375 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43); 1376 1.1 christos } 1377 1.1 christos 1378 1.1 christos static __inline tilepro_bundle_bits 1379 1.1 christos create_UnShOpcodeExtension_X0(int num) 1380 1.1 christos { 1381 1.1 christos const unsigned int n = (unsigned int)num; 1382 1.1 christos return ((n & 0x3ff) << 17); 1383 1.1 christos } 1384 1.1 christos 1385 1.1 christos static __inline tilepro_bundle_bits 1386 1.1 christos create_UnShOpcodeExtension_X1(int num) 1387 1.1 christos { 1388 1.1 christos const unsigned int n = (unsigned int)num; 1389 1.1 christos return (((tilepro_bundle_bits)(n & 0x3ff)) << 48); 1390 1.1 christos } 1391 1.1 christos 1392 1.1 christos static __inline tilepro_bundle_bits 1393 1.1 christos create_UnShOpcodeExtension_Y0(int num) 1394 1.1 christos { 1395 1.1 christos const unsigned int n = (unsigned int)num; 1396 1.1 christos return ((n & 0x7) << 17); 1397 1.1 christos } 1398 1.1 christos 1399 1.1 christos static __inline tilepro_bundle_bits 1400 1.1 christos create_UnShOpcodeExtension_Y1(int num) 1401 1.1 christos { 1402 1.1 christos const unsigned int n = (unsigned int)num; 1403 1.1 christos return (((tilepro_bundle_bits)(n & 0x7)) << 48); 1404 1.1 christos } 1405 1.1 christos 1406 1.1 christos 1407 1.1 christos 1408 1.1 christos typedef enum 1409 1.1 christos { 1410 1.1 christos TILEPRO_PIPELINE_X0, 1411 1.1 christos TILEPRO_PIPELINE_X1, 1412 1.1 christos TILEPRO_PIPELINE_Y0, 1413 1.1 christos TILEPRO_PIPELINE_Y1, 1414 1.1 christos TILEPRO_PIPELINE_Y2, 1415 1.1.1.6 christos TILEPRO_NUM_PIPELINE_ENCODINGS 1416 1.1 christos } tilepro_pipeline; 1417 1.1 christos 1418 1.1 christos #define tilepro_is_x_pipeline(p) ((int)(p) <= (int)TILEPRO_PIPELINE_X1) 1419 1.1 christos 1420 1.1 christos typedef enum 1421 1.1 christos { 1422 1.1 christos TILEPRO_OP_TYPE_REGISTER, 1423 1.1 christos TILEPRO_OP_TYPE_IMMEDIATE, 1424 1.1 christos TILEPRO_OP_TYPE_ADDRESS, 1425 1.1 christos TILEPRO_OP_TYPE_SPR 1426 1.1 christos } tilepro_operand_type; 1427 1.1 christos 1428 1.1 christos /* This is the bit that determines if a bundle is in the Y encoding. */ 1429 1.1 christos #define TILEPRO_BUNDLE_Y_ENCODING_MASK ((tilepro_bundle_bits)1 << 63) 1430 1.1 christos 1431 1.1 christos enum 1432 1.1 christos { 1433 1.1 christos /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */ 1434 1.1 christos TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE = 3, 1435 1.1 christos 1436 1.1 christos /* Log base 2 of TILEPRO_BUNDLE_SIZE_IN_BYTES. */ 1437 1.1 christos TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES = 3, 1438 1.1 christos 1439 1.1 christos /* Instructions take this many bytes. */ 1440 1.1 christos TILEPRO_BUNDLE_SIZE_IN_BYTES = 1 << TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES, 1441 1.1 christos 1442 1.1 christos /* Log base 2 of TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES. */ 1443 1.1 christos TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3, 1444 1.1 christos 1445 1.1 christos /* Bundles should be aligned modulo this number of bytes. */ 1446 1.1 christos TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES = 1447 1.1 christos (1 << TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES), 1448 1.1 christos 1449 1.1 christos /* Log base 2 of TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES. */ 1450 1.1 christos TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES = 1, 1451 1.1 christos 1452 1.1 christos /* Static network instructions take this many bytes. */ 1453 1.1 christos TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES = 1454 1.1 christos (1 << TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES), 1455 1.1 christos 1456 1.1 christos /* Number of registers (some are magic, such as network I/O). */ 1457 1.1 christos TILEPRO_NUM_REGISTERS = 64, 1458 1.1 christos 1459 1.1 christos /* Number of static network registers. */ 1460 1.1 christos TILEPRO_NUM_SN_REGISTERS = 4 1461 1.1 christos }; 1462 1.1 christos 1463 1.1 christos 1464 1.1 christos struct tilepro_operand 1465 1.1 christos { 1466 1.1 christos /* Is this operand a register, immediate or address? */ 1467 1.1 christos tilepro_operand_type type; 1468 1.1 christos 1469 1.1 christos /* The default relocation type for this operand. */ 1470 1.1 christos signed int default_reloc : 16; 1471 1.1 christos 1472 1.1 christos /* How many bits is this value? (used for range checking) */ 1473 1.1 christos unsigned int num_bits : 5; 1474 1.1 christos 1475 1.1 christos /* Is the value signed? (used for range checking) */ 1476 1.1 christos unsigned int is_signed : 1; 1477 1.1 christos 1478 1.1 christos /* Is this operand a source register? */ 1479 1.1 christos unsigned int is_src_reg : 1; 1480 1.1 christos 1481 1.1 christos /* Is this operand written? (i.e. is it a destination register) */ 1482 1.1 christos unsigned int is_dest_reg : 1; 1483 1.1 christos 1484 1.1 christos /* Is this operand PC-relative? */ 1485 1.1 christos unsigned int is_pc_relative : 1; 1486 1.1 christos 1487 1.1 christos /* By how many bits do we right shift the value before inserting? */ 1488 1.1 christos unsigned int rightshift : 2; 1489 1.1 christos 1490 1.1 christos /* Return the bits for this operand to be ORed into an existing bundle. */ 1491 1.1 christos tilepro_bundle_bits (*insert) (int op); 1492 1.1 christos 1493 1.1 christos /* Extract this operand and return it. */ 1494 1.1 christos unsigned int (*extract) (tilepro_bundle_bits bundle); 1495 1.1 christos }; 1496 1.1 christos 1497 1.1 christos 1498 1.1 christos extern const struct tilepro_operand tilepro_operands[]; 1499 1.1 christos 1500 1.1 christos /* One finite-state machine per pipe for rapid instruction decoding. */ 1501 1.1 christos extern const unsigned short * const 1502 1.1 christos tilepro_bundle_decoder_fsms[TILEPRO_NUM_PIPELINE_ENCODINGS]; 1503 1.1 christos 1504 1.1 christos 1505 1.1 christos struct tilepro_opcode 1506 1.1 christos { 1507 1.1 christos /* The opcode mnemonic, e.g. "add" */ 1508 1.1 christos const char *name; 1509 1.1 christos 1510 1.1 christos /* The enum value for this mnemonic. */ 1511 1.1 christos tilepro_mnemonic mnemonic; 1512 1.1 christos 1513 1.1 christos /* A bit mask of which of the five pipes this instruction 1514 1.1 christos is compatible with: 1515 1.1 christos X0 0x01 1516 1.1 christos X1 0x02 1517 1.1 christos Y0 0x04 1518 1.1 christos Y1 0x08 1519 1.1 christos Y2 0x10 */ 1520 1.1 christos unsigned char pipes; 1521 1.1 christos 1522 1.1 christos /* How many operands are there? */ 1523 1.1 christos unsigned char num_operands; 1524 1.1 christos 1525 1.1 christos /* Which register does this write implicitly, or TREG_ZERO if none? */ 1526 1.1 christos unsigned char implicitly_written_register; 1527 1.1 christos 1528 1.1 christos /* Can this be bundled with other instructions (almost always true). */ 1529 1.1 christos unsigned char can_bundle; 1530 1.1 christos 1531 1.1 christos /* The description of the operands. Each of these is an 1532 1.1 christos * index into the tilepro_operands[] table. */ 1533 1.1 christos unsigned char operands[TILEPRO_NUM_PIPELINE_ENCODINGS][TILEPRO_MAX_OPERANDS]; 1534 1.1 christos 1535 1.1 christos #if !defined(__KERNEL__) && !defined(_LIBC) 1536 1.1 christos /* A mask of which bits have predefined values for each pipeline. 1537 1.1 christos * This is useful for disassembly. */ 1538 1.1 christos tilepro_bundle_bits fixed_bit_masks[TILEPRO_NUM_PIPELINE_ENCODINGS]; 1539 1.1 christos 1540 1.1 christos /* For each bit set in fixed_bit_masks, what the value is for this 1541 1.1 christos * instruction. */ 1542 1.1 christos tilepro_bundle_bits fixed_bit_values[TILEPRO_NUM_PIPELINE_ENCODINGS]; 1543 1.1 christos #endif 1544 1.1 christos }; 1545 1.1 christos 1546 1.1 christos extern const struct tilepro_opcode tilepro_opcodes[]; 1547 1.1 christos 1548 1.1 christos #if !defined(__KERNEL__) && !defined(_LIBC) 1549 1.1 christos 1550 1.1 christos typedef unsigned short tilepro_sn_instruction_bits; 1551 1.1 christos 1552 1.1 christos struct tilepro_sn_opcode 1553 1.1 christos { 1554 1.1 christos /* The opcode mnemonic, e.g. "add" */ 1555 1.1 christos const char *name; 1556 1.1 christos 1557 1.1 christos /* The enum value for this mnemonic. */ 1558 1.1 christos tilepro_sn_mnemonic mnemonic; 1559 1.1 christos 1560 1.1 christos /* How many operands are there? */ 1561 1.1 christos unsigned char num_operands; 1562 1.1 christos 1563 1.1 christos /* The description of the operands. Each of these is an 1564 1.1 christos * index into the tilepro_operands[] table. */ 1565 1.1 christos unsigned char operands[TILEPRO_SN_MAX_OPERANDS]; 1566 1.1 christos 1567 1.1 christos /* A mask of which bits have predefined values. 1568 1.1 christos * This is useful for disassembly. */ 1569 1.1 christos tilepro_sn_instruction_bits fixed_bit_mask; 1570 1.1 christos 1571 1.1 christos /* For each bit set in fixed_bit_masks, what its value is. */ 1572 1.1 christos tilepro_sn_instruction_bits fixed_bit_values; 1573 1.1 christos }; 1574 1.1 christos 1575 1.1 christos extern const struct tilepro_sn_opcode tilepro_sn_opcodes[]; 1576 1.1 christos 1577 1.1 christos #endif /* !__KERNEL__ && !_LIBC */ 1578 1.1 christos 1579 1.1 christos /* Used for non-textual disassembly into structs. */ 1580 1.1 christos struct tilepro_decoded_instruction 1581 1.1 christos { 1582 1.1 christos const struct tilepro_opcode *opcode; 1583 1.1 christos const struct tilepro_operand *operands[TILEPRO_MAX_OPERANDS]; 1584 1.1 christos int operand_values[TILEPRO_MAX_OPERANDS]; 1585 1.1 christos }; 1586 1.1 christos 1587 1.1 christos 1588 1.1 christos /* Disassemble a bundle into a struct for machine processing. */ 1589 1.1 christos extern int parse_insn_tilepro(tilepro_bundle_bits bits, 1590 1.1 christos unsigned int pc, 1591 1.1 christos struct tilepro_decoded_instruction 1592 1.1 christos decoded[TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE]); 1593 1.1 christos 1594 1.1 christos 1595 1.1 christos /* Given a set of bundle bits and a specific pipe, returns which 1596 1.1 christos * instruction the bundle contains in that pipe. 1597 1.1 christos */ 1598 1.1 christos extern const struct tilepro_opcode * 1599 1.1 christos find_opcode(tilepro_bundle_bits bits, tilepro_pipeline pipe); 1600 1.1 christos 1601 1.1 christos 1602 1.1 christos #if !defined(__KERNEL__) && !defined(_LIBC) 1603 1.1 christos /* Canonical names of all the registers. */ 1604 1.1 christos /* ISSUE: This table lives in "tilepro-dis.c" */ 1605 1.1 christos extern const char * const tilepro_register_names[]; 1606 1.1 christos 1607 1.1 christos /* Descriptor for a special-purpose register. */ 1608 1.1 christos struct tilepro_spr 1609 1.1 christos { 1610 1.1 christos /* The number */ 1611 1.1 christos int number; 1612 1.1 christos 1613 1.1 christos /* The name */ 1614 1.1 christos const char *name; 1615 1.1 christos }; 1616 1.1 christos 1617 1.1 christos /* List of all the SPRs; ordered by increasing number. */ 1618 1.1 christos extern const struct tilepro_spr tilepro_sprs[]; 1619 1.1 christos 1620 1.1 christos /* Number of special-purpose registers. */ 1621 1.1 christos extern const int tilepro_num_sprs; 1622 1.1 christos 1623 1.1 christos extern const char * 1624 1.1 christos get_tilepro_spr_name (int num); 1625 1.1 christos #endif /* !__KERNEL__ && !_LIBC */ 1626 1.1 christos 1627 1.1 christos /* Make a few "tile_" variables to simply common code between 1628 1.1 christos architectures. */ 1629 1.1 christos 1630 1.1 christos typedef tilepro_bundle_bits tile_bundle_bits; 1631 1.1 christos #define TILE_BUNDLE_SIZE_IN_BYTES TILEPRO_BUNDLE_SIZE_IN_BYTES 1632 1.1 christos #define TILE_BUNDLE_ALIGNMENT_IN_BYTES TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES 1633 1.1 christos #define TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES \ 1634 1.1 christos TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES 1635 1.1 christos 1636 1.1 christos #endif /* opcode_tilepro_h */ 1637