1/* Simulator instruction semantics for m32rbf. 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 m32rbf 25#define WANT_CPU_M32RBF 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 (m32rbf,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 (m32rbf,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_M32RBF 85 m32rbf_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 (m32rbf,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_M32RBF 106 m32rbf_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 (m32rbf,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_M32RBF 127#ifdef DEFINE_SWITCH 128 vpc = m32rbf_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 = m32rbf_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 (m32rbf,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_M32RBF 157 vpc = m32rbf_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 (m32rbf,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_M32RBF 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 = m32rbf_pbb_begin (current_cpu, FAST_P); 185#else 186#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 187 vpc = m32rbf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 188#else 189 vpc = m32rbf_pbb_begin (current_cpu, 0); 190#endif 191#endif 192#endif 193 } 194 195 return vpc; 196#undef FLD 197} 198 199/* add: add $dr,$sr */ 200 201static SEM_PC 202SEM_FN_NAME (m32rbf,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 203{ 204#define FLD(f) abuf->fields.sfmt_add.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, 2); 209 210 { 211 SI opval = ADDSI (* FLD (i_dr), * FLD (i_sr)); 212 * FLD (i_dr) = opval; 213 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 214 } 215 216 return vpc; 217#undef FLD 218} 219 220/* add3: add3 $dr,$sr,$hash$slo16 */ 221 222static SEM_PC 223SEM_FN_NAME (m32rbf,add3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 224{ 225#define FLD(f) abuf->fields.sfmt_add3.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 (* FLD (i_sr), FLD (f_simm16)); 233 * FLD (i_dr) = opval; 234 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 235 } 236 237 return vpc; 238#undef FLD 239} 240 241/* and: and $dr,$sr */ 242 243static SEM_PC 244SEM_FN_NAME (m32rbf,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 245{ 246#define FLD(f) abuf->fields.sfmt_add.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, 2); 251 252 { 253 SI opval = ANDSI (* FLD (i_dr), * FLD (i_sr)); 254 * FLD (i_dr) = opval; 255 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 256 } 257 258 return vpc; 259#undef FLD 260} 261 262/* and3: and3 $dr,$sr,$uimm16 */ 263 264static SEM_PC 265SEM_FN_NAME (m32rbf,and3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 266{ 267#define FLD(f) abuf->fields.sfmt_and3.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 = ANDSI (* FLD (i_sr), FLD (f_uimm16)); 275 * FLD (i_dr) = opval; 276 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 277 } 278 279 return vpc; 280#undef FLD 281} 282 283/* or: or $dr,$sr */ 284 285static SEM_PC 286SEM_FN_NAME (m32rbf,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 287{ 288#define FLD(f) abuf->fields.sfmt_add.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, 2); 293 294 { 295 SI opval = ORSI (* FLD (i_dr), * FLD (i_sr)); 296 * FLD (i_dr) = opval; 297 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 298 } 299 300 return vpc; 301#undef FLD 302} 303 304/* or3: or3 $dr,$sr,$hash$ulo16 */ 305 306static SEM_PC 307SEM_FN_NAME (m32rbf,or3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 308{ 309#define FLD(f) abuf->fields.sfmt_and3.f 310 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 311 int UNUSED written = 0; 312 IADDR UNUSED pc = abuf->addr; 313 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 314 315 { 316 SI opval = ORSI (* FLD (i_sr), FLD (f_uimm16)); 317 * FLD (i_dr) = opval; 318 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 319 } 320 321 return vpc; 322#undef FLD 323} 324 325/* xor: xor $dr,$sr */ 326 327static SEM_PC 328SEM_FN_NAME (m32rbf,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 329{ 330#define FLD(f) abuf->fields.sfmt_add.f 331 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 332 int UNUSED written = 0; 333 IADDR UNUSED pc = abuf->addr; 334 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 335 336 { 337 SI opval = XORSI (* FLD (i_dr), * FLD (i_sr)); 338 * FLD (i_dr) = opval; 339 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 340 } 341 342 return vpc; 343#undef FLD 344} 345 346/* xor3: xor3 $dr,$sr,$uimm16 */ 347 348static SEM_PC 349SEM_FN_NAME (m32rbf,xor3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 350{ 351#define FLD(f) abuf->fields.sfmt_and3.f 352 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 353 int UNUSED written = 0; 354 IADDR UNUSED pc = abuf->addr; 355 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 356 357 { 358 SI opval = XORSI (* FLD (i_sr), FLD (f_uimm16)); 359 * FLD (i_dr) = opval; 360 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 361 } 362 363 return vpc; 364#undef FLD 365} 366 367/* addi: addi $dr,$simm8 */ 368 369static SEM_PC 370SEM_FN_NAME (m32rbf,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 371{ 372#define FLD(f) abuf->fields.sfmt_addi.f 373 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 374 int UNUSED written = 0; 375 IADDR UNUSED pc = abuf->addr; 376 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 377 378 { 379 SI opval = ADDSI (* FLD (i_dr), FLD (f_simm8)); 380 * FLD (i_dr) = opval; 381 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 382 } 383 384 return vpc; 385#undef FLD 386} 387 388/* addv: addv $dr,$sr */ 389 390static SEM_PC 391SEM_FN_NAME (m32rbf,addv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 392{ 393#define FLD(f) abuf->fields.sfmt_add.f 394 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 395 int UNUSED written = 0; 396 IADDR UNUSED pc = abuf->addr; 397 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 398 399{ 400 SI temp0;BI temp1; 401 temp0 = ADDSI (* FLD (i_dr), * FLD (i_sr)); 402 temp1 = ADDOFSI (* FLD (i_dr), * FLD (i_sr), 0); 403 { 404 SI opval = temp0; 405 * FLD (i_dr) = opval; 406 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 407 } 408 { 409 BI opval = temp1; 410 CPU (h_cond) = opval; 411 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 412 } 413} 414 415 return vpc; 416#undef FLD 417} 418 419/* addv3: addv3 $dr,$sr,$simm16 */ 420 421static SEM_PC 422SEM_FN_NAME (m32rbf,addv3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 423{ 424#define FLD(f) abuf->fields.sfmt_add3.f 425 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 426 int UNUSED written = 0; 427 IADDR UNUSED pc = abuf->addr; 428 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 429 430{ 431 SI temp0;BI temp1; 432 temp0 = ADDSI (* FLD (i_sr), FLD (f_simm16)); 433 temp1 = ADDOFSI (* FLD (i_sr), FLD (f_simm16), 0); 434 { 435 SI opval = temp0; 436 * FLD (i_dr) = opval; 437 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 438 } 439 { 440 BI opval = temp1; 441 CPU (h_cond) = opval; 442 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 443 } 444} 445 446 return vpc; 447#undef FLD 448} 449 450/* addx: addx $dr,$sr */ 451 452static SEM_PC 453SEM_FN_NAME (m32rbf,addx) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 454{ 455#define FLD(f) abuf->fields.sfmt_add.f 456 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 457 int UNUSED written = 0; 458 IADDR UNUSED pc = abuf->addr; 459 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 460 461{ 462 SI temp0;BI temp1; 463 temp0 = ADDCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 464 temp1 = ADDCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 465 { 466 SI opval = temp0; 467 * FLD (i_dr) = opval; 468 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 469 } 470 { 471 BI opval = temp1; 472 CPU (h_cond) = opval; 473 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 474 } 475} 476 477 return vpc; 478#undef FLD 479} 480 481/* bc8: bc.s $disp8 */ 482 483static SEM_PC 484SEM_FN_NAME (m32rbf,bc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 485{ 486#define FLD(f) abuf->fields.sfmt_bl8.f 487 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 488 int UNUSED written = 0; 489 IADDR UNUSED pc = abuf->addr; 490 SEM_BRANCH_INIT 491 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 492 493if (CPU (h_cond)) { 494 { 495 USI opval = FLD (i_disp8); 496 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 497 written |= (1 << 2); 498 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 499 } 500} 501 502 abuf->written = written; 503 SEM_BRANCH_FINI (vpc); 504 return vpc; 505#undef FLD 506} 507 508/* bc24: bc.l $disp24 */ 509 510static SEM_PC 511SEM_FN_NAME (m32rbf,bc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 512{ 513#define FLD(f) abuf->fields.sfmt_bl24.f 514 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 515 int UNUSED written = 0; 516 IADDR UNUSED pc = abuf->addr; 517 SEM_BRANCH_INIT 518 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 519 520if (CPU (h_cond)) { 521 { 522 USI opval = FLD (i_disp24); 523 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 524 written |= (1 << 2); 525 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 526 } 527} 528 529 abuf->written = written; 530 SEM_BRANCH_FINI (vpc); 531 return vpc; 532#undef FLD 533} 534 535/* beq: beq $src1,$src2,$disp16 */ 536 537static SEM_PC 538SEM_FN_NAME (m32rbf,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 539{ 540#define FLD(f) abuf->fields.sfmt_beq.f 541 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 542 int UNUSED written = 0; 543 IADDR UNUSED pc = abuf->addr; 544 SEM_BRANCH_INIT 545 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 546 547if (EQSI (* FLD (i_src1), * FLD (i_src2))) { 548 { 549 USI opval = FLD (i_disp16); 550 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 551 written |= (1 << 3); 552 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 553 } 554} 555 556 abuf->written = written; 557 SEM_BRANCH_FINI (vpc); 558 return vpc; 559#undef FLD 560} 561 562/* beqz: beqz $src2,$disp16 */ 563 564static SEM_PC 565SEM_FN_NAME (m32rbf,beqz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 566{ 567#define FLD(f) abuf->fields.sfmt_beq.f 568 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 569 int UNUSED written = 0; 570 IADDR UNUSED pc = abuf->addr; 571 SEM_BRANCH_INIT 572 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 573 574if (EQSI (* FLD (i_src2), 0)) { 575 { 576 USI opval = FLD (i_disp16); 577 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 578 written |= (1 << 2); 579 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 580 } 581} 582 583 abuf->written = written; 584 SEM_BRANCH_FINI (vpc); 585 return vpc; 586#undef FLD 587} 588 589/* bgez: bgez $src2,$disp16 */ 590 591static SEM_PC 592SEM_FN_NAME (m32rbf,bgez) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 593{ 594#define FLD(f) abuf->fields.sfmt_beq.f 595 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 596 int UNUSED written = 0; 597 IADDR UNUSED pc = abuf->addr; 598 SEM_BRANCH_INIT 599 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 600 601if (GESI (* FLD (i_src2), 0)) { 602 { 603 USI opval = FLD (i_disp16); 604 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 605 written |= (1 << 2); 606 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 607 } 608} 609 610 abuf->written = written; 611 SEM_BRANCH_FINI (vpc); 612 return vpc; 613#undef FLD 614} 615 616/* bgtz: bgtz $src2,$disp16 */ 617 618static SEM_PC 619SEM_FN_NAME (m32rbf,bgtz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 620{ 621#define FLD(f) abuf->fields.sfmt_beq.f 622 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 623 int UNUSED written = 0; 624 IADDR UNUSED pc = abuf->addr; 625 SEM_BRANCH_INIT 626 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 627 628if (GTSI (* FLD (i_src2), 0)) { 629 { 630 USI opval = FLD (i_disp16); 631 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 632 written |= (1 << 2); 633 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 634 } 635} 636 637 abuf->written = written; 638 SEM_BRANCH_FINI (vpc); 639 return vpc; 640#undef FLD 641} 642 643/* blez: blez $src2,$disp16 */ 644 645static SEM_PC 646SEM_FN_NAME (m32rbf,blez) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 647{ 648#define FLD(f) abuf->fields.sfmt_beq.f 649 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 650 int UNUSED written = 0; 651 IADDR UNUSED pc = abuf->addr; 652 SEM_BRANCH_INIT 653 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 654 655if (LESI (* FLD (i_src2), 0)) { 656 { 657 USI opval = FLD (i_disp16); 658 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 659 written |= (1 << 2); 660 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 661 } 662} 663 664 abuf->written = written; 665 SEM_BRANCH_FINI (vpc); 666 return vpc; 667#undef FLD 668} 669 670/* bltz: bltz $src2,$disp16 */ 671 672static SEM_PC 673SEM_FN_NAME (m32rbf,bltz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 674{ 675#define FLD(f) abuf->fields.sfmt_beq.f 676 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 677 int UNUSED written = 0; 678 IADDR UNUSED pc = abuf->addr; 679 SEM_BRANCH_INIT 680 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 681 682if (LTSI (* FLD (i_src2), 0)) { 683 { 684 USI opval = FLD (i_disp16); 685 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 686 written |= (1 << 2); 687 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 688 } 689} 690 691 abuf->written = written; 692 SEM_BRANCH_FINI (vpc); 693 return vpc; 694#undef FLD 695} 696 697/* bnez: bnez $src2,$disp16 */ 698 699static SEM_PC 700SEM_FN_NAME (m32rbf,bnez) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 701{ 702#define FLD(f) abuf->fields.sfmt_beq.f 703 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 704 int UNUSED written = 0; 705 IADDR UNUSED pc = abuf->addr; 706 SEM_BRANCH_INIT 707 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 708 709if (NESI (* FLD (i_src2), 0)) { 710 { 711 USI opval = FLD (i_disp16); 712 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 713 written |= (1 << 2); 714 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 715 } 716} 717 718 abuf->written = written; 719 SEM_BRANCH_FINI (vpc); 720 return vpc; 721#undef FLD 722} 723 724/* bl8: bl.s $disp8 */ 725 726static SEM_PC 727SEM_FN_NAME (m32rbf,bl8) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 728{ 729#define FLD(f) abuf->fields.sfmt_bl8.f 730 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 731 int UNUSED written = 0; 732 IADDR UNUSED pc = abuf->addr; 733 SEM_BRANCH_INIT 734 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 735 736{ 737 { 738 SI opval = ADDSI (ANDSI (pc, -4), 4); 739 CPU (h_gr[((UINT) 14)]) = opval; 740 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 741 } 742 { 743 USI opval = FLD (i_disp8); 744 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 745 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 746 } 747} 748 749 SEM_BRANCH_FINI (vpc); 750 return vpc; 751#undef FLD 752} 753 754/* bl24: bl.l $disp24 */ 755 756static SEM_PC 757SEM_FN_NAME (m32rbf,bl24) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 758{ 759#define FLD(f) abuf->fields.sfmt_bl24.f 760 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 761 int UNUSED written = 0; 762 IADDR UNUSED pc = abuf->addr; 763 SEM_BRANCH_INIT 764 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 765 766{ 767 { 768 SI opval = ADDSI (pc, 4); 769 CPU (h_gr[((UINT) 14)]) = opval; 770 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 771 } 772 { 773 USI opval = FLD (i_disp24); 774 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 775 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 776 } 777} 778 779 SEM_BRANCH_FINI (vpc); 780 return vpc; 781#undef FLD 782} 783 784/* bnc8: bnc.s $disp8 */ 785 786static SEM_PC 787SEM_FN_NAME (m32rbf,bnc8) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 788{ 789#define FLD(f) abuf->fields.sfmt_bl8.f 790 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 791 int UNUSED written = 0; 792 IADDR UNUSED pc = abuf->addr; 793 SEM_BRANCH_INIT 794 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 795 796if (NOTBI (CPU (h_cond))) { 797 { 798 USI opval = FLD (i_disp8); 799 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 800 written |= (1 << 2); 801 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 802 } 803} 804 805 abuf->written = written; 806 SEM_BRANCH_FINI (vpc); 807 return vpc; 808#undef FLD 809} 810 811/* bnc24: bnc.l $disp24 */ 812 813static SEM_PC 814SEM_FN_NAME (m32rbf,bnc24) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 815{ 816#define FLD(f) abuf->fields.sfmt_bl24.f 817 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 818 int UNUSED written = 0; 819 IADDR UNUSED pc = abuf->addr; 820 SEM_BRANCH_INIT 821 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 822 823if (NOTBI (CPU (h_cond))) { 824 { 825 USI opval = FLD (i_disp24); 826 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 827 written |= (1 << 2); 828 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 829 } 830} 831 832 abuf->written = written; 833 SEM_BRANCH_FINI (vpc); 834 return vpc; 835#undef FLD 836} 837 838/* bne: bne $src1,$src2,$disp16 */ 839 840static SEM_PC 841SEM_FN_NAME (m32rbf,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 842{ 843#define FLD(f) abuf->fields.sfmt_beq.f 844 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 845 int UNUSED written = 0; 846 IADDR UNUSED pc = abuf->addr; 847 SEM_BRANCH_INIT 848 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 849 850if (NESI (* FLD (i_src1), * FLD (i_src2))) { 851 { 852 USI opval = FLD (i_disp16); 853 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 854 written |= (1 << 3); 855 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 856 } 857} 858 859 abuf->written = written; 860 SEM_BRANCH_FINI (vpc); 861 return vpc; 862#undef FLD 863} 864 865/* bra8: bra.s $disp8 */ 866 867static SEM_PC 868SEM_FN_NAME (m32rbf,bra8) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 869{ 870#define FLD(f) abuf->fields.sfmt_bl8.f 871 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 872 int UNUSED written = 0; 873 IADDR UNUSED pc = abuf->addr; 874 SEM_BRANCH_INIT 875 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 876 877 { 878 USI opval = FLD (i_disp8); 879 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 880 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 881 } 882 883 SEM_BRANCH_FINI (vpc); 884 return vpc; 885#undef FLD 886} 887 888/* bra24: bra.l $disp24 */ 889 890static SEM_PC 891SEM_FN_NAME (m32rbf,bra24) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 892{ 893#define FLD(f) abuf->fields.sfmt_bl24.f 894 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 895 int UNUSED written = 0; 896 IADDR UNUSED pc = abuf->addr; 897 SEM_BRANCH_INIT 898 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 899 900 { 901 USI opval = FLD (i_disp24); 902 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 903 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 904 } 905 906 SEM_BRANCH_FINI (vpc); 907 return vpc; 908#undef FLD 909} 910 911/* cmp: cmp $src1,$src2 */ 912 913static SEM_PC 914SEM_FN_NAME (m32rbf,cmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 915{ 916#define FLD(f) abuf->fields.sfmt_st_plus.f 917 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 918 int UNUSED written = 0; 919 IADDR UNUSED pc = abuf->addr; 920 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 921 922 { 923 BI opval = LTSI (* FLD (i_src1), * FLD (i_src2)); 924 CPU (h_cond) = opval; 925 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 926 } 927 928 return vpc; 929#undef FLD 930} 931 932/* cmpi: cmpi $src2,$simm16 */ 933 934static SEM_PC 935SEM_FN_NAME (m32rbf,cmpi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 936{ 937#define FLD(f) abuf->fields.sfmt_st_d.f 938 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 939 int UNUSED written = 0; 940 IADDR UNUSED pc = abuf->addr; 941 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 942 943 { 944 BI opval = LTSI (* FLD (i_src2), FLD (f_simm16)); 945 CPU (h_cond) = opval; 946 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 947 } 948 949 return vpc; 950#undef FLD 951} 952 953/* cmpu: cmpu $src1,$src2 */ 954 955static SEM_PC 956SEM_FN_NAME (m32rbf,cmpu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 957{ 958#define FLD(f) abuf->fields.sfmt_st_plus.f 959 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 960 int UNUSED written = 0; 961 IADDR UNUSED pc = abuf->addr; 962 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 963 964 { 965 BI opval = LTUSI (* FLD (i_src1), * FLD (i_src2)); 966 CPU (h_cond) = opval; 967 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 968 } 969 970 return vpc; 971#undef FLD 972} 973 974/* cmpui: cmpui $src2,$simm16 */ 975 976static SEM_PC 977SEM_FN_NAME (m32rbf,cmpui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 978{ 979#define FLD(f) abuf->fields.sfmt_st_d.f 980 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 981 int UNUSED written = 0; 982 IADDR UNUSED pc = abuf->addr; 983 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 984 985 { 986 BI opval = LTUSI (* FLD (i_src2), FLD (f_simm16)); 987 CPU (h_cond) = opval; 988 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 989 } 990 991 return vpc; 992#undef FLD 993} 994 995/* div: div $dr,$sr */ 996 997static SEM_PC 998SEM_FN_NAME (m32rbf,div) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 999{ 1000#define FLD(f) abuf->fields.sfmt_add.f 1001 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1002 int UNUSED written = 0; 1003 IADDR UNUSED pc = abuf->addr; 1004 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1005 1006if (NESI (* FLD (i_sr), 0)) { 1007 { 1008 SI opval = DIVSI (* FLD (i_dr), * FLD (i_sr)); 1009 * FLD (i_dr) = opval; 1010 written |= (1 << 2); 1011 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1012 } 1013} 1014 1015 abuf->written = written; 1016 return vpc; 1017#undef FLD 1018} 1019 1020/* divu: divu $dr,$sr */ 1021 1022static SEM_PC 1023SEM_FN_NAME (m32rbf,divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1024{ 1025#define FLD(f) abuf->fields.sfmt_add.f 1026 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1027 int UNUSED written = 0; 1028 IADDR UNUSED pc = abuf->addr; 1029 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1030 1031if (NESI (* FLD (i_sr), 0)) { 1032 { 1033 SI opval = UDIVSI (* FLD (i_dr), * FLD (i_sr)); 1034 * FLD (i_dr) = opval; 1035 written |= (1 << 2); 1036 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1037 } 1038} 1039 1040 abuf->written = written; 1041 return vpc; 1042#undef FLD 1043} 1044 1045/* rem: rem $dr,$sr */ 1046 1047static SEM_PC 1048SEM_FN_NAME (m32rbf,rem) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1049{ 1050#define FLD(f) abuf->fields.sfmt_add.f 1051 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1052 int UNUSED written = 0; 1053 IADDR UNUSED pc = abuf->addr; 1054 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1055 1056if (NESI (* FLD (i_sr), 0)) { 1057 { 1058 SI opval = MODSI (* FLD (i_dr), * FLD (i_sr)); 1059 * FLD (i_dr) = opval; 1060 written |= (1 << 2); 1061 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1062 } 1063} 1064 1065 abuf->written = written; 1066 return vpc; 1067#undef FLD 1068} 1069 1070/* remu: remu $dr,$sr */ 1071 1072static SEM_PC 1073SEM_FN_NAME (m32rbf,remu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1074{ 1075#define FLD(f) abuf->fields.sfmt_add.f 1076 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1077 int UNUSED written = 0; 1078 IADDR UNUSED pc = abuf->addr; 1079 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1080 1081if (NESI (* FLD (i_sr), 0)) { 1082 { 1083 SI opval = UMODSI (* FLD (i_dr), * FLD (i_sr)); 1084 * FLD (i_dr) = opval; 1085 written |= (1 << 2); 1086 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1087 } 1088} 1089 1090 abuf->written = written; 1091 return vpc; 1092#undef FLD 1093} 1094 1095/* jl: jl $sr */ 1096 1097static SEM_PC 1098SEM_FN_NAME (m32rbf,jl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1099{ 1100#define FLD(f) abuf->fields.sfmt_jl.f 1101 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1102 int UNUSED written = 0; 1103 IADDR UNUSED pc = abuf->addr; 1104 SEM_BRANCH_INIT 1105 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1106 1107{ 1108 SI temp0;USI temp1; 1109 temp0 = ADDSI (ANDSI (pc, -4), 4); 1110 temp1 = ANDSI (* FLD (i_sr), -4); 1111 { 1112 SI opval = temp0; 1113 CPU (h_gr[((UINT) 14)]) = opval; 1114 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1115 } 1116 { 1117 USI opval = temp1; 1118 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1119 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1120 } 1121} 1122 1123 SEM_BRANCH_FINI (vpc); 1124 return vpc; 1125#undef FLD 1126} 1127 1128/* jmp: jmp $sr */ 1129 1130static SEM_PC 1131SEM_FN_NAME (m32rbf,jmp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1132{ 1133#define FLD(f) abuf->fields.sfmt_jl.f 1134 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1135 int UNUSED written = 0; 1136 IADDR UNUSED pc = abuf->addr; 1137 SEM_BRANCH_INIT 1138 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1139 1140 { 1141 USI opval = ANDSI (* FLD (i_sr), -4); 1142 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1143 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1144 } 1145 1146 SEM_BRANCH_FINI (vpc); 1147 return vpc; 1148#undef FLD 1149} 1150 1151/* ld: ld $dr,@$sr */ 1152 1153static SEM_PC 1154SEM_FN_NAME (m32rbf,ld) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1155{ 1156#define FLD(f) abuf->fields.sfmt_ld_plus.f 1157 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1158 int UNUSED written = 0; 1159 IADDR UNUSED pc = abuf->addr; 1160 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1161 1162 { 1163 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 1164 * FLD (i_dr) = opval; 1165 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1166 } 1167 1168 return vpc; 1169#undef FLD 1170} 1171 1172/* ld-d: ld $dr,@($slo16,$sr) */ 1173 1174static SEM_PC 1175SEM_FN_NAME (m32rbf,ld_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1176{ 1177#define FLD(f) abuf->fields.sfmt_add3.f 1178 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1179 int UNUSED written = 0; 1180 IADDR UNUSED pc = abuf->addr; 1181 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1182 1183 { 1184 SI opval = GETMEMSI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))); 1185 * FLD (i_dr) = opval; 1186 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1187 } 1188 1189 return vpc; 1190#undef FLD 1191} 1192 1193/* ldb: ldb $dr,@$sr */ 1194 1195static SEM_PC 1196SEM_FN_NAME (m32rbf,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1197{ 1198#define FLD(f) abuf->fields.sfmt_ld_plus.f 1199 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1200 int UNUSED written = 0; 1201 IADDR UNUSED pc = abuf->addr; 1202 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1203 1204 { 1205 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 1206 * FLD (i_dr) = opval; 1207 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1208 } 1209 1210 return vpc; 1211#undef FLD 1212} 1213 1214/* ldb-d: ldb $dr,@($slo16,$sr) */ 1215 1216static SEM_PC 1217SEM_FN_NAME (m32rbf,ldb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1218{ 1219#define FLD(f) abuf->fields.sfmt_add3.f 1220 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1221 int UNUSED written = 0; 1222 IADDR UNUSED pc = abuf->addr; 1223 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1224 1225 { 1226 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1227 * FLD (i_dr) = opval; 1228 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1229 } 1230 1231 return vpc; 1232#undef FLD 1233} 1234 1235/* ldh: ldh $dr,@$sr */ 1236 1237static SEM_PC 1238SEM_FN_NAME (m32rbf,ldh) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1239{ 1240#define FLD(f) abuf->fields.sfmt_ld_plus.f 1241 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1242 int UNUSED written = 0; 1243 IADDR UNUSED pc = abuf->addr; 1244 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1245 1246 { 1247 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 1248 * FLD (i_dr) = opval; 1249 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1250 } 1251 1252 return vpc; 1253#undef FLD 1254} 1255 1256/* ldh-d: ldh $dr,@($slo16,$sr) */ 1257 1258static SEM_PC 1259SEM_FN_NAME (m32rbf,ldh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1260{ 1261#define FLD(f) abuf->fields.sfmt_add3.f 1262 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1263 int UNUSED written = 0; 1264 IADDR UNUSED pc = abuf->addr; 1265 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1266 1267 { 1268 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1269 * FLD (i_dr) = opval; 1270 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1271 } 1272 1273 return vpc; 1274#undef FLD 1275} 1276 1277/* ldub: ldub $dr,@$sr */ 1278 1279static SEM_PC 1280SEM_FN_NAME (m32rbf,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1281{ 1282#define FLD(f) abuf->fields.sfmt_ld_plus.f 1283 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1284 int UNUSED written = 0; 1285 IADDR UNUSED pc = abuf->addr; 1286 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1287 1288 { 1289 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, * FLD (i_sr))); 1290 * FLD (i_dr) = opval; 1291 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1292 } 1293 1294 return vpc; 1295#undef FLD 1296} 1297 1298/* ldub-d: ldub $dr,@($slo16,$sr) */ 1299 1300static SEM_PC 1301SEM_FN_NAME (m32rbf,ldub_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1302{ 1303#define FLD(f) abuf->fields.sfmt_add3.f 1304 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1305 int UNUSED written = 0; 1306 IADDR UNUSED pc = abuf->addr; 1307 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1308 1309 { 1310 SI opval = ZEXTQISI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1311 * FLD (i_dr) = opval; 1312 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1313 } 1314 1315 return vpc; 1316#undef FLD 1317} 1318 1319/* lduh: lduh $dr,@$sr */ 1320 1321static SEM_PC 1322SEM_FN_NAME (m32rbf,lduh) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1323{ 1324#define FLD(f) abuf->fields.sfmt_ld_plus.f 1325 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1326 int UNUSED written = 0; 1327 IADDR UNUSED pc = abuf->addr; 1328 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1329 1330 { 1331 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, * FLD (i_sr))); 1332 * FLD (i_dr) = opval; 1333 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1334 } 1335 1336 return vpc; 1337#undef FLD 1338} 1339 1340/* lduh-d: lduh $dr,@($slo16,$sr) */ 1341 1342static SEM_PC 1343SEM_FN_NAME (m32rbf,lduh_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1344{ 1345#define FLD(f) abuf->fields.sfmt_add3.f 1346 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1347 int UNUSED written = 0; 1348 IADDR UNUSED pc = abuf->addr; 1349 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1350 1351 { 1352 SI opval = ZEXTHISI (GETMEMHI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)))); 1353 * FLD (i_dr) = opval; 1354 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1355 } 1356 1357 return vpc; 1358#undef FLD 1359} 1360 1361/* ld-plus: ld $dr,@$sr+ */ 1362 1363static SEM_PC 1364SEM_FN_NAME (m32rbf,ld_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1365{ 1366#define FLD(f) abuf->fields.sfmt_ld_plus.f 1367 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1368 int UNUSED written = 0; 1369 IADDR UNUSED pc = abuf->addr; 1370 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1371 1372{ 1373 SI temp0;SI temp1; 1374 temp0 = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 1375 temp1 = ADDSI (* FLD (i_sr), 4); 1376 { 1377 SI opval = temp0; 1378 * FLD (i_dr) = opval; 1379 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1380 } 1381 { 1382 SI opval = temp1; 1383 * FLD (i_sr) = opval; 1384 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1385 } 1386} 1387 1388 return vpc; 1389#undef FLD 1390} 1391 1392/* ld24: ld24 $dr,$uimm24 */ 1393 1394static SEM_PC 1395SEM_FN_NAME (m32rbf,ld24) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1396{ 1397#define FLD(f) abuf->fields.sfmt_ld24.f 1398 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1399 int UNUSED written = 0; 1400 IADDR UNUSED pc = abuf->addr; 1401 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1402 1403 { 1404 SI opval = FLD (i_uimm24); 1405 * FLD (i_dr) = opval; 1406 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1407 } 1408 1409 return vpc; 1410#undef FLD 1411} 1412 1413/* ldi8: ldi8 $dr,$simm8 */ 1414 1415static SEM_PC 1416SEM_FN_NAME (m32rbf,ldi8) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1417{ 1418#define FLD(f) abuf->fields.sfmt_addi.f 1419 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1420 int UNUSED written = 0; 1421 IADDR UNUSED pc = abuf->addr; 1422 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1423 1424 { 1425 SI opval = FLD (f_simm8); 1426 * FLD (i_dr) = opval; 1427 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1428 } 1429 1430 return vpc; 1431#undef FLD 1432} 1433 1434/* ldi16: ldi16 $dr,$hash$slo16 */ 1435 1436static SEM_PC 1437SEM_FN_NAME (m32rbf,ldi16) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1438{ 1439#define FLD(f) abuf->fields.sfmt_add3.f 1440 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1441 int UNUSED written = 0; 1442 IADDR UNUSED pc = abuf->addr; 1443 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1444 1445 { 1446 SI opval = FLD (f_simm16); 1447 * FLD (i_dr) = opval; 1448 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1449 } 1450 1451 return vpc; 1452#undef FLD 1453} 1454 1455/* lock: lock $dr,@$sr */ 1456 1457static SEM_PC 1458SEM_FN_NAME (m32rbf,lock) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1459{ 1460#define FLD(f) abuf->fields.sfmt_ld_plus.f 1461 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1462 int UNUSED written = 0; 1463 IADDR UNUSED pc = abuf->addr; 1464 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1465 1466{ 1467 { 1468 BI opval = 1; 1469 CPU (h_lock) = opval; 1470 CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 1471 } 1472 { 1473 SI opval = GETMEMSI (current_cpu, pc, * FLD (i_sr)); 1474 * FLD (i_dr) = opval; 1475 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1476 } 1477} 1478 1479 return vpc; 1480#undef FLD 1481} 1482 1483/* machi: machi $src1,$src2 */ 1484 1485static SEM_PC 1486SEM_FN_NAME (m32rbf,machi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1487{ 1488#define FLD(f) abuf->fields.sfmt_st_plus.f 1489 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1490 int UNUSED written = 0; 1491 IADDR UNUSED pc = abuf->addr; 1492 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1493 1494 { 1495 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8); 1496 SET_H_ACCUM (opval); 1497 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1498 } 1499 1500 return vpc; 1501#undef FLD 1502} 1503 1504/* maclo: maclo $src1,$src2 */ 1505 1506static SEM_PC 1507SEM_FN_NAME (m32rbf,maclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1508{ 1509#define FLD(f) abuf->fields.sfmt_st_plus.f 1510 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1511 int UNUSED written = 0; 1512 IADDR UNUSED pc = abuf->addr; 1513 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1514 1515 { 1516 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8); 1517 SET_H_ACCUM (opval); 1518 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1519 } 1520 1521 return vpc; 1522#undef FLD 1523} 1524 1525/* macwhi: macwhi $src1,$src2 */ 1526 1527static SEM_PC 1528SEM_FN_NAME (m32rbf,macwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1529{ 1530#define FLD(f) abuf->fields.sfmt_st_plus.f 1531 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1532 int UNUSED written = 0; 1533 IADDR UNUSED pc = abuf->addr; 1534 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1535 1536 { 1537 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16))))), 8), 8); 1538 SET_H_ACCUM (opval); 1539 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1540 } 1541 1542 return vpc; 1543#undef FLD 1544} 1545 1546/* macwlo: macwlo $src1,$src2 */ 1547 1548static SEM_PC 1549SEM_FN_NAME (m32rbf,macwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1550{ 1551#define FLD(f) abuf->fields.sfmt_st_plus.f 1552 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1553 int UNUSED written = 0; 1554 IADDR UNUSED pc = abuf->addr; 1555 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1556 1557 { 1558 DI opval = SRADI (SLLDI (ADDDI (GET_H_ACCUM (), MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2))))), 8), 8); 1559 SET_H_ACCUM (opval); 1560 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1561 } 1562 1563 return vpc; 1564#undef FLD 1565} 1566 1567/* mul: mul $dr,$sr */ 1568 1569static SEM_PC 1570SEM_FN_NAME (m32rbf,mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1571{ 1572#define FLD(f) abuf->fields.sfmt_add.f 1573 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1574 int UNUSED written = 0; 1575 IADDR UNUSED pc = abuf->addr; 1576 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1577 1578 { 1579 SI opval = MULSI (* FLD (i_dr), * FLD (i_sr)); 1580 * FLD (i_dr) = opval; 1581 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1582 } 1583 1584 return vpc; 1585#undef FLD 1586} 1587 1588/* mulhi: mulhi $src1,$src2 */ 1589 1590static SEM_PC 1591SEM_FN_NAME (m32rbf,mulhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1592{ 1593#define FLD(f) abuf->fields.sfmt_st_plus.f 1594 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1595 int UNUSED written = 0; 1596 IADDR UNUSED pc = abuf->addr; 1597 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1598 1599 { 1600 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (ANDSI (* FLD (i_src1), 0xffff0000)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 16), 16); 1601 SET_H_ACCUM (opval); 1602 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1603 } 1604 1605 return vpc; 1606#undef FLD 1607} 1608 1609/* mullo: mullo $src1,$src2 */ 1610 1611static SEM_PC 1612SEM_FN_NAME (m32rbf,mullo) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1613{ 1614#define FLD(f) abuf->fields.sfmt_st_plus.f 1615 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1616 int UNUSED written = 0; 1617 IADDR UNUSED pc = abuf->addr; 1618 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1619 1620 { 1621 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (SLLSI (* FLD (i_src1), 16)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 16), 16); 1622 SET_H_ACCUM (opval); 1623 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1624 } 1625 1626 return vpc; 1627#undef FLD 1628} 1629 1630/* mulwhi: mulwhi $src1,$src2 */ 1631 1632static SEM_PC 1633SEM_FN_NAME (m32rbf,mulwhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1634{ 1635#define FLD(f) abuf->fields.sfmt_st_plus.f 1636 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1637 int UNUSED written = 0; 1638 IADDR UNUSED pc = abuf->addr; 1639 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1640 1641 { 1642 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (SRASI (* FLD (i_src2), 16)))), 8), 8); 1643 SET_H_ACCUM (opval); 1644 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1645 } 1646 1647 return vpc; 1648#undef FLD 1649} 1650 1651/* mulwlo: mulwlo $src1,$src2 */ 1652 1653static SEM_PC 1654SEM_FN_NAME (m32rbf,mulwlo) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1655{ 1656#define FLD(f) abuf->fields.sfmt_st_plus.f 1657 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1658 int UNUSED written = 0; 1659 IADDR UNUSED pc = abuf->addr; 1660 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1661 1662 { 1663 DI opval = SRADI (SLLDI (MULDI (EXTSIDI (* FLD (i_src1)), EXTHIDI (TRUNCSIHI (* FLD (i_src2)))), 8), 8); 1664 SET_H_ACCUM (opval); 1665 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1666 } 1667 1668 return vpc; 1669#undef FLD 1670} 1671 1672/* mv: mv $dr,$sr */ 1673 1674static SEM_PC 1675SEM_FN_NAME (m32rbf,mv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1676{ 1677#define FLD(f) abuf->fields.sfmt_ld_plus.f 1678 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1679 int UNUSED written = 0; 1680 IADDR UNUSED pc = abuf->addr; 1681 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1682 1683 { 1684 SI opval = * FLD (i_sr); 1685 * FLD (i_dr) = opval; 1686 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1687 } 1688 1689 return vpc; 1690#undef FLD 1691} 1692 1693/* mvfachi: mvfachi $dr */ 1694 1695static SEM_PC 1696SEM_FN_NAME (m32rbf,mvfachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1697{ 1698#define FLD(f) abuf->fields.sfmt_seth.f 1699 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1700 int UNUSED written = 0; 1701 IADDR UNUSED pc = abuf->addr; 1702 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1703 1704 { 1705 SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 32)); 1706 * FLD (i_dr) = opval; 1707 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1708 } 1709 1710 return vpc; 1711#undef FLD 1712} 1713 1714/* mvfaclo: mvfaclo $dr */ 1715 1716static SEM_PC 1717SEM_FN_NAME (m32rbf,mvfaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1718{ 1719#define FLD(f) abuf->fields.sfmt_seth.f 1720 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1721 int UNUSED written = 0; 1722 IADDR UNUSED pc = abuf->addr; 1723 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1724 1725 { 1726 SI opval = TRUNCDISI (GET_H_ACCUM ()); 1727 * FLD (i_dr) = opval; 1728 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1729 } 1730 1731 return vpc; 1732#undef FLD 1733} 1734 1735/* mvfacmi: mvfacmi $dr */ 1736 1737static SEM_PC 1738SEM_FN_NAME (m32rbf,mvfacmi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1739{ 1740#define FLD(f) abuf->fields.sfmt_seth.f 1741 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1742 int UNUSED written = 0; 1743 IADDR UNUSED pc = abuf->addr; 1744 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1745 1746 { 1747 SI opval = TRUNCDISI (SRADI (GET_H_ACCUM (), 16)); 1748 * FLD (i_dr) = opval; 1749 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1750 } 1751 1752 return vpc; 1753#undef FLD 1754} 1755 1756/* mvfc: mvfc $dr,$scr */ 1757 1758static SEM_PC 1759SEM_FN_NAME (m32rbf,mvfc) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1760{ 1761#define FLD(f) abuf->fields.sfmt_ld_plus.f 1762 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1763 int UNUSED written = 0; 1764 IADDR UNUSED pc = abuf->addr; 1765 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1766 1767 { 1768 SI opval = GET_H_CR (FLD (f_r2)); 1769 * FLD (i_dr) = opval; 1770 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1771 } 1772 1773 return vpc; 1774#undef FLD 1775} 1776 1777/* mvtachi: mvtachi $src1 */ 1778 1779static SEM_PC 1780SEM_FN_NAME (m32rbf,mvtachi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1781{ 1782#define FLD(f) abuf->fields.sfmt_st_plus.f 1783 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1784 int UNUSED written = 0; 1785 IADDR UNUSED pc = abuf->addr; 1786 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1787 1788 { 1789 DI opval = ORDI (ANDDI (GET_H_ACCUM (), MAKEDI (0, 0xffffffff)), SLLDI (EXTSIDI (* FLD (i_src1)), 32)); 1790 SET_H_ACCUM (opval); 1791 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1792 } 1793 1794 return vpc; 1795#undef FLD 1796} 1797 1798/* mvtaclo: mvtaclo $src1 */ 1799 1800static SEM_PC 1801SEM_FN_NAME (m32rbf,mvtaclo) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1802{ 1803#define FLD(f) abuf->fields.sfmt_st_plus.f 1804 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1805 int UNUSED written = 0; 1806 IADDR UNUSED pc = abuf->addr; 1807 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1808 1809 { 1810 DI opval = ORDI (ANDDI (GET_H_ACCUM (), MAKEDI (0xffffffff, 0)), ZEXTSIDI (* FLD (i_src1))); 1811 SET_H_ACCUM (opval); 1812 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1813 } 1814 1815 return vpc; 1816#undef FLD 1817} 1818 1819/* mvtc: mvtc $sr,$dcr */ 1820 1821static SEM_PC 1822SEM_FN_NAME (m32rbf,mvtc) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1823{ 1824#define FLD(f) abuf->fields.sfmt_ld_plus.f 1825 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1826 int UNUSED written = 0; 1827 IADDR UNUSED pc = abuf->addr; 1828 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1829 1830 { 1831 USI opval = * FLD (i_sr); 1832 SET_H_CR (FLD (f_r1), opval); 1833 CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 1834 } 1835 1836 return vpc; 1837#undef FLD 1838} 1839 1840/* neg: neg $dr,$sr */ 1841 1842static SEM_PC 1843SEM_FN_NAME (m32rbf,neg) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1844{ 1845#define FLD(f) abuf->fields.sfmt_ld_plus.f 1846 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1847 int UNUSED written = 0; 1848 IADDR UNUSED pc = abuf->addr; 1849 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1850 1851 { 1852 SI opval = NEGSI (* FLD (i_sr)); 1853 * FLD (i_dr) = opval; 1854 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1855 } 1856 1857 return vpc; 1858#undef FLD 1859} 1860 1861/* nop: nop */ 1862 1863static SEM_PC 1864SEM_FN_NAME (m32rbf,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1865{ 1866#define FLD(f) abuf->fields.sfmt_empty.f 1867 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1868 int UNUSED written = 0; 1869 IADDR UNUSED pc = abuf->addr; 1870 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1871 1872PROFILE_COUNT_FILLNOPS (current_cpu, abuf->addr); 1873 1874 return vpc; 1875#undef FLD 1876} 1877 1878/* not: not $dr,$sr */ 1879 1880static SEM_PC 1881SEM_FN_NAME (m32rbf,not) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1882{ 1883#define FLD(f) abuf->fields.sfmt_ld_plus.f 1884 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1885 int UNUSED written = 0; 1886 IADDR UNUSED pc = abuf->addr; 1887 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1888 1889 { 1890 SI opval = INVSI (* FLD (i_sr)); 1891 * FLD (i_dr) = opval; 1892 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 1893 } 1894 1895 return vpc; 1896#undef FLD 1897} 1898 1899/* rac: rac */ 1900 1901static SEM_PC 1902SEM_FN_NAME (m32rbf,rac) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1903{ 1904#define FLD(f) abuf->fields.sfmt_empty.f 1905 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1906 int UNUSED written = 0; 1907 IADDR UNUSED pc = abuf->addr; 1908 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1909 1910{ 1911 DI tmp_tmp1; 1912 tmp_tmp1 = SLLDI (GET_H_ACCUM (), 1); 1913 tmp_tmp1 = ADDDI (tmp_tmp1, MAKEDI (0, 32768)); 1914 { 1915 DI opval = (GTDI (tmp_tmp1, MAKEDI (32767, 0xffff0000))) ? (MAKEDI (32767, 0xffff0000)) : (LTDI (tmp_tmp1, MAKEDI (0xffff8000, 0))) ? (MAKEDI (0xffff8000, 0)) : (ANDDI (tmp_tmp1, MAKEDI (0xffffffff, 0xffff0000))); 1916 SET_H_ACCUM (opval); 1917 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1918 } 1919} 1920 1921 return vpc; 1922#undef FLD 1923} 1924 1925/* rach: rach */ 1926 1927static SEM_PC 1928SEM_FN_NAME (m32rbf,rach) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1929{ 1930#define FLD(f) abuf->fields.sfmt_empty.f 1931 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1932 int UNUSED written = 0; 1933 IADDR UNUSED pc = abuf->addr; 1934 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1935 1936{ 1937 DI tmp_tmp1; 1938 tmp_tmp1 = ANDDI (GET_H_ACCUM (), MAKEDI (16777215, 0xffffffff)); 1939if (ANDIF (GEDI (tmp_tmp1, MAKEDI (16383, 0x80000000)), LEDI (tmp_tmp1, MAKEDI (8388607, 0xffffffff)))) { 1940 tmp_tmp1 = MAKEDI (16383, 0x80000000); 1941} else { 1942if (ANDIF (GEDI (tmp_tmp1, MAKEDI (8388608, 0)), LEDI (tmp_tmp1, MAKEDI (16760832, 0)))) { 1943 tmp_tmp1 = MAKEDI (16760832, 0); 1944} else { 1945 tmp_tmp1 = ANDDI (ADDDI (GET_H_ACCUM (), MAKEDI (0, 1073741824)), MAKEDI (0xffffffff, 0x80000000)); 1946} 1947} 1948 tmp_tmp1 = SLLDI (tmp_tmp1, 1); 1949 { 1950 DI opval = SRADI (SLLDI (tmp_tmp1, 7), 7); 1951 SET_H_ACCUM (opval); 1952 CGEN_TRACE_RESULT (current_cpu, abuf, "accum", 'D', opval); 1953 } 1954} 1955 1956 return vpc; 1957#undef FLD 1958} 1959 1960/* rte: rte */ 1961 1962static SEM_PC 1963SEM_FN_NAME (m32rbf,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1964{ 1965#define FLD(f) abuf->fields.sfmt_empty.f 1966 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1967 int UNUSED written = 0; 1968 IADDR UNUSED pc = abuf->addr; 1969 SEM_BRANCH_INIT 1970 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 1971 1972{ 1973 { 1974 USI opval = ANDSI (GET_H_CR (((UINT) 6)), -4); 1975 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 1976 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 1977 } 1978 { 1979 USI opval = GET_H_CR (((UINT) 14)); 1980 SET_H_CR (((UINT) 6), opval); 1981 CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 1982 } 1983 { 1984 UQI opval = CPU (h_bpsw); 1985 SET_H_PSW (opval); 1986 CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 1987 } 1988 { 1989 UQI opval = CPU (h_bbpsw); 1990 CPU (h_bpsw) = opval; 1991 CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 1992 } 1993} 1994 1995 SEM_BRANCH_FINI (vpc); 1996 return vpc; 1997#undef FLD 1998} 1999 2000/* seth: seth $dr,$hash$hi16 */ 2001 2002static SEM_PC 2003SEM_FN_NAME (m32rbf,seth) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2004{ 2005#define FLD(f) abuf->fields.sfmt_seth.f 2006 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2007 int UNUSED written = 0; 2008 IADDR UNUSED pc = abuf->addr; 2009 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2010 2011 { 2012 SI opval = SLLSI (FLD (f_hi16), 16); 2013 * FLD (i_dr) = opval; 2014 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2015 } 2016 2017 return vpc; 2018#undef FLD 2019} 2020 2021/* sll: sll $dr,$sr */ 2022 2023static SEM_PC 2024SEM_FN_NAME (m32rbf,sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2025{ 2026#define FLD(f) abuf->fields.sfmt_add.f 2027 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2028 int UNUSED written = 0; 2029 IADDR UNUSED pc = abuf->addr; 2030 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2031 2032 { 2033 SI opval = SLLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 2034 * FLD (i_dr) = opval; 2035 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2036 } 2037 2038 return vpc; 2039#undef FLD 2040} 2041 2042/* sll3: sll3 $dr,$sr,$simm16 */ 2043 2044static SEM_PC 2045SEM_FN_NAME (m32rbf,sll3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2046{ 2047#define FLD(f) abuf->fields.sfmt_add3.f 2048 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2049 int UNUSED written = 0; 2050 IADDR UNUSED pc = abuf->addr; 2051 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2052 2053 { 2054 SI opval = SLLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 2055 * FLD (i_dr) = opval; 2056 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2057 } 2058 2059 return vpc; 2060#undef FLD 2061} 2062 2063/* slli: slli $dr,$uimm5 */ 2064 2065static SEM_PC 2066SEM_FN_NAME (m32rbf,slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2067{ 2068#define FLD(f) abuf->fields.sfmt_slli.f 2069 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2070 int UNUSED written = 0; 2071 IADDR UNUSED pc = abuf->addr; 2072 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2073 2074 { 2075 SI opval = SLLSI (* FLD (i_dr), FLD (f_uimm5)); 2076 * FLD (i_dr) = opval; 2077 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2078 } 2079 2080 return vpc; 2081#undef FLD 2082} 2083 2084/* sra: sra $dr,$sr */ 2085 2086static SEM_PC 2087SEM_FN_NAME (m32rbf,sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2088{ 2089#define FLD(f) abuf->fields.sfmt_add.f 2090 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2091 int UNUSED written = 0; 2092 IADDR UNUSED pc = abuf->addr; 2093 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2094 2095 { 2096 SI opval = SRASI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 2097 * FLD (i_dr) = opval; 2098 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2099 } 2100 2101 return vpc; 2102#undef FLD 2103} 2104 2105/* sra3: sra3 $dr,$sr,$simm16 */ 2106 2107static SEM_PC 2108SEM_FN_NAME (m32rbf,sra3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2109{ 2110#define FLD(f) abuf->fields.sfmt_add3.f 2111 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2112 int UNUSED written = 0; 2113 IADDR UNUSED pc = abuf->addr; 2114 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2115 2116 { 2117 SI opval = SRASI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 2118 * FLD (i_dr) = opval; 2119 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2120 } 2121 2122 return vpc; 2123#undef FLD 2124} 2125 2126/* srai: srai $dr,$uimm5 */ 2127 2128static SEM_PC 2129SEM_FN_NAME (m32rbf,srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2130{ 2131#define FLD(f) abuf->fields.sfmt_slli.f 2132 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2133 int UNUSED written = 0; 2134 IADDR UNUSED pc = abuf->addr; 2135 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2136 2137 { 2138 SI opval = SRASI (* FLD (i_dr), FLD (f_uimm5)); 2139 * FLD (i_dr) = opval; 2140 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2141 } 2142 2143 return vpc; 2144#undef FLD 2145} 2146 2147/* srl: srl $dr,$sr */ 2148 2149static SEM_PC 2150SEM_FN_NAME (m32rbf,srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2151{ 2152#define FLD(f) abuf->fields.sfmt_add.f 2153 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2154 int UNUSED written = 0; 2155 IADDR UNUSED pc = abuf->addr; 2156 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2157 2158 { 2159 SI opval = SRLSI (* FLD (i_dr), ANDSI (* FLD (i_sr), 31)); 2160 * FLD (i_dr) = opval; 2161 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2162 } 2163 2164 return vpc; 2165#undef FLD 2166} 2167 2168/* srl3: srl3 $dr,$sr,$simm16 */ 2169 2170static SEM_PC 2171SEM_FN_NAME (m32rbf,srl3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2172{ 2173#define FLD(f) abuf->fields.sfmt_add3.f 2174 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2175 int UNUSED written = 0; 2176 IADDR UNUSED pc = abuf->addr; 2177 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2178 2179 { 2180 SI opval = SRLSI (* FLD (i_sr), ANDSI (FLD (f_simm16), 31)); 2181 * FLD (i_dr) = opval; 2182 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2183 } 2184 2185 return vpc; 2186#undef FLD 2187} 2188 2189/* srli: srli $dr,$uimm5 */ 2190 2191static SEM_PC 2192SEM_FN_NAME (m32rbf,srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2193{ 2194#define FLD(f) abuf->fields.sfmt_slli.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, 2); 2199 2200 { 2201 SI opval = SRLSI (* FLD (i_dr), FLD (f_uimm5)); 2202 * FLD (i_dr) = opval; 2203 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2204 } 2205 2206 return vpc; 2207#undef FLD 2208} 2209 2210/* st: st $src1,@$src2 */ 2211 2212static SEM_PC 2213SEM_FN_NAME (m32rbf,st) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2214{ 2215#define FLD(f) abuf->fields.sfmt_st_plus.f 2216 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2217 int UNUSED written = 0; 2218 IADDR UNUSED pc = abuf->addr; 2219 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2220 2221 { 2222 SI opval = * FLD (i_src1); 2223 SETMEMSI (current_cpu, pc, * FLD (i_src2), opval); 2224 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2225 } 2226 2227 return vpc; 2228#undef FLD 2229} 2230 2231/* st-d: st $src1,@($slo16,$src2) */ 2232 2233static SEM_PC 2234SEM_FN_NAME (m32rbf,st_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2235{ 2236#define FLD(f) abuf->fields.sfmt_st_d.f 2237 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2238 int UNUSED written = 0; 2239 IADDR UNUSED pc = abuf->addr; 2240 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2241 2242 { 2243 SI opval = * FLD (i_src1); 2244 SETMEMSI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2245 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2246 } 2247 2248 return vpc; 2249#undef FLD 2250} 2251 2252/* stb: stb $src1,@$src2 */ 2253 2254static SEM_PC 2255SEM_FN_NAME (m32rbf,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2256{ 2257#define FLD(f) abuf->fields.sfmt_st_plus.f 2258 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2259 int UNUSED written = 0; 2260 IADDR UNUSED pc = abuf->addr; 2261 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2262 2263 { 2264 QI opval = * FLD (i_src1); 2265 SETMEMQI (current_cpu, pc, * FLD (i_src2), opval); 2266 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2267 } 2268 2269 return vpc; 2270#undef FLD 2271} 2272 2273/* stb-d: stb $src1,@($slo16,$src2) */ 2274 2275static SEM_PC 2276SEM_FN_NAME (m32rbf,stb_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2277{ 2278#define FLD(f) abuf->fields.sfmt_st_d.f 2279 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2280 int UNUSED written = 0; 2281 IADDR UNUSED pc = abuf->addr; 2282 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2283 2284 { 2285 QI opval = * FLD (i_src1); 2286 SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2287 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2288 } 2289 2290 return vpc; 2291#undef FLD 2292} 2293 2294/* sth: sth $src1,@$src2 */ 2295 2296static SEM_PC 2297SEM_FN_NAME (m32rbf,sth) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2298{ 2299#define FLD(f) abuf->fields.sfmt_st_plus.f 2300 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2301 int UNUSED written = 0; 2302 IADDR UNUSED pc = abuf->addr; 2303 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2304 2305 { 2306 HI opval = * FLD (i_src1); 2307 SETMEMHI (current_cpu, pc, * FLD (i_src2), opval); 2308 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2309 } 2310 2311 return vpc; 2312#undef FLD 2313} 2314 2315/* sth-d: sth $src1,@($slo16,$src2) */ 2316 2317static SEM_PC 2318SEM_FN_NAME (m32rbf,sth_d) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2319{ 2320#define FLD(f) abuf->fields.sfmt_st_d.f 2321 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2322 int UNUSED written = 0; 2323 IADDR UNUSED pc = abuf->addr; 2324 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2325 2326 { 2327 HI opval = * FLD (i_src1); 2328 SETMEMHI (current_cpu, pc, ADDSI (* FLD (i_src2), FLD (f_simm16)), opval); 2329 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2330 } 2331 2332 return vpc; 2333#undef FLD 2334} 2335 2336/* st-plus: st $src1,@+$src2 */ 2337 2338static SEM_PC 2339SEM_FN_NAME (m32rbf,st_plus) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2340{ 2341#define FLD(f) abuf->fields.sfmt_st_plus.f 2342 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2343 int UNUSED written = 0; 2344 IADDR UNUSED pc = abuf->addr; 2345 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2346 2347{ 2348 SI tmp_new_src2; 2349 tmp_new_src2 = ADDSI (* FLD (i_src2), 4); 2350 { 2351 SI opval = * FLD (i_src1); 2352 SETMEMSI (current_cpu, pc, tmp_new_src2, opval); 2353 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2354 } 2355 { 2356 SI opval = tmp_new_src2; 2357 * FLD (i_src2) = opval; 2358 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2359 } 2360} 2361 2362 return vpc; 2363#undef FLD 2364} 2365 2366/* st-minus: st $src1,@-$src2 */ 2367 2368static SEM_PC 2369SEM_FN_NAME (m32rbf,st_minus) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2370{ 2371#define FLD(f) abuf->fields.sfmt_st_plus.f 2372 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2373 int UNUSED written = 0; 2374 IADDR UNUSED pc = abuf->addr; 2375 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2376 2377{ 2378 SI tmp_new_src2; 2379 tmp_new_src2 = SUBSI (* FLD (i_src2), 4); 2380 { 2381 SI opval = * FLD (i_src1); 2382 SETMEMSI (current_cpu, pc, tmp_new_src2, opval); 2383 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2384 } 2385 { 2386 SI opval = tmp_new_src2; 2387 * FLD (i_src2) = opval; 2388 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2389 } 2390} 2391 2392 return vpc; 2393#undef FLD 2394} 2395 2396/* sub: sub $dr,$sr */ 2397 2398static SEM_PC 2399SEM_FN_NAME (m32rbf,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2400{ 2401#define FLD(f) abuf->fields.sfmt_add.f 2402 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2403 int UNUSED written = 0; 2404 IADDR UNUSED pc = abuf->addr; 2405 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2406 2407 { 2408 SI opval = SUBSI (* FLD (i_dr), * FLD (i_sr)); 2409 * FLD (i_dr) = opval; 2410 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2411 } 2412 2413 return vpc; 2414#undef FLD 2415} 2416 2417/* subv: subv $dr,$sr */ 2418 2419static SEM_PC 2420SEM_FN_NAME (m32rbf,subv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2421{ 2422#define FLD(f) abuf->fields.sfmt_add.f 2423 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2424 int UNUSED written = 0; 2425 IADDR UNUSED pc = abuf->addr; 2426 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2427 2428{ 2429 SI temp0;BI temp1; 2430 temp0 = SUBSI (* FLD (i_dr), * FLD (i_sr)); 2431 temp1 = SUBOFSI (* FLD (i_dr), * FLD (i_sr), 0); 2432 { 2433 SI opval = temp0; 2434 * FLD (i_dr) = opval; 2435 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2436 } 2437 { 2438 BI opval = temp1; 2439 CPU (h_cond) = opval; 2440 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 2441 } 2442} 2443 2444 return vpc; 2445#undef FLD 2446} 2447 2448/* subx: subx $dr,$sr */ 2449 2450static SEM_PC 2451SEM_FN_NAME (m32rbf,subx) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2452{ 2453#define FLD(f) abuf->fields.sfmt_add.f 2454 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2455 int UNUSED written = 0; 2456 IADDR UNUSED pc = abuf->addr; 2457 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2458 2459{ 2460 SI temp0;BI temp1; 2461 temp0 = SUBCSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 2462 temp1 = SUBCFSI (* FLD (i_dr), * FLD (i_sr), CPU (h_cond)); 2463 { 2464 SI opval = temp0; 2465 * FLD (i_dr) = opval; 2466 CGEN_TRACE_RESULT (current_cpu, abuf, "gr", 'x', opval); 2467 } 2468 { 2469 BI opval = temp1; 2470 CPU (h_cond) = opval; 2471 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 2472 } 2473} 2474 2475 return vpc; 2476#undef FLD 2477} 2478 2479/* trap: trap $uimm4 */ 2480 2481static SEM_PC 2482SEM_FN_NAME (m32rbf,trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2483{ 2484#define FLD(f) abuf->fields.sfmt_trap.f 2485 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2486 int UNUSED written = 0; 2487 IADDR UNUSED pc = abuf->addr; 2488 SEM_BRANCH_INIT 2489 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2490 2491{ 2492 { 2493 USI opval = GET_H_CR (((UINT) 6)); 2494 SET_H_CR (((UINT) 14), opval); 2495 CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 2496 } 2497 { 2498 USI opval = ADDSI (pc, 4); 2499 SET_H_CR (((UINT) 6), opval); 2500 CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 2501 } 2502 { 2503 UQI opval = CPU (h_bpsw); 2504 CPU (h_bbpsw) = opval; 2505 CGEN_TRACE_RESULT (current_cpu, abuf, "bbpsw", 'x', opval); 2506 } 2507 { 2508 UQI opval = GET_H_PSW (); 2509 CPU (h_bpsw) = opval; 2510 CGEN_TRACE_RESULT (current_cpu, abuf, "bpsw", 'x', opval); 2511 } 2512 { 2513 UQI opval = ANDQI (GET_H_PSW (), 128); 2514 SET_H_PSW (opval); 2515 CGEN_TRACE_RESULT (current_cpu, abuf, "psw", 'x', opval); 2516 } 2517 { 2518 SI opval = m32r_trap (current_cpu, pc, FLD (f_uimm4)); 2519 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 2520 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 2521 } 2522} 2523 2524 SEM_BRANCH_FINI (vpc); 2525 return vpc; 2526#undef FLD 2527} 2528 2529/* unlock: unlock $src1,@$src2 */ 2530 2531static SEM_PC 2532SEM_FN_NAME (m32rbf,unlock) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2533{ 2534#define FLD(f) abuf->fields.sfmt_st_plus.f 2535 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2536 int UNUSED written = 0; 2537 IADDR UNUSED pc = abuf->addr; 2538 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2539 2540{ 2541if (CPU (h_lock)) { 2542 { 2543 SI opval = * FLD (i_src1); 2544 SETMEMSI (current_cpu, pc, * FLD (i_src2), opval); 2545 written |= (1 << 4); 2546 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2547 } 2548} 2549 { 2550 BI opval = 0; 2551 CPU (h_lock) = opval; 2552 CGEN_TRACE_RESULT (current_cpu, abuf, "lock", 'x', opval); 2553 } 2554} 2555 2556 abuf->written = written; 2557 return vpc; 2558#undef FLD 2559} 2560 2561/* clrpsw: clrpsw $uimm8 */ 2562 2563static SEM_PC 2564SEM_FN_NAME (m32rbf,clrpsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2565{ 2566#define FLD(f) abuf->fields.sfmt_clrpsw.f 2567 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2568 int UNUSED written = 0; 2569 IADDR UNUSED pc = abuf->addr; 2570 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2571 2572 { 2573 USI opval = ANDSI (GET_H_CR (((UINT) 0)), ORSI (ZEXTQISI (INVQI (FLD (f_uimm8))), 65280)); 2574 SET_H_CR (((UINT) 0), opval); 2575 CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 2576 } 2577 2578 return vpc; 2579#undef FLD 2580} 2581 2582/* setpsw: setpsw $uimm8 */ 2583 2584static SEM_PC 2585SEM_FN_NAME (m32rbf,setpsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2586{ 2587#define FLD(f) abuf->fields.sfmt_clrpsw.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, 2); 2592 2593 { 2594 USI opval = FLD (f_uimm8); 2595 SET_H_CR (((UINT) 0), opval); 2596 CGEN_TRACE_RESULT (current_cpu, abuf, "cr", 'x', opval); 2597 } 2598 2599 return vpc; 2600#undef FLD 2601} 2602 2603/* bset: bset $uimm3,@($slo16,$sr) */ 2604 2605static SEM_PC 2606SEM_FN_NAME (m32rbf,bset) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2607{ 2608#define FLD(f) abuf->fields.sfmt_bset.f 2609 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2610 int UNUSED written = 0; 2611 IADDR UNUSED pc = abuf->addr; 2612 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2613 2614 { 2615 QI opval = ORQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), SLLQI (1, SUBSI (7, FLD (f_uimm3)))); 2616 SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval); 2617 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2618 } 2619 2620 return vpc; 2621#undef FLD 2622} 2623 2624/* bclr: bclr $uimm3,@($slo16,$sr) */ 2625 2626static SEM_PC 2627SEM_FN_NAME (m32rbf,bclr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2628{ 2629#define FLD(f) abuf->fields.sfmt_bset.f 2630 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2631 int UNUSED written = 0; 2632 IADDR UNUSED pc = abuf->addr; 2633 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2634 2635 { 2636 QI opval = ANDQI (GETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16))), INVQI (SLLQI (1, SUBSI (7, FLD (f_uimm3))))); 2637 SETMEMQI (current_cpu, pc, ADDSI (* FLD (i_sr), FLD (f_simm16)), opval); 2638 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 2639 } 2640 2641 return vpc; 2642#undef FLD 2643} 2644 2645/* btst: btst $uimm3,$sr */ 2646 2647static SEM_PC 2648SEM_FN_NAME (m32rbf,btst) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2649{ 2650#define FLD(f) abuf->fields.sfmt_bset.f 2651 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2652 int UNUSED written = 0; 2653 IADDR UNUSED pc = abuf->addr; 2654 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 2); 2655 2656 { 2657 BI opval = ANDQI (SRLQI (* FLD (i_sr), SUBSI (7, FLD (f_uimm3))), 1); 2658 CPU (h_cond) = opval; 2659 CGEN_TRACE_RESULT (current_cpu, abuf, "cond", 'x', opval); 2660 } 2661 2662 return vpc; 2663#undef FLD 2664} 2665 2666/* Table of all semantic fns. */ 2667 2668static const struct sem_fn_desc sem_fns[] = { 2669 { M32RBF_INSN_X_INVALID, SEM_FN_NAME (m32rbf,x_invalid) }, 2670 { M32RBF_INSN_X_AFTER, SEM_FN_NAME (m32rbf,x_after) }, 2671 { M32RBF_INSN_X_BEFORE, SEM_FN_NAME (m32rbf,x_before) }, 2672 { M32RBF_INSN_X_CTI_CHAIN, SEM_FN_NAME (m32rbf,x_cti_chain) }, 2673 { M32RBF_INSN_X_CHAIN, SEM_FN_NAME (m32rbf,x_chain) }, 2674 { M32RBF_INSN_X_BEGIN, SEM_FN_NAME (m32rbf,x_begin) }, 2675 { M32RBF_INSN_ADD, SEM_FN_NAME (m32rbf,add) }, 2676 { M32RBF_INSN_ADD3, SEM_FN_NAME (m32rbf,add3) }, 2677 { M32RBF_INSN_AND, SEM_FN_NAME (m32rbf,and) }, 2678 { M32RBF_INSN_AND3, SEM_FN_NAME (m32rbf,and3) }, 2679 { M32RBF_INSN_OR, SEM_FN_NAME (m32rbf,or) }, 2680 { M32RBF_INSN_OR3, SEM_FN_NAME (m32rbf,or3) }, 2681 { M32RBF_INSN_XOR, SEM_FN_NAME (m32rbf,xor) }, 2682 { M32RBF_INSN_XOR3, SEM_FN_NAME (m32rbf,xor3) }, 2683 { M32RBF_INSN_ADDI, SEM_FN_NAME (m32rbf,addi) }, 2684 { M32RBF_INSN_ADDV, SEM_FN_NAME (m32rbf,addv) }, 2685 { M32RBF_INSN_ADDV3, SEM_FN_NAME (m32rbf,addv3) }, 2686 { M32RBF_INSN_ADDX, SEM_FN_NAME (m32rbf,addx) }, 2687 { M32RBF_INSN_BC8, SEM_FN_NAME (m32rbf,bc8) }, 2688 { M32RBF_INSN_BC24, SEM_FN_NAME (m32rbf,bc24) }, 2689 { M32RBF_INSN_BEQ, SEM_FN_NAME (m32rbf,beq) }, 2690 { M32RBF_INSN_BEQZ, SEM_FN_NAME (m32rbf,beqz) }, 2691 { M32RBF_INSN_BGEZ, SEM_FN_NAME (m32rbf,bgez) }, 2692 { M32RBF_INSN_BGTZ, SEM_FN_NAME (m32rbf,bgtz) }, 2693 { M32RBF_INSN_BLEZ, SEM_FN_NAME (m32rbf,blez) }, 2694 { M32RBF_INSN_BLTZ, SEM_FN_NAME (m32rbf,bltz) }, 2695 { M32RBF_INSN_BNEZ, SEM_FN_NAME (m32rbf,bnez) }, 2696 { M32RBF_INSN_BL8, SEM_FN_NAME (m32rbf,bl8) }, 2697 { M32RBF_INSN_BL24, SEM_FN_NAME (m32rbf,bl24) }, 2698 { M32RBF_INSN_BNC8, SEM_FN_NAME (m32rbf,bnc8) }, 2699 { M32RBF_INSN_BNC24, SEM_FN_NAME (m32rbf,bnc24) }, 2700 { M32RBF_INSN_BNE, SEM_FN_NAME (m32rbf,bne) }, 2701 { M32RBF_INSN_BRA8, SEM_FN_NAME (m32rbf,bra8) }, 2702 { M32RBF_INSN_BRA24, SEM_FN_NAME (m32rbf,bra24) }, 2703 { M32RBF_INSN_CMP, SEM_FN_NAME (m32rbf,cmp) }, 2704 { M32RBF_INSN_CMPI, SEM_FN_NAME (m32rbf,cmpi) }, 2705 { M32RBF_INSN_CMPU, SEM_FN_NAME (m32rbf,cmpu) }, 2706 { M32RBF_INSN_CMPUI, SEM_FN_NAME (m32rbf,cmpui) }, 2707 { M32RBF_INSN_DIV, SEM_FN_NAME (m32rbf,div) }, 2708 { M32RBF_INSN_DIVU, SEM_FN_NAME (m32rbf,divu) }, 2709 { M32RBF_INSN_REM, SEM_FN_NAME (m32rbf,rem) }, 2710 { M32RBF_INSN_REMU, SEM_FN_NAME (m32rbf,remu) }, 2711 { M32RBF_INSN_JL, SEM_FN_NAME (m32rbf,jl) }, 2712 { M32RBF_INSN_JMP, SEM_FN_NAME (m32rbf,jmp) }, 2713 { M32RBF_INSN_LD, SEM_FN_NAME (m32rbf,ld) }, 2714 { M32RBF_INSN_LD_D, SEM_FN_NAME (m32rbf,ld_d) }, 2715 { M32RBF_INSN_LDB, SEM_FN_NAME (m32rbf,ldb) }, 2716 { M32RBF_INSN_LDB_D, SEM_FN_NAME (m32rbf,ldb_d) }, 2717 { M32RBF_INSN_LDH, SEM_FN_NAME (m32rbf,ldh) }, 2718 { M32RBF_INSN_LDH_D, SEM_FN_NAME (m32rbf,ldh_d) }, 2719 { M32RBF_INSN_LDUB, SEM_FN_NAME (m32rbf,ldub) }, 2720 { M32RBF_INSN_LDUB_D, SEM_FN_NAME (m32rbf,ldub_d) }, 2721 { M32RBF_INSN_LDUH, SEM_FN_NAME (m32rbf,lduh) }, 2722 { M32RBF_INSN_LDUH_D, SEM_FN_NAME (m32rbf,lduh_d) }, 2723 { M32RBF_INSN_LD_PLUS, SEM_FN_NAME (m32rbf,ld_plus) }, 2724 { M32RBF_INSN_LD24, SEM_FN_NAME (m32rbf,ld24) }, 2725 { M32RBF_INSN_LDI8, SEM_FN_NAME (m32rbf,ldi8) }, 2726 { M32RBF_INSN_LDI16, SEM_FN_NAME (m32rbf,ldi16) }, 2727 { M32RBF_INSN_LOCK, SEM_FN_NAME (m32rbf,lock) }, 2728 { M32RBF_INSN_MACHI, SEM_FN_NAME (m32rbf,machi) }, 2729 { M32RBF_INSN_MACLO, SEM_FN_NAME (m32rbf,maclo) }, 2730 { M32RBF_INSN_MACWHI, SEM_FN_NAME (m32rbf,macwhi) }, 2731 { M32RBF_INSN_MACWLO, SEM_FN_NAME (m32rbf,macwlo) }, 2732 { M32RBF_INSN_MUL, SEM_FN_NAME (m32rbf,mul) }, 2733 { M32RBF_INSN_MULHI, SEM_FN_NAME (m32rbf,mulhi) }, 2734 { M32RBF_INSN_MULLO, SEM_FN_NAME (m32rbf,mullo) }, 2735 { M32RBF_INSN_MULWHI, SEM_FN_NAME (m32rbf,mulwhi) }, 2736 { M32RBF_INSN_MULWLO, SEM_FN_NAME (m32rbf,mulwlo) }, 2737 { M32RBF_INSN_MV, SEM_FN_NAME (m32rbf,mv) }, 2738 { M32RBF_INSN_MVFACHI, SEM_FN_NAME (m32rbf,mvfachi) }, 2739 { M32RBF_INSN_MVFACLO, SEM_FN_NAME (m32rbf,mvfaclo) }, 2740 { M32RBF_INSN_MVFACMI, SEM_FN_NAME (m32rbf,mvfacmi) }, 2741 { M32RBF_INSN_MVFC, SEM_FN_NAME (m32rbf,mvfc) }, 2742 { M32RBF_INSN_MVTACHI, SEM_FN_NAME (m32rbf,mvtachi) }, 2743 { M32RBF_INSN_MVTACLO, SEM_FN_NAME (m32rbf,mvtaclo) }, 2744 { M32RBF_INSN_MVTC, SEM_FN_NAME (m32rbf,mvtc) }, 2745 { M32RBF_INSN_NEG, SEM_FN_NAME (m32rbf,neg) }, 2746 { M32RBF_INSN_NOP, SEM_FN_NAME (m32rbf,nop) }, 2747 { M32RBF_INSN_NOT, SEM_FN_NAME (m32rbf,not) }, 2748 { M32RBF_INSN_RAC, SEM_FN_NAME (m32rbf,rac) }, 2749 { M32RBF_INSN_RACH, SEM_FN_NAME (m32rbf,rach) }, 2750 { M32RBF_INSN_RTE, SEM_FN_NAME (m32rbf,rte) }, 2751 { M32RBF_INSN_SETH, SEM_FN_NAME (m32rbf,seth) }, 2752 { M32RBF_INSN_SLL, SEM_FN_NAME (m32rbf,sll) }, 2753 { M32RBF_INSN_SLL3, SEM_FN_NAME (m32rbf,sll3) }, 2754 { M32RBF_INSN_SLLI, SEM_FN_NAME (m32rbf,slli) }, 2755 { M32RBF_INSN_SRA, SEM_FN_NAME (m32rbf,sra) }, 2756 { M32RBF_INSN_SRA3, SEM_FN_NAME (m32rbf,sra3) }, 2757 { M32RBF_INSN_SRAI, SEM_FN_NAME (m32rbf,srai) }, 2758 { M32RBF_INSN_SRL, SEM_FN_NAME (m32rbf,srl) }, 2759 { M32RBF_INSN_SRL3, SEM_FN_NAME (m32rbf,srl3) }, 2760 { M32RBF_INSN_SRLI, SEM_FN_NAME (m32rbf,srli) }, 2761 { M32RBF_INSN_ST, SEM_FN_NAME (m32rbf,st) }, 2762 { M32RBF_INSN_ST_D, SEM_FN_NAME (m32rbf,st_d) }, 2763 { M32RBF_INSN_STB, SEM_FN_NAME (m32rbf,stb) }, 2764 { M32RBF_INSN_STB_D, SEM_FN_NAME (m32rbf,stb_d) }, 2765 { M32RBF_INSN_STH, SEM_FN_NAME (m32rbf,sth) }, 2766 { M32RBF_INSN_STH_D, SEM_FN_NAME (m32rbf,sth_d) }, 2767 { M32RBF_INSN_ST_PLUS, SEM_FN_NAME (m32rbf,st_plus) }, 2768 { M32RBF_INSN_ST_MINUS, SEM_FN_NAME (m32rbf,st_minus) }, 2769 { M32RBF_INSN_SUB, SEM_FN_NAME (m32rbf,sub) }, 2770 { M32RBF_INSN_SUBV, SEM_FN_NAME (m32rbf,subv) }, 2771 { M32RBF_INSN_SUBX, SEM_FN_NAME (m32rbf,subx) }, 2772 { M32RBF_INSN_TRAP, SEM_FN_NAME (m32rbf,trap) }, 2773 { M32RBF_INSN_UNLOCK, SEM_FN_NAME (m32rbf,unlock) }, 2774 { M32RBF_INSN_CLRPSW, SEM_FN_NAME (m32rbf,clrpsw) }, 2775 { M32RBF_INSN_SETPSW, SEM_FN_NAME (m32rbf,setpsw) }, 2776 { M32RBF_INSN_BSET, SEM_FN_NAME (m32rbf,bset) }, 2777 { M32RBF_INSN_BCLR, SEM_FN_NAME (m32rbf,bclr) }, 2778 { M32RBF_INSN_BTST, SEM_FN_NAME (m32rbf,btst) }, 2779 { 0, 0 } 2780}; 2781 2782/* Add the semantic fns to IDESC_TABLE. */ 2783 2784void 2785SEM_FN_NAME (m32rbf,init_idesc_table) (SIM_CPU *current_cpu) 2786{ 2787 IDESC *idesc_table = CPU_IDESC (current_cpu); 2788 const struct sem_fn_desc *sf; 2789 int mach_num = MACH_NUM (CPU_MACH (current_cpu)); 2790 2791 for (sf = &sem_fns[0]; sf->fn != 0; ++sf) 2792 { 2793 const CGEN_INSN *insn = idesc_table[sf->index].idata; 2794 int valid_p = (CGEN_INSN_VIRTUAL_P (insn) 2795 || CGEN_INSN_MACH_HAS_P (insn, mach_num)); 2796#if FAST_P 2797 if (valid_p) 2798 idesc_table[sf->index].sem_fast = sf->fn; 2799 else 2800 idesc_table[sf->index].sem_fast = SEM_FN_NAME (m32rbf,x_invalid); 2801#else 2802 if (valid_p) 2803 idesc_table[sf->index].sem_full = sf->fn; 2804 else 2805 idesc_table[sf->index].sem_full = SEM_FN_NAME (m32rbf,x_invalid); 2806#endif 2807 } 2808} 2809 2810