1 /* Simulator instruction semantics for or1k32bf. 2 3 THIS FILE IS MACHINE GENERATED WITH CGEN. 4 5 Copyright 1996-2019 Free Software Foundation, Inc. 6 7 This 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, write to the Free Software Foundation, Inc., 21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 22 23 */ 24 25 #define WANT_CPU or1k32bf 26 #define WANT_CPU_OR1K32BF 27 28 #include "sim-main.h" 29 #include "cgen-mem.h" 30 #include "cgen-ops.h" 31 32 #undef GET_ATTR 33 #define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 34 35 /* This is used so that we can compile two copies of the semantic code, 36 one with full feature support and one without that runs fast(er). 37 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */ 38 #if FAST_P 39 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn) 40 #undef CGEN_TRACE_RESULT 41 #define CGEN_TRACE_RESULT(cpu, abuf, name, type, val) 42 #else 43 #define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn) 44 #endif 45 46 /* x-invalid: --invalid-- */ 47 48 static SEM_PC 49 SEM_FN_NAME (or1k32bf,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 50 { 51 #define FLD(f) abuf->fields.sfmt_empty.f 52 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 53 int UNUSED written = 0; 54 IADDR UNUSED pc = abuf->addr; 55 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 56 57 { 58 /* Update the recorded pc in the cpu state struct. 59 Only necessary for WITH_SCACHE case, but to avoid the 60 conditional compilation .... */ 61 SET_H_PC (pc); 62 /* Virtual insns have zero size. Overwrite vpc with address of next insn 63 using the default-insn-bitsize spec. When executing insns in parallel 64 we may want to queue the fault and continue execution. */ 65 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 66 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 67 } 68 69 return vpc; 70 #undef FLD 71 } 72 73 /* x-after: --after-- */ 74 75 static SEM_PC 76 SEM_FN_NAME (or1k32bf,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 77 { 78 #define FLD(f) abuf->fields.sfmt_empty.f 79 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 80 int UNUSED written = 0; 81 IADDR UNUSED pc = abuf->addr; 82 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 83 84 { 85 #if WITH_SCACHE_PBB_OR1K32BF 86 or1k32bf_pbb_after (current_cpu, sem_arg); 87 #endif 88 } 89 90 return vpc; 91 #undef FLD 92 } 93 94 /* x-before: --before-- */ 95 96 static SEM_PC 97 SEM_FN_NAME (or1k32bf,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 98 { 99 #define FLD(f) abuf->fields.sfmt_empty.f 100 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 101 int UNUSED written = 0; 102 IADDR UNUSED pc = abuf->addr; 103 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 104 105 { 106 #if WITH_SCACHE_PBB_OR1K32BF 107 or1k32bf_pbb_before (current_cpu, sem_arg); 108 #endif 109 } 110 111 return vpc; 112 #undef FLD 113 } 114 115 /* x-cti-chain: --cti-chain-- */ 116 117 static SEM_PC 118 SEM_FN_NAME (or1k32bf,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 119 { 120 #define FLD(f) abuf->fields.sfmt_empty.f 121 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 122 int UNUSED written = 0; 123 IADDR UNUSED pc = abuf->addr; 124 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 125 126 { 127 #if WITH_SCACHE_PBB_OR1K32BF 128 #ifdef DEFINE_SWITCH 129 vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg, 130 pbb_br_type, pbb_br_npc); 131 BREAK (sem); 132 #else 133 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 134 vpc = or1k32bf_pbb_cti_chain (current_cpu, sem_arg, 135 CPU_PBB_BR_TYPE (current_cpu), 136 CPU_PBB_BR_NPC (current_cpu)); 137 #endif 138 #endif 139 } 140 141 return vpc; 142 #undef FLD 143 } 144 145 /* x-chain: --chain-- */ 146 147 static SEM_PC 148 SEM_FN_NAME (or1k32bf,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 149 { 150 #define FLD(f) abuf->fields.sfmt_empty.f 151 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 152 int UNUSED written = 0; 153 IADDR UNUSED pc = abuf->addr; 154 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 155 156 { 157 #if WITH_SCACHE_PBB_OR1K32BF 158 vpc = or1k32bf_pbb_chain (current_cpu, sem_arg); 159 #ifdef DEFINE_SWITCH 160 BREAK (sem); 161 #endif 162 #endif 163 } 164 165 return vpc; 166 #undef FLD 167 } 168 169 /* x-begin: --begin-- */ 170 171 static SEM_PC 172 SEM_FN_NAME (or1k32bf,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 173 { 174 #define FLD(f) abuf->fields.sfmt_empty.f 175 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 176 int UNUSED written = 0; 177 IADDR UNUSED pc = abuf->addr; 178 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 179 180 { 181 #if WITH_SCACHE_PBB_OR1K32BF 182 #if defined DEFINE_SWITCH || defined FAST_P 183 /* In the switch case FAST_P is a constant, allowing several optimizations 184 in any called inline functions. */ 185 vpc = or1k32bf_pbb_begin (current_cpu, FAST_P); 186 #else 187 #if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 188 vpc = or1k32bf_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 189 #else 190 vpc = or1k32bf_pbb_begin (current_cpu, 0); 191 #endif 192 #endif 193 #endif 194 } 195 196 return vpc; 197 #undef FLD 198 } 199 200 /* l-j: l.j ${disp26} */ 201 202 static SEM_PC 203 SEM_FN_NAME (or1k32bf,l_j) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 204 { 205 #define FLD(f) abuf->fields.sfmt_l_j.f 206 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 207 int UNUSED written = 0; 208 IADDR UNUSED pc = abuf->addr; 209 SEM_BRANCH_INIT 210 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 211 212 { 213 { 214 { 215 USI opval = FLD (i_disp26); 216 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 217 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 218 } 219 } 220 if (GET_H_SYS_CPUCFGR_ND ()) { 221 if (1) 222 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 223 } 224 } 225 226 SEM_BRANCH_FINI (vpc); 227 return vpc; 228 #undef FLD 229 } 230 231 /* l-adrp: l.adrp $rD,${disp21} */ 232 233 static SEM_PC 234 SEM_FN_NAME (or1k32bf,l_adrp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 235 { 236 #define FLD(f) abuf->fields.sfmt_l_adrp.f 237 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 238 int UNUSED written = 0; 239 IADDR UNUSED pc = abuf->addr; 240 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 241 242 { 243 USI opval = FLD (i_disp21); 244 SET_H_GPR (FLD (f_r1), opval); 245 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 246 } 247 248 return vpc; 249 #undef FLD 250 } 251 252 /* l-jal: l.jal ${disp26} */ 253 254 static SEM_PC 255 SEM_FN_NAME (or1k32bf,l_jal) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 256 { 257 #define FLD(f) abuf->fields.sfmt_l_j.f 258 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 259 int UNUSED written = 0; 260 IADDR UNUSED pc = abuf->addr; 261 SEM_BRANCH_INIT 262 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 263 264 { 265 { 266 USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8))); 267 SET_H_GPR (((UINT) 9), opval); 268 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 269 } 270 { 271 { 272 { 273 USI opval = FLD (i_disp26); 274 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 275 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 276 } 277 } 278 if (GET_H_SYS_CPUCFGR_ND ()) { 279 if (1) 280 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 281 } 282 } 283 } 284 285 SEM_BRANCH_FINI (vpc); 286 return vpc; 287 #undef FLD 288 } 289 290 /* l-jr: l.jr $rB */ 291 292 static SEM_PC 293 SEM_FN_NAME (or1k32bf,l_jr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 294 { 295 #define FLD(f) abuf->fields.sfmt_l_sll.f 296 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 297 int UNUSED written = 0; 298 IADDR UNUSED pc = abuf->addr; 299 SEM_BRANCH_INIT 300 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 301 302 { 303 { 304 { 305 USI opval = GET_H_GPR (FLD (f_r3)); 306 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 307 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 308 } 309 } 310 if (GET_H_SYS_CPUCFGR_ND ()) { 311 if (1) 312 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 313 } 314 } 315 316 SEM_BRANCH_FINI (vpc); 317 return vpc; 318 #undef FLD 319 } 320 321 /* l-jalr: l.jalr $rB */ 322 323 static SEM_PC 324 SEM_FN_NAME (or1k32bf,l_jalr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 325 { 326 #define FLD(f) abuf->fields.sfmt_l_sll.f 327 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 328 int UNUSED written = 0; 329 IADDR UNUSED pc = abuf->addr; 330 SEM_BRANCH_INIT 331 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 332 333 { 334 { 335 USI opval = ADDSI (pc, ((GET_H_SYS_CPUCFGR_ND ()) ? (4) : (8))); 336 SET_H_GPR (((UINT) 9), opval); 337 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 338 } 339 { 340 { 341 { 342 USI opval = GET_H_GPR (FLD (f_r3)); 343 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 344 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 345 } 346 } 347 if (GET_H_SYS_CPUCFGR_ND ()) { 348 if (1) 349 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 350 } 351 } 352 } 353 354 SEM_BRANCH_FINI (vpc); 355 return vpc; 356 #undef FLD 357 } 358 359 /* l-bnf: l.bnf ${disp26} */ 360 361 static SEM_PC 362 SEM_FN_NAME (or1k32bf,l_bnf) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 363 { 364 #define FLD(f) abuf->fields.sfmt_l_j.f 365 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 366 int UNUSED written = 0; 367 IADDR UNUSED pc = abuf->addr; 368 SEM_BRANCH_INIT 369 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 370 371 { 372 if (NOTSI (GET_H_SYS_SR_F ())) { 373 { 374 { 375 USI opval = FLD (i_disp26); 376 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 377 written |= (1 << 4); 378 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 379 } 380 } 381 } else { 382 if (GET_H_SYS_CPUCFGR_ND ()) { 383 { 384 { 385 USI opval = ADDSI (pc, 4); 386 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 387 written |= (1 << 4); 388 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 389 } 390 } 391 } 392 } 393 if (GET_H_SYS_CPUCFGR_ND ()) { 394 if (1) 395 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 396 } 397 } 398 399 abuf->written = written; 400 SEM_BRANCH_FINI (vpc); 401 return vpc; 402 #undef FLD 403 } 404 405 /* l-bf: l.bf ${disp26} */ 406 407 static SEM_PC 408 SEM_FN_NAME (or1k32bf,l_bf) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 409 { 410 #define FLD(f) abuf->fields.sfmt_l_j.f 411 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 412 int UNUSED written = 0; 413 IADDR UNUSED pc = abuf->addr; 414 SEM_BRANCH_INIT 415 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 416 417 { 418 if (GET_H_SYS_SR_F ()) { 419 { 420 { 421 USI opval = FLD (i_disp26); 422 SEM_BRANCH_VIA_CACHE (current_cpu, sem_arg, opval, vpc); 423 written |= (1 << 4); 424 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 425 } 426 } 427 } else { 428 if (GET_H_SYS_CPUCFGR_ND ()) { 429 { 430 { 431 USI opval = ADDSI (pc, 4); 432 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 433 written |= (1 << 4); 434 CGEN_TRACE_RESULT (current_cpu, abuf, "pc", 'x', opval); 435 } 436 } 437 } 438 } 439 if (GET_H_SYS_CPUCFGR_ND ()) { 440 if (1) 441 SEM_SKIP_INSN (current_cpu, sem_arg, vpc); 442 } 443 } 444 445 abuf->written = written; 446 SEM_BRANCH_FINI (vpc); 447 return vpc; 448 #undef FLD 449 } 450 451 /* l-trap: l.trap ${uimm16} */ 452 453 static SEM_PC 454 SEM_FN_NAME (or1k32bf,l_trap) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 455 { 456 #define FLD(f) abuf->fields.sfmt_empty.f 457 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 458 int UNUSED written = 0; 459 IADDR UNUSED pc = abuf->addr; 460 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 461 462 or1k32bf_exception (current_cpu, pc, EXCEPT_TRAP); 463 464 return vpc; 465 #undef FLD 466 } 467 468 /* l-sys: l.sys ${uimm16} */ 469 470 static SEM_PC 471 SEM_FN_NAME (or1k32bf,l_sys) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 472 { 473 #define FLD(f) abuf->fields.sfmt_empty.f 474 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 475 int UNUSED written = 0; 476 IADDR UNUSED pc = abuf->addr; 477 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 478 479 or1k32bf_exception (current_cpu, pc, EXCEPT_SYSCALL); 480 481 return vpc; 482 #undef FLD 483 } 484 485 /* l-msync: l.msync */ 486 487 static SEM_PC 488 SEM_FN_NAME (or1k32bf,l_msync) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 489 { 490 #define FLD(f) abuf->fields.sfmt_empty.f 491 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 492 int UNUSED written = 0; 493 IADDR UNUSED pc = abuf->addr; 494 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 495 496 ((void) 0); /*nop*/ 497 498 return vpc; 499 #undef FLD 500 } 501 502 /* l-psync: l.psync */ 503 504 static SEM_PC 505 SEM_FN_NAME (or1k32bf,l_psync) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 506 { 507 #define FLD(f) abuf->fields.sfmt_empty.f 508 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 509 int UNUSED written = 0; 510 IADDR UNUSED pc = abuf->addr; 511 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 512 513 ((void) 0); /*nop*/ 514 515 return vpc; 516 #undef FLD 517 } 518 519 /* l-csync: l.csync */ 520 521 static SEM_PC 522 SEM_FN_NAME (or1k32bf,l_csync) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 523 { 524 #define FLD(f) abuf->fields.sfmt_empty.f 525 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 526 int UNUSED written = 0; 527 IADDR UNUSED pc = abuf->addr; 528 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 529 530 ((void) 0); /*nop*/ 531 532 return vpc; 533 #undef FLD 534 } 535 536 /* l-rfe: l.rfe */ 537 538 static SEM_PC 539 SEM_FN_NAME (or1k32bf,l_rfe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 540 { 541 #define FLD(f) abuf->fields.sfmt_empty.f 542 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 543 int UNUSED written = 0; 544 IADDR UNUSED pc = abuf->addr; 545 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 546 547 or1k32bf_rfe (current_cpu); 548 549 return vpc; 550 #undef FLD 551 } 552 553 /* l-nop-imm: l.nop ${uimm16} */ 554 555 static SEM_PC 556 SEM_FN_NAME (or1k32bf,l_nop_imm) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 557 { 558 #define FLD(f) abuf->fields.sfmt_l_mfspr.f 559 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 560 int UNUSED written = 0; 561 IADDR UNUSED pc = abuf->addr; 562 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 563 564 or1k32bf_nop (current_cpu, ZEXTSISI (FLD (f_uimm16))); 565 566 return vpc; 567 #undef FLD 568 } 569 570 /* l-movhi: l.movhi $rD,$uimm16 */ 571 572 static SEM_PC 573 SEM_FN_NAME (or1k32bf,l_movhi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 574 { 575 #define FLD(f) abuf->fields.sfmt_l_mfspr.f 576 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 577 int UNUSED written = 0; 578 IADDR UNUSED pc = abuf->addr; 579 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 580 581 { 582 USI opval = SLLSI (ZEXTSISI (FLD (f_uimm16)), 16); 583 SET_H_GPR (FLD (f_r1), opval); 584 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 585 } 586 587 return vpc; 588 #undef FLD 589 } 590 591 /* l-macrc: l.macrc $rD */ 592 593 static SEM_PC 594 SEM_FN_NAME (or1k32bf,l_macrc) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 595 { 596 #define FLD(f) abuf->fields.sfmt_l_adrp.f 597 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 598 int UNUSED written = 0; 599 IADDR UNUSED pc = abuf->addr; 600 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 601 602 { 603 { 604 USI opval = GET_H_MAC_MACLO (); 605 SET_H_GPR (FLD (f_r1), opval); 606 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 607 } 608 { 609 USI opval = 0; 610 SET_H_MAC_MACLO (opval); 611 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 612 } 613 { 614 USI opval = 0; 615 SET_H_MAC_MACHI (opval); 616 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 617 } 618 } 619 620 return vpc; 621 #undef FLD 622 } 623 624 /* l-mfspr: l.mfspr $rD,$rA,${uimm16} */ 625 626 static SEM_PC 627 SEM_FN_NAME (or1k32bf,l_mfspr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 628 { 629 #define FLD(f) abuf->fields.sfmt_l_mfspr.f 630 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 631 int UNUSED written = 0; 632 IADDR UNUSED pc = abuf->addr; 633 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 634 635 { 636 USI opval = or1k32bf_mfspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16)))); 637 SET_H_GPR (FLD (f_r1), opval); 638 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 639 } 640 641 return vpc; 642 #undef FLD 643 } 644 645 /* l-mtspr: l.mtspr $rA,$rB,${uimm16-split} */ 646 647 static SEM_PC 648 SEM_FN_NAME (or1k32bf,l_mtspr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 649 { 650 #define FLD(f) abuf->fields.sfmt_l_mtspr.f 651 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 652 int UNUSED written = 0; 653 IADDR UNUSED pc = abuf->addr; 654 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 655 656 or1k32bf_mtspr (current_cpu, ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16_split))), GET_H_GPR (FLD (f_r3))); 657 658 return vpc; 659 #undef FLD 660 } 661 662 /* l-lwz: l.lwz $rD,${simm16}($rA) */ 663 664 static SEM_PC 665 SEM_FN_NAME (or1k32bf,l_lwz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 666 { 667 #define FLD(f) abuf->fields.sfmt_l_lwz.f 668 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 669 int UNUSED written = 0; 670 IADDR UNUSED pc = abuf->addr; 671 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 672 673 { 674 USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4))); 675 SET_H_GPR (FLD (f_r1), opval); 676 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 677 } 678 679 return vpc; 680 #undef FLD 681 } 682 683 /* l-lws: l.lws $rD,${simm16}($rA) */ 684 685 static SEM_PC 686 SEM_FN_NAME (or1k32bf,l_lws) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 687 { 688 #define FLD(f) abuf->fields.sfmt_l_lwz.f 689 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 690 int UNUSED written = 0; 691 IADDR UNUSED pc = abuf->addr; 692 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 693 694 { 695 SI opval = EXTSISI (GETMEMSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4))); 696 SET_H_GPR (FLD (f_r1), opval); 697 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 698 } 699 700 return vpc; 701 #undef FLD 702 } 703 704 /* l-lwa: l.lwa $rD,${simm16}($rA) */ 705 706 static SEM_PC 707 SEM_FN_NAME (or1k32bf,l_lwa) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 708 { 709 #define FLD(f) abuf->fields.sfmt_l_lwz.f 710 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 711 int UNUSED written = 0; 712 IADDR UNUSED pc = abuf->addr; 713 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 714 715 { 716 { 717 USI opval = ZEXTSISI (GETMEMUSI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4))); 718 SET_H_GPR (FLD (f_r1), opval); 719 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 720 } 721 { 722 BI opval = 1; 723 CPU (h_atomic_reserve) = opval; 724 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval); 725 } 726 { 727 SI opval = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 4); 728 CPU (h_atomic_address) = opval; 729 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-address", 'x', opval); 730 } 731 } 732 733 return vpc; 734 #undef FLD 735 } 736 737 /* l-lbz: l.lbz $rD,${simm16}($rA) */ 738 739 static SEM_PC 740 SEM_FN_NAME (or1k32bf,l_lbz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 741 { 742 #define FLD(f) abuf->fields.sfmt_l_lwz.f 743 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 744 int UNUSED written = 0; 745 IADDR UNUSED pc = abuf->addr; 746 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 747 748 { 749 USI opval = ZEXTQISI (GETMEMUQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1))); 750 SET_H_GPR (FLD (f_r1), opval); 751 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 752 } 753 754 return vpc; 755 #undef FLD 756 } 757 758 /* l-lbs: l.lbs $rD,${simm16}($rA) */ 759 760 static SEM_PC 761 SEM_FN_NAME (or1k32bf,l_lbs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 762 { 763 #define FLD(f) abuf->fields.sfmt_l_lwz.f 764 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 765 int UNUSED written = 0; 766 IADDR UNUSED pc = abuf->addr; 767 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 768 769 { 770 SI opval = EXTQISI (GETMEMQI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 1))); 771 SET_H_GPR (FLD (f_r1), opval); 772 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 773 } 774 775 return vpc; 776 #undef FLD 777 } 778 779 /* l-lhz: l.lhz $rD,${simm16}($rA) */ 780 781 static SEM_PC 782 SEM_FN_NAME (or1k32bf,l_lhz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 783 { 784 #define FLD(f) abuf->fields.sfmt_l_lwz.f 785 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 786 int UNUSED written = 0; 787 IADDR UNUSED pc = abuf->addr; 788 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 789 790 { 791 USI opval = ZEXTHISI (GETMEMUHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2))); 792 SET_H_GPR (FLD (f_r1), opval); 793 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 794 } 795 796 return vpc; 797 #undef FLD 798 } 799 800 /* l-lhs: l.lhs $rD,${simm16}($rA) */ 801 802 static SEM_PC 803 SEM_FN_NAME (or1k32bf,l_lhs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 804 { 805 #define FLD(f) abuf->fields.sfmt_l_lwz.f 806 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 807 int UNUSED written = 0; 808 IADDR UNUSED pc = abuf->addr; 809 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 810 811 { 812 SI opval = EXTHISI (GETMEMHI (current_cpu, pc, or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 2))); 813 SET_H_GPR (FLD (f_r1), opval); 814 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 815 } 816 817 return vpc; 818 #undef FLD 819 } 820 821 /* l-sw: l.sw ${simm16-split}($rA),$rB */ 822 823 static SEM_PC 824 SEM_FN_NAME (or1k32bf,l_sw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 825 { 826 #define FLD(f) abuf->fields.sfmt_l_sw.f 827 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 828 int UNUSED written = 0; 829 IADDR UNUSED pc = abuf->addr; 830 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 831 832 { 833 SI tmp_addr; 834 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4); 835 { 836 USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3))); 837 SETMEMUSI (current_cpu, pc, tmp_addr, opval); 838 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 839 } 840 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) { 841 { 842 BI opval = 0; 843 CPU (h_atomic_reserve) = opval; 844 written |= (1 << 4); 845 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval); 846 } 847 } 848 } 849 850 abuf->written = written; 851 return vpc; 852 #undef FLD 853 } 854 855 /* l-sb: l.sb ${simm16-split}($rA),$rB */ 856 857 static SEM_PC 858 SEM_FN_NAME (or1k32bf,l_sb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 859 { 860 #define FLD(f) abuf->fields.sfmt_l_sw.f 861 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 862 int UNUSED written = 0; 863 IADDR UNUSED pc = abuf->addr; 864 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 865 866 { 867 SI tmp_addr; 868 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 1); 869 { 870 UQI opval = TRUNCSIQI (GET_H_GPR (FLD (f_r3))); 871 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 872 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 873 } 874 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) { 875 { 876 BI opval = 0; 877 CPU (h_atomic_reserve) = opval; 878 written |= (1 << 4); 879 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval); 880 } 881 } 882 } 883 884 abuf->written = written; 885 return vpc; 886 #undef FLD 887 } 888 889 /* l-sh: l.sh ${simm16-split}($rA),$rB */ 890 891 static SEM_PC 892 SEM_FN_NAME (or1k32bf,l_sh) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 893 { 894 #define FLD(f) abuf->fields.sfmt_l_sw.f 895 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 896 int UNUSED written = 0; 897 IADDR UNUSED pc = abuf->addr; 898 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 899 900 { 901 SI tmp_addr; 902 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 2); 903 { 904 UHI opval = TRUNCSIHI (GET_H_GPR (FLD (f_r3))); 905 SETMEMUHI (current_cpu, pc, tmp_addr, opval); 906 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 907 } 908 if (EQSI (ANDSI (tmp_addr, 268435452), CPU (h_atomic_address))) { 909 { 910 BI opval = 0; 911 CPU (h_atomic_reserve) = opval; 912 written |= (1 << 4); 913 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval); 914 } 915 } 916 } 917 918 abuf->written = written; 919 return vpc; 920 #undef FLD 921 } 922 923 /* l-swa: l.swa ${simm16-split}($rA),$rB */ 924 925 static SEM_PC 926 SEM_FN_NAME (or1k32bf,l_swa) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 927 { 928 #define FLD(f) abuf->fields.sfmt_l_sw.f 929 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 930 int UNUSED written = 0; 931 IADDR UNUSED pc = abuf->addr; 932 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 933 934 { 935 SI tmp_addr; 936 BI tmp_flag; 937 tmp_addr = or1k32bf_make_load_store_addr (current_cpu, GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16_split)), 4); 938 { 939 USI opval = ANDBI (CPU (h_atomic_reserve), EQSI (tmp_addr, CPU (h_atomic_address))); 940 SET_H_SYS_SR_F (opval); 941 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 942 } 943 if (GET_H_SYS_SR_F ()) { 944 { 945 USI opval = TRUNCSISI (GET_H_GPR (FLD (f_r3))); 946 SETMEMUSI (current_cpu, pc, tmp_addr, opval); 947 written |= (1 << 7); 948 CGEN_TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 949 } 950 } 951 { 952 BI opval = 0; 953 CPU (h_atomic_reserve) = opval; 954 CGEN_TRACE_RESULT (current_cpu, abuf, "atomic-reserve", 'x', opval); 955 } 956 } 957 958 abuf->written = written; 959 return vpc; 960 #undef FLD 961 } 962 963 /* l-sll: l.sll $rD,$rA,$rB */ 964 965 static SEM_PC 966 SEM_FN_NAME (or1k32bf,l_sll) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 967 { 968 #define FLD(f) abuf->fields.sfmt_l_sll.f 969 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 970 int UNUSED written = 0; 971 IADDR UNUSED pc = abuf->addr; 972 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 973 974 { 975 USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 976 SET_H_GPR (FLD (f_r1), opval); 977 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 978 } 979 980 return vpc; 981 #undef FLD 982 } 983 984 /* l-slli: l.slli $rD,$rA,${uimm6} */ 985 986 static SEM_PC 987 SEM_FN_NAME (or1k32bf,l_slli) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 988 { 989 #define FLD(f) abuf->fields.sfmt_l_slli.f 990 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 991 int UNUSED written = 0; 992 IADDR UNUSED pc = abuf->addr; 993 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 994 995 { 996 USI opval = SLLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6)); 997 SET_H_GPR (FLD (f_r1), opval); 998 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 999 } 1000 1001 return vpc; 1002 #undef FLD 1003 } 1004 1005 /* l-srl: l.srl $rD,$rA,$rB */ 1006 1007 static SEM_PC 1008 SEM_FN_NAME (or1k32bf,l_srl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1009 { 1010 #define FLD(f) abuf->fields.sfmt_l_sll.f 1011 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1012 int UNUSED written = 0; 1013 IADDR UNUSED pc = abuf->addr; 1014 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1015 1016 { 1017 USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1018 SET_H_GPR (FLD (f_r1), opval); 1019 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1020 } 1021 1022 return vpc; 1023 #undef FLD 1024 } 1025 1026 /* l-srli: l.srli $rD,$rA,${uimm6} */ 1027 1028 static SEM_PC 1029 SEM_FN_NAME (or1k32bf,l_srli) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1030 { 1031 #define FLD(f) abuf->fields.sfmt_l_slli.f 1032 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1033 int UNUSED written = 0; 1034 IADDR UNUSED pc = abuf->addr; 1035 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1036 1037 { 1038 USI opval = SRLSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6)); 1039 SET_H_GPR (FLD (f_r1), opval); 1040 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1041 } 1042 1043 return vpc; 1044 #undef FLD 1045 } 1046 1047 /* l-sra: l.sra $rD,$rA,$rB */ 1048 1049 static SEM_PC 1050 SEM_FN_NAME (or1k32bf,l_sra) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1051 { 1052 #define FLD(f) abuf->fields.sfmt_l_sll.f 1053 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1054 int UNUSED written = 0; 1055 IADDR UNUSED pc = abuf->addr; 1056 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1057 1058 { 1059 USI opval = SRASI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1060 SET_H_GPR (FLD (f_r1), opval); 1061 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1062 } 1063 1064 return vpc; 1065 #undef FLD 1066 } 1067 1068 /* l-srai: l.srai $rD,$rA,${uimm6} */ 1069 1070 static SEM_PC 1071 SEM_FN_NAME (or1k32bf,l_srai) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1072 { 1073 #define FLD(f) abuf->fields.sfmt_l_slli.f 1074 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1075 int UNUSED written = 0; 1076 IADDR UNUSED pc = abuf->addr; 1077 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1078 1079 { 1080 USI opval = SRASI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6)); 1081 SET_H_GPR (FLD (f_r1), opval); 1082 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1083 } 1084 1085 return vpc; 1086 #undef FLD 1087 } 1088 1089 /* l-ror: l.ror $rD,$rA,$rB */ 1090 1091 static SEM_PC 1092 SEM_FN_NAME (or1k32bf,l_ror) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1093 { 1094 #define FLD(f) abuf->fields.sfmt_l_sll.f 1095 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1096 int UNUSED written = 0; 1097 IADDR UNUSED pc = abuf->addr; 1098 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1099 1100 { 1101 USI opval = RORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1102 SET_H_GPR (FLD (f_r1), opval); 1103 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1104 } 1105 1106 return vpc; 1107 #undef FLD 1108 } 1109 1110 /* l-rori: l.rori $rD,$rA,${uimm6} */ 1111 1112 static SEM_PC 1113 SEM_FN_NAME (or1k32bf,l_rori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1114 { 1115 #define FLD(f) abuf->fields.sfmt_l_slli.f 1116 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1117 int UNUSED written = 0; 1118 IADDR UNUSED pc = abuf->addr; 1119 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1120 1121 { 1122 USI opval = RORSI (GET_H_GPR (FLD (f_r2)), FLD (f_uimm6)); 1123 SET_H_GPR (FLD (f_r1), opval); 1124 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1125 } 1126 1127 return vpc; 1128 #undef FLD 1129 } 1130 1131 /* l-and: l.and $rD,$rA,$rB */ 1132 1133 static SEM_PC 1134 SEM_FN_NAME (or1k32bf,l_and) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1135 { 1136 #define FLD(f) abuf->fields.sfmt_l_sll.f 1137 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1138 int UNUSED written = 0; 1139 IADDR UNUSED pc = abuf->addr; 1140 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1141 1142 { 1143 USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1144 SET_H_GPR (FLD (f_r1), opval); 1145 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1146 } 1147 1148 return vpc; 1149 #undef FLD 1150 } 1151 1152 /* l-or: l.or $rD,$rA,$rB */ 1153 1154 static SEM_PC 1155 SEM_FN_NAME (or1k32bf,l_or) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1156 { 1157 #define FLD(f) abuf->fields.sfmt_l_sll.f 1158 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1159 int UNUSED written = 0; 1160 IADDR UNUSED pc = abuf->addr; 1161 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1162 1163 { 1164 USI opval = ORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1165 SET_H_GPR (FLD (f_r1), opval); 1166 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1167 } 1168 1169 return vpc; 1170 #undef FLD 1171 } 1172 1173 /* l-xor: l.xor $rD,$rA,$rB */ 1174 1175 static SEM_PC 1176 SEM_FN_NAME (or1k32bf,l_xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1177 { 1178 #define FLD(f) abuf->fields.sfmt_l_sll.f 1179 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1180 int UNUSED written = 0; 1181 IADDR UNUSED pc = abuf->addr; 1182 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1183 1184 { 1185 USI opval = XORSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1186 SET_H_GPR (FLD (f_r1), opval); 1187 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1188 } 1189 1190 return vpc; 1191 #undef FLD 1192 } 1193 1194 /* l-add: l.add $rD,$rA,$rB */ 1195 1196 static SEM_PC 1197 SEM_FN_NAME (or1k32bf,l_add) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1198 { 1199 #define FLD(f) abuf->fields.sfmt_l_sll.f 1200 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1201 int UNUSED written = 0; 1202 IADDR UNUSED pc = abuf->addr; 1203 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1204 1205 { 1206 { 1207 { 1208 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0); 1209 SET_H_SYS_SR_CY (opval); 1210 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1211 } 1212 { 1213 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0); 1214 SET_H_SYS_SR_OV (opval); 1215 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1216 } 1217 { 1218 USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1219 SET_H_GPR (FLD (f_r1), opval); 1220 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1221 } 1222 } 1223 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 1224 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1225 } 1226 } 1227 1228 return vpc; 1229 #undef FLD 1230 } 1231 1232 /* l-sub: l.sub $rD,$rA,$rB */ 1233 1234 static SEM_PC 1235 SEM_FN_NAME (or1k32bf,l_sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1236 { 1237 #define FLD(f) abuf->fields.sfmt_l_sll.f 1238 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1239 int UNUSED written = 0; 1240 IADDR UNUSED pc = abuf->addr; 1241 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1242 1243 { 1244 { 1245 { 1246 BI opval = SUBCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0); 1247 SET_H_SYS_SR_CY (opval); 1248 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1249 } 1250 { 1251 BI opval = SUBOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), 0); 1252 SET_H_SYS_SR_OV (opval); 1253 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1254 } 1255 { 1256 USI opval = SUBSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1257 SET_H_GPR (FLD (f_r1), opval); 1258 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1259 } 1260 } 1261 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 1262 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1263 } 1264 } 1265 1266 return vpc; 1267 #undef FLD 1268 } 1269 1270 /* l-addc: l.addc $rD,$rA,$rB */ 1271 1272 static SEM_PC 1273 SEM_FN_NAME (or1k32bf,l_addc) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1274 { 1275 #define FLD(f) abuf->fields.sfmt_l_sll.f 1276 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1277 int UNUSED written = 0; 1278 IADDR UNUSED pc = abuf->addr; 1279 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1280 1281 { 1282 { 1283 BI tmp_tmp_sys_sr_cy; 1284 tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY (); 1285 { 1286 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy); 1287 SET_H_SYS_SR_CY (opval); 1288 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1289 } 1290 { 1291 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy); 1292 SET_H_SYS_SR_OV (opval); 1293 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1294 } 1295 { 1296 USI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3)), tmp_tmp_sys_sr_cy); 1297 SET_H_GPR (FLD (f_r1), opval); 1298 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1299 } 1300 } 1301 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 1302 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1303 } 1304 } 1305 1306 return vpc; 1307 #undef FLD 1308 } 1309 1310 /* l-mul: l.mul $rD,$rA,$rB */ 1311 1312 static SEM_PC 1313 SEM_FN_NAME (or1k32bf,l_mul) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1314 { 1315 #define FLD(f) abuf->fields.sfmt_l_sll.f 1316 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1317 int UNUSED written = 0; 1318 IADDR UNUSED pc = abuf->addr; 1319 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1320 1321 { 1322 { 1323 { 1324 BI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1325 SET_H_SYS_SR_OV (opval); 1326 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1327 } 1328 { 1329 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1330 SET_H_GPR (FLD (f_r1), opval); 1331 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1332 } 1333 } 1334 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 1335 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1336 } 1337 } 1338 1339 return vpc; 1340 #undef FLD 1341 } 1342 1343 /* l-muld: l.muld $rA,$rB */ 1344 1345 static SEM_PC 1346 SEM_FN_NAME (or1k32bf,l_muld) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1347 { 1348 #define FLD(f) abuf->fields.sfmt_l_sll.f 1349 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1350 int UNUSED written = 0; 1351 IADDR UNUSED pc = abuf->addr; 1352 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1353 1354 { 1355 DI tmp_result; 1356 tmp_result = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3)))); 1357 { 1358 SI opval = SUBWORDDISI (tmp_result, 0); 1359 SET_H_MAC_MACHI (opval); 1360 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 1361 } 1362 { 1363 SI opval = SUBWORDDISI (tmp_result, 1); 1364 SET_H_MAC_MACLO (opval); 1365 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 1366 } 1367 } 1368 1369 return vpc; 1370 #undef FLD 1371 } 1372 1373 /* l-mulu: l.mulu $rD,$rA,$rB */ 1374 1375 static SEM_PC 1376 SEM_FN_NAME (or1k32bf,l_mulu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1377 { 1378 #define FLD(f) abuf->fields.sfmt_l_sll.f 1379 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1380 int UNUSED written = 0; 1381 IADDR UNUSED pc = abuf->addr; 1382 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1383 1384 { 1385 { 1386 { 1387 BI opval = MUL1OFSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1388 SET_H_SYS_SR_CY (opval); 1389 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1390 } 1391 { 1392 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1393 SET_H_GPR (FLD (f_r1), opval); 1394 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1395 } 1396 } 1397 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) { 1398 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1399 } 1400 } 1401 1402 return vpc; 1403 #undef FLD 1404 } 1405 1406 /* l-muldu: l.muldu $rA,$rB */ 1407 1408 static SEM_PC 1409 SEM_FN_NAME (or1k32bf,l_muldu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1410 { 1411 #define FLD(f) abuf->fields.sfmt_l_sll.f 1412 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1413 int UNUSED written = 0; 1414 IADDR UNUSED pc = abuf->addr; 1415 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1416 1417 { 1418 DI tmp_result; 1419 tmp_result = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3)))); 1420 { 1421 SI opval = SUBWORDDISI (tmp_result, 0); 1422 SET_H_MAC_MACHI (opval); 1423 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 1424 } 1425 { 1426 SI opval = SUBWORDDISI (tmp_result, 1); 1427 SET_H_MAC_MACLO (opval); 1428 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 1429 } 1430 } 1431 1432 return vpc; 1433 #undef FLD 1434 } 1435 1436 /* l-div: l.div $rD,$rA,$rB */ 1437 1438 static SEM_PC 1439 SEM_FN_NAME (or1k32bf,l_div) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1440 { 1441 #define FLD(f) abuf->fields.sfmt_l_sll.f 1442 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1443 int UNUSED written = 0; 1444 IADDR UNUSED pc = abuf->addr; 1445 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1446 1447 if (NESI (GET_H_GPR (FLD (f_r3)), 0)) { 1448 { 1449 { 1450 BI opval = 0; 1451 SET_H_SYS_SR_OV (opval); 1452 written |= (1 << 5); 1453 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1454 } 1455 { 1456 SI opval = DIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1457 SET_H_GPR (FLD (f_r1), opval); 1458 written |= (1 << 4); 1459 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1460 } 1461 } 1462 } else { 1463 { 1464 { 1465 BI opval = 1; 1466 SET_H_SYS_SR_OV (opval); 1467 written |= (1 << 5); 1468 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1469 } 1470 if (GET_H_SYS_SR_OVE ()) { 1471 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1472 } 1473 } 1474 } 1475 1476 abuf->written = written; 1477 return vpc; 1478 #undef FLD 1479 } 1480 1481 /* l-divu: l.divu $rD,$rA,$rB */ 1482 1483 static SEM_PC 1484 SEM_FN_NAME (or1k32bf,l_divu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1485 { 1486 #define FLD(f) abuf->fields.sfmt_l_sll.f 1487 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1488 int UNUSED written = 0; 1489 IADDR UNUSED pc = abuf->addr; 1490 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1491 1492 if (NESI (GET_H_GPR (FLD (f_r3)), 0)) { 1493 { 1494 { 1495 BI opval = 0; 1496 SET_H_SYS_SR_CY (opval); 1497 written |= (1 << 5); 1498 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1499 } 1500 { 1501 USI opval = UDIVSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1502 SET_H_GPR (FLD (f_r1), opval); 1503 written |= (1 << 4); 1504 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1505 } 1506 } 1507 } else { 1508 { 1509 { 1510 BI opval = 1; 1511 SET_H_SYS_SR_CY (opval); 1512 written |= (1 << 5); 1513 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1514 } 1515 if (GET_H_SYS_SR_OVE ()) { 1516 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1517 } 1518 } 1519 } 1520 1521 abuf->written = written; 1522 return vpc; 1523 #undef FLD 1524 } 1525 1526 /* l-ff1: l.ff1 $rD,$rA */ 1527 1528 static SEM_PC 1529 SEM_FN_NAME (or1k32bf,l_ff1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1530 { 1531 #define FLD(f) abuf->fields.sfmt_l_slli.f 1532 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1533 int UNUSED written = 0; 1534 IADDR UNUSED pc = abuf->addr; 1535 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1536 1537 { 1538 USI opval = or1k32bf_ff1 (current_cpu, GET_H_GPR (FLD (f_r2))); 1539 SET_H_GPR (FLD (f_r1), opval); 1540 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1541 } 1542 1543 return vpc; 1544 #undef FLD 1545 } 1546 1547 /* l-fl1: l.fl1 $rD,$rA */ 1548 1549 static SEM_PC 1550 SEM_FN_NAME (or1k32bf,l_fl1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1551 { 1552 #define FLD(f) abuf->fields.sfmt_l_slli.f 1553 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1554 int UNUSED written = 0; 1555 IADDR UNUSED pc = abuf->addr; 1556 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1557 1558 { 1559 USI opval = or1k32bf_fl1 (current_cpu, GET_H_GPR (FLD (f_r2))); 1560 SET_H_GPR (FLD (f_r1), opval); 1561 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1562 } 1563 1564 return vpc; 1565 #undef FLD 1566 } 1567 1568 /* l-andi: l.andi $rD,$rA,$uimm16 */ 1569 1570 static SEM_PC 1571 SEM_FN_NAME (or1k32bf,l_andi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1572 { 1573 #define FLD(f) abuf->fields.sfmt_l_mfspr.f 1574 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1575 int UNUSED written = 0; 1576 IADDR UNUSED pc = abuf->addr; 1577 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1578 1579 { 1580 USI opval = ANDSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))); 1581 SET_H_GPR (FLD (f_r1), opval); 1582 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1583 } 1584 1585 return vpc; 1586 #undef FLD 1587 } 1588 1589 /* l-ori: l.ori $rD,$rA,$uimm16 */ 1590 1591 static SEM_PC 1592 SEM_FN_NAME (or1k32bf,l_ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1593 { 1594 #define FLD(f) abuf->fields.sfmt_l_mfspr.f 1595 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1596 int UNUSED written = 0; 1597 IADDR UNUSED pc = abuf->addr; 1598 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1599 1600 { 1601 USI opval = ORSI (GET_H_GPR (FLD (f_r2)), ZEXTSISI (FLD (f_uimm16))); 1602 SET_H_GPR (FLD (f_r1), opval); 1603 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1604 } 1605 1606 return vpc; 1607 #undef FLD 1608 } 1609 1610 /* l-xori: l.xori $rD,$rA,$simm16 */ 1611 1612 static SEM_PC 1613 SEM_FN_NAME (or1k32bf,l_xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1614 { 1615 #define FLD(f) abuf->fields.sfmt_l_lwz.f 1616 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1617 int UNUSED written = 0; 1618 IADDR UNUSED pc = abuf->addr; 1619 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1620 1621 { 1622 USI opval = XORSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 1623 SET_H_GPR (FLD (f_r1), opval); 1624 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1625 } 1626 1627 return vpc; 1628 #undef FLD 1629 } 1630 1631 /* l-addi: l.addi $rD,$rA,$simm16 */ 1632 1633 static SEM_PC 1634 SEM_FN_NAME (or1k32bf,l_addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1635 { 1636 #define FLD(f) abuf->fields.sfmt_l_lwz.f 1637 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1638 int UNUSED written = 0; 1639 IADDR UNUSED pc = abuf->addr; 1640 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1641 1642 { 1643 { 1644 { 1645 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0); 1646 SET_H_SYS_SR_CY (opval); 1647 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1648 } 1649 { 1650 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), 0); 1651 SET_H_SYS_SR_OV (opval); 1652 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1653 } 1654 { 1655 USI opval = ADDSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 1656 SET_H_GPR (FLD (f_r1), opval); 1657 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1658 } 1659 } 1660 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 1661 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1662 } 1663 } 1664 1665 return vpc; 1666 #undef FLD 1667 } 1668 1669 /* l-addic: l.addic $rD,$rA,$simm16 */ 1670 1671 static SEM_PC 1672 SEM_FN_NAME (or1k32bf,l_addic) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1673 { 1674 #define FLD(f) abuf->fields.sfmt_l_lwz.f 1675 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1676 int UNUSED written = 0; 1677 IADDR UNUSED pc = abuf->addr; 1678 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1679 1680 { 1681 { 1682 BI tmp_tmp_sys_sr_cy; 1683 tmp_tmp_sys_sr_cy = GET_H_SYS_SR_CY (); 1684 { 1685 BI opval = ADDCFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy); 1686 SET_H_SYS_SR_CY (opval); 1687 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 1688 } 1689 { 1690 BI opval = ADDOFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy); 1691 SET_H_SYS_SR_OV (opval); 1692 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1693 } 1694 { 1695 SI opval = ADDCSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16)), tmp_tmp_sys_sr_cy); 1696 SET_H_GPR (FLD (f_r1), opval); 1697 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1698 } 1699 } 1700 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 1701 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1702 } 1703 } 1704 1705 return vpc; 1706 #undef FLD 1707 } 1708 1709 /* l-muli: l.muli $rD,$rA,$simm16 */ 1710 1711 static SEM_PC 1712 SEM_FN_NAME (or1k32bf,l_muli) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1713 { 1714 #define FLD(f) abuf->fields.sfmt_l_lwz.f 1715 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1716 int UNUSED written = 0; 1717 IADDR UNUSED pc = abuf->addr; 1718 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1719 1720 { 1721 { 1722 { 1723 USI opval = MUL2OFSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 1724 SET_H_SYS_SR_OV (opval); 1725 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 1726 } 1727 { 1728 USI opval = MULSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 1729 SET_H_GPR (FLD (f_r1), opval); 1730 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1731 } 1732 } 1733 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 1734 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 1735 } 1736 } 1737 1738 return vpc; 1739 #undef FLD 1740 } 1741 1742 /* l-exths: l.exths $rD,$rA */ 1743 1744 static SEM_PC 1745 SEM_FN_NAME (or1k32bf,l_exths) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1746 { 1747 #define FLD(f) abuf->fields.sfmt_l_slli.f 1748 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1749 int UNUSED written = 0; 1750 IADDR UNUSED pc = abuf->addr; 1751 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1752 1753 { 1754 USI opval = EXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2)))); 1755 SET_H_GPR (FLD (f_r1), opval); 1756 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1757 } 1758 1759 return vpc; 1760 #undef FLD 1761 } 1762 1763 /* l-extbs: l.extbs $rD,$rA */ 1764 1765 static SEM_PC 1766 SEM_FN_NAME (or1k32bf,l_extbs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1767 { 1768 #define FLD(f) abuf->fields.sfmt_l_slli.f 1769 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1770 int UNUSED written = 0; 1771 IADDR UNUSED pc = abuf->addr; 1772 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1773 1774 { 1775 USI opval = EXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2)))); 1776 SET_H_GPR (FLD (f_r1), opval); 1777 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1778 } 1779 1780 return vpc; 1781 #undef FLD 1782 } 1783 1784 /* l-exthz: l.exthz $rD,$rA */ 1785 1786 static SEM_PC 1787 SEM_FN_NAME (or1k32bf,l_exthz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1788 { 1789 #define FLD(f) abuf->fields.sfmt_l_slli.f 1790 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1791 int UNUSED written = 0; 1792 IADDR UNUSED pc = abuf->addr; 1793 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1794 1795 { 1796 USI opval = ZEXTHISI (TRUNCSIHI (GET_H_GPR (FLD (f_r2)))); 1797 SET_H_GPR (FLD (f_r1), opval); 1798 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1799 } 1800 1801 return vpc; 1802 #undef FLD 1803 } 1804 1805 /* l-extbz: l.extbz $rD,$rA */ 1806 1807 static SEM_PC 1808 SEM_FN_NAME (or1k32bf,l_extbz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1809 { 1810 #define FLD(f) abuf->fields.sfmt_l_slli.f 1811 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1812 int UNUSED written = 0; 1813 IADDR UNUSED pc = abuf->addr; 1814 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1815 1816 { 1817 USI opval = ZEXTQISI (TRUNCSIQI (GET_H_GPR (FLD (f_r2)))); 1818 SET_H_GPR (FLD (f_r1), opval); 1819 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1820 } 1821 1822 return vpc; 1823 #undef FLD 1824 } 1825 1826 /* l-extws: l.extws $rD,$rA */ 1827 1828 static SEM_PC 1829 SEM_FN_NAME (or1k32bf,l_extws) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1830 { 1831 #define FLD(f) abuf->fields.sfmt_l_slli.f 1832 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1833 int UNUSED written = 0; 1834 IADDR UNUSED pc = abuf->addr; 1835 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1836 1837 { 1838 USI opval = EXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2)))); 1839 SET_H_GPR (FLD (f_r1), opval); 1840 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1841 } 1842 1843 return vpc; 1844 #undef FLD 1845 } 1846 1847 /* l-extwz: l.extwz $rD,$rA */ 1848 1849 static SEM_PC 1850 SEM_FN_NAME (or1k32bf,l_extwz) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1851 { 1852 #define FLD(f) abuf->fields.sfmt_l_slli.f 1853 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1854 int UNUSED written = 0; 1855 IADDR UNUSED pc = abuf->addr; 1856 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1857 1858 { 1859 USI opval = ZEXTSISI (TRUNCSISI (GET_H_GPR (FLD (f_r2)))); 1860 SET_H_GPR (FLD (f_r1), opval); 1861 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1862 } 1863 1864 return vpc; 1865 #undef FLD 1866 } 1867 1868 /* l-cmov: l.cmov $rD,$rA,$rB */ 1869 1870 static SEM_PC 1871 SEM_FN_NAME (or1k32bf,l_cmov) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1872 { 1873 #define FLD(f) abuf->fields.sfmt_l_sll.f 1874 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1875 int UNUSED written = 0; 1876 IADDR UNUSED pc = abuf->addr; 1877 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1878 1879 if (GET_H_SYS_SR_F ()) { 1880 { 1881 USI opval = GET_H_GPR (FLD (f_r2)); 1882 SET_H_GPR (FLD (f_r1), opval); 1883 written |= (1 << 3); 1884 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1885 } 1886 } else { 1887 { 1888 USI opval = GET_H_GPR (FLD (f_r3)); 1889 SET_H_GPR (FLD (f_r1), opval); 1890 written |= (1 << 3); 1891 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 1892 } 1893 } 1894 1895 abuf->written = written; 1896 return vpc; 1897 #undef FLD 1898 } 1899 1900 /* l-sfgts: l.sfgts $rA,$rB */ 1901 1902 static SEM_PC 1903 SEM_FN_NAME (or1k32bf,l_sfgts) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1904 { 1905 #define FLD(f) abuf->fields.sfmt_l_sll.f 1906 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1907 int UNUSED written = 0; 1908 IADDR UNUSED pc = abuf->addr; 1909 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1910 1911 { 1912 USI opval = GTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1913 SET_H_SYS_SR_F (opval); 1914 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 1915 } 1916 1917 return vpc; 1918 #undef FLD 1919 } 1920 1921 /* l-sfgtsi: l.sfgtsi $rA,$simm16 */ 1922 1923 static SEM_PC 1924 SEM_FN_NAME (or1k32bf,l_sfgtsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1925 { 1926 #define FLD(f) abuf->fields.sfmt_l_lwz.f 1927 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1928 int UNUSED written = 0; 1929 IADDR UNUSED pc = abuf->addr; 1930 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1931 1932 { 1933 USI opval = GTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 1934 SET_H_SYS_SR_F (opval); 1935 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 1936 } 1937 1938 return vpc; 1939 #undef FLD 1940 } 1941 1942 /* l-sfgtu: l.sfgtu $rA,$rB */ 1943 1944 static SEM_PC 1945 SEM_FN_NAME (or1k32bf,l_sfgtu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1946 { 1947 #define FLD(f) abuf->fields.sfmt_l_sll.f 1948 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1949 int UNUSED written = 0; 1950 IADDR UNUSED pc = abuf->addr; 1951 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1952 1953 { 1954 USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1955 SET_H_SYS_SR_F (opval); 1956 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 1957 } 1958 1959 return vpc; 1960 #undef FLD 1961 } 1962 1963 /* l-sfgtui: l.sfgtui $rA,$simm16 */ 1964 1965 static SEM_PC 1966 SEM_FN_NAME (or1k32bf,l_sfgtui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1967 { 1968 #define FLD(f) abuf->fields.sfmt_l_lwz.f 1969 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1970 int UNUSED written = 0; 1971 IADDR UNUSED pc = abuf->addr; 1972 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1973 1974 { 1975 USI opval = GTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 1976 SET_H_SYS_SR_F (opval); 1977 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 1978 } 1979 1980 return vpc; 1981 #undef FLD 1982 } 1983 1984 /* l-sfges: l.sfges $rA,$rB */ 1985 1986 static SEM_PC 1987 SEM_FN_NAME (or1k32bf,l_sfges) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1988 { 1989 #define FLD(f) abuf->fields.sfmt_l_sll.f 1990 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1991 int UNUSED written = 0; 1992 IADDR UNUSED pc = abuf->addr; 1993 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1994 1995 { 1996 USI opval = GESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 1997 SET_H_SYS_SR_F (opval); 1998 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 1999 } 2000 2001 return vpc; 2002 #undef FLD 2003 } 2004 2005 /* l-sfgesi: l.sfgesi $rA,$simm16 */ 2006 2007 static SEM_PC 2008 SEM_FN_NAME (or1k32bf,l_sfgesi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2009 { 2010 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2011 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2012 int UNUSED written = 0; 2013 IADDR UNUSED pc = abuf->addr; 2014 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2015 2016 { 2017 USI opval = GESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2018 SET_H_SYS_SR_F (opval); 2019 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2020 } 2021 2022 return vpc; 2023 #undef FLD 2024 } 2025 2026 /* l-sfgeu: l.sfgeu $rA,$rB */ 2027 2028 static SEM_PC 2029 SEM_FN_NAME (or1k32bf,l_sfgeu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2030 { 2031 #define FLD(f) abuf->fields.sfmt_l_sll.f 2032 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2033 int UNUSED written = 0; 2034 IADDR UNUSED pc = abuf->addr; 2035 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2036 2037 { 2038 USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 2039 SET_H_SYS_SR_F (opval); 2040 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2041 } 2042 2043 return vpc; 2044 #undef FLD 2045 } 2046 2047 /* l-sfgeui: l.sfgeui $rA,$simm16 */ 2048 2049 static SEM_PC 2050 SEM_FN_NAME (or1k32bf,l_sfgeui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2051 { 2052 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2053 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2054 int UNUSED written = 0; 2055 IADDR UNUSED pc = abuf->addr; 2056 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2057 2058 { 2059 USI opval = GEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2060 SET_H_SYS_SR_F (opval); 2061 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2062 } 2063 2064 return vpc; 2065 #undef FLD 2066 } 2067 2068 /* l-sflts: l.sflts $rA,$rB */ 2069 2070 static SEM_PC 2071 SEM_FN_NAME (or1k32bf,l_sflts) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2072 { 2073 #define FLD(f) abuf->fields.sfmt_l_sll.f 2074 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2075 int UNUSED written = 0; 2076 IADDR UNUSED pc = abuf->addr; 2077 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2078 2079 { 2080 USI opval = LTSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 2081 SET_H_SYS_SR_F (opval); 2082 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2083 } 2084 2085 return vpc; 2086 #undef FLD 2087 } 2088 2089 /* l-sfltsi: l.sfltsi $rA,$simm16 */ 2090 2091 static SEM_PC 2092 SEM_FN_NAME (or1k32bf,l_sfltsi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2093 { 2094 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2095 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2096 int UNUSED written = 0; 2097 IADDR UNUSED pc = abuf->addr; 2098 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2099 2100 { 2101 USI opval = LTSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2102 SET_H_SYS_SR_F (opval); 2103 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2104 } 2105 2106 return vpc; 2107 #undef FLD 2108 } 2109 2110 /* l-sfltu: l.sfltu $rA,$rB */ 2111 2112 static SEM_PC 2113 SEM_FN_NAME (or1k32bf,l_sfltu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2114 { 2115 #define FLD(f) abuf->fields.sfmt_l_sll.f 2116 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2117 int UNUSED written = 0; 2118 IADDR UNUSED pc = abuf->addr; 2119 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2120 2121 { 2122 USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 2123 SET_H_SYS_SR_F (opval); 2124 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2125 } 2126 2127 return vpc; 2128 #undef FLD 2129 } 2130 2131 /* l-sfltui: l.sfltui $rA,$simm16 */ 2132 2133 static SEM_PC 2134 SEM_FN_NAME (or1k32bf,l_sfltui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2135 { 2136 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2137 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2138 int UNUSED written = 0; 2139 IADDR UNUSED pc = abuf->addr; 2140 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2141 2142 { 2143 USI opval = LTUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2144 SET_H_SYS_SR_F (opval); 2145 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2146 } 2147 2148 return vpc; 2149 #undef FLD 2150 } 2151 2152 /* l-sfles: l.sfles $rA,$rB */ 2153 2154 static SEM_PC 2155 SEM_FN_NAME (or1k32bf,l_sfles) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2156 { 2157 #define FLD(f) abuf->fields.sfmt_l_sll.f 2158 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2159 int UNUSED written = 0; 2160 IADDR UNUSED pc = abuf->addr; 2161 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2162 2163 { 2164 USI opval = LESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 2165 SET_H_SYS_SR_F (opval); 2166 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2167 } 2168 2169 return vpc; 2170 #undef FLD 2171 } 2172 2173 /* l-sflesi: l.sflesi $rA,$simm16 */ 2174 2175 static SEM_PC 2176 SEM_FN_NAME (or1k32bf,l_sflesi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2177 { 2178 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2179 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2180 int UNUSED written = 0; 2181 IADDR UNUSED pc = abuf->addr; 2182 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2183 2184 { 2185 USI opval = LESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2186 SET_H_SYS_SR_F (opval); 2187 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2188 } 2189 2190 return vpc; 2191 #undef FLD 2192 } 2193 2194 /* l-sfleu: l.sfleu $rA,$rB */ 2195 2196 static SEM_PC 2197 SEM_FN_NAME (or1k32bf,l_sfleu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2198 { 2199 #define FLD(f) abuf->fields.sfmt_l_sll.f 2200 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2201 int UNUSED written = 0; 2202 IADDR UNUSED pc = abuf->addr; 2203 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2204 2205 { 2206 USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 2207 SET_H_SYS_SR_F (opval); 2208 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2209 } 2210 2211 return vpc; 2212 #undef FLD 2213 } 2214 2215 /* l-sfleui: l.sfleui $rA,$simm16 */ 2216 2217 static SEM_PC 2218 SEM_FN_NAME (or1k32bf,l_sfleui) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2219 { 2220 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2221 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2222 int UNUSED written = 0; 2223 IADDR UNUSED pc = abuf->addr; 2224 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2225 2226 { 2227 USI opval = LEUSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2228 SET_H_SYS_SR_F (opval); 2229 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2230 } 2231 2232 return vpc; 2233 #undef FLD 2234 } 2235 2236 /* l-sfeq: l.sfeq $rA,$rB */ 2237 2238 static SEM_PC 2239 SEM_FN_NAME (or1k32bf,l_sfeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2240 { 2241 #define FLD(f) abuf->fields.sfmt_l_sll.f 2242 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2243 int UNUSED written = 0; 2244 IADDR UNUSED pc = abuf->addr; 2245 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2246 2247 { 2248 USI opval = EQSI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 2249 SET_H_SYS_SR_F (opval); 2250 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2251 } 2252 2253 return vpc; 2254 #undef FLD 2255 } 2256 2257 /* l-sfeqi: l.sfeqi $rA,$simm16 */ 2258 2259 static SEM_PC 2260 SEM_FN_NAME (or1k32bf,l_sfeqi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2261 { 2262 #define FLD(f) abuf->fields.sfmt_l_lwz.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 { 2269 USI opval = EQSI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2270 SET_H_SYS_SR_F (opval); 2271 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2272 } 2273 2274 return vpc; 2275 #undef FLD 2276 } 2277 2278 /* l-sfne: l.sfne $rA,$rB */ 2279 2280 static SEM_PC 2281 SEM_FN_NAME (or1k32bf,l_sfne) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2282 { 2283 #define FLD(f) abuf->fields.sfmt_l_sll.f 2284 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2285 int UNUSED written = 0; 2286 IADDR UNUSED pc = abuf->addr; 2287 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2288 2289 { 2290 USI opval = NESI (GET_H_GPR (FLD (f_r2)), GET_H_GPR (FLD (f_r3))); 2291 SET_H_SYS_SR_F (opval); 2292 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2293 } 2294 2295 return vpc; 2296 #undef FLD 2297 } 2298 2299 /* l-sfnei: l.sfnei $rA,$simm16 */ 2300 2301 static SEM_PC 2302 SEM_FN_NAME (or1k32bf,l_sfnei) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2303 { 2304 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2305 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2306 int UNUSED written = 0; 2307 IADDR UNUSED pc = abuf->addr; 2308 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2309 2310 { 2311 USI opval = NESI (GET_H_GPR (FLD (f_r2)), EXTSISI (FLD (f_simm16))); 2312 SET_H_SYS_SR_F (opval); 2313 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2314 } 2315 2316 return vpc; 2317 #undef FLD 2318 } 2319 2320 /* l-mac: l.mac $rA,$rB */ 2321 2322 static SEM_PC 2323 SEM_FN_NAME (or1k32bf,l_mac) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2324 { 2325 #define FLD(f) abuf->fields.sfmt_l_sll.f 2326 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2327 int UNUSED written = 0; 2328 IADDR UNUSED pc = abuf->addr; 2329 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2330 2331 { 2332 { 2333 DI tmp_prod; 2334 DI tmp_mac; 2335 DI tmp_result; 2336 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3)))); 2337 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()); 2338 tmp_result = ADDDI (tmp_prod, tmp_mac); 2339 { 2340 SI opval = SUBWORDDISI (tmp_result, 0); 2341 SET_H_MAC_MACHI (opval); 2342 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 2343 } 2344 { 2345 SI opval = SUBWORDDISI (tmp_result, 1); 2346 SET_H_MAC_MACLO (opval); 2347 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 2348 } 2349 { 2350 BI opval = ADDOFDI (tmp_prod, tmp_mac, 0); 2351 SET_H_SYS_SR_OV (opval); 2352 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 2353 } 2354 } 2355 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 2356 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 2357 } 2358 } 2359 2360 return vpc; 2361 #undef FLD 2362 } 2363 2364 /* l-maci: l.maci $rA,${simm16} */ 2365 2366 static SEM_PC 2367 SEM_FN_NAME (or1k32bf,l_maci) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2368 { 2369 #define FLD(f) abuf->fields.sfmt_l_lwz.f 2370 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2371 int UNUSED written = 0; 2372 IADDR UNUSED pc = abuf->addr; 2373 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2374 2375 { 2376 { 2377 DI tmp_prod; 2378 DI tmp_mac; 2379 DI tmp_result; 2380 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (FLD (f_simm16))); 2381 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()); 2382 tmp_result = ADDDI (tmp_mac, tmp_prod); 2383 { 2384 SI opval = SUBWORDDISI (tmp_result, 0); 2385 SET_H_MAC_MACHI (opval); 2386 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 2387 } 2388 { 2389 SI opval = SUBWORDDISI (tmp_result, 1); 2390 SET_H_MAC_MACLO (opval); 2391 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 2392 } 2393 { 2394 BI opval = ADDOFDI (tmp_prod, tmp_mac, 0); 2395 SET_H_SYS_SR_OV (opval); 2396 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 2397 } 2398 } 2399 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 2400 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 2401 } 2402 } 2403 2404 return vpc; 2405 #undef FLD 2406 } 2407 2408 /* l-macu: l.macu $rA,$rB */ 2409 2410 static SEM_PC 2411 SEM_FN_NAME (or1k32bf,l_macu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2412 { 2413 #define FLD(f) abuf->fields.sfmt_l_sll.f 2414 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2415 int UNUSED written = 0; 2416 IADDR UNUSED pc = abuf->addr; 2417 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2418 2419 { 2420 { 2421 DI tmp_prod; 2422 DI tmp_mac; 2423 DI tmp_result; 2424 tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3)))); 2425 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()); 2426 tmp_result = ADDDI (tmp_prod, tmp_mac); 2427 { 2428 SI opval = SUBWORDDISI (tmp_result, 0); 2429 SET_H_MAC_MACHI (opval); 2430 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 2431 } 2432 { 2433 SI opval = SUBWORDDISI (tmp_result, 1); 2434 SET_H_MAC_MACLO (opval); 2435 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 2436 } 2437 { 2438 BI opval = ADDCFDI (tmp_prod, tmp_mac, 0); 2439 SET_H_SYS_SR_CY (opval); 2440 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 2441 } 2442 } 2443 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) { 2444 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 2445 } 2446 } 2447 2448 return vpc; 2449 #undef FLD 2450 } 2451 2452 /* l-msb: l.msb $rA,$rB */ 2453 2454 static SEM_PC 2455 SEM_FN_NAME (or1k32bf,l_msb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2456 { 2457 #define FLD(f) abuf->fields.sfmt_l_sll.f 2458 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2459 int UNUSED written = 0; 2460 IADDR UNUSED pc = abuf->addr; 2461 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2462 2463 { 2464 { 2465 DI tmp_prod; 2466 DI tmp_mac; 2467 DI tmp_result; 2468 tmp_prod = MULDI (EXTSIDI (GET_H_GPR (FLD (f_r2))), EXTSIDI (GET_H_GPR (FLD (f_r3)))); 2469 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()); 2470 tmp_result = SUBDI (tmp_mac, tmp_prod); 2471 { 2472 SI opval = SUBWORDDISI (tmp_result, 0); 2473 SET_H_MAC_MACHI (opval); 2474 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 2475 } 2476 { 2477 SI opval = SUBWORDDISI (tmp_result, 1); 2478 SET_H_MAC_MACLO (opval); 2479 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 2480 } 2481 { 2482 BI opval = SUBOFDI (tmp_mac, tmp_result, 0); 2483 SET_H_SYS_SR_OV (opval); 2484 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-ov", 'x', opval); 2485 } 2486 } 2487 if (ANDIF (GET_H_SYS_SR_OV (), GET_H_SYS_SR_OVE ())) { 2488 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 2489 } 2490 } 2491 2492 return vpc; 2493 #undef FLD 2494 } 2495 2496 /* l-msbu: l.msbu $rA,$rB */ 2497 2498 static SEM_PC 2499 SEM_FN_NAME (or1k32bf,l_msbu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2500 { 2501 #define FLD(f) abuf->fields.sfmt_l_sll.f 2502 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2503 int UNUSED written = 0; 2504 IADDR UNUSED pc = abuf->addr; 2505 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2506 2507 { 2508 { 2509 DI tmp_prod; 2510 DI tmp_mac; 2511 DI tmp_result; 2512 tmp_prod = MULDI (ZEXTSIDI (GET_H_GPR (FLD (f_r2))), ZEXTSIDI (GET_H_GPR (FLD (f_r3)))); 2513 tmp_mac = JOINSIDI (GET_H_MAC_MACHI (), GET_H_MAC_MACLO ()); 2514 tmp_result = SUBDI (tmp_mac, tmp_prod); 2515 { 2516 SI opval = SUBWORDDISI (tmp_result, 0); 2517 SET_H_MAC_MACHI (opval); 2518 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-machi", 'x', opval); 2519 } 2520 { 2521 SI opval = SUBWORDDISI (tmp_result, 1); 2522 SET_H_MAC_MACLO (opval); 2523 CGEN_TRACE_RESULT (current_cpu, abuf, "mac-maclo", 'x', opval); 2524 } 2525 { 2526 BI opval = SUBCFDI (tmp_mac, tmp_result, 0); 2527 SET_H_SYS_SR_CY (opval); 2528 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-cy", 'x', opval); 2529 } 2530 } 2531 if (ANDIF (GET_H_SYS_SR_CY (), GET_H_SYS_SR_OVE ())) { 2532 or1k32bf_exception (current_cpu, pc, EXCEPT_RANGE); 2533 } 2534 } 2535 2536 return vpc; 2537 #undef FLD 2538 } 2539 2540 /* l-cust1: l.cust1 */ 2541 2542 static SEM_PC 2543 SEM_FN_NAME (or1k32bf,l_cust1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2544 { 2545 #define FLD(f) abuf->fields.sfmt_empty.f 2546 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2547 int UNUSED written = 0; 2548 IADDR UNUSED pc = abuf->addr; 2549 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2550 2551 ((void) 0); /*nop*/ 2552 2553 return vpc; 2554 #undef FLD 2555 } 2556 2557 /* l-cust2: l.cust2 */ 2558 2559 static SEM_PC 2560 SEM_FN_NAME (or1k32bf,l_cust2) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2561 { 2562 #define FLD(f) abuf->fields.sfmt_empty.f 2563 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2564 int UNUSED written = 0; 2565 IADDR UNUSED pc = abuf->addr; 2566 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2567 2568 ((void) 0); /*nop*/ 2569 2570 return vpc; 2571 #undef FLD 2572 } 2573 2574 /* l-cust3: l.cust3 */ 2575 2576 static SEM_PC 2577 SEM_FN_NAME (or1k32bf,l_cust3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2578 { 2579 #define FLD(f) abuf->fields.sfmt_empty.f 2580 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2581 int UNUSED written = 0; 2582 IADDR UNUSED pc = abuf->addr; 2583 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2584 2585 ((void) 0); /*nop*/ 2586 2587 return vpc; 2588 #undef FLD 2589 } 2590 2591 /* l-cust4: l.cust4 */ 2592 2593 static SEM_PC 2594 SEM_FN_NAME (or1k32bf,l_cust4) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2595 { 2596 #define FLD(f) abuf->fields.sfmt_empty.f 2597 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2598 int UNUSED written = 0; 2599 IADDR UNUSED pc = abuf->addr; 2600 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2601 2602 ((void) 0); /*nop*/ 2603 2604 return vpc; 2605 #undef FLD 2606 } 2607 2608 /* l-cust5: l.cust5 */ 2609 2610 static SEM_PC 2611 SEM_FN_NAME (or1k32bf,l_cust5) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2612 { 2613 #define FLD(f) abuf->fields.sfmt_empty.f 2614 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2615 int UNUSED written = 0; 2616 IADDR UNUSED pc = abuf->addr; 2617 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2618 2619 ((void) 0); /*nop*/ 2620 2621 return vpc; 2622 #undef FLD 2623 } 2624 2625 /* l-cust6: l.cust6 */ 2626 2627 static SEM_PC 2628 SEM_FN_NAME (or1k32bf,l_cust6) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2629 { 2630 #define FLD(f) abuf->fields.sfmt_empty.f 2631 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2632 int UNUSED written = 0; 2633 IADDR UNUSED pc = abuf->addr; 2634 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2635 2636 ((void) 0); /*nop*/ 2637 2638 return vpc; 2639 #undef FLD 2640 } 2641 2642 /* l-cust7: l.cust7 */ 2643 2644 static SEM_PC 2645 SEM_FN_NAME (or1k32bf,l_cust7) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2646 { 2647 #define FLD(f) abuf->fields.sfmt_empty.f 2648 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2649 int UNUSED written = 0; 2650 IADDR UNUSED pc = abuf->addr; 2651 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2652 2653 ((void) 0); /*nop*/ 2654 2655 return vpc; 2656 #undef FLD 2657 } 2658 2659 /* l-cust8: l.cust8 */ 2660 2661 static SEM_PC 2662 SEM_FN_NAME (or1k32bf,l_cust8) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2663 { 2664 #define FLD(f) abuf->fields.sfmt_empty.f 2665 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2666 int UNUSED written = 0; 2667 IADDR UNUSED pc = abuf->addr; 2668 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2669 2670 ((void) 0); /*nop*/ 2671 2672 return vpc; 2673 #undef FLD 2674 } 2675 2676 /* lf-add-s: lf.add.s $rDSF,$rASF,$rBSF */ 2677 2678 static SEM_PC 2679 SEM_FN_NAME (or1k32bf,lf_add_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2680 { 2681 #define FLD(f) abuf->fields.sfmt_l_sll.f 2682 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2683 int UNUSED written = 0; 2684 IADDR UNUSED pc = abuf->addr; 2685 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2686 2687 { 2688 SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2689 SET_H_FSR (FLD (f_r1), opval); 2690 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2691 } 2692 2693 return vpc; 2694 #undef FLD 2695 } 2696 2697 /* lf-sub-s: lf.sub.s $rDSF,$rASF,$rBSF */ 2698 2699 static SEM_PC 2700 SEM_FN_NAME (or1k32bf,lf_sub_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2701 { 2702 #define FLD(f) abuf->fields.sfmt_l_sll.f 2703 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2704 int UNUSED written = 0; 2705 IADDR UNUSED pc = abuf->addr; 2706 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2707 2708 { 2709 SF opval = CGEN_CPU_FPU (current_cpu)->ops->subsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2710 SET_H_FSR (FLD (f_r1), opval); 2711 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2712 } 2713 2714 return vpc; 2715 #undef FLD 2716 } 2717 2718 /* lf-mul-s: lf.mul.s $rDSF,$rASF,$rBSF */ 2719 2720 static SEM_PC 2721 SEM_FN_NAME (or1k32bf,lf_mul_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2722 { 2723 #define FLD(f) abuf->fields.sfmt_l_sll.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 { 2730 SF opval = CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2731 SET_H_FSR (FLD (f_r1), opval); 2732 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2733 } 2734 2735 return vpc; 2736 #undef FLD 2737 } 2738 2739 /* lf-div-s: lf.div.s $rDSF,$rASF,$rBSF */ 2740 2741 static SEM_PC 2742 SEM_FN_NAME (or1k32bf,lf_div_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2743 { 2744 #define FLD(f) abuf->fields.sfmt_l_sll.f 2745 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2746 int UNUSED written = 0; 2747 IADDR UNUSED pc = abuf->addr; 2748 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2749 2750 { 2751 SF opval = CGEN_CPU_FPU (current_cpu)->ops->divsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2752 SET_H_FSR (FLD (f_r1), opval); 2753 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2754 } 2755 2756 return vpc; 2757 #undef FLD 2758 } 2759 2760 /* lf-rem-s: lf.rem.s $rDSF,$rASF,$rBSF */ 2761 2762 static SEM_PC 2763 SEM_FN_NAME (or1k32bf,lf_rem_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2764 { 2765 #define FLD(f) abuf->fields.sfmt_l_sll.f 2766 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2767 int UNUSED written = 0; 2768 IADDR UNUSED pc = abuf->addr; 2769 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2770 2771 { 2772 SF opval = CGEN_CPU_FPU (current_cpu)->ops->remsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2773 SET_H_FSR (FLD (f_r1), opval); 2774 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2775 } 2776 2777 return vpc; 2778 #undef FLD 2779 } 2780 2781 /* lf-itof-s: lf.itof.s $rDSF,$rA */ 2782 2783 static SEM_PC 2784 SEM_FN_NAME (or1k32bf,lf_itof_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2785 { 2786 #define FLD(f) abuf->fields.sfmt_l_slli.f 2787 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2788 int UNUSED written = 0; 2789 IADDR UNUSED pc = abuf->addr; 2790 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2791 2792 { 2793 SF opval = CGEN_CPU_FPU (current_cpu)->ops->floatsisf (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), TRUNCSISI (GET_H_GPR (FLD (f_r2)))); 2794 SET_H_FSR (FLD (f_r1), opval); 2795 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2796 } 2797 2798 return vpc; 2799 #undef FLD 2800 } 2801 2802 /* lf-ftoi-s: lf.ftoi.s $rD,$rASF */ 2803 2804 static SEM_PC 2805 SEM_FN_NAME (or1k32bf,lf_ftoi_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2806 { 2807 #define FLD(f) abuf->fields.sfmt_l_slli.f 2808 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2809 int UNUSED written = 0; 2810 IADDR UNUSED pc = abuf->addr; 2811 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2812 2813 { 2814 SI opval = EXTSISI (CGEN_CPU_FPU (current_cpu)->ops->fixsfsi (CGEN_CPU_FPU (current_cpu), (GET_H_SYS_FPCSR_RM () == 0) ? (1) : (GET_H_SYS_FPCSR_RM () == 1) ? (3) : (GET_H_SYS_FPCSR_RM () == 2) ? (4) : (5), GET_H_FSR (FLD (f_r2)))); 2815 SET_H_GPR (FLD (f_r1), opval); 2816 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 2817 } 2818 2819 return vpc; 2820 #undef FLD 2821 } 2822 2823 /* lf-eq-s: lf.sfeq.s $rASF,$rBSF */ 2824 2825 static SEM_PC 2826 SEM_FN_NAME (or1k32bf,lf_eq_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2827 { 2828 #define FLD(f) abuf->fields.sfmt_l_sll.f 2829 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2830 int UNUSED written = 0; 2831 IADDR UNUSED pc = abuf->addr; 2832 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2833 2834 { 2835 BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2836 SET_H_SYS_SR_F (opval); 2837 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2838 } 2839 2840 return vpc; 2841 #undef FLD 2842 } 2843 2844 /* lf-ne-s: lf.sfne.s $rASF,$rBSF */ 2845 2846 static SEM_PC 2847 SEM_FN_NAME (or1k32bf,lf_ne_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2848 { 2849 #define FLD(f) abuf->fields.sfmt_l_sll.f 2850 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2851 int UNUSED written = 0; 2852 IADDR UNUSED pc = abuf->addr; 2853 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2854 2855 { 2856 BI opval = CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2857 SET_H_SYS_SR_F (opval); 2858 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2859 } 2860 2861 return vpc; 2862 #undef FLD 2863 } 2864 2865 /* lf-ge-s: lf.sfge.s $rASF,$rBSF */ 2866 2867 static SEM_PC 2868 SEM_FN_NAME (or1k32bf,lf_ge_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2869 { 2870 #define FLD(f) abuf->fields.sfmt_l_sll.f 2871 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2872 int UNUSED written = 0; 2873 IADDR UNUSED pc = abuf->addr; 2874 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2875 2876 { 2877 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2878 SET_H_SYS_SR_F (opval); 2879 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2880 } 2881 2882 return vpc; 2883 #undef FLD 2884 } 2885 2886 /* lf-gt-s: lf.sfgt.s $rASF,$rBSF */ 2887 2888 static SEM_PC 2889 SEM_FN_NAME (or1k32bf,lf_gt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2890 { 2891 #define FLD(f) abuf->fields.sfmt_l_sll.f 2892 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2893 int UNUSED written = 0; 2894 IADDR UNUSED pc = abuf->addr; 2895 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2896 2897 { 2898 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2899 SET_H_SYS_SR_F (opval); 2900 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2901 } 2902 2903 return vpc; 2904 #undef FLD 2905 } 2906 2907 /* lf-lt-s: lf.sflt.s $rASF,$rBSF */ 2908 2909 static SEM_PC 2910 SEM_FN_NAME (or1k32bf,lf_lt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2911 { 2912 #define FLD(f) abuf->fields.sfmt_l_sll.f 2913 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2914 int UNUSED written = 0; 2915 IADDR UNUSED pc = abuf->addr; 2916 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2917 2918 { 2919 BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2920 SET_H_SYS_SR_F (opval); 2921 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2922 } 2923 2924 return vpc; 2925 #undef FLD 2926 } 2927 2928 /* lf-le-s: lf.sfle.s $rASF,$rBSF */ 2929 2930 static SEM_PC 2931 SEM_FN_NAME (or1k32bf,lf_le_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2932 { 2933 #define FLD(f) abuf->fields.sfmt_l_sll.f 2934 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2935 int UNUSED written = 0; 2936 IADDR UNUSED pc = abuf->addr; 2937 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2938 2939 { 2940 BI opval = CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 2941 SET_H_SYS_SR_F (opval); 2942 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2943 } 2944 2945 return vpc; 2946 #undef FLD 2947 } 2948 2949 /* lf-madd-s: lf.madd.s $rDSF,$rASF,$rBSF */ 2950 2951 static SEM_PC 2952 SEM_FN_NAME (or1k32bf,lf_madd_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2953 { 2954 #define FLD(f) abuf->fields.sfmt_l_sll.f 2955 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2956 int UNUSED written = 0; 2957 IADDR UNUSED pc = abuf->addr; 2958 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2959 2960 { 2961 SF opval = CGEN_CPU_FPU (current_cpu)->ops->addsf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->mulsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), GET_H_FSR (FLD (f_r1))); 2962 SET_H_FSR (FLD (f_r1), opval); 2963 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2964 } 2965 2966 return vpc; 2967 #undef FLD 2968 } 2969 2970 /* lf-cust1-s: lf.cust1.s $rASF,$rBSF */ 2971 2972 static SEM_PC 2973 SEM_FN_NAME (or1k32bf,lf_cust1_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2974 { 2975 #define FLD(f) abuf->fields.sfmt_empty.f 2976 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2977 int UNUSED written = 0; 2978 IADDR UNUSED pc = abuf->addr; 2979 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2980 2981 ((void) 0); /*nop*/ 2982 2983 return vpc; 2984 #undef FLD 2985 } 2986 2987 /* Table of all semantic fns. */ 2988 2989 static const struct sem_fn_desc sem_fns[] = { 2990 { OR1K32BF_INSN_X_INVALID, SEM_FN_NAME (or1k32bf,x_invalid) }, 2991 { OR1K32BF_INSN_X_AFTER, SEM_FN_NAME (or1k32bf,x_after) }, 2992 { OR1K32BF_INSN_X_BEFORE, SEM_FN_NAME (or1k32bf,x_before) }, 2993 { OR1K32BF_INSN_X_CTI_CHAIN, SEM_FN_NAME (or1k32bf,x_cti_chain) }, 2994 { OR1K32BF_INSN_X_CHAIN, SEM_FN_NAME (or1k32bf,x_chain) }, 2995 { OR1K32BF_INSN_X_BEGIN, SEM_FN_NAME (or1k32bf,x_begin) }, 2996 { OR1K32BF_INSN_L_J, SEM_FN_NAME (or1k32bf,l_j) }, 2997 { OR1K32BF_INSN_L_ADRP, SEM_FN_NAME (or1k32bf,l_adrp) }, 2998 { OR1K32BF_INSN_L_JAL, SEM_FN_NAME (or1k32bf,l_jal) }, 2999 { OR1K32BF_INSN_L_JR, SEM_FN_NAME (or1k32bf,l_jr) }, 3000 { OR1K32BF_INSN_L_JALR, SEM_FN_NAME (or1k32bf,l_jalr) }, 3001 { OR1K32BF_INSN_L_BNF, SEM_FN_NAME (or1k32bf,l_bnf) }, 3002 { OR1K32BF_INSN_L_BF, SEM_FN_NAME (or1k32bf,l_bf) }, 3003 { OR1K32BF_INSN_L_TRAP, SEM_FN_NAME (or1k32bf,l_trap) }, 3004 { OR1K32BF_INSN_L_SYS, SEM_FN_NAME (or1k32bf,l_sys) }, 3005 { OR1K32BF_INSN_L_MSYNC, SEM_FN_NAME (or1k32bf,l_msync) }, 3006 { OR1K32BF_INSN_L_PSYNC, SEM_FN_NAME (or1k32bf,l_psync) }, 3007 { OR1K32BF_INSN_L_CSYNC, SEM_FN_NAME (or1k32bf,l_csync) }, 3008 { OR1K32BF_INSN_L_RFE, SEM_FN_NAME (or1k32bf,l_rfe) }, 3009 { OR1K32BF_INSN_L_NOP_IMM, SEM_FN_NAME (or1k32bf,l_nop_imm) }, 3010 { OR1K32BF_INSN_L_MOVHI, SEM_FN_NAME (or1k32bf,l_movhi) }, 3011 { OR1K32BF_INSN_L_MACRC, SEM_FN_NAME (or1k32bf,l_macrc) }, 3012 { OR1K32BF_INSN_L_MFSPR, SEM_FN_NAME (or1k32bf,l_mfspr) }, 3013 { OR1K32BF_INSN_L_MTSPR, SEM_FN_NAME (or1k32bf,l_mtspr) }, 3014 { OR1K32BF_INSN_L_LWZ, SEM_FN_NAME (or1k32bf,l_lwz) }, 3015 { OR1K32BF_INSN_L_LWS, SEM_FN_NAME (or1k32bf,l_lws) }, 3016 { OR1K32BF_INSN_L_LWA, SEM_FN_NAME (or1k32bf,l_lwa) }, 3017 { OR1K32BF_INSN_L_LBZ, SEM_FN_NAME (or1k32bf,l_lbz) }, 3018 { OR1K32BF_INSN_L_LBS, SEM_FN_NAME (or1k32bf,l_lbs) }, 3019 { OR1K32BF_INSN_L_LHZ, SEM_FN_NAME (or1k32bf,l_lhz) }, 3020 { OR1K32BF_INSN_L_LHS, SEM_FN_NAME (or1k32bf,l_lhs) }, 3021 { OR1K32BF_INSN_L_SW, SEM_FN_NAME (or1k32bf,l_sw) }, 3022 { OR1K32BF_INSN_L_SB, SEM_FN_NAME (or1k32bf,l_sb) }, 3023 { OR1K32BF_INSN_L_SH, SEM_FN_NAME (or1k32bf,l_sh) }, 3024 { OR1K32BF_INSN_L_SWA, SEM_FN_NAME (or1k32bf,l_swa) }, 3025 { OR1K32BF_INSN_L_SLL, SEM_FN_NAME (or1k32bf,l_sll) }, 3026 { OR1K32BF_INSN_L_SLLI, SEM_FN_NAME (or1k32bf,l_slli) }, 3027 { OR1K32BF_INSN_L_SRL, SEM_FN_NAME (or1k32bf,l_srl) }, 3028 { OR1K32BF_INSN_L_SRLI, SEM_FN_NAME (or1k32bf,l_srli) }, 3029 { OR1K32BF_INSN_L_SRA, SEM_FN_NAME (or1k32bf,l_sra) }, 3030 { OR1K32BF_INSN_L_SRAI, SEM_FN_NAME (or1k32bf,l_srai) }, 3031 { OR1K32BF_INSN_L_ROR, SEM_FN_NAME (or1k32bf,l_ror) }, 3032 { OR1K32BF_INSN_L_RORI, SEM_FN_NAME (or1k32bf,l_rori) }, 3033 { OR1K32BF_INSN_L_AND, SEM_FN_NAME (or1k32bf,l_and) }, 3034 { OR1K32BF_INSN_L_OR, SEM_FN_NAME (or1k32bf,l_or) }, 3035 { OR1K32BF_INSN_L_XOR, SEM_FN_NAME (or1k32bf,l_xor) }, 3036 { OR1K32BF_INSN_L_ADD, SEM_FN_NAME (or1k32bf,l_add) }, 3037 { OR1K32BF_INSN_L_SUB, SEM_FN_NAME (or1k32bf,l_sub) }, 3038 { OR1K32BF_INSN_L_ADDC, SEM_FN_NAME (or1k32bf,l_addc) }, 3039 { OR1K32BF_INSN_L_MUL, SEM_FN_NAME (or1k32bf,l_mul) }, 3040 { OR1K32BF_INSN_L_MULD, SEM_FN_NAME (or1k32bf,l_muld) }, 3041 { OR1K32BF_INSN_L_MULU, SEM_FN_NAME (or1k32bf,l_mulu) }, 3042 { OR1K32BF_INSN_L_MULDU, SEM_FN_NAME (or1k32bf,l_muldu) }, 3043 { OR1K32BF_INSN_L_DIV, SEM_FN_NAME (or1k32bf,l_div) }, 3044 { OR1K32BF_INSN_L_DIVU, SEM_FN_NAME (or1k32bf,l_divu) }, 3045 { OR1K32BF_INSN_L_FF1, SEM_FN_NAME (or1k32bf,l_ff1) }, 3046 { OR1K32BF_INSN_L_FL1, SEM_FN_NAME (or1k32bf,l_fl1) }, 3047 { OR1K32BF_INSN_L_ANDI, SEM_FN_NAME (or1k32bf,l_andi) }, 3048 { OR1K32BF_INSN_L_ORI, SEM_FN_NAME (or1k32bf,l_ori) }, 3049 { OR1K32BF_INSN_L_XORI, SEM_FN_NAME (or1k32bf,l_xori) }, 3050 { OR1K32BF_INSN_L_ADDI, SEM_FN_NAME (or1k32bf,l_addi) }, 3051 { OR1K32BF_INSN_L_ADDIC, SEM_FN_NAME (or1k32bf,l_addic) }, 3052 { OR1K32BF_INSN_L_MULI, SEM_FN_NAME (or1k32bf,l_muli) }, 3053 { OR1K32BF_INSN_L_EXTHS, SEM_FN_NAME (or1k32bf,l_exths) }, 3054 { OR1K32BF_INSN_L_EXTBS, SEM_FN_NAME (or1k32bf,l_extbs) }, 3055 { OR1K32BF_INSN_L_EXTHZ, SEM_FN_NAME (or1k32bf,l_exthz) }, 3056 { OR1K32BF_INSN_L_EXTBZ, SEM_FN_NAME (or1k32bf,l_extbz) }, 3057 { OR1K32BF_INSN_L_EXTWS, SEM_FN_NAME (or1k32bf,l_extws) }, 3058 { OR1K32BF_INSN_L_EXTWZ, SEM_FN_NAME (or1k32bf,l_extwz) }, 3059 { OR1K32BF_INSN_L_CMOV, SEM_FN_NAME (or1k32bf,l_cmov) }, 3060 { OR1K32BF_INSN_L_SFGTS, SEM_FN_NAME (or1k32bf,l_sfgts) }, 3061 { OR1K32BF_INSN_L_SFGTSI, SEM_FN_NAME (or1k32bf,l_sfgtsi) }, 3062 { OR1K32BF_INSN_L_SFGTU, SEM_FN_NAME (or1k32bf,l_sfgtu) }, 3063 { OR1K32BF_INSN_L_SFGTUI, SEM_FN_NAME (or1k32bf,l_sfgtui) }, 3064 { OR1K32BF_INSN_L_SFGES, SEM_FN_NAME (or1k32bf,l_sfges) }, 3065 { OR1K32BF_INSN_L_SFGESI, SEM_FN_NAME (or1k32bf,l_sfgesi) }, 3066 { OR1K32BF_INSN_L_SFGEU, SEM_FN_NAME (or1k32bf,l_sfgeu) }, 3067 { OR1K32BF_INSN_L_SFGEUI, SEM_FN_NAME (or1k32bf,l_sfgeui) }, 3068 { OR1K32BF_INSN_L_SFLTS, SEM_FN_NAME (or1k32bf,l_sflts) }, 3069 { OR1K32BF_INSN_L_SFLTSI, SEM_FN_NAME (or1k32bf,l_sfltsi) }, 3070 { OR1K32BF_INSN_L_SFLTU, SEM_FN_NAME (or1k32bf,l_sfltu) }, 3071 { OR1K32BF_INSN_L_SFLTUI, SEM_FN_NAME (or1k32bf,l_sfltui) }, 3072 { OR1K32BF_INSN_L_SFLES, SEM_FN_NAME (or1k32bf,l_sfles) }, 3073 { OR1K32BF_INSN_L_SFLESI, SEM_FN_NAME (or1k32bf,l_sflesi) }, 3074 { OR1K32BF_INSN_L_SFLEU, SEM_FN_NAME (or1k32bf,l_sfleu) }, 3075 { OR1K32BF_INSN_L_SFLEUI, SEM_FN_NAME (or1k32bf,l_sfleui) }, 3076 { OR1K32BF_INSN_L_SFEQ, SEM_FN_NAME (or1k32bf,l_sfeq) }, 3077 { OR1K32BF_INSN_L_SFEQI, SEM_FN_NAME (or1k32bf,l_sfeqi) }, 3078 { OR1K32BF_INSN_L_SFNE, SEM_FN_NAME (or1k32bf,l_sfne) }, 3079 { OR1K32BF_INSN_L_SFNEI, SEM_FN_NAME (or1k32bf,l_sfnei) }, 3080 { OR1K32BF_INSN_L_MAC, SEM_FN_NAME (or1k32bf,l_mac) }, 3081 { OR1K32BF_INSN_L_MACI, SEM_FN_NAME (or1k32bf,l_maci) }, 3082 { OR1K32BF_INSN_L_MACU, SEM_FN_NAME (or1k32bf,l_macu) }, 3083 { OR1K32BF_INSN_L_MSB, SEM_FN_NAME (or1k32bf,l_msb) }, 3084 { OR1K32BF_INSN_L_MSBU, SEM_FN_NAME (or1k32bf,l_msbu) }, 3085 { OR1K32BF_INSN_L_CUST1, SEM_FN_NAME (or1k32bf,l_cust1) }, 3086 { OR1K32BF_INSN_L_CUST2, SEM_FN_NAME (or1k32bf,l_cust2) }, 3087 { OR1K32BF_INSN_L_CUST3, SEM_FN_NAME (or1k32bf,l_cust3) }, 3088 { OR1K32BF_INSN_L_CUST4, SEM_FN_NAME (or1k32bf,l_cust4) }, 3089 { OR1K32BF_INSN_L_CUST5, SEM_FN_NAME (or1k32bf,l_cust5) }, 3090 { OR1K32BF_INSN_L_CUST6, SEM_FN_NAME (or1k32bf,l_cust6) }, 3091 { OR1K32BF_INSN_L_CUST7, SEM_FN_NAME (or1k32bf,l_cust7) }, 3092 { OR1K32BF_INSN_L_CUST8, SEM_FN_NAME (or1k32bf,l_cust8) }, 3093 { OR1K32BF_INSN_LF_ADD_S, SEM_FN_NAME (or1k32bf,lf_add_s) }, 3094 { OR1K32BF_INSN_LF_SUB_S, SEM_FN_NAME (or1k32bf,lf_sub_s) }, 3095 { OR1K32BF_INSN_LF_MUL_S, SEM_FN_NAME (or1k32bf,lf_mul_s) }, 3096 { OR1K32BF_INSN_LF_DIV_S, SEM_FN_NAME (or1k32bf,lf_div_s) }, 3097 { OR1K32BF_INSN_LF_REM_S, SEM_FN_NAME (or1k32bf,lf_rem_s) }, 3098 { OR1K32BF_INSN_LF_ITOF_S, SEM_FN_NAME (or1k32bf,lf_itof_s) }, 3099 { OR1K32BF_INSN_LF_FTOI_S, SEM_FN_NAME (or1k32bf,lf_ftoi_s) }, 3100 { OR1K32BF_INSN_LF_EQ_S, SEM_FN_NAME (or1k32bf,lf_eq_s) }, 3101 { OR1K32BF_INSN_LF_NE_S, SEM_FN_NAME (or1k32bf,lf_ne_s) }, 3102 { OR1K32BF_INSN_LF_GE_S, SEM_FN_NAME (or1k32bf,lf_ge_s) }, 3103 { OR1K32BF_INSN_LF_GT_S, SEM_FN_NAME (or1k32bf,lf_gt_s) }, 3104 { OR1K32BF_INSN_LF_LT_S, SEM_FN_NAME (or1k32bf,lf_lt_s) }, 3105 { OR1K32BF_INSN_LF_LE_S, SEM_FN_NAME (or1k32bf,lf_le_s) }, 3106 { OR1K32BF_INSN_LF_MADD_S, SEM_FN_NAME (or1k32bf,lf_madd_s) }, 3107 { OR1K32BF_INSN_LF_CUST1_S, SEM_FN_NAME (or1k32bf,lf_cust1_s) }, 3108 { 0, 0 } 3109 }; 3110 3111 /* Add the semantic fns to IDESC_TABLE. */ 3112 3113 void 3114 SEM_FN_NAME (or1k32bf,init_idesc_table) (SIM_CPU *current_cpu) 3115 { 3116 IDESC *idesc_table = CPU_IDESC (current_cpu); 3117 const struct sem_fn_desc *sf; 3118 int mach_num = MACH_NUM (CPU_MACH (current_cpu)); 3119 3120 for (sf = &sem_fns[0]; sf->fn != 0; ++sf) 3121 { 3122 const CGEN_INSN *insn = idesc_table[sf->index].idata; 3123 int valid_p = (CGEN_INSN_VIRTUAL_P (insn) 3124 || CGEN_INSN_MACH_HAS_P (insn, mach_num)); 3125 #if FAST_P 3126 if (valid_p) 3127 idesc_table[sf->index].sem_fast = sf->fn; 3128 else 3129 idesc_table[sf->index].sem_fast = SEM_FN_NAME (or1k32bf,x_invalid); 3130 #else 3131 if (valid_p) 3132 idesc_table[sf->index].sem_full = sf->fn; 3133 else 3134 idesc_table[sf->index].sem_full = SEM_FN_NAME (or1k32bf,x_invalid); 3135 #endif 3136 } 3137 } 3138 3139