1/* Simulator instruction semantics for iq2000bf. 2 3THIS FILE IS MACHINE GENERATED WITH CGEN. 4 5Copyright 1996-2023 Free Software Foundation, Inc. 6 7This file is part of the GNU simulators. 8 9 This file is free software; you can redistribute it and/or modify 10 it under the terms of the GNU General Public License as published by 11 the Free Software Foundation; either version 3, or (at your option) 12 any later version. 13 14 It is distributed in the hope that it will be useful, but WITHOUT 15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 17 License for more details. 18 19 You should have received a copy of the GNU General Public License along 20 with this program; if not, see <http://www.gnu.org/licenses/>. 21 22*/ 23 24#define WANT_CPU iq2000bf 25#define WANT_CPU_IQ2000BF 26 27#include "sim-main.h" 28#include "cgen-mem.h" 29#include "cgen-ops.h" 30 31#undef GET_ATTR 32#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 33 34/* This is used so that we can compile two copies of the semantic code, 35 one with full feature support and one without that runs fast(er). 36 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */ 37#if FAST_P 38#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn) 39#undef CGEN_TRACE_RESULT 40#define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) 41#else 42#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn) 43#endif 44 45/* x-invalid: --invalid-- */ 46 47static SEM_PC 48SEM_FN_NAME (iq2000bf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 49{ 50#define FLD(f) abuf->fields.sfmt_empty.f 51 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 52 int UNUSED written = 0; 53 IADDR UNUSED pc = abuf->addr; 54 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 55 56 { 57 /* Update the recorded pc in the cpu state struct. 58 Only necessary for WITH_SCACHE case, but to avoid the 59 conditional compilation .... */ 60 SET_H_PC (pc); 61 /* Virtual insns have zero size. Overwrite vpc with address of next insn 62 using the default-insn-bitsize spec. When executing insns in parallel 63 we may want to queue the fault and continue execution. */ 64 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 65 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 66 } 67 68 return vpc; 69#undef FLD 70} 71 72/* x-after: --after-- */ 73 74static SEM_PC 75SEM_FN_NAME (iq2000bf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 76{ 77#define FLD(f) abuf->fields.sfmt_empty.f 78 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 79 int UNUSED written = 0; 80 IADDR UNUSED pc = abuf->addr; 81 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 82 83 { 84#if WITH_SCACHE_PBB_IQ2000BF 85 iq2000bf_pbb_after (current_cpu, sem_arg); 86#endif 87 } 88 89 return vpc; 90#undef FLD 91} 92 93/* x-before: --before-- */ 94 95static SEM_PC 96SEM_FN_NAME (iq2000bf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 97{ 98#define FLD(f) abuf->fields.sfmt_empty.f 99 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 100 int UNUSED written = 0; 101 IADDR UNUSED pc = abuf->addr; 102 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 103 104 { 105#if WITH_SCACHE_PBB_IQ2000BF 106 iq2000bf_pbb_before (current_cpu, sem_arg); 107#endif 108 } 109 110 return vpc; 111#undef FLD 112} 113 114/* x-cti-chain: --cti-chain-- */ 115 116static SEM_PC 117SEM_FN_NAME (iq2000bf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 118{ 119#define FLD(f) abuf->fields.sfmt_empty.f 120 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 121 int UNUSED written = 0; 122 IADDR UNUSED pc = abuf->addr; 123 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 124 125 { 126#if WITH_SCACHE_PBB_IQ2000BF 127#ifdef DEFINE_SWITCH 128 vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg, 129 pbb_br_type, pbb_br_npc); 130 BREAK (sem); 131#else 132 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 133 vpc = iq2000bf_pbb_cti_chain (current_cpu, sem_arg, 134 CPU_PBB_BR_TYPE (current_cpu), 135 CPU_PBB_BR_NPC (current_cpu)); 136#endif 137#endif 138 } 139 140 return vpc; 141#undef FLD 142} 143 144/* x-chain: --chain-- */ 145 146static SEM_PC 147SEM_FN_NAME (iq2000bf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 148{ 149#define FLD(f) abuf->fields.sfmt_empty.f 150 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 151 int UNUSED written = 0; 152 IADDR UNUSED pc = abuf->addr; 153 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 154 155 { 156#if WITH_SCACHE_PBB_IQ2000BF 157 vpc = iq2000bf_pbb_chain (current_cpu, sem_arg); 158#ifdef DEFINE_SWITCH 159 BREAK (sem); 160#endif 161#endif 162 } 163 164 return vpc; 165#undef FLD 166} 167 168/* x-begin: --begin-- */ 169 170static SEM_PC 171SEM_FN_NAME (iq2000bf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 172{ 173#define FLD(f) abuf->fields.sfmt_empty.f 174 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 175 int UNUSED written = 0; 176 IADDR UNUSED pc = abuf->addr; 177 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 178 179 { 180#if WITH_SCACHE_PBB_IQ2000BF 181#if defined DEFINE_SWITCH || defined FAST_P 182 /* In the switch case FAST_P is a constant, allowing several optimizations 183 in any called inline functions. */ 184 vpc = iq2000bf_pbb_begin (current_cpu, FAST_P); 185#else 186#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 187 vpc = iq2000bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 188#else 189 vpc = iq2000bf_pbb_begin (current_cpu, 0); 190#endif 191#endif 192#endif 193 } 194 195 return vpc; 196#undef FLD 197} 198 199/* add: add $rd,$rs,$rt */ 200 201static SEM_PC 202SEM_FN_NAME (iq2000bf,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 203{ 204#define FLD(f) abuf->fields.sfmt_mrgb.f 205 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 206 int UNUSED written = 0; 207 IADDR UNUSED pc = abuf->addr; 208 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 209 210 { 211 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 212 SET_H_GR (FLD (f_rd), opval); 213 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 214 } 215 216 return vpc; 217#undef FLD 218} 219 220/* addi: addi $rt,$rs,$lo16 */ 221 222static SEM_PC 223SEM_FN_NAME (iq2000bf,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 224{ 225#define FLD(f) abuf->fields.sfmt_addi.f 226 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 227 int UNUSED written = 0; 228 IADDR UNUSED pc = abuf->addr; 229 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 230 231 { 232 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))); 233 SET_H_GR (FLD (f_rt), opval); 234 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 235 } 236 237 return vpc; 238#undef FLD 239} 240 241/* addiu: addiu $rt,$rs,$lo16 */ 242 243static SEM_PC 244SEM_FN_NAME (iq2000bf,addiu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 245{ 246#define FLD(f) abuf->fields.sfmt_addi.f 247 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 248 int UNUSED written = 0; 249 IADDR UNUSED pc = abuf->addr; 250 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 251 252 { 253 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))); 254 SET_H_GR (FLD (f_rt), opval); 255 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 256 } 257 258 return vpc; 259#undef FLD 260} 261 262/* addu: addu $rd,$rs,$rt */ 263 264static SEM_PC 265SEM_FN_NAME (iq2000bf,addu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 266{ 267#define FLD(f) abuf->fields.sfmt_mrgb.f 268 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 269 int UNUSED written = 0; 270 IADDR UNUSED pc = abuf->addr; 271 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 272 273 { 274 SI opval = ADDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 275 SET_H_GR (FLD (f_rd), opval); 276 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 277 } 278 279 return vpc; 280#undef FLD 281} 282 283/* ado16: ado16 $rd,$rs,$rt */ 284 285static SEM_PC 286SEM_FN_NAME (iq2000bf,ado16) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 287{ 288#define FLD(f) abuf->fields.sfmt_mrgb.f 289 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 290 int UNUSED written = 0; 291 IADDR UNUSED pc = abuf->addr; 292 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 293 294{ 295 HI tmp_high; 296 HI tmp_low; 297 tmp_low = ADDHI (ANDHI (GET_H_GR (FLD (f_rs)), 65535), ANDHI (GET_H_GR (FLD (f_rt)), 65535)); 298 tmp_high = ADDHI (SRLSI (GET_H_GR (FLD (f_rs)), 16), SRLSI (GET_H_GR (FLD (f_rt)), 16)); 299 { 300 SI opval = ORSI (SLLSI (tmp_high, 16), tmp_low); 301 SET_H_GR (FLD (f_rd), opval); 302 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 303 } 304} 305 306 return vpc; 307#undef FLD 308} 309 310/* and: and $rd,$rs,$rt */ 311 312static SEM_PC 313SEM_FN_NAME (iq2000bf,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 314{ 315#define FLD(f) abuf->fields.sfmt_mrgb.f 316 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 317 int UNUSED written = 0; 318 IADDR UNUSED pc = abuf->addr; 319 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 320 321 { 322 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 323 SET_H_GR (FLD (f_rd), opval); 324 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 325 } 326 327 return vpc; 328#undef FLD 329} 330 331/* andi: andi $rt,$rs,$lo16 */ 332 333static SEM_PC 334SEM_FN_NAME (iq2000bf,andi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 335{ 336#define FLD(f) abuf->fields.sfmt_addi.f 337 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 338 int UNUSED written = 0; 339 IADDR UNUSED pc = abuf->addr; 340 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 341 342 { 343 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm))); 344 SET_H_GR (FLD (f_rt), opval); 345 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 346 } 347 348 return vpc; 349#undef FLD 350} 351 352/* andoi: andoi $rt,$rs,$lo16 */ 353 354static SEM_PC 355SEM_FN_NAME (iq2000bf,andoi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 356{ 357#define FLD(f) abuf->fields.sfmt_addi.f 358 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 359 int UNUSED written = 0; 360 IADDR UNUSED pc = abuf->addr; 361 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 362 363 { 364 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (0xffff0000, EXTHISI (TRUNCSIHI (FLD (f_imm))))); 365 SET_H_GR (FLD (f_rt), opval); 366 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 367 } 368 369 return vpc; 370#undef FLD 371} 372 373/* nor: nor $rd,$rs,$rt */ 374 375static SEM_PC 376SEM_FN_NAME (iq2000bf,nor) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 377{ 378#define FLD(f) abuf->fields.sfmt_mrgb.f 379 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 380 int UNUSED written = 0; 381 IADDR UNUSED pc = abuf->addr; 382 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 383 384 { 385 SI opval = INVSI (ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))); 386 SET_H_GR (FLD (f_rd), opval); 387 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 388 } 389 390 return vpc; 391#undef FLD 392} 393 394/* or: or $rd,$rs,$rt */ 395 396static SEM_PC 397SEM_FN_NAME (iq2000bf,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 398{ 399#define FLD(f) abuf->fields.sfmt_mrgb.f 400 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 401 int UNUSED written = 0; 402 IADDR UNUSED pc = abuf->addr; 403 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 404 405 { 406 SI opval = ORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 407 SET_H_GR (FLD (f_rd), opval); 408 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 409 } 410 411 return vpc; 412#undef FLD 413} 414 415/* ori: ori $rt,$rs,$lo16 */ 416 417static SEM_PC 418SEM_FN_NAME (iq2000bf,ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 419{ 420#define FLD(f) abuf->fields.sfmt_addi.f 421 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 422 int UNUSED written = 0; 423 IADDR UNUSED pc = abuf->addr; 424 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 425 426 { 427 SI opval = ORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm))); 428 SET_H_GR (FLD (f_rt), opval); 429 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 430 } 431 432 return vpc; 433#undef FLD 434} 435 436/* ram: ram $rd,$rt,$shamt,$maskl,$maskr */ 437 438static SEM_PC 439SEM_FN_NAME (iq2000bf,ram) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 440{ 441#define FLD(f) abuf->fields.sfmt_ram.f 442 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 443 int UNUSED written = 0; 444 IADDR UNUSED pc = abuf->addr; 445 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 446 447{ 448 { 449 SI opval = RORSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 450 SET_H_GR (FLD (f_rd), opval); 451 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 452 } 453 { 454 SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SRLSI (0xffffffff, FLD (f_maskl))); 455 SET_H_GR (FLD (f_rd), opval); 456 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 457 } 458 { 459 SI opval = ANDSI (GET_H_GR (FLD (f_rd)), SLLSI (0xffffffff, FLD (f_rs))); 460 SET_H_GR (FLD (f_rd), opval); 461 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 462 } 463} 464 465 return vpc; 466#undef FLD 467} 468 469/* sll: sll $rd,$rt,$shamt */ 470 471static SEM_PC 472SEM_FN_NAME (iq2000bf,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 473{ 474#define FLD(f) abuf->fields.sfmt_ram.f 475 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 476 int UNUSED written = 0; 477 IADDR UNUSED pc = abuf->addr; 478 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 479 480 { 481 SI opval = SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 482 SET_H_GR (FLD (f_rd), opval); 483 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 484 } 485 486 return vpc; 487#undef FLD 488} 489 490/* sllv: sllv $rd,$rt,$rs */ 491 492static SEM_PC 493SEM_FN_NAME (iq2000bf,sllv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 494{ 495#define FLD(f) abuf->fields.sfmt_mrgb.f 496 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 497 int UNUSED written = 0; 498 IADDR UNUSED pc = abuf->addr; 499 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 500 501 { 502 SI opval = SLLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31)); 503 SET_H_GR (FLD (f_rd), opval); 504 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 505 } 506 507 return vpc; 508#undef FLD 509} 510 511/* slmv: slmv $rd,$rt,$rs,$shamt */ 512 513static SEM_PC 514SEM_FN_NAME (iq2000bf,slmv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 515{ 516#define FLD(f) abuf->fields.sfmt_ram.f 517 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 518 int UNUSED written = 0; 519 IADDR UNUSED pc = abuf->addr; 520 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 521 522 { 523 SI opval = ANDSI (SLLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SRLSI (0xffffffff, GET_H_GR (FLD (f_rs)))); 524 SET_H_GR (FLD (f_rd), opval); 525 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 526 } 527 528 return vpc; 529#undef FLD 530} 531 532/* slt: slt $rd,$rs,$rt */ 533 534static SEM_PC 535SEM_FN_NAME (iq2000bf,slt) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 536{ 537#define FLD(f) abuf->fields.sfmt_mrgb.f 538 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 539 int UNUSED written = 0; 540 IADDR UNUSED pc = abuf->addr; 541 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 542 543if (LTSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 544 { 545 SI opval = 1; 546 SET_H_GR (FLD (f_rd), opval); 547 written |= (1 << 2); 548 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 549 } 550} else { 551 { 552 SI opval = 0; 553 SET_H_GR (FLD (f_rd), opval); 554 written |= (1 << 2); 555 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 556 } 557} 558 559 abuf->written = written; 560 return vpc; 561#undef FLD 562} 563 564/* slti: slti $rt,$rs,$imm */ 565 566static SEM_PC 567SEM_FN_NAME (iq2000bf,slti) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 568{ 569#define FLD(f) abuf->fields.sfmt_addi.f 570 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 571 int UNUSED written = 0; 572 IADDR UNUSED pc = abuf->addr; 573 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 574 575if (LTSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) { 576 { 577 SI opval = 1; 578 SET_H_GR (FLD (f_rt), opval); 579 written |= (1 << 2); 580 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 581 } 582} else { 583 { 584 SI opval = 0; 585 SET_H_GR (FLD (f_rt), opval); 586 written |= (1 << 2); 587 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 588 } 589} 590 591 abuf->written = written; 592 return vpc; 593#undef FLD 594} 595 596/* sltiu: sltiu $rt,$rs,$imm */ 597 598static SEM_PC 599SEM_FN_NAME (iq2000bf,sltiu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 600{ 601#define FLD(f) abuf->fields.sfmt_addi.f 602 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 603 int UNUSED written = 0; 604 IADDR UNUSED pc = abuf->addr; 605 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 606 607if (LTUSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))) { 608 { 609 SI opval = 1; 610 SET_H_GR (FLD (f_rt), opval); 611 written |= (1 << 2); 612 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 613 } 614} else { 615 { 616 SI opval = 0; 617 SET_H_GR (FLD (f_rt), opval); 618 written |= (1 << 2); 619 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 620 } 621} 622 623 abuf->written = written; 624 return vpc; 625#undef FLD 626} 627 628/* sltu: sltu $rd,$rs,$rt */ 629 630static SEM_PC 631SEM_FN_NAME (iq2000bf,sltu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 632{ 633#define FLD(f) abuf->fields.sfmt_mrgb.f 634 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 635 int UNUSED written = 0; 636 IADDR UNUSED pc = abuf->addr; 637 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 638 639if (LTUSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 640 { 641 SI opval = 1; 642 SET_H_GR (FLD (f_rd), opval); 643 written |= (1 << 2); 644 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 645 } 646} else { 647 { 648 SI opval = 0; 649 SET_H_GR (FLD (f_rd), opval); 650 written |= (1 << 2); 651 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 652 } 653} 654 655 abuf->written = written; 656 return vpc; 657#undef FLD 658} 659 660/* sra: sra $rd,$rt,$shamt */ 661 662static SEM_PC 663SEM_FN_NAME (iq2000bf,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 664{ 665#define FLD(f) abuf->fields.sfmt_ram.f 666 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 667 int UNUSED written = 0; 668 IADDR UNUSED pc = abuf->addr; 669 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 670 671 { 672 SI opval = SRASI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 673 SET_H_GR (FLD (f_rd), opval); 674 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 675 } 676 677 return vpc; 678#undef FLD 679} 680 681/* srav: srav $rd,$rt,$rs */ 682 683static SEM_PC 684SEM_FN_NAME (iq2000bf,srav) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 685{ 686#define FLD(f) abuf->fields.sfmt_mrgb.f 687 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 688 int UNUSED written = 0; 689 IADDR UNUSED pc = abuf->addr; 690 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 691 692 { 693 SI opval = SRASI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31)); 694 SET_H_GR (FLD (f_rd), opval); 695 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 696 } 697 698 return vpc; 699#undef FLD 700} 701 702/* srl: srl $rd,$rt,$shamt */ 703 704static SEM_PC 705SEM_FN_NAME (iq2000bf,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 706{ 707#define FLD(f) abuf->fields.sfmt_ram.f 708 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 709 int UNUSED written = 0; 710 IADDR UNUSED pc = abuf->addr; 711 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 712 713 { 714 SI opval = SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)); 715 SET_H_GR (FLD (f_rd), opval); 716 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 717 } 718 719 return vpc; 720#undef FLD 721} 722 723/* srlv: srlv $rd,$rt,$rs */ 724 725static SEM_PC 726SEM_FN_NAME (iq2000bf,srlv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 727{ 728#define FLD(f) abuf->fields.sfmt_mrgb.f 729 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 730 int UNUSED written = 0; 731 IADDR UNUSED pc = abuf->addr; 732 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 733 734 { 735 SI opval = SRLSI (GET_H_GR (FLD (f_rt)), ANDSI (GET_H_GR (FLD (f_rs)), 31)); 736 SET_H_GR (FLD (f_rd), opval); 737 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 738 } 739 740 return vpc; 741#undef FLD 742} 743 744/* srmv: srmv $rd,$rt,$rs,$shamt */ 745 746static SEM_PC 747SEM_FN_NAME (iq2000bf,srmv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 748{ 749#define FLD(f) abuf->fields.sfmt_ram.f 750 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 751 int UNUSED written = 0; 752 IADDR UNUSED pc = abuf->addr; 753 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 754 755 { 756 SI opval = ANDSI (SRLSI (GET_H_GR (FLD (f_rt)), FLD (f_shamt)), SLLSI (0xffffffff, GET_H_GR (FLD (f_rs)))); 757 SET_H_GR (FLD (f_rd), opval); 758 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 759 } 760 761 return vpc; 762#undef FLD 763} 764 765/* sub: sub $rd,$rs,$rt */ 766 767static SEM_PC 768SEM_FN_NAME (iq2000bf,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 769{ 770#define FLD(f) abuf->fields.sfmt_mrgb.f 771 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 772 int UNUSED written = 0; 773 IADDR UNUSED pc = abuf->addr; 774 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 775 776 { 777 SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 778 SET_H_GR (FLD (f_rd), opval); 779 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 780 } 781 782 return vpc; 783#undef FLD 784} 785 786/* subu: subu $rd,$rs,$rt */ 787 788static SEM_PC 789SEM_FN_NAME (iq2000bf,subu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 790{ 791#define FLD(f) abuf->fields.sfmt_mrgb.f 792 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 793 int UNUSED written = 0; 794 IADDR UNUSED pc = abuf->addr; 795 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 796 797 { 798 SI opval = SUBSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 799 SET_H_GR (FLD (f_rd), opval); 800 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 801 } 802 803 return vpc; 804#undef FLD 805} 806 807/* xor: xor $rd,$rs,$rt */ 808 809static SEM_PC 810SEM_FN_NAME (iq2000bf,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 811{ 812#define FLD(f) abuf->fields.sfmt_mrgb.f 813 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 814 int UNUSED written = 0; 815 IADDR UNUSED pc = abuf->addr; 816 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 817 818 { 819 SI opval = XORSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt))); 820 SET_H_GR (FLD (f_rd), opval); 821 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 822 } 823 824 return vpc; 825#undef FLD 826} 827 828/* xori: xori $rt,$rs,$lo16 */ 829 830static SEM_PC 831SEM_FN_NAME (iq2000bf,xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 832{ 833#define FLD(f) abuf->fields.sfmt_addi.f 834 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 835 int UNUSED written = 0; 836 IADDR UNUSED pc = abuf->addr; 837 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 838 839 { 840 SI opval = XORSI (GET_H_GR (FLD (f_rs)), ZEXTSISI (FLD (f_imm))); 841 SET_H_GR (FLD (f_rt), opval); 842 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 843 } 844 845 return vpc; 846#undef FLD 847} 848 849/* bbi: bbi $rs($bitnum),$offset */ 850 851static SEM_PC 852SEM_FN_NAME (iq2000bf,bbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 853{ 854#define FLD(f) abuf->fields.sfmt_bbi.f 855 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 856 int UNUSED written = 0; 857 IADDR UNUSED pc = abuf->addr; 858 SEM_BRANCH_INIT 859 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 860 861if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt)))) { 862{ 863 { 864 USI opval = FLD (i_offset); 865 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 866 written |= (1 << 3); 867 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 868 } 869} 870} 871 872 abuf->written = written; 873 SEM_BRANCH_FINI (vpc); 874 return vpc; 875#undef FLD 876} 877 878/* bbin: bbin $rs($bitnum),$offset */ 879 880static SEM_PC 881SEM_FN_NAME (iq2000bf,bbin) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 882{ 883#define FLD(f) abuf->fields.sfmt_bbi.f 884 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 885 int UNUSED written = 0; 886 IADDR UNUSED pc = abuf->addr; 887 SEM_BRANCH_INIT 888 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 889 890if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, FLD (f_rt))))) { 891{ 892 { 893 USI opval = FLD (i_offset); 894 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 895 written |= (1 << 3); 896 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 897 } 898} 899} 900 901 abuf->written = written; 902 SEM_BRANCH_FINI (vpc); 903 return vpc; 904#undef FLD 905} 906 907/* bbv: bbv $rs,$rt,$offset */ 908 909static SEM_PC 910SEM_FN_NAME (iq2000bf,bbv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 911{ 912#define FLD(f) abuf->fields.sfmt_bbi.f 913 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 914 int UNUSED written = 0; 915 IADDR UNUSED pc = abuf->addr; 916 SEM_BRANCH_INIT 917 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 918 919if (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31)))) { 920{ 921 { 922 USI opval = FLD (i_offset); 923 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 924 written |= (1 << 3); 925 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 926 } 927} 928} 929 930 abuf->written = written; 931 SEM_BRANCH_FINI (vpc); 932 return vpc; 933#undef FLD 934} 935 936/* bbvn: bbvn $rs,$rt,$offset */ 937 938static SEM_PC 939SEM_FN_NAME (iq2000bf,bbvn) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 940{ 941#define FLD(f) abuf->fields.sfmt_bbi.f 942 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 943 int UNUSED written = 0; 944 IADDR UNUSED pc = abuf->addr; 945 SEM_BRANCH_INIT 946 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 947 948if (NOTSI (ANDSI (GET_H_GR (FLD (f_rs)), SLLSI (1, ANDSI (GET_H_GR (FLD (f_rt)), 31))))) { 949{ 950 { 951 USI opval = FLD (i_offset); 952 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 953 written |= (1 << 3); 954 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 955 } 956} 957} 958 959 abuf->written = written; 960 SEM_BRANCH_FINI (vpc); 961 return vpc; 962#undef FLD 963} 964 965/* beq: beq $rs,$rt,$offset */ 966 967static SEM_PC 968SEM_FN_NAME (iq2000bf,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 969{ 970#define FLD(f) abuf->fields.sfmt_bbi.f 971 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 972 int UNUSED written = 0; 973 IADDR UNUSED pc = abuf->addr; 974 SEM_BRANCH_INIT 975 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 976 977if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 978{ 979 { 980 USI opval = FLD (i_offset); 981 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 982 written |= (1 << 3); 983 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 984 } 985} 986} 987 988 abuf->written = written; 989 SEM_BRANCH_FINI (vpc); 990 return vpc; 991#undef FLD 992} 993 994/* beql: beql $rs,$rt,$offset */ 995 996static SEM_PC 997SEM_FN_NAME (iq2000bf,beql) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 998{ 999#define FLD(f) abuf->fields.sfmt_bbi.f 1000 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1001 int UNUSED written = 0; 1002 IADDR UNUSED pc = abuf->addr; 1003 SEM_BRANCH_INIT 1004 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1005 1006if (EQSI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 1007{ 1008 { 1009 USI opval = FLD (i_offset); 1010 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1011 written |= (1 << 3); 1012 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1013 } 1014} 1015} else { 1016if (1) 1017 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1018} 1019 1020 abuf->written = written; 1021 SEM_BRANCH_FINI (vpc); 1022 return vpc; 1023#undef FLD 1024} 1025 1026/* bgez: bgez $rs,$offset */ 1027 1028static SEM_PC 1029SEM_FN_NAME (iq2000bf,bgez) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1030{ 1031#define FLD(f) abuf->fields.sfmt_bbi.f 1032 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1033 int UNUSED written = 0; 1034 IADDR UNUSED pc = abuf->addr; 1035 SEM_BRANCH_INIT 1036 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1037 1038if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1039{ 1040 { 1041 USI opval = FLD (i_offset); 1042 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1043 written |= (1 << 2); 1044 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1045 } 1046} 1047} 1048 1049 abuf->written = written; 1050 SEM_BRANCH_FINI (vpc); 1051 return vpc; 1052#undef FLD 1053} 1054 1055/* bgezal: bgezal $rs,$offset */ 1056 1057static SEM_PC 1058SEM_FN_NAME (iq2000bf,bgezal) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1059{ 1060#define FLD(f) abuf->fields.sfmt_bbi.f 1061 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1062 int UNUSED written = 0; 1063 IADDR UNUSED pc = abuf->addr; 1064 SEM_BRANCH_INIT 1065 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1066 1067if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1068{ 1069 { 1070 SI opval = ADDSI (pc, 8); 1071 SET_H_GR (((UINT) 31), opval); 1072 written |= (1 << 3); 1073 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1074 } 1075{ 1076 { 1077 USI opval = FLD (i_offset); 1078 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1079 written |= (1 << 4); 1080 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1081 } 1082} 1083} 1084} 1085 1086 abuf->written = written; 1087 SEM_BRANCH_FINI (vpc); 1088 return vpc; 1089#undef FLD 1090} 1091 1092/* bgezall: bgezall $rs,$offset */ 1093 1094static SEM_PC 1095SEM_FN_NAME (iq2000bf,bgezall) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1096{ 1097#define FLD(f) abuf->fields.sfmt_bbi.f 1098 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1099 int UNUSED written = 0; 1100 IADDR UNUSED pc = abuf->addr; 1101 SEM_BRANCH_INIT 1102 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1103 1104if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1105{ 1106 { 1107 SI opval = ADDSI (pc, 8); 1108 SET_H_GR (((UINT) 31), opval); 1109 written |= (1 << 3); 1110 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1111 } 1112{ 1113 { 1114 USI opval = FLD (i_offset); 1115 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1116 written |= (1 << 4); 1117 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1118 } 1119} 1120} 1121} else { 1122if (1) 1123 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1124} 1125 1126 abuf->written = written; 1127 SEM_BRANCH_FINI (vpc); 1128 return vpc; 1129#undef FLD 1130} 1131 1132/* bgezl: bgezl $rs,$offset */ 1133 1134static SEM_PC 1135SEM_FN_NAME (iq2000bf,bgezl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1136{ 1137#define FLD(f) abuf->fields.sfmt_bbi.f 1138 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1139 int UNUSED written = 0; 1140 IADDR UNUSED pc = abuf->addr; 1141 SEM_BRANCH_INIT 1142 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1143 1144if (GESI (GET_H_GR (FLD (f_rs)), 0)) { 1145{ 1146 { 1147 USI opval = FLD (i_offset); 1148 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1149 written |= (1 << 2); 1150 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1151 } 1152} 1153} else { 1154if (1) 1155 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1156} 1157 1158 abuf->written = written; 1159 SEM_BRANCH_FINI (vpc); 1160 return vpc; 1161#undef FLD 1162} 1163 1164/* bltz: bltz $rs,$offset */ 1165 1166static SEM_PC 1167SEM_FN_NAME (iq2000bf,bltz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1168{ 1169#define FLD(f) abuf->fields.sfmt_bbi.f 1170 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1171 int UNUSED written = 0; 1172 IADDR UNUSED pc = abuf->addr; 1173 SEM_BRANCH_INIT 1174 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1175 1176if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1177{ 1178 { 1179 USI opval = FLD (i_offset); 1180 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1181 written |= (1 << 2); 1182 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1183 } 1184} 1185} 1186 1187 abuf->written = written; 1188 SEM_BRANCH_FINI (vpc); 1189 return vpc; 1190#undef FLD 1191} 1192 1193/* bltzl: bltzl $rs,$offset */ 1194 1195static SEM_PC 1196SEM_FN_NAME (iq2000bf,bltzl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1197{ 1198#define FLD(f) abuf->fields.sfmt_bbi.f 1199 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1200 int UNUSED written = 0; 1201 IADDR UNUSED pc = abuf->addr; 1202 SEM_BRANCH_INIT 1203 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1204 1205if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1206{ 1207 { 1208 USI opval = FLD (i_offset); 1209 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1210 written |= (1 << 2); 1211 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1212 } 1213} 1214} else { 1215if (1) 1216 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1217} 1218 1219 abuf->written = written; 1220 SEM_BRANCH_FINI (vpc); 1221 return vpc; 1222#undef FLD 1223} 1224 1225/* bltzal: bltzal $rs,$offset */ 1226 1227static SEM_PC 1228SEM_FN_NAME (iq2000bf,bltzal) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1229{ 1230#define FLD(f) abuf->fields.sfmt_bbi.f 1231 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1232 int UNUSED written = 0; 1233 IADDR UNUSED pc = abuf->addr; 1234 SEM_BRANCH_INIT 1235 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1236 1237if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1238{ 1239 { 1240 SI opval = ADDSI (pc, 8); 1241 SET_H_GR (((UINT) 31), opval); 1242 written |= (1 << 3); 1243 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1244 } 1245{ 1246 { 1247 USI opval = FLD (i_offset); 1248 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1249 written |= (1 << 4); 1250 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1251 } 1252} 1253} 1254} 1255 1256 abuf->written = written; 1257 SEM_BRANCH_FINI (vpc); 1258 return vpc; 1259#undef FLD 1260} 1261 1262/* bltzall: bltzall $rs,$offset */ 1263 1264static SEM_PC 1265SEM_FN_NAME (iq2000bf,bltzall) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1266{ 1267#define FLD(f) abuf->fields.sfmt_bbi.f 1268 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1269 int UNUSED written = 0; 1270 IADDR UNUSED pc = abuf->addr; 1271 SEM_BRANCH_INIT 1272 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1273 1274if (LTSI (GET_H_GR (FLD (f_rs)), 0)) { 1275{ 1276 { 1277 SI opval = ADDSI (pc, 8); 1278 SET_H_GR (((UINT) 31), opval); 1279 written |= (1 << 3); 1280 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1281 } 1282{ 1283 { 1284 USI opval = FLD (i_offset); 1285 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1286 written |= (1 << 4); 1287 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1288 } 1289} 1290} 1291} else { 1292if (1) 1293 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1294} 1295 1296 abuf->written = written; 1297 SEM_BRANCH_FINI (vpc); 1298 return vpc; 1299#undef FLD 1300} 1301 1302/* bmb0: bmb0 $rs,$rt,$offset */ 1303 1304static SEM_PC 1305SEM_FN_NAME (iq2000bf,bmb0) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1306{ 1307#define FLD(f) abuf->fields.sfmt_bbi.f 1308 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1309 int UNUSED written = 0; 1310 IADDR UNUSED pc = abuf->addr; 1311 SEM_BRANCH_INIT 1312 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1313 1314if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) { 1315{ 1316 { 1317 USI opval = FLD (i_offset); 1318 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1319 written |= (1 << 3); 1320 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1321 } 1322} 1323} 1324 1325 abuf->written = written; 1326 SEM_BRANCH_FINI (vpc); 1327 return vpc; 1328#undef FLD 1329} 1330 1331/* bmb1: bmb1 $rs,$rt,$offset */ 1332 1333static SEM_PC 1334SEM_FN_NAME (iq2000bf,bmb1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1335{ 1336#define FLD(f) abuf->fields.sfmt_bbi.f 1337 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1338 int UNUSED written = 0; 1339 IADDR UNUSED pc = abuf->addr; 1340 SEM_BRANCH_INIT 1341 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1342 1343if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) { 1344{ 1345 { 1346 USI opval = FLD (i_offset); 1347 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1348 written |= (1 << 3); 1349 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1350 } 1351} 1352} 1353 1354 abuf->written = written; 1355 SEM_BRANCH_FINI (vpc); 1356 return vpc; 1357#undef FLD 1358} 1359 1360/* bmb2: bmb2 $rs,$rt,$offset */ 1361 1362static SEM_PC 1363SEM_FN_NAME (iq2000bf,bmb2) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1364{ 1365#define FLD(f) abuf->fields.sfmt_bbi.f 1366 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1367 int UNUSED written = 0; 1368 IADDR UNUSED pc = abuf->addr; 1369 SEM_BRANCH_INIT 1370 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1371 1372if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) { 1373{ 1374 { 1375 USI opval = FLD (i_offset); 1376 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1377 written |= (1 << 3); 1378 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1379 } 1380} 1381} 1382 1383 abuf->written = written; 1384 SEM_BRANCH_FINI (vpc); 1385 return vpc; 1386#undef FLD 1387} 1388 1389/* bmb3: bmb3 $rs,$rt,$offset */ 1390 1391static SEM_PC 1392SEM_FN_NAME (iq2000bf,bmb3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1393{ 1394#define FLD(f) abuf->fields.sfmt_bbi.f 1395 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1396 int UNUSED written = 0; 1397 IADDR UNUSED pc = abuf->addr; 1398 SEM_BRANCH_INIT 1399 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1400 1401if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) { 1402{ 1403 { 1404 USI opval = FLD (i_offset); 1405 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1406 written |= (1 << 3); 1407 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1408 } 1409} 1410} 1411 1412 abuf->written = written; 1413 SEM_BRANCH_FINI (vpc); 1414 return vpc; 1415#undef FLD 1416} 1417 1418/* bne: bne $rs,$rt,$offset */ 1419 1420static SEM_PC 1421SEM_FN_NAME (iq2000bf,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1422{ 1423#define FLD(f) abuf->fields.sfmt_bbi.f 1424 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1425 int UNUSED written = 0; 1426 IADDR UNUSED pc = abuf->addr; 1427 SEM_BRANCH_INIT 1428 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1429 1430if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 1431{ 1432 { 1433 USI opval = FLD (i_offset); 1434 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1435 written |= (1 << 3); 1436 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1437 } 1438} 1439} 1440 1441 abuf->written = written; 1442 SEM_BRANCH_FINI (vpc); 1443 return vpc; 1444#undef FLD 1445} 1446 1447/* bnel: bnel $rs,$rt,$offset */ 1448 1449static SEM_PC 1450SEM_FN_NAME (iq2000bf,bnel) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1451{ 1452#define FLD(f) abuf->fields.sfmt_bbi.f 1453 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1454 int UNUSED written = 0; 1455 IADDR UNUSED pc = abuf->addr; 1456 SEM_BRANCH_INIT 1457 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1458 1459if (NESI (GET_H_GR (FLD (f_rs)), GET_H_GR (FLD (f_rt)))) { 1460{ 1461 { 1462 USI opval = FLD (i_offset); 1463 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1464 written |= (1 << 3); 1465 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1466 } 1467} 1468} else { 1469if (1) 1470 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1471} 1472 1473 abuf->written = written; 1474 SEM_BRANCH_FINI (vpc); 1475 return vpc; 1476#undef FLD 1477} 1478 1479/* jalr: jalr $rd,$rs */ 1480 1481static SEM_PC 1482SEM_FN_NAME (iq2000bf,jalr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1483{ 1484#define FLD(f) abuf->fields.sfmt_mrgb.f 1485 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1486 int UNUSED written = 0; 1487 IADDR UNUSED pc = abuf->addr; 1488 SEM_BRANCH_INIT 1489 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1490 1491{ 1492{ 1493 { 1494 SI opval = ADDSI (pc, 8); 1495 SET_H_GR (FLD (f_rd), opval); 1496 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1497 } 1498 { 1499 USI opval = GET_H_GR (FLD (f_rs)); 1500 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1501 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1502 } 1503} 1504} 1505 1506 SEM_BRANCH_FINI (vpc); 1507 return vpc; 1508#undef FLD 1509} 1510 1511/* jr: jr $rs */ 1512 1513static SEM_PC 1514SEM_FN_NAME (iq2000bf,jr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1515{ 1516#define FLD(f) abuf->fields.sfmt_bbi.f 1517 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1518 int UNUSED written = 0; 1519 IADDR UNUSED pc = abuf->addr; 1520 SEM_BRANCH_INIT 1521 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1522 1523{ 1524 { 1525 USI opval = GET_H_GR (FLD (f_rs)); 1526 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1527 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1528 } 1529} 1530 1531 SEM_BRANCH_FINI (vpc); 1532 return vpc; 1533#undef FLD 1534} 1535 1536/* lb: lb $rt,$lo16($base) */ 1537 1538static SEM_PC 1539SEM_FN_NAME (iq2000bf,lb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1540{ 1541#define FLD(f) abuf->fields.sfmt_addi.f 1542 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1543 int UNUSED written = 0; 1544 IADDR UNUSED pc = abuf->addr; 1545 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1546 1547 { 1548 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1549 SET_H_GR (FLD (f_rt), opval); 1550 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1551 } 1552 1553 return vpc; 1554#undef FLD 1555} 1556 1557/* lbu: lbu $rt,$lo16($base) */ 1558 1559static SEM_PC 1560SEM_FN_NAME (iq2000bf,lbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1561{ 1562#define FLD(f) abuf->fields.sfmt_addi.f 1563 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1564 int UNUSED written = 0; 1565 IADDR UNUSED pc = abuf->addr; 1566 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1567 1568 { 1569 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1570 SET_H_GR (FLD (f_rt), opval); 1571 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1572 } 1573 1574 return vpc; 1575#undef FLD 1576} 1577 1578/* lh: lh $rt,$lo16($base) */ 1579 1580static SEM_PC 1581SEM_FN_NAME (iq2000bf,lh) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1582{ 1583#define FLD(f) abuf->fields.sfmt_addi.f 1584 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1585 int UNUSED written = 0; 1586 IADDR UNUSED pc = abuf->addr; 1587 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1588 1589 { 1590 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1591 SET_H_GR (FLD (f_rt), opval); 1592 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1593 } 1594 1595 return vpc; 1596#undef FLD 1597} 1598 1599/* lhu: lhu $rt,$lo16($base) */ 1600 1601static SEM_PC 1602SEM_FN_NAME (iq2000bf,lhu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1603{ 1604#define FLD(f) abuf->fields.sfmt_addi.f 1605 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1606 int UNUSED written = 0; 1607 IADDR UNUSED pc = abuf->addr; 1608 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1609 1610 { 1611 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))))); 1612 SET_H_GR (FLD (f_rt), opval); 1613 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1614 } 1615 1616 return vpc; 1617#undef FLD 1618} 1619 1620/* lui: lui $rt,$hi16 */ 1621 1622static SEM_PC 1623SEM_FN_NAME (iq2000bf,lui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1624{ 1625#define FLD(f) abuf->fields.sfmt_addi.f 1626 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1627 int UNUSED written = 0; 1628 IADDR UNUSED pc = abuf->addr; 1629 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1630 1631 { 1632 SI opval = SLLSI (FLD (f_imm), 16); 1633 SET_H_GR (FLD (f_rt), opval); 1634 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1635 } 1636 1637 return vpc; 1638#undef FLD 1639} 1640 1641/* lw: lw $rt,$lo16($base) */ 1642 1643static SEM_PC 1644SEM_FN_NAME (iq2000bf,lw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1645{ 1646#define FLD(f) abuf->fields.sfmt_addi.f 1647 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1648 int UNUSED written = 0; 1649 IADDR UNUSED pc = abuf->addr; 1650 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1651 1652 { 1653 SI opval = GETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm))))); 1654 SET_H_GR (FLD (f_rt), opval); 1655 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1656 } 1657 1658 return vpc; 1659#undef FLD 1660} 1661 1662/* sb: sb $rt,$lo16($base) */ 1663 1664static SEM_PC 1665SEM_FN_NAME (iq2000bf,sb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1666{ 1667#define FLD(f) abuf->fields.sfmt_addi.f 1668 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1669 int UNUSED written = 0; 1670 IADDR UNUSED pc = abuf->addr; 1671 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1672 1673 { 1674 QI opval = ANDQI (GET_H_GR (FLD (f_rt)), 255); 1675 SETMEMQI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval); 1676 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 1677 } 1678 1679 return vpc; 1680#undef FLD 1681} 1682 1683/* sh: sh $rt,$lo16($base) */ 1684 1685static SEM_PC 1686SEM_FN_NAME (iq2000bf,sh) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1687{ 1688#define FLD(f) abuf->fields.sfmt_addi.f 1689 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1690 int UNUSED written = 0; 1691 IADDR UNUSED pc = abuf->addr; 1692 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1693 1694 { 1695 HI opval = ANDHI (GET_H_GR (FLD (f_rt)), 65535); 1696 SETMEMHI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval); 1697 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 1698 } 1699 1700 return vpc; 1701#undef FLD 1702} 1703 1704/* sw: sw $rt,$lo16($base) */ 1705 1706static SEM_PC 1707SEM_FN_NAME (iq2000bf,sw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1708{ 1709#define FLD(f) abuf->fields.sfmt_addi.f 1710 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1711 int UNUSED written = 0; 1712 IADDR UNUSED pc = abuf->addr; 1713 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1714 1715 { 1716 SI opval = GET_H_GR (FLD (f_rt)); 1717 SETMEMSI (current_cpu, pc, ADDSI (GET_H_GR (FLD (f_rs)), EXTHISI (TRUNCSIHI (FLD (f_imm)))), opval); 1718 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 1719 } 1720 1721 return vpc; 1722#undef FLD 1723} 1724 1725/* break: break */ 1726 1727static SEM_PC 1728SEM_FN_NAME (iq2000bf,break) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1729{ 1730#define FLD(f) abuf->fields.sfmt_empty.f 1731 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1732 int UNUSED written = 0; 1733 IADDR UNUSED pc = abuf->addr; 1734 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1735 1736do_break (current_cpu, pc); 1737 1738 return vpc; 1739#undef FLD 1740} 1741 1742/* syscall: syscall */ 1743 1744static SEM_PC 1745SEM_FN_NAME (iq2000bf,syscall) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1746{ 1747#define FLD(f) abuf->fields.sfmt_empty.f 1748 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1749 int UNUSED written = 0; 1750 IADDR pc = abuf->addr; 1751 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1752 1753 do_syscall (current_cpu, pc); 1754 1755 return vpc; 1756#undef FLD 1757} 1758 1759/* andoui: andoui $rt,$rs,$hi16 */ 1760 1761static SEM_PC 1762SEM_FN_NAME (iq2000bf,andoui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1763{ 1764#define FLD(f) abuf->fields.sfmt_addi.f 1765 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1766 int UNUSED written = 0; 1767 IADDR UNUSED pc = abuf->addr; 1768 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1769 1770 { 1771 SI opval = ANDSI (GET_H_GR (FLD (f_rs)), ORSI (SLLSI (FLD (f_imm), 16), 65535)); 1772 SET_H_GR (FLD (f_rt), opval); 1773 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1774 } 1775 1776 return vpc; 1777#undef FLD 1778} 1779 1780/* orui: orui $rt,$rs,$hi16 */ 1781 1782static SEM_PC 1783SEM_FN_NAME (iq2000bf,orui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1784{ 1785#define FLD(f) abuf->fields.sfmt_addi.f 1786 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1787 int UNUSED written = 0; 1788 IADDR UNUSED pc = abuf->addr; 1789 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1790 1791 { 1792 SI opval = ORSI (GET_H_GR (FLD (f_rs)), SLLSI (FLD (f_imm), 16)); 1793 SET_H_GR (FLD (f_rt), opval); 1794 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1795 } 1796 1797 return vpc; 1798#undef FLD 1799} 1800 1801/* bgtz: bgtz $rs,$offset */ 1802 1803static SEM_PC 1804SEM_FN_NAME (iq2000bf,bgtz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1805{ 1806#define FLD(f) abuf->fields.sfmt_bbi.f 1807 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1808 int UNUSED written = 0; 1809 IADDR UNUSED pc = abuf->addr; 1810 SEM_BRANCH_INIT 1811 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1812 1813if (GTSI (GET_H_GR (FLD (f_rs)), 0)) { 1814{ 1815 { 1816 USI opval = FLD (i_offset); 1817 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1818 written |= (1 << 2); 1819 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1820 } 1821} 1822} 1823 1824 abuf->written = written; 1825 SEM_BRANCH_FINI (vpc); 1826 return vpc; 1827#undef FLD 1828} 1829 1830/* bgtzl: bgtzl $rs,$offset */ 1831 1832static SEM_PC 1833SEM_FN_NAME (iq2000bf,bgtzl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1834{ 1835#define FLD(f) abuf->fields.sfmt_bbi.f 1836 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1837 int UNUSED written = 0; 1838 IADDR UNUSED pc = abuf->addr; 1839 SEM_BRANCH_INIT 1840 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1841 1842if (GTSI (GET_H_GR (FLD (f_rs)), 0)) { 1843{ 1844 { 1845 USI opval = FLD (i_offset); 1846 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1847 written |= (1 << 2); 1848 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1849 } 1850} 1851} else { 1852if (1) 1853 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1854} 1855 1856 abuf->written = written; 1857 SEM_BRANCH_FINI (vpc); 1858 return vpc; 1859#undef FLD 1860} 1861 1862/* blez: blez $rs,$offset */ 1863 1864static SEM_PC 1865SEM_FN_NAME (iq2000bf,blez) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1866{ 1867#define FLD(f) abuf->fields.sfmt_bbi.f 1868 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1869 int UNUSED written = 0; 1870 IADDR UNUSED pc = abuf->addr; 1871 SEM_BRANCH_INIT 1872 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1873 1874if (LESI (GET_H_GR (FLD (f_rs)), 0)) { 1875{ 1876 { 1877 USI opval = FLD (i_offset); 1878 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1879 written |= (1 << 2); 1880 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1881 } 1882} 1883} 1884 1885 abuf->written = written; 1886 SEM_BRANCH_FINI (vpc); 1887 return vpc; 1888#undef FLD 1889} 1890 1891/* blezl: blezl $rs,$offset */ 1892 1893static SEM_PC 1894SEM_FN_NAME (iq2000bf,blezl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1895{ 1896#define FLD(f) abuf->fields.sfmt_bbi.f 1897 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1898 int UNUSED written = 0; 1899 IADDR UNUSED pc = abuf->addr; 1900 SEM_BRANCH_INIT 1901 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1902 1903if (LESI (GET_H_GR (FLD (f_rs)), 0)) { 1904{ 1905 { 1906 USI opval = FLD (i_offset); 1907 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 1908 written |= (1 << 2); 1909 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1910 } 1911} 1912} else { 1913if (1) 1914 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 1915} 1916 1917 abuf->written = written; 1918 SEM_BRANCH_FINI (vpc); 1919 return vpc; 1920#undef FLD 1921} 1922 1923/* mrgb: mrgb $rd,$rs,$rt,$mask */ 1924 1925static SEM_PC 1926SEM_FN_NAME (iq2000bf,mrgb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1927{ 1928#define FLD(f) abuf->fields.sfmt_mrgb.f 1929 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1930 int UNUSED written = 0; 1931 IADDR UNUSED pc = abuf->addr; 1932 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1933 1934{ 1935 SI tmp_temp; 1936if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 0)))) { 1937 tmp_temp = ANDSI (GET_H_GR (FLD (f_rs)), 255); 1938} else { 1939 tmp_temp = ANDSI (GET_H_GR (FLD (f_rt)), 255); 1940} 1941if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 1)))) { 1942 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 65280)); 1943} else { 1944 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 65280)); 1945} 1946if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 2)))) { 1947 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 16711680)); 1948} else { 1949 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 16711680)); 1950} 1951if (NOTSI (ANDSI (FLD (f_mask), SLLSI (1, 3)))) { 1952 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000)); 1953} else { 1954 tmp_temp = ORSI (tmp_temp, ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000)); 1955} 1956 { 1957 SI opval = tmp_temp; 1958 SET_H_GR (FLD (f_rd), opval); 1959 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1960 } 1961} 1962 1963 return vpc; 1964#undef FLD 1965} 1966 1967/* bctxt: bctxt $rs,$offset */ 1968 1969static SEM_PC 1970SEM_FN_NAME (iq2000bf,bctxt) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1971{ 1972#define FLD(f) abuf->fields.sfmt_empty.f 1973 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1974 int UNUSED written = 0; 1975 IADDR UNUSED pc = abuf->addr; 1976 SEM_BRANCH_INIT 1977 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1978 1979((void) 0); /*nop*/ 1980 1981 SEM_BRANCH_FINI (vpc); 1982 return vpc; 1983#undef FLD 1984} 1985 1986/* bc0f: bc0f $offset */ 1987 1988static SEM_PC 1989SEM_FN_NAME (iq2000bf,bc0f) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1990{ 1991#define FLD(f) abuf->fields.sfmt_empty.f 1992 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1993 int UNUSED written = 0; 1994 IADDR UNUSED pc = abuf->addr; 1995 SEM_BRANCH_INIT 1996 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1997 1998((void) 0); /*nop*/ 1999 2000 SEM_BRANCH_FINI (vpc); 2001 return vpc; 2002#undef FLD 2003} 2004 2005/* bc0fl: bc0fl $offset */ 2006 2007static SEM_PC 2008SEM_FN_NAME (iq2000bf,bc0fl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2009{ 2010#define FLD(f) abuf->fields.sfmt_empty.f 2011 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2012 int UNUSED written = 0; 2013 IADDR UNUSED pc = abuf->addr; 2014 SEM_BRANCH_INIT 2015 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2016 2017((void) 0); /*nop*/ 2018 2019 SEM_BRANCH_FINI (vpc); 2020 return vpc; 2021#undef FLD 2022} 2023 2024/* bc3f: bc3f $offset */ 2025 2026static SEM_PC 2027SEM_FN_NAME (iq2000bf,bc3f) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2028{ 2029#define FLD(f) abuf->fields.sfmt_empty.f 2030 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2031 int UNUSED written = 0; 2032 IADDR UNUSED pc = abuf->addr; 2033 SEM_BRANCH_INIT 2034 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2035 2036((void) 0); /*nop*/ 2037 2038 SEM_BRANCH_FINI (vpc); 2039 return vpc; 2040#undef FLD 2041} 2042 2043/* bc3fl: bc3fl $offset */ 2044 2045static SEM_PC 2046SEM_FN_NAME (iq2000bf,bc3fl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2047{ 2048#define FLD(f) abuf->fields.sfmt_empty.f 2049 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2050 int UNUSED written = 0; 2051 IADDR UNUSED pc = abuf->addr; 2052 SEM_BRANCH_INIT 2053 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2054 2055((void) 0); /*nop*/ 2056 2057 SEM_BRANCH_FINI (vpc); 2058 return vpc; 2059#undef FLD 2060} 2061 2062/* bc0t: bc0t $offset */ 2063 2064static SEM_PC 2065SEM_FN_NAME (iq2000bf,bc0t) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2066{ 2067#define FLD(f) abuf->fields.sfmt_empty.f 2068 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2069 int UNUSED written = 0; 2070 IADDR UNUSED pc = abuf->addr; 2071 SEM_BRANCH_INIT 2072 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2073 2074((void) 0); /*nop*/ 2075 2076 SEM_BRANCH_FINI (vpc); 2077 return vpc; 2078#undef FLD 2079} 2080 2081/* bc0tl: bc0tl $offset */ 2082 2083static SEM_PC 2084SEM_FN_NAME (iq2000bf,bc0tl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2085{ 2086#define FLD(f) abuf->fields.sfmt_empty.f 2087 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2088 int UNUSED written = 0; 2089 IADDR UNUSED pc = abuf->addr; 2090 SEM_BRANCH_INIT 2091 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2092 2093((void) 0); /*nop*/ 2094 2095 SEM_BRANCH_FINI (vpc); 2096 return vpc; 2097#undef FLD 2098} 2099 2100/* bc3t: bc3t $offset */ 2101 2102static SEM_PC 2103SEM_FN_NAME (iq2000bf,bc3t) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2104{ 2105#define FLD(f) abuf->fields.sfmt_empty.f 2106 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2107 int UNUSED written = 0; 2108 IADDR UNUSED pc = abuf->addr; 2109 SEM_BRANCH_INIT 2110 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2111 2112((void) 0); /*nop*/ 2113 2114 SEM_BRANCH_FINI (vpc); 2115 return vpc; 2116#undef FLD 2117} 2118 2119/* bc3tl: bc3tl $offset */ 2120 2121static SEM_PC 2122SEM_FN_NAME (iq2000bf,bc3tl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2123{ 2124#define FLD(f) abuf->fields.sfmt_empty.f 2125 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2126 int UNUSED written = 0; 2127 IADDR UNUSED pc = abuf->addr; 2128 SEM_BRANCH_INIT 2129 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2130 2131((void) 0); /*nop*/ 2132 2133 SEM_BRANCH_FINI (vpc); 2134 return vpc; 2135#undef FLD 2136} 2137 2138/* cfc0: cfc0 $rt,$rd */ 2139 2140static SEM_PC 2141SEM_FN_NAME (iq2000bf,cfc0) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2142{ 2143#define FLD(f) abuf->fields.sfmt_empty.f 2144 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2145 int UNUSED written = 0; 2146 IADDR UNUSED pc = abuf->addr; 2147 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2148 2149((void) 0); /*nop*/ 2150 2151 return vpc; 2152#undef FLD 2153} 2154 2155/* cfc1: cfc1 $rt,$rd */ 2156 2157static SEM_PC 2158SEM_FN_NAME (iq2000bf,cfc1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2159{ 2160#define FLD(f) abuf->fields.sfmt_empty.f 2161 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2162 int UNUSED written = 0; 2163 IADDR UNUSED pc = abuf->addr; 2164 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2165 2166((void) 0); /*nop*/ 2167 2168 return vpc; 2169#undef FLD 2170} 2171 2172/* cfc2: cfc2 $rt,$rd */ 2173 2174static SEM_PC 2175SEM_FN_NAME (iq2000bf,cfc2) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2176{ 2177#define FLD(f) abuf->fields.sfmt_empty.f 2178 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2179 int UNUSED written = 0; 2180 IADDR UNUSED pc = abuf->addr; 2181 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2182 2183((void) 0); /*nop*/ 2184 2185 return vpc; 2186#undef FLD 2187} 2188 2189/* cfc3: cfc3 $rt,$rd */ 2190 2191static SEM_PC 2192SEM_FN_NAME (iq2000bf,cfc3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2193{ 2194#define FLD(f) abuf->fields.sfmt_empty.f 2195 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2196 int UNUSED written = 0; 2197 IADDR UNUSED pc = abuf->addr; 2198 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2199 2200((void) 0); /*nop*/ 2201 2202 return vpc; 2203#undef FLD 2204} 2205 2206/* chkhdr: chkhdr $rd,$rt */ 2207 2208static SEM_PC 2209SEM_FN_NAME (iq2000bf,chkhdr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2210{ 2211#define FLD(f) abuf->fields.sfmt_empty.f 2212 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2213 int UNUSED written = 0; 2214 IADDR UNUSED pc = abuf->addr; 2215 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2216 2217((void) 0); /*nop*/ 2218 2219 return vpc; 2220#undef FLD 2221} 2222 2223/* ctc0: ctc0 $rt,$rd */ 2224 2225static SEM_PC 2226SEM_FN_NAME (iq2000bf,ctc0) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2227{ 2228#define FLD(f) abuf->fields.sfmt_empty.f 2229 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2230 int UNUSED written = 0; 2231 IADDR UNUSED pc = abuf->addr; 2232 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2233 2234((void) 0); /*nop*/ 2235 2236 return vpc; 2237#undef FLD 2238} 2239 2240/* ctc1: ctc1 $rt,$rd */ 2241 2242static SEM_PC 2243SEM_FN_NAME (iq2000bf,ctc1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2244{ 2245#define FLD(f) abuf->fields.sfmt_empty.f 2246 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2247 int UNUSED written = 0; 2248 IADDR UNUSED pc = abuf->addr; 2249 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2250 2251((void) 0); /*nop*/ 2252 2253 return vpc; 2254#undef FLD 2255} 2256 2257/* ctc2: ctc2 $rt,$rd */ 2258 2259static SEM_PC 2260SEM_FN_NAME (iq2000bf,ctc2) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2261{ 2262#define FLD(f) abuf->fields.sfmt_empty.f 2263 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2264 int UNUSED written = 0; 2265 IADDR UNUSED pc = abuf->addr; 2266 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2267 2268((void) 0); /*nop*/ 2269 2270 return vpc; 2271#undef FLD 2272} 2273 2274/* ctc3: ctc3 $rt,$rd */ 2275 2276static SEM_PC 2277SEM_FN_NAME (iq2000bf,ctc3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2278{ 2279#define FLD(f) abuf->fields.sfmt_empty.f 2280 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2281 int UNUSED written = 0; 2282 IADDR UNUSED pc = abuf->addr; 2283 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2284 2285((void) 0); /*nop*/ 2286 2287 return vpc; 2288#undef FLD 2289} 2290 2291/* jcr: jcr $rs */ 2292 2293static SEM_PC 2294SEM_FN_NAME (iq2000bf,jcr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2295{ 2296#define FLD(f) abuf->fields.sfmt_empty.f 2297 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2298 int UNUSED written = 0; 2299 IADDR UNUSED pc = abuf->addr; 2300 SEM_BRANCH_INIT 2301 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2302 2303((void) 0); /*nop*/ 2304 2305 SEM_BRANCH_FINI (vpc); 2306 return vpc; 2307#undef FLD 2308} 2309 2310/* luc32: luc32 $rt,$rd */ 2311 2312static SEM_PC 2313SEM_FN_NAME (iq2000bf,luc32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2314{ 2315#define FLD(f) abuf->fields.sfmt_empty.f 2316 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2317 int UNUSED written = 0; 2318 IADDR UNUSED pc = abuf->addr; 2319 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2320 2321((void) 0); /*nop*/ 2322 2323 return vpc; 2324#undef FLD 2325} 2326 2327/* luc32l: luc32l $rt,$rd */ 2328 2329static SEM_PC 2330SEM_FN_NAME (iq2000bf,luc32l) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2331{ 2332#define FLD(f) abuf->fields.sfmt_empty.f 2333 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2334 int UNUSED written = 0; 2335 IADDR UNUSED pc = abuf->addr; 2336 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2337 2338((void) 0); /*nop*/ 2339 2340 return vpc; 2341#undef FLD 2342} 2343 2344/* luc64: luc64 $rt,$rd */ 2345 2346static SEM_PC 2347SEM_FN_NAME (iq2000bf,luc64) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2348{ 2349#define FLD(f) abuf->fields.sfmt_empty.f 2350 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2351 int UNUSED written = 0; 2352 IADDR UNUSED pc = abuf->addr; 2353 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2354 2355((void) 0); /*nop*/ 2356 2357 return vpc; 2358#undef FLD 2359} 2360 2361/* luc64l: luc64l $rt,$rd */ 2362 2363static SEM_PC 2364SEM_FN_NAME (iq2000bf,luc64l) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2365{ 2366#define FLD(f) abuf->fields.sfmt_empty.f 2367 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2368 int UNUSED written = 0; 2369 IADDR UNUSED pc = abuf->addr; 2370 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2371 2372((void) 0); /*nop*/ 2373 2374 return vpc; 2375#undef FLD 2376} 2377 2378/* luk: luk $rt,$rd */ 2379 2380static SEM_PC 2381SEM_FN_NAME (iq2000bf,luk) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2382{ 2383#define FLD(f) abuf->fields.sfmt_empty.f 2384 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2385 int UNUSED written = 0; 2386 IADDR UNUSED pc = abuf->addr; 2387 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2388 2389((void) 0); /*nop*/ 2390 2391 return vpc; 2392#undef FLD 2393} 2394 2395/* lulck: lulck $rt */ 2396 2397static SEM_PC 2398SEM_FN_NAME (iq2000bf,lulck) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2399{ 2400#define FLD(f) abuf->fields.sfmt_empty.f 2401 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2402 int UNUSED written = 0; 2403 IADDR UNUSED pc = abuf->addr; 2404 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2405 2406((void) 0); /*nop*/ 2407 2408 return vpc; 2409#undef FLD 2410} 2411 2412/* lum32: lum32 $rt,$rd */ 2413 2414static SEM_PC 2415SEM_FN_NAME (iq2000bf,lum32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2416{ 2417#define FLD(f) abuf->fields.sfmt_empty.f 2418 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2419 int UNUSED written = 0; 2420 IADDR UNUSED pc = abuf->addr; 2421 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2422 2423((void) 0); /*nop*/ 2424 2425 return vpc; 2426#undef FLD 2427} 2428 2429/* lum32l: lum32l $rt,$rd */ 2430 2431static SEM_PC 2432SEM_FN_NAME (iq2000bf,lum32l) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2433{ 2434#define FLD(f) abuf->fields.sfmt_empty.f 2435 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2436 int UNUSED written = 0; 2437 IADDR UNUSED pc = abuf->addr; 2438 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2439 2440((void) 0); /*nop*/ 2441 2442 return vpc; 2443#undef FLD 2444} 2445 2446/* lum64: lum64 $rt,$rd */ 2447 2448static SEM_PC 2449SEM_FN_NAME (iq2000bf,lum64) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2450{ 2451#define FLD(f) abuf->fields.sfmt_empty.f 2452 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2453 int UNUSED written = 0; 2454 IADDR UNUSED pc = abuf->addr; 2455 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2456 2457((void) 0); /*nop*/ 2458 2459 return vpc; 2460#undef FLD 2461} 2462 2463/* lum64l: lum64l $rt,$rd */ 2464 2465static SEM_PC 2466SEM_FN_NAME (iq2000bf,lum64l) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2467{ 2468#define FLD(f) abuf->fields.sfmt_empty.f 2469 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2470 int UNUSED written = 0; 2471 IADDR UNUSED pc = abuf->addr; 2472 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2473 2474((void) 0); /*nop*/ 2475 2476 return vpc; 2477#undef FLD 2478} 2479 2480/* lur: lur $rt,$rd */ 2481 2482static SEM_PC 2483SEM_FN_NAME (iq2000bf,lur) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2484{ 2485#define FLD(f) abuf->fields.sfmt_empty.f 2486 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2487 int UNUSED written = 0; 2488 IADDR UNUSED pc = abuf->addr; 2489 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2490 2491((void) 0); /*nop*/ 2492 2493 return vpc; 2494#undef FLD 2495} 2496 2497/* lurl: lurl $rt,$rd */ 2498 2499static SEM_PC 2500SEM_FN_NAME (iq2000bf,lurl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2501{ 2502#define FLD(f) abuf->fields.sfmt_empty.f 2503 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2504 int UNUSED written = 0; 2505 IADDR UNUSED pc = abuf->addr; 2506 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2507 2508((void) 0); /*nop*/ 2509 2510 return vpc; 2511#undef FLD 2512} 2513 2514/* luulck: luulck $rt */ 2515 2516static SEM_PC 2517SEM_FN_NAME (iq2000bf,luulck) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2518{ 2519#define FLD(f) abuf->fields.sfmt_empty.f 2520 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2521 int UNUSED written = 0; 2522 IADDR UNUSED pc = abuf->addr; 2523 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2524 2525((void) 0); /*nop*/ 2526 2527 return vpc; 2528#undef FLD 2529} 2530 2531/* mfc0: mfc0 $rt,$rd */ 2532 2533static SEM_PC 2534SEM_FN_NAME (iq2000bf,mfc0) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2535{ 2536#define FLD(f) abuf->fields.sfmt_empty.f 2537 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2538 int UNUSED written = 0; 2539 IADDR UNUSED pc = abuf->addr; 2540 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2541 2542((void) 0); /*nop*/ 2543 2544 return vpc; 2545#undef FLD 2546} 2547 2548/* mfc1: mfc1 $rt,$rd */ 2549 2550static SEM_PC 2551SEM_FN_NAME (iq2000bf,mfc1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2552{ 2553#define FLD(f) abuf->fields.sfmt_empty.f 2554 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2555 int UNUSED written = 0; 2556 IADDR UNUSED pc = abuf->addr; 2557 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2558 2559((void) 0); /*nop*/ 2560 2561 return vpc; 2562#undef FLD 2563} 2564 2565/* mfc2: mfc2 $rt,$rd */ 2566 2567static SEM_PC 2568SEM_FN_NAME (iq2000bf,mfc2) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2569{ 2570#define FLD(f) abuf->fields.sfmt_empty.f 2571 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2572 int UNUSED written = 0; 2573 IADDR UNUSED pc = abuf->addr; 2574 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2575 2576((void) 0); /*nop*/ 2577 2578 return vpc; 2579#undef FLD 2580} 2581 2582/* mfc3: mfc3 $rt,$rd */ 2583 2584static SEM_PC 2585SEM_FN_NAME (iq2000bf,mfc3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2586{ 2587#define FLD(f) abuf->fields.sfmt_empty.f 2588 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2589 int UNUSED written = 0; 2590 IADDR UNUSED pc = abuf->addr; 2591 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2592 2593((void) 0); /*nop*/ 2594 2595 return vpc; 2596#undef FLD 2597} 2598 2599/* mtc0: mtc0 $rt,$rd */ 2600 2601static SEM_PC 2602SEM_FN_NAME (iq2000bf,mtc0) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2603{ 2604#define FLD(f) abuf->fields.sfmt_empty.f 2605 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2606 int UNUSED written = 0; 2607 IADDR UNUSED pc = abuf->addr; 2608 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2609 2610((void) 0); /*nop*/ 2611 2612 return vpc; 2613#undef FLD 2614} 2615 2616/* mtc1: mtc1 $rt,$rd */ 2617 2618static SEM_PC 2619SEM_FN_NAME (iq2000bf,mtc1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2620{ 2621#define FLD(f) abuf->fields.sfmt_empty.f 2622 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2623 int UNUSED written = 0; 2624 IADDR UNUSED pc = abuf->addr; 2625 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2626 2627((void) 0); /*nop*/ 2628 2629 return vpc; 2630#undef FLD 2631} 2632 2633/* mtc2: mtc2 $rt,$rd */ 2634 2635static SEM_PC 2636SEM_FN_NAME (iq2000bf,mtc2) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2637{ 2638#define FLD(f) abuf->fields.sfmt_empty.f 2639 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2640 int UNUSED written = 0; 2641 IADDR UNUSED pc = abuf->addr; 2642 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2643 2644((void) 0); /*nop*/ 2645 2646 return vpc; 2647#undef FLD 2648} 2649 2650/* mtc3: mtc3 $rt,$rd */ 2651 2652static SEM_PC 2653SEM_FN_NAME (iq2000bf,mtc3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2654{ 2655#define FLD(f) abuf->fields.sfmt_empty.f 2656 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2657 int UNUSED written = 0; 2658 IADDR UNUSED pc = abuf->addr; 2659 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2660 2661((void) 0); /*nop*/ 2662 2663 return vpc; 2664#undef FLD 2665} 2666 2667/* pkrl: pkrl $rd,$rt */ 2668 2669static SEM_PC 2670SEM_FN_NAME (iq2000bf,pkrl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2671{ 2672#define FLD(f) abuf->fields.sfmt_empty.f 2673 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2674 int UNUSED written = 0; 2675 IADDR UNUSED pc = abuf->addr; 2676 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2677 2678((void) 0); /*nop*/ 2679 2680 return vpc; 2681#undef FLD 2682} 2683 2684/* pkrlr1: pkrlr1 $rt,$_index,$count */ 2685 2686static SEM_PC 2687SEM_FN_NAME (iq2000bf,pkrlr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2688{ 2689#define FLD(f) abuf->fields.sfmt_empty.f 2690 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2691 int UNUSED written = 0; 2692 IADDR UNUSED pc = abuf->addr; 2693 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2694 2695((void) 0); /*nop*/ 2696 2697 return vpc; 2698#undef FLD 2699} 2700 2701/* pkrlr30: pkrlr30 $rt,$_index,$count */ 2702 2703static SEM_PC 2704SEM_FN_NAME (iq2000bf,pkrlr30) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2705{ 2706#define FLD(f) abuf->fields.sfmt_empty.f 2707 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2708 int UNUSED written = 0; 2709 IADDR UNUSED pc = abuf->addr; 2710 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2711 2712((void) 0); /*nop*/ 2713 2714 return vpc; 2715#undef FLD 2716} 2717 2718/* rb: rb $rd,$rt */ 2719 2720static SEM_PC 2721SEM_FN_NAME (iq2000bf,rb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2722{ 2723#define FLD(f) abuf->fields.sfmt_empty.f 2724 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2725 int UNUSED written = 0; 2726 IADDR UNUSED pc = abuf->addr; 2727 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2728 2729((void) 0); /*nop*/ 2730 2731 return vpc; 2732#undef FLD 2733} 2734 2735/* rbr1: rbr1 $rt,$_index,$count */ 2736 2737static SEM_PC 2738SEM_FN_NAME (iq2000bf,rbr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2739{ 2740#define FLD(f) abuf->fields.sfmt_empty.f 2741 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2742 int UNUSED written = 0; 2743 IADDR UNUSED pc = abuf->addr; 2744 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2745 2746((void) 0); /*nop*/ 2747 2748 return vpc; 2749#undef FLD 2750} 2751 2752/* rbr30: rbr30 $rt,$_index,$count */ 2753 2754static SEM_PC 2755SEM_FN_NAME (iq2000bf,rbr30) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2756{ 2757#define FLD(f) abuf->fields.sfmt_empty.f 2758 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2759 int UNUSED written = 0; 2760 IADDR UNUSED pc = abuf->addr; 2761 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2762 2763((void) 0); /*nop*/ 2764 2765 return vpc; 2766#undef FLD 2767} 2768 2769/* rfe: rfe */ 2770 2771static SEM_PC 2772SEM_FN_NAME (iq2000bf,rfe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2773{ 2774#define FLD(f) abuf->fields.sfmt_empty.f 2775 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2776 int UNUSED written = 0; 2777 IADDR UNUSED pc = abuf->addr; 2778 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2779 2780((void) 0); /*nop*/ 2781 2782 return vpc; 2783#undef FLD 2784} 2785 2786/* rx: rx $rd,$rt */ 2787 2788static SEM_PC 2789SEM_FN_NAME (iq2000bf,rx) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2790{ 2791#define FLD(f) abuf->fields.sfmt_empty.f 2792 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2793 int UNUSED written = 0; 2794 IADDR UNUSED pc = abuf->addr; 2795 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2796 2797((void) 0); /*nop*/ 2798 2799 return vpc; 2800#undef FLD 2801} 2802 2803/* rxr1: rxr1 $rt,$_index,$count */ 2804 2805static SEM_PC 2806SEM_FN_NAME (iq2000bf,rxr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2807{ 2808#define FLD(f) abuf->fields.sfmt_empty.f 2809 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2810 int UNUSED written = 0; 2811 IADDR UNUSED pc = abuf->addr; 2812 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2813 2814((void) 0); /*nop*/ 2815 2816 return vpc; 2817#undef FLD 2818} 2819 2820/* rxr30: rxr30 $rt,$_index,$count */ 2821 2822static SEM_PC 2823SEM_FN_NAME (iq2000bf,rxr30) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2824{ 2825#define FLD(f) abuf->fields.sfmt_empty.f 2826 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2827 int UNUSED written = 0; 2828 IADDR UNUSED pc = abuf->addr; 2829 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2830 2831((void) 0); /*nop*/ 2832 2833 return vpc; 2834#undef FLD 2835} 2836 2837/* sleep: sleep */ 2838 2839static SEM_PC 2840SEM_FN_NAME (iq2000bf,sleep) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2841{ 2842#define FLD(f) abuf->fields.sfmt_empty.f 2843 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2844 int UNUSED written = 0; 2845 IADDR UNUSED pc = abuf->addr; 2846 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2847 2848((void) 0); /*nop*/ 2849 2850 return vpc; 2851#undef FLD 2852} 2853 2854/* srrd: srrd $rt */ 2855 2856static SEM_PC 2857SEM_FN_NAME (iq2000bf,srrd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2858{ 2859#define FLD(f) abuf->fields.sfmt_empty.f 2860 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2861 int UNUSED written = 0; 2862 IADDR UNUSED pc = abuf->addr; 2863 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2864 2865((void) 0); /*nop*/ 2866 2867 return vpc; 2868#undef FLD 2869} 2870 2871/* srrdl: srrdl $rt */ 2872 2873static SEM_PC 2874SEM_FN_NAME (iq2000bf,srrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2875{ 2876#define FLD(f) abuf->fields.sfmt_empty.f 2877 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2878 int UNUSED written = 0; 2879 IADDR UNUSED pc = abuf->addr; 2880 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2881 2882((void) 0); /*nop*/ 2883 2884 return vpc; 2885#undef FLD 2886} 2887 2888/* srulck: srulck $rt */ 2889 2890static SEM_PC 2891SEM_FN_NAME (iq2000bf,srulck) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2892{ 2893#define FLD(f) abuf->fields.sfmt_empty.f 2894 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2895 int UNUSED written = 0; 2896 IADDR UNUSED pc = abuf->addr; 2897 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2898 2899((void) 0); /*nop*/ 2900 2901 return vpc; 2902#undef FLD 2903} 2904 2905/* srwr: srwr $rt,$rd */ 2906 2907static SEM_PC 2908SEM_FN_NAME (iq2000bf,srwr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2909{ 2910#define FLD(f) abuf->fields.sfmt_empty.f 2911 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2912 int UNUSED written = 0; 2913 IADDR UNUSED pc = abuf->addr; 2914 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2915 2916((void) 0); /*nop*/ 2917 2918 return vpc; 2919#undef FLD 2920} 2921 2922/* srwru: srwru $rt,$rd */ 2923 2924static SEM_PC 2925SEM_FN_NAME (iq2000bf,srwru) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2926{ 2927#define FLD(f) abuf->fields.sfmt_empty.f 2928 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2929 int UNUSED written = 0; 2930 IADDR UNUSED pc = abuf->addr; 2931 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2932 2933((void) 0); /*nop*/ 2934 2935 return vpc; 2936#undef FLD 2937} 2938 2939/* trapqfl: trapqfl */ 2940 2941static SEM_PC 2942SEM_FN_NAME (iq2000bf,trapqfl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2943{ 2944#define FLD(f) abuf->fields.sfmt_empty.f 2945 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2946 int UNUSED written = 0; 2947 IADDR UNUSED pc = abuf->addr; 2948 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2949 2950((void) 0); /*nop*/ 2951 2952 return vpc; 2953#undef FLD 2954} 2955 2956/* trapqne: trapqne */ 2957 2958static SEM_PC 2959SEM_FN_NAME (iq2000bf,trapqne) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2960{ 2961#define FLD(f) abuf->fields.sfmt_empty.f 2962 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2963 int UNUSED written = 0; 2964 IADDR UNUSED pc = abuf->addr; 2965 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2966 2967((void) 0); /*nop*/ 2968 2969 return vpc; 2970#undef FLD 2971} 2972 2973/* traprel: traprel $rt */ 2974 2975static SEM_PC 2976SEM_FN_NAME (iq2000bf,traprel) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2977{ 2978#define FLD(f) abuf->fields.sfmt_empty.f 2979 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2980 int UNUSED written = 0; 2981 IADDR UNUSED pc = abuf->addr; 2982 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2983 2984((void) 0); /*nop*/ 2985 2986 return vpc; 2987#undef FLD 2988} 2989 2990/* wb: wb $rd,$rt */ 2991 2992static SEM_PC 2993SEM_FN_NAME (iq2000bf,wb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2994{ 2995#define FLD(f) abuf->fields.sfmt_empty.f 2996 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2997 int UNUSED written = 0; 2998 IADDR UNUSED pc = abuf->addr; 2999 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3000 3001((void) 0); /*nop*/ 3002 3003 return vpc; 3004#undef FLD 3005} 3006 3007/* wbu: wbu $rd,$rt */ 3008 3009static SEM_PC 3010SEM_FN_NAME (iq2000bf,wbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3011{ 3012#define FLD(f) abuf->fields.sfmt_empty.f 3013 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3014 int UNUSED written = 0; 3015 IADDR UNUSED pc = abuf->addr; 3016 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3017 3018((void) 0); /*nop*/ 3019 3020 return vpc; 3021#undef FLD 3022} 3023 3024/* wbr1: wbr1 $rt,$_index,$count */ 3025 3026static SEM_PC 3027SEM_FN_NAME (iq2000bf,wbr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3028{ 3029#define FLD(f) abuf->fields.sfmt_empty.f 3030 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3031 int UNUSED written = 0; 3032 IADDR UNUSED pc = abuf->addr; 3033 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3034 3035((void) 0); /*nop*/ 3036 3037 return vpc; 3038#undef FLD 3039} 3040 3041/* wbr1u: wbr1u $rt,$_index,$count */ 3042 3043static SEM_PC 3044SEM_FN_NAME (iq2000bf,wbr1u) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3045{ 3046#define FLD(f) abuf->fields.sfmt_empty.f 3047 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3048 int UNUSED written = 0; 3049 IADDR UNUSED pc = abuf->addr; 3050 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3051 3052((void) 0); /*nop*/ 3053 3054 return vpc; 3055#undef FLD 3056} 3057 3058/* wbr30: wbr30 $rt,$_index,$count */ 3059 3060static SEM_PC 3061SEM_FN_NAME (iq2000bf,wbr30) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3062{ 3063#define FLD(f) abuf->fields.sfmt_empty.f 3064 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3065 int UNUSED written = 0; 3066 IADDR UNUSED pc = abuf->addr; 3067 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3068 3069((void) 0); /*nop*/ 3070 3071 return vpc; 3072#undef FLD 3073} 3074 3075/* wbr30u: wbr30u $rt,$_index,$count */ 3076 3077static SEM_PC 3078SEM_FN_NAME (iq2000bf,wbr30u) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3079{ 3080#define FLD(f) abuf->fields.sfmt_empty.f 3081 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3082 int UNUSED written = 0; 3083 IADDR UNUSED pc = abuf->addr; 3084 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3085 3086((void) 0); /*nop*/ 3087 3088 return vpc; 3089#undef FLD 3090} 3091 3092/* wx: wx $rd,$rt */ 3093 3094static SEM_PC 3095SEM_FN_NAME (iq2000bf,wx) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3096{ 3097#define FLD(f) abuf->fields.sfmt_empty.f 3098 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3099 int UNUSED written = 0; 3100 IADDR UNUSED pc = abuf->addr; 3101 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3102 3103((void) 0); /*nop*/ 3104 3105 return vpc; 3106#undef FLD 3107} 3108 3109/* wxu: wxu $rd,$rt */ 3110 3111static SEM_PC 3112SEM_FN_NAME (iq2000bf,wxu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3113{ 3114#define FLD(f) abuf->fields.sfmt_empty.f 3115 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3116 int UNUSED written = 0; 3117 IADDR UNUSED pc = abuf->addr; 3118 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3119 3120((void) 0); /*nop*/ 3121 3122 return vpc; 3123#undef FLD 3124} 3125 3126/* wxr1: wxr1 $rt,$_index,$count */ 3127 3128static SEM_PC 3129SEM_FN_NAME (iq2000bf,wxr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3130{ 3131#define FLD(f) abuf->fields.sfmt_empty.f 3132 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3133 int UNUSED written = 0; 3134 IADDR UNUSED pc = abuf->addr; 3135 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3136 3137((void) 0); /*nop*/ 3138 3139 return vpc; 3140#undef FLD 3141} 3142 3143/* wxr1u: wxr1u $rt,$_index,$count */ 3144 3145static SEM_PC 3146SEM_FN_NAME (iq2000bf,wxr1u) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3147{ 3148#define FLD(f) abuf->fields.sfmt_empty.f 3149 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3150 int UNUSED written = 0; 3151 IADDR UNUSED pc = abuf->addr; 3152 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3153 3154((void) 0); /*nop*/ 3155 3156 return vpc; 3157#undef FLD 3158} 3159 3160/* wxr30: wxr30 $rt,$_index,$count */ 3161 3162static SEM_PC 3163SEM_FN_NAME (iq2000bf,wxr30) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3164{ 3165#define FLD(f) abuf->fields.sfmt_empty.f 3166 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3167 int UNUSED written = 0; 3168 IADDR UNUSED pc = abuf->addr; 3169 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3170 3171((void) 0); /*nop*/ 3172 3173 return vpc; 3174#undef FLD 3175} 3176 3177/* wxr30u: wxr30u $rt,$_index,$count */ 3178 3179static SEM_PC 3180SEM_FN_NAME (iq2000bf,wxr30u) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3181{ 3182#define FLD(f) abuf->fields.sfmt_empty.f 3183 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3184 int UNUSED written = 0; 3185 IADDR UNUSED pc = abuf->addr; 3186 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3187 3188((void) 0); /*nop*/ 3189 3190 return vpc; 3191#undef FLD 3192} 3193 3194/* ldw: ldw $rt,$lo16($base) */ 3195 3196static SEM_PC 3197SEM_FN_NAME (iq2000bf,ldw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3198{ 3199#define FLD(f) abuf->fields.sfmt_addi.f 3200 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3201 int UNUSED written = 0; 3202 IADDR UNUSED pc = abuf->addr; 3203 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3204 3205{ 3206 SI tmp_addr; 3207 tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3)); 3208 { 3209 SI opval = GETMEMSI (current_cpu, pc, tmp_addr); 3210 SET_H_GR (ADDSI (FLD (f_rt), 1), opval); 3211 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3212 } 3213 { 3214 SI opval = GETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4)); 3215 SET_H_GR (FLD (f_rt), opval); 3216 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3217 } 3218} 3219 3220 return vpc; 3221#undef FLD 3222} 3223 3224/* sdw: sdw $rt,$lo16($base) */ 3225 3226static SEM_PC 3227SEM_FN_NAME (iq2000bf,sdw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3228{ 3229#define FLD(f) abuf->fields.sfmt_addi.f 3230 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3231 int UNUSED written = 0; 3232 IADDR UNUSED pc = abuf->addr; 3233 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3234 3235{ 3236 SI tmp_addr; 3237 tmp_addr = ANDSI (ADDSI (GET_H_GR (FLD (f_rs)), FLD (f_imm)), INVSI (3)); 3238 { 3239 SI opval = GET_H_GR (FLD (f_rt)); 3240 SETMEMSI (current_cpu, pc, ADDSI (tmp_addr, 4), opval); 3241 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 3242 } 3243 { 3244 SI opval = GET_H_GR (ADDSI (FLD (f_rt), 1)); 3245 SETMEMSI (current_cpu, pc, tmp_addr, opval); 3246 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 3247 } 3248} 3249 3250 return vpc; 3251#undef FLD 3252} 3253 3254/* j: j $jmptarg */ 3255 3256static SEM_PC 3257SEM_FN_NAME (iq2000bf,j) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3258{ 3259#define FLD(f) abuf->fields.sfmt_j.f 3260 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3261 int UNUSED written = 0; 3262 IADDR UNUSED pc = abuf->addr; 3263 SEM_BRANCH_INIT 3264 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3265 3266{ 3267 { 3268 USI opval = FLD (i_jmptarg); 3269 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 3270 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3271 } 3272} 3273 3274 SEM_BRANCH_FINI (vpc); 3275 return vpc; 3276#undef FLD 3277} 3278 3279/* jal: jal $jmptarg */ 3280 3281static SEM_PC 3282SEM_FN_NAME (iq2000bf,jal) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3283{ 3284#define FLD(f) abuf->fields.sfmt_j.f 3285 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3286 int UNUSED written = 0; 3287 IADDR UNUSED pc = abuf->addr; 3288 SEM_BRANCH_INIT 3289 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3290 3291{ 3292{ 3293 { 3294 SI opval = ADDSI (pc, 8); 3295 SET_H_GR (((UINT) 31), opval); 3296 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 3297 } 3298 { 3299 USI opval = FLD (i_jmptarg); 3300 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 3301 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3302 } 3303} 3304} 3305 3306 SEM_BRANCH_FINI (vpc); 3307 return vpc; 3308#undef FLD 3309} 3310 3311/* bmb: bmb $rs,$rt,$offset */ 3312 3313static SEM_PC 3314SEM_FN_NAME (iq2000bf,bmb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3315{ 3316#define FLD(f) abuf->fields.sfmt_bbi.f 3317 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3318 int UNUSED written = 0; 3319 IADDR UNUSED pc = abuf->addr; 3320 SEM_BRANCH_INIT 3321 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3322 3323{ 3324 BI tmp_branch_; 3325 tmp_branch_ = 0; 3326if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 255), ANDSI (GET_H_GR (FLD (f_rt)), 255))) { 3327 tmp_branch_ = 1; 3328} 3329if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 65280), ANDSI (GET_H_GR (FLD (f_rt)), 65280))) { 3330 tmp_branch_ = 1; 3331} 3332if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 16711680), ANDSI (GET_H_GR (FLD (f_rt)), 16711680))) { 3333 tmp_branch_ = 1; 3334} 3335if (EQSI (ANDSI (GET_H_GR (FLD (f_rs)), 0xff000000), ANDSI (GET_H_GR (FLD (f_rt)), 0xff000000))) { 3336 tmp_branch_ = 1; 3337} 3338if (tmp_branch_) { 3339{ 3340 { 3341 USI opval = FLD (i_offset); 3342 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 3343 written |= (1 << 3); 3344 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 3345 } 3346} 3347} 3348} 3349 3350 abuf->written = written; 3351 SEM_BRANCH_FINI (vpc); 3352 return vpc; 3353#undef FLD 3354} 3355 3356/* Table of all semantic fns. */ 3357 3358static const struct sem_fn_desc sem_fns[] = { 3359 { IQ2000BF_INSN_X_INVALID, SEM_FN_NAME (iq2000bf,x_invalid) }, 3360 { IQ2000BF_INSN_X_AFTER, SEM_FN_NAME (iq2000bf,x_after) }, 3361 { IQ2000BF_INSN_X_BEFORE, SEM_FN_NAME (iq2000bf,x_before) }, 3362 { IQ2000BF_INSN_X_CTI_CHAIN, SEM_FN_NAME (iq2000bf,x_cti_chain) }, 3363 { IQ2000BF_INSN_X_CHAIN, SEM_FN_NAME (iq2000bf,x_chain) }, 3364 { IQ2000BF_INSN_X_BEGIN, SEM_FN_NAME (iq2000bf,x_begin) }, 3365 { IQ2000BF_INSN_ADD, SEM_FN_NAME (iq2000bf,add) }, 3366 { IQ2000BF_INSN_ADDI, SEM_FN_NAME (iq2000bf,addi) }, 3367 { IQ2000BF_INSN_ADDIU, SEM_FN_NAME (iq2000bf,addiu) }, 3368 { IQ2000BF_INSN_ADDU, SEM_FN_NAME (iq2000bf,addu) }, 3369 { IQ2000BF_INSN_ADO16, SEM_FN_NAME (iq2000bf,ado16) }, 3370 { IQ2000BF_INSN_AND, SEM_FN_NAME (iq2000bf,and) }, 3371 { IQ2000BF_INSN_ANDI, SEM_FN_NAME (iq2000bf,andi) }, 3372 { IQ2000BF_INSN_ANDOI, SEM_FN_NAME (iq2000bf,andoi) }, 3373 { IQ2000BF_INSN_NOR, SEM_FN_NAME (iq2000bf,nor) }, 3374 { IQ2000BF_INSN_OR, SEM_FN_NAME (iq2000bf,or) }, 3375 { IQ2000BF_INSN_ORI, SEM_FN_NAME (iq2000bf,ori) }, 3376 { IQ2000BF_INSN_RAM, SEM_FN_NAME (iq2000bf,ram) }, 3377 { IQ2000BF_INSN_SLL, SEM_FN_NAME (iq2000bf,sll) }, 3378 { IQ2000BF_INSN_SLLV, SEM_FN_NAME (iq2000bf,sllv) }, 3379 { IQ2000BF_INSN_SLMV, SEM_FN_NAME (iq2000bf,slmv) }, 3380 { IQ2000BF_INSN_SLT, SEM_FN_NAME (iq2000bf,slt) }, 3381 { IQ2000BF_INSN_SLTI, SEM_FN_NAME (iq2000bf,slti) }, 3382 { IQ2000BF_INSN_SLTIU, SEM_FN_NAME (iq2000bf,sltiu) }, 3383 { IQ2000BF_INSN_SLTU, SEM_FN_NAME (iq2000bf,sltu) }, 3384 { IQ2000BF_INSN_SRA, SEM_FN_NAME (iq2000bf,sra) }, 3385 { IQ2000BF_INSN_SRAV, SEM_FN_NAME (iq2000bf,srav) }, 3386 { IQ2000BF_INSN_SRL, SEM_FN_NAME (iq2000bf,srl) }, 3387 { IQ2000BF_INSN_SRLV, SEM_FN_NAME (iq2000bf,srlv) }, 3388 { IQ2000BF_INSN_SRMV, SEM_FN_NAME (iq2000bf,srmv) }, 3389 { IQ2000BF_INSN_SUB, SEM_FN_NAME (iq2000bf,sub) }, 3390 { IQ2000BF_INSN_SUBU, SEM_FN_NAME (iq2000bf,subu) }, 3391 { IQ2000BF_INSN_XOR, SEM_FN_NAME (iq2000bf,xor) }, 3392 { IQ2000BF_INSN_XORI, SEM_FN_NAME (iq2000bf,xori) }, 3393 { IQ2000BF_INSN_BBI, SEM_FN_NAME (iq2000bf,bbi) }, 3394 { IQ2000BF_INSN_BBIN, SEM_FN_NAME (iq2000bf,bbin) }, 3395 { IQ2000BF_INSN_BBV, SEM_FN_NAME (iq2000bf,bbv) }, 3396 { IQ2000BF_INSN_BBVN, SEM_FN_NAME (iq2000bf,bbvn) }, 3397 { IQ2000BF_INSN_BEQ, SEM_FN_NAME (iq2000bf,beq) }, 3398 { IQ2000BF_INSN_BEQL, SEM_FN_NAME (iq2000bf,beql) }, 3399 { IQ2000BF_INSN_BGEZ, SEM_FN_NAME (iq2000bf,bgez) }, 3400 { IQ2000BF_INSN_BGEZAL, SEM_FN_NAME (iq2000bf,bgezal) }, 3401 { IQ2000BF_INSN_BGEZALL, SEM_FN_NAME (iq2000bf,bgezall) }, 3402 { IQ2000BF_INSN_BGEZL, SEM_FN_NAME (iq2000bf,bgezl) }, 3403 { IQ2000BF_INSN_BLTZ, SEM_FN_NAME (iq2000bf,bltz) }, 3404 { IQ2000BF_INSN_BLTZL, SEM_FN_NAME (iq2000bf,bltzl) }, 3405 { IQ2000BF_INSN_BLTZAL, SEM_FN_NAME (iq2000bf,bltzal) }, 3406 { IQ2000BF_INSN_BLTZALL, SEM_FN_NAME (iq2000bf,bltzall) }, 3407 { IQ2000BF_INSN_BMB0, SEM_FN_NAME (iq2000bf,bmb0) }, 3408 { IQ2000BF_INSN_BMB1, SEM_FN_NAME (iq2000bf,bmb1) }, 3409 { IQ2000BF_INSN_BMB2, SEM_FN_NAME (iq2000bf,bmb2) }, 3410 { IQ2000BF_INSN_BMB3, SEM_FN_NAME (iq2000bf,bmb3) }, 3411 { IQ2000BF_INSN_BNE, SEM_FN_NAME (iq2000bf,bne) }, 3412 { IQ2000BF_INSN_BNEL, SEM_FN_NAME (iq2000bf,bnel) }, 3413 { IQ2000BF_INSN_JALR, SEM_FN_NAME (iq2000bf,jalr) }, 3414 { IQ2000BF_INSN_JR, SEM_FN_NAME (iq2000bf,jr) }, 3415 { IQ2000BF_INSN_LB, SEM_FN_NAME (iq2000bf,lb) }, 3416 { IQ2000BF_INSN_LBU, SEM_FN_NAME (iq2000bf,lbu) }, 3417 { IQ2000BF_INSN_LH, SEM_FN_NAME (iq2000bf,lh) }, 3418 { IQ2000BF_INSN_LHU, SEM_FN_NAME (iq2000bf,lhu) }, 3419 { IQ2000BF_INSN_LUI, SEM_FN_NAME (iq2000bf,lui) }, 3420 { IQ2000BF_INSN_LW, SEM_FN_NAME (iq2000bf,lw) }, 3421 { IQ2000BF_INSN_SB, SEM_FN_NAME (iq2000bf,sb) }, 3422 { IQ2000BF_INSN_SH, SEM_FN_NAME (iq2000bf,sh) }, 3423 { IQ2000BF_INSN_SW, SEM_FN_NAME (iq2000bf,sw) }, 3424 { IQ2000BF_INSN_BREAK, SEM_FN_NAME (iq2000bf,break) }, 3425 { IQ2000BF_INSN_SYSCALL, SEM_FN_NAME (iq2000bf,syscall) }, 3426 { IQ2000BF_INSN_ANDOUI, SEM_FN_NAME (iq2000bf,andoui) }, 3427 { IQ2000BF_INSN_ORUI, SEM_FN_NAME (iq2000bf,orui) }, 3428 { IQ2000BF_INSN_BGTZ, SEM_FN_NAME (iq2000bf,bgtz) }, 3429 { IQ2000BF_INSN_BGTZL, SEM_FN_NAME (iq2000bf,bgtzl) }, 3430 { IQ2000BF_INSN_BLEZ, SEM_FN_NAME (iq2000bf,blez) }, 3431 { IQ2000BF_INSN_BLEZL, SEM_FN_NAME (iq2000bf,blezl) }, 3432 { IQ2000BF_INSN_MRGB, SEM_FN_NAME (iq2000bf,mrgb) }, 3433 { IQ2000BF_INSN_BCTXT, SEM_FN_NAME (iq2000bf,bctxt) }, 3434 { IQ2000BF_INSN_BC0F, SEM_FN_NAME (iq2000bf,bc0f) }, 3435 { IQ2000BF_INSN_BC0FL, SEM_FN_NAME (iq2000bf,bc0fl) }, 3436 { IQ2000BF_INSN_BC3F, SEM_FN_NAME (iq2000bf,bc3f) }, 3437 { IQ2000BF_INSN_BC3FL, SEM_FN_NAME (iq2000bf,bc3fl) }, 3438 { IQ2000BF_INSN_BC0T, SEM_FN_NAME (iq2000bf,bc0t) }, 3439 { IQ2000BF_INSN_BC0TL, SEM_FN_NAME (iq2000bf,bc0tl) }, 3440 { IQ2000BF_INSN_BC3T, SEM_FN_NAME (iq2000bf,bc3t) }, 3441 { IQ2000BF_INSN_BC3TL, SEM_FN_NAME (iq2000bf,bc3tl) }, 3442 { IQ2000BF_INSN_CFC0, SEM_FN_NAME (iq2000bf,cfc0) }, 3443 { IQ2000BF_INSN_CFC1, SEM_FN_NAME (iq2000bf,cfc1) }, 3444 { IQ2000BF_INSN_CFC2, SEM_FN_NAME (iq2000bf,cfc2) }, 3445 { IQ2000BF_INSN_CFC3, SEM_FN_NAME (iq2000bf,cfc3) }, 3446 { IQ2000BF_INSN_CHKHDR, SEM_FN_NAME (iq2000bf,chkhdr) }, 3447 { IQ2000BF_INSN_CTC0, SEM_FN_NAME (iq2000bf,ctc0) }, 3448 { IQ2000BF_INSN_CTC1, SEM_FN_NAME (iq2000bf,ctc1) }, 3449 { IQ2000BF_INSN_CTC2, SEM_FN_NAME (iq2000bf,ctc2) }, 3450 { IQ2000BF_INSN_CTC3, SEM_FN_NAME (iq2000bf,ctc3) }, 3451 { IQ2000BF_INSN_JCR, SEM_FN_NAME (iq2000bf,jcr) }, 3452 { IQ2000BF_INSN_LUC32, SEM_FN_NAME (iq2000bf,luc32) }, 3453 { IQ2000BF_INSN_LUC32L, SEM_FN_NAME (iq2000bf,luc32l) }, 3454 { IQ2000BF_INSN_LUC64, SEM_FN_NAME (iq2000bf,luc64) }, 3455 { IQ2000BF_INSN_LUC64L, SEM_FN_NAME (iq2000bf,luc64l) }, 3456 { IQ2000BF_INSN_LUK, SEM_FN_NAME (iq2000bf,luk) }, 3457 { IQ2000BF_INSN_LULCK, SEM_FN_NAME (iq2000bf,lulck) }, 3458 { IQ2000BF_INSN_LUM32, SEM_FN_NAME (iq2000bf,lum32) }, 3459 { IQ2000BF_INSN_LUM32L, SEM_FN_NAME (iq2000bf,lum32l) }, 3460 { IQ2000BF_INSN_LUM64, SEM_FN_NAME (iq2000bf,lum64) }, 3461 { IQ2000BF_INSN_LUM64L, SEM_FN_NAME (iq2000bf,lum64l) }, 3462 { IQ2000BF_INSN_LUR, SEM_FN_NAME (iq2000bf,lur) }, 3463 { IQ2000BF_INSN_LURL, SEM_FN_NAME (iq2000bf,lurl) }, 3464 { IQ2000BF_INSN_LUULCK, SEM_FN_NAME (iq2000bf,luulck) }, 3465 { IQ2000BF_INSN_MFC0, SEM_FN_NAME (iq2000bf,mfc0) }, 3466 { IQ2000BF_INSN_MFC1, SEM_FN_NAME (iq2000bf,mfc1) }, 3467 { IQ2000BF_INSN_MFC2, SEM_FN_NAME (iq2000bf,mfc2) }, 3468 { IQ2000BF_INSN_MFC3, SEM_FN_NAME (iq2000bf,mfc3) }, 3469 { IQ2000BF_INSN_MTC0, SEM_FN_NAME (iq2000bf,mtc0) }, 3470 { IQ2000BF_INSN_MTC1, SEM_FN_NAME (iq2000bf,mtc1) }, 3471 { IQ2000BF_INSN_MTC2, SEM_FN_NAME (iq2000bf,mtc2) }, 3472 { IQ2000BF_INSN_MTC3, SEM_FN_NAME (iq2000bf,mtc3) }, 3473 { IQ2000BF_INSN_PKRL, SEM_FN_NAME (iq2000bf,pkrl) }, 3474 { IQ2000BF_INSN_PKRLR1, SEM_FN_NAME (iq2000bf,pkrlr1) }, 3475 { IQ2000BF_INSN_PKRLR30, SEM_FN_NAME (iq2000bf,pkrlr30) }, 3476 { IQ2000BF_INSN_RB, SEM_FN_NAME (iq2000bf,rb) }, 3477 { IQ2000BF_INSN_RBR1, SEM_FN_NAME (iq2000bf,rbr1) }, 3478 { IQ2000BF_INSN_RBR30, SEM_FN_NAME (iq2000bf,rbr30) }, 3479 { IQ2000BF_INSN_RFE, SEM_FN_NAME (iq2000bf,rfe) }, 3480 { IQ2000BF_INSN_RX, SEM_FN_NAME (iq2000bf,rx) }, 3481 { IQ2000BF_INSN_RXR1, SEM_FN_NAME (iq2000bf,rxr1) }, 3482 { IQ2000BF_INSN_RXR30, SEM_FN_NAME (iq2000bf,rxr30) }, 3483 { IQ2000BF_INSN_SLEEP, SEM_FN_NAME (iq2000bf,sleep) }, 3484 { IQ2000BF_INSN_SRRD, SEM_FN_NAME (iq2000bf,srrd) }, 3485 { IQ2000BF_INSN_SRRDL, SEM_FN_NAME (iq2000bf,srrdl) }, 3486 { IQ2000BF_INSN_SRULCK, SEM_FN_NAME (iq2000bf,srulck) }, 3487 { IQ2000BF_INSN_SRWR, SEM_FN_NAME (iq2000bf,srwr) }, 3488 { IQ2000BF_INSN_SRWRU, SEM_FN_NAME (iq2000bf,srwru) }, 3489 { IQ2000BF_INSN_TRAPQFL, SEM_FN_NAME (iq2000bf,trapqfl) }, 3490 { IQ2000BF_INSN_TRAPQNE, SEM_FN_NAME (iq2000bf,trapqne) }, 3491 { IQ2000BF_INSN_TRAPREL, SEM_FN_NAME (iq2000bf,traprel) }, 3492 { IQ2000BF_INSN_WB, SEM_FN_NAME (iq2000bf,wb) }, 3493 { IQ2000BF_INSN_WBU, SEM_FN_NAME (iq2000bf,wbu) }, 3494 { IQ2000BF_INSN_WBR1, SEM_FN_NAME (iq2000bf,wbr1) }, 3495 { IQ2000BF_INSN_WBR1U, SEM_FN_NAME (iq2000bf,wbr1u) }, 3496 { IQ2000BF_INSN_WBR30, SEM_FN_NAME (iq2000bf,wbr30) }, 3497 { IQ2000BF_INSN_WBR30U, SEM_FN_NAME (iq2000bf,wbr30u) }, 3498 { IQ2000BF_INSN_WX, SEM_FN_NAME (iq2000bf,wx) }, 3499 { IQ2000BF_INSN_WXU, SEM_FN_NAME (iq2000bf,wxu) }, 3500 { IQ2000BF_INSN_WXR1, SEM_FN_NAME (iq2000bf,wxr1) }, 3501 { IQ2000BF_INSN_WXR1U, SEM_FN_NAME (iq2000bf,wxr1u) }, 3502 { IQ2000BF_INSN_WXR30, SEM_FN_NAME (iq2000bf,wxr30) }, 3503 { IQ2000BF_INSN_WXR30U, SEM_FN_NAME (iq2000bf,wxr30u) }, 3504 { IQ2000BF_INSN_LDW, SEM_FN_NAME (iq2000bf,ldw) }, 3505 { IQ2000BF_INSN_SDW, SEM_FN_NAME (iq2000bf,sdw) }, 3506 { IQ2000BF_INSN_J, SEM_FN_NAME (iq2000bf,j) }, 3507 { IQ2000BF_INSN_JAL, SEM_FN_NAME (iq2000bf,jal) }, 3508 { IQ2000BF_INSN_BMB, SEM_FN_NAME (iq2000bf,bmb) }, 3509 { 0, 0 } 3510}; 3511 3512/* Add the semantic fns to IDESC_TABLE. */ 3513 3514void 3515SEM_FN_NAME (iq2000bf,init_idesc_table) (SIM_CPU *current_cpu) 3516{ 3517 IDESC *idesc_table = CPU_IDESC (current_cpu); 3518 const struct sem_fn_desc *sf; 3519 int mach_num = MACH_NUM (CPU_MACH (current_cpu)); 3520 3521 for (sf = &sem_fns[0]; sf->fn != 0; ++sf) 3522 { 3523 const CGEN_INSN *insn = idesc_table[sf->index].idata; 3524 int valid_p = (CGEN_INSN_VIRTUAL_P (insn) 3525 || CGEN_INSN_MACH_HAS_P (insn, mach_num)); 3526#if FAST_P 3527 if (valid_p) 3528 idesc_table[sf->index].sem_fast = sf->fn; 3529 else 3530 idesc_table[sf->index].sem_fast = SEM_FN_NAME (iq2000bf,x_invalid); 3531#else 3532 if (valid_p) 3533 idesc_table[sf->index].sem_full = sf->fn; 3534 else 3535 idesc_table[sf->index].sem_full = SEM_FN_NAME (iq2000bf,x_invalid); 3536#endif 3537 } 3538} 3539 3540