1 /* Simulator instruction semantics for or1k32bf. 2 3 THIS FILE IS MACHINE GENERATED WITH CGEN. 4 5 Copyright (C) 1996-2023 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-add-d32: lf.add.d $rDD32F,$rAD32F,$rBD32F */ 2698 2699 static SEM_PC 2700 SEM_FN_NAME (or1k32bf,lf_add_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2701 { 2702 #define FLD(f) abuf->fields.sfmt_lf_add_d32.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 DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 2710 SET_H_FD32R (FLD (f_rdd32), opval); 2711 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval); 2712 } 2713 2714 return vpc; 2715 #undef FLD 2716 } 2717 2718 /* lf-sub-s: lf.sub.s $rDSF,$rASF,$rBSF */ 2719 2720 static SEM_PC 2721 SEM_FN_NAME (or1k32bf,lf_sub_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->subsf (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-sub-d32: lf.sub.d $rDD32F,$rAD32F,$rBD32F */ 2740 2741 static SEM_PC 2742 SEM_FN_NAME (or1k32bf,lf_sub_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2743 { 2744 #define FLD(f) abuf->fields.sfmt_lf_add_d32.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 DF opval = CGEN_CPU_FPU (current_cpu)->ops->subdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 2752 SET_H_FD32R (FLD (f_rdd32), opval); 2753 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval); 2754 } 2755 2756 return vpc; 2757 #undef FLD 2758 } 2759 2760 /* lf-mul-s: lf.mul.s $rDSF,$rASF,$rBSF */ 2761 2762 static SEM_PC 2763 SEM_FN_NAME (or1k32bf,lf_mul_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->mulsf (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-mul-d32: lf.mul.d $rDD32F,$rAD32F,$rBD32F */ 2782 2783 static SEM_PC 2784 SEM_FN_NAME (or1k32bf,lf_mul_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2785 { 2786 #define FLD(f) abuf->fields.sfmt_lf_add_d32.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 DF opval = CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 2794 SET_H_FD32R (FLD (f_rdd32), opval); 2795 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval); 2796 } 2797 2798 return vpc; 2799 #undef FLD 2800 } 2801 2802 /* lf-div-s: lf.div.s $rDSF,$rASF,$rBSF */ 2803 2804 static SEM_PC 2805 SEM_FN_NAME (or1k32bf,lf_div_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2806 { 2807 #define FLD(f) abuf->fields.sfmt_l_sll.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 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))); 2815 SET_H_FSR (FLD (f_r1), opval); 2816 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2817 } 2818 2819 return vpc; 2820 #undef FLD 2821 } 2822 2823 /* lf-div-d32: lf.div.d $rDD32F,$rAD32F,$rBD32F */ 2824 2825 static SEM_PC 2826 SEM_FN_NAME (or1k32bf,lf_div_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2827 { 2828 #define FLD(f) abuf->fields.sfmt_lf_add_d32.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 DF opval = CGEN_CPU_FPU (current_cpu)->ops->divdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 2836 SET_H_FD32R (FLD (f_rdd32), opval); 2837 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval); 2838 } 2839 2840 return vpc; 2841 #undef FLD 2842 } 2843 2844 /* lf-rem-s: lf.rem.s $rDSF,$rASF,$rBSF */ 2845 2846 static SEM_PC 2847 SEM_FN_NAME (or1k32bf,lf_rem_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 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))); 2857 SET_H_FSR (FLD (f_r1), opval); 2858 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2859 } 2860 2861 return vpc; 2862 #undef FLD 2863 } 2864 2865 /* lf-rem-d32: lf.rem.d $rDD32F,$rAD32F,$rBD32F */ 2866 2867 static SEM_PC 2868 SEM_FN_NAME (or1k32bf,lf_rem_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2869 { 2870 #define FLD(f) abuf->fields.sfmt_lf_add_d32.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 DF opval = CGEN_CPU_FPU (current_cpu)->ops->remdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 2878 SET_H_FD32R (FLD (f_rdd32), opval); 2879 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval); 2880 } 2881 2882 return vpc; 2883 #undef FLD 2884 } 2885 2886 /* lf-itof-s: lf.itof.s $rDSF,$rA */ 2887 2888 static SEM_PC 2889 SEM_FN_NAME (or1k32bf,lf_itof_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2890 { 2891 #define FLD(f) abuf->fields.sfmt_l_slli.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 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)))); 2899 SET_H_FSR (FLD (f_r1), opval); 2900 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 2901 } 2902 2903 return vpc; 2904 #undef FLD 2905 } 2906 2907 /* lf-itof-d32: lf.itof.d $rDD32F,$rADI */ 2908 2909 static SEM_PC 2910 SEM_FN_NAME (or1k32bf,lf_itof_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2911 { 2912 #define FLD(f) abuf->fields.sfmt_lf_add_d32.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 DF opval = CGEN_CPU_FPU (current_cpu)->ops->floatdidf (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_I64R (FLD (f_rad32))); 2920 SET_H_FD32R (FLD (f_rdd32), opval); 2921 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval); 2922 } 2923 2924 return vpc; 2925 #undef FLD 2926 } 2927 2928 /* lf-ftoi-s: lf.ftoi.s $rD,$rASF */ 2929 2930 static SEM_PC 2931 SEM_FN_NAME (or1k32bf,lf_ftoi_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2932 { 2933 #define FLD(f) abuf->fields.sfmt_l_slli.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 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)))); 2941 SET_H_GPR (FLD (f_r1), opval); 2942 CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); 2943 } 2944 2945 return vpc; 2946 #undef FLD 2947 } 2948 2949 /* lf-ftoi-d32: lf.ftoi.d $rDDI,$rAD32F */ 2950 2951 static SEM_PC 2952 SEM_FN_NAME (or1k32bf,lf_ftoi_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2953 { 2954 #define FLD(f) abuf->fields.sfmt_lf_add_d32.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 DI opval = CGEN_CPU_FPU (current_cpu)->ops->fixdfdi (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_FD32R (FLD (f_rad32))); 2962 SET_H_I64R (FLD (f_rdd32), opval); 2963 CGEN_TRACE_RESULT (current_cpu, abuf, "i64r", 'D', opval); 2964 } 2965 2966 return vpc; 2967 #undef FLD 2968 } 2969 2970 /* lf-sfeq-s: lf.sfeq.s $rASF,$rBSF */ 2971 2972 static SEM_PC 2973 SEM_FN_NAME (or1k32bf,lf_sfeq_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2974 { 2975 #define FLD(f) abuf->fields.sfmt_l_sll.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 { 2982 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))); 2983 SET_H_SYS_SR_F (opval); 2984 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 2985 } 2986 2987 return vpc; 2988 #undef FLD 2989 } 2990 2991 /* lf-sfeq-d32: lf.sfeq.d $rAD32F,$rBD32F */ 2992 2993 static SEM_PC 2994 SEM_FN_NAME (or1k32bf,lf_sfeq_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2995 { 2996 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 2997 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2998 int UNUSED written = 0; 2999 IADDR UNUSED pc = abuf->addr; 3000 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3001 3002 { 3003 BI opval = CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 3004 SET_H_SYS_SR_F (opval); 3005 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3006 } 3007 3008 return vpc; 3009 #undef FLD 3010 } 3011 3012 /* lf-sfne-s: lf.sfne.s $rASF,$rBSF */ 3013 3014 static SEM_PC 3015 SEM_FN_NAME (or1k32bf,lf_sfne_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3016 { 3017 #define FLD(f) abuf->fields.sfmt_l_sll.f 3018 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3019 int UNUSED written = 0; 3020 IADDR UNUSED pc = abuf->addr; 3021 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3022 3023 { 3024 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))); 3025 SET_H_SYS_SR_F (opval); 3026 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3027 } 3028 3029 return vpc; 3030 #undef FLD 3031 } 3032 3033 /* lf-sfne-d32: lf.sfne.d $rAD32F,$rBD32F */ 3034 3035 static SEM_PC 3036 SEM_FN_NAME (or1k32bf,lf_sfne_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3037 { 3038 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3039 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3040 int UNUSED written = 0; 3041 IADDR UNUSED pc = abuf->addr; 3042 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3043 3044 { 3045 BI opval = CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 3046 SET_H_SYS_SR_F (opval); 3047 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3048 } 3049 3050 return vpc; 3051 #undef FLD 3052 } 3053 3054 /* lf-sfge-s: lf.sfge.s $rASF,$rBSF */ 3055 3056 static SEM_PC 3057 SEM_FN_NAME (or1k32bf,lf_sfge_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3058 { 3059 #define FLD(f) abuf->fields.sfmt_l_sll.f 3060 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3061 int UNUSED written = 0; 3062 IADDR UNUSED pc = abuf->addr; 3063 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3064 3065 { 3066 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))); 3067 SET_H_SYS_SR_F (opval); 3068 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3069 } 3070 3071 return vpc; 3072 #undef FLD 3073 } 3074 3075 /* lf-sfge-d32: lf.sfge.d $rAD32F,$rBD32F */ 3076 3077 static SEM_PC 3078 SEM_FN_NAME (or1k32bf,lf_sfge_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3079 { 3080 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3081 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3082 int UNUSED written = 0; 3083 IADDR UNUSED pc = abuf->addr; 3084 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3085 3086 { 3087 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 3088 SET_H_SYS_SR_F (opval); 3089 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3090 } 3091 3092 return vpc; 3093 #undef FLD 3094 } 3095 3096 /* lf-sfgt-s: lf.sfgt.s $rASF,$rBSF */ 3097 3098 static SEM_PC 3099 SEM_FN_NAME (or1k32bf,lf_sfgt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3100 { 3101 #define FLD(f) abuf->fields.sfmt_l_sll.f 3102 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3103 int UNUSED written = 0; 3104 IADDR UNUSED pc = abuf->addr; 3105 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3106 3107 { 3108 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))); 3109 SET_H_SYS_SR_F (opval); 3110 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3111 } 3112 3113 return vpc; 3114 #undef FLD 3115 } 3116 3117 /* lf-sfgt-d32: lf.sfgt.d $rAD32F,$rBD32F */ 3118 3119 static SEM_PC 3120 SEM_FN_NAME (or1k32bf,lf_sfgt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3121 { 3122 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3123 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3124 int UNUSED written = 0; 3125 IADDR UNUSED pc = abuf->addr; 3126 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3127 3128 { 3129 BI opval = CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 3130 SET_H_SYS_SR_F (opval); 3131 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3132 } 3133 3134 return vpc; 3135 #undef FLD 3136 } 3137 3138 /* lf-sflt-s: lf.sflt.s $rASF,$rBSF */ 3139 3140 static SEM_PC 3141 SEM_FN_NAME (or1k32bf,lf_sflt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3142 { 3143 #define FLD(f) abuf->fields.sfmt_l_sll.f 3144 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3145 int UNUSED written = 0; 3146 IADDR UNUSED pc = abuf->addr; 3147 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3148 3149 { 3150 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))); 3151 SET_H_SYS_SR_F (opval); 3152 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3153 } 3154 3155 return vpc; 3156 #undef FLD 3157 } 3158 3159 /* lf-sflt-d32: lf.sflt.d $rAD32F,$rBD32F */ 3160 3161 static SEM_PC 3162 SEM_FN_NAME (or1k32bf,lf_sflt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3163 { 3164 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3165 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3166 int UNUSED written = 0; 3167 IADDR UNUSED pc = abuf->addr; 3168 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3169 3170 { 3171 BI opval = CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 3172 SET_H_SYS_SR_F (opval); 3173 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3174 } 3175 3176 return vpc; 3177 #undef FLD 3178 } 3179 3180 /* lf-sfle-s: lf.sfle.s $rASF,$rBSF */ 3181 3182 static SEM_PC 3183 SEM_FN_NAME (or1k32bf,lf_sfle_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3184 { 3185 #define FLD(f) abuf->fields.sfmt_l_sll.f 3186 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3187 int UNUSED written = 0; 3188 IADDR UNUSED pc = abuf->addr; 3189 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3190 3191 { 3192 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))); 3193 SET_H_SYS_SR_F (opval); 3194 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3195 } 3196 3197 return vpc; 3198 #undef FLD 3199 } 3200 3201 /* lf-sfle-d32: lf.sfle.d $rAD32F,$rBD32F */ 3202 3203 static SEM_PC 3204 SEM_FN_NAME (or1k32bf,lf_sfle_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3205 { 3206 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3207 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3208 int UNUSED written = 0; 3209 IADDR UNUSED pc = abuf->addr; 3210 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3211 3212 { 3213 BI opval = CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 3214 SET_H_SYS_SR_F (opval); 3215 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3216 } 3217 3218 return vpc; 3219 #undef FLD 3220 } 3221 3222 /* lf-sfueq-s: lf.sfueq.s $rASF,$rBSF */ 3223 3224 static SEM_PC 3225 SEM_FN_NAME (or1k32bf,lf_sfueq_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3226 { 3227 #define FLD(f) abuf->fields.sfmt_l_sll.f 3228 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3229 int UNUSED written = 0; 3230 IADDR UNUSED pc = abuf->addr; 3231 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3232 3233 { 3234 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->eqsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)))); 3235 SET_H_SYS_SR_F (opval); 3236 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3237 } 3238 3239 return vpc; 3240 #undef FLD 3241 } 3242 3243 /* lf-sfueq-d32: lf.sfueq.d $rAD32F,$rBD32F */ 3244 3245 static SEM_PC 3246 SEM_FN_NAME (or1k32bf,lf_sfueq_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3247 { 3248 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3249 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3250 int UNUSED written = 0; 3251 IADDR UNUSED pc = abuf->addr; 3252 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3253 3254 { 3255 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->eqdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)))); 3256 SET_H_SYS_SR_F (opval); 3257 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3258 } 3259 3260 return vpc; 3261 #undef FLD 3262 } 3263 3264 /* lf-sfune-s: lf.sfune.s $rASF,$rBSF */ 3265 3266 static SEM_PC 3267 SEM_FN_NAME (or1k32bf,lf_sfune_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3268 { 3269 #define FLD(f) abuf->fields.sfmt_l_sll.f 3270 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3271 int UNUSED written = 0; 3272 IADDR UNUSED pc = abuf->addr; 3273 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3274 3275 { 3276 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->nesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)))); 3277 SET_H_SYS_SR_F (opval); 3278 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3279 } 3280 3281 return vpc; 3282 #undef FLD 3283 } 3284 3285 /* lf-sfune-d32: lf.sfune.d $rAD32F,$rBD32F */ 3286 3287 static SEM_PC 3288 SEM_FN_NAME (or1k32bf,lf_sfune_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3289 { 3290 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3291 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3292 int UNUSED written = 0; 3293 IADDR UNUSED pc = abuf->addr; 3294 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3295 3296 { 3297 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->nedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)))); 3298 SET_H_SYS_SR_F (opval); 3299 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3300 } 3301 3302 return vpc; 3303 #undef FLD 3304 } 3305 3306 /* lf-sfugt-s: lf.sfugt.s $rASF,$rBSF */ 3307 3308 static SEM_PC 3309 SEM_FN_NAME (or1k32bf,lf_sfugt_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3310 { 3311 #define FLD(f) abuf->fields.sfmt_l_sll.f 3312 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3313 int UNUSED written = 0; 3314 IADDR UNUSED pc = abuf->addr; 3315 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3316 3317 { 3318 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gtsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)))); 3319 SET_H_SYS_SR_F (opval); 3320 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3321 } 3322 3323 return vpc; 3324 #undef FLD 3325 } 3326 3327 /* lf-sfugt-d32: lf.sfugt.d $rAD32F,$rBD32F */ 3328 3329 static SEM_PC 3330 SEM_FN_NAME (or1k32bf,lf_sfugt_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3331 { 3332 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3333 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3334 int UNUSED written = 0; 3335 IADDR UNUSED pc = abuf->addr; 3336 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3337 3338 { 3339 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gtdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)))); 3340 SET_H_SYS_SR_F (opval); 3341 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3342 } 3343 3344 return vpc; 3345 #undef FLD 3346 } 3347 3348 /* lf-sfuge-s: lf.sfuge.s $rASF,$rBSF */ 3349 3350 static SEM_PC 3351 SEM_FN_NAME (or1k32bf,lf_sfuge_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3352 { 3353 #define FLD(f) abuf->fields.sfmt_l_sll.f 3354 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3355 int UNUSED written = 0; 3356 IADDR UNUSED pc = abuf->addr; 3357 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3358 3359 { 3360 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->gesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)))); 3361 SET_H_SYS_SR_F (opval); 3362 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3363 } 3364 3365 return vpc; 3366 #undef FLD 3367 } 3368 3369 /* lf-sfuge-d32: lf.sfuge.d $rAD32F,$rBD32F */ 3370 3371 static SEM_PC 3372 SEM_FN_NAME (or1k32bf,lf_sfuge_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3373 { 3374 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3375 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3376 int UNUSED written = 0; 3377 IADDR UNUSED pc = abuf->addr; 3378 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3379 3380 { 3381 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->gedf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)))); 3382 SET_H_SYS_SR_F (opval); 3383 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3384 } 3385 3386 return vpc; 3387 #undef FLD 3388 } 3389 3390 /* lf-sfult-s: lf.sfult.s $rASF,$rBSF */ 3391 3392 static SEM_PC 3393 SEM_FN_NAME (or1k32bf,lf_sfult_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3394 { 3395 #define FLD(f) abuf->fields.sfmt_l_sll.f 3396 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3397 int UNUSED written = 0; 3398 IADDR UNUSED pc = abuf->addr; 3399 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3400 3401 { 3402 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->ltsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)))); 3403 SET_H_SYS_SR_F (opval); 3404 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3405 } 3406 3407 return vpc; 3408 #undef FLD 3409 } 3410 3411 /* lf-sfult-d32: lf.sfult.d $rAD32F,$rBD32F */ 3412 3413 static SEM_PC 3414 SEM_FN_NAME (or1k32bf,lf_sfult_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3415 { 3416 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3417 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3418 int UNUSED written = 0; 3419 IADDR UNUSED pc = abuf->addr; 3420 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3421 3422 { 3423 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ltdf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)))); 3424 SET_H_SYS_SR_F (opval); 3425 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3426 } 3427 3428 return vpc; 3429 #undef FLD 3430 } 3431 3432 /* lf-sfule-s: lf.sfule.s $rASF,$rBSF */ 3433 3434 static SEM_PC 3435 SEM_FN_NAME (or1k32bf,lf_sfule_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3436 { 3437 #define FLD(f) abuf->fields.sfmt_l_sll.f 3438 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3439 int UNUSED written = 0; 3440 IADDR UNUSED pc = abuf->addr; 3441 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3442 3443 { 3444 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))), CGEN_CPU_FPU (current_cpu)->ops->lesf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3)))); 3445 SET_H_SYS_SR_F (opval); 3446 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3447 } 3448 3449 return vpc; 3450 #undef FLD 3451 } 3452 3453 /* lf-sfule-d32: lf.sfule.d $rAD32F,$rBD32F */ 3454 3455 static SEM_PC 3456 SEM_FN_NAME (or1k32bf,lf_sfule_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3457 { 3458 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3459 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3460 int UNUSED written = 0; 3461 IADDR UNUSED pc = abuf->addr; 3462 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3463 3464 { 3465 BI opval = ORBI (CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), CGEN_CPU_FPU (current_cpu)->ops->ledf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32)))); 3466 SET_H_SYS_SR_F (opval); 3467 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3468 } 3469 3470 return vpc; 3471 #undef FLD 3472 } 3473 3474 /* lf-sfun-s: lf.sfun.s $rASF,$rBSF */ 3475 3476 static SEM_PC 3477 SEM_FN_NAME (or1k32bf,lf_sfun_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3478 { 3479 #define FLD(f) abuf->fields.sfmt_l_sll.f 3480 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3481 int UNUSED written = 0; 3482 IADDR UNUSED pc = abuf->addr; 3483 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3484 3485 { 3486 BI opval = CGEN_CPU_FPU (current_cpu)->ops->unorderedsf (CGEN_CPU_FPU (current_cpu), GET_H_FSR (FLD (f_r2)), GET_H_FSR (FLD (f_r3))); 3487 SET_H_SYS_SR_F (opval); 3488 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3489 } 3490 3491 return vpc; 3492 #undef FLD 3493 } 3494 3495 /* lf-sfun-d32: lf.sfun.d $rAD32F,$rBD32F */ 3496 3497 static SEM_PC 3498 SEM_FN_NAME (or1k32bf,lf_sfun_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3499 { 3500 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3501 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3502 int UNUSED written = 0; 3503 IADDR UNUSED pc = abuf->addr; 3504 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3505 3506 { 3507 BI opval = CGEN_CPU_FPU (current_cpu)->ops->unordereddf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))); 3508 SET_H_SYS_SR_F (opval); 3509 CGEN_TRACE_RESULT (current_cpu, abuf, "sys-sr-f", 'x', opval); 3510 } 3511 3512 return vpc; 3513 #undef FLD 3514 } 3515 3516 /* lf-madd-s: lf.madd.s $rDSF,$rASF,$rBSF */ 3517 3518 static SEM_PC 3519 SEM_FN_NAME (or1k32bf,lf_madd_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3520 { 3521 #define FLD(f) abuf->fields.sfmt_l_sll.f 3522 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3523 int UNUSED written = 0; 3524 IADDR UNUSED pc = abuf->addr; 3525 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3526 3527 { 3528 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))); 3529 SET_H_FSR (FLD (f_r1), opval); 3530 CGEN_TRACE_RESULT (current_cpu, abuf, "fsr", 'f', opval); 3531 } 3532 3533 return vpc; 3534 #undef FLD 3535 } 3536 3537 /* lf-madd-d32: lf.madd.d $rDD32F,$rAD32F,$rBD32F */ 3538 3539 static SEM_PC 3540 SEM_FN_NAME (or1k32bf,lf_madd_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3541 { 3542 #define FLD(f) abuf->fields.sfmt_lf_add_d32.f 3543 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3544 int UNUSED written = 0; 3545 IADDR UNUSED pc = abuf->addr; 3546 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3547 3548 { 3549 DF opval = CGEN_CPU_FPU (current_cpu)->ops->adddf (CGEN_CPU_FPU (current_cpu), CGEN_CPU_FPU (current_cpu)->ops->muldf (CGEN_CPU_FPU (current_cpu), GET_H_FD32R (FLD (f_rad32)), GET_H_FD32R (FLD (f_rbd32))), GET_H_FD32R (FLD (f_rdd32))); 3550 SET_H_FD32R (FLD (f_rdd32), opval); 3551 CGEN_TRACE_RESULT (current_cpu, abuf, "fd32r", 'f', opval); 3552 } 3553 3554 return vpc; 3555 #undef FLD 3556 } 3557 3558 /* lf-cust1-s: lf.cust1.s $rASF,$rBSF */ 3559 3560 static SEM_PC 3561 SEM_FN_NAME (or1k32bf,lf_cust1_s) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3562 { 3563 #define FLD(f) abuf->fields.sfmt_empty.f 3564 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3565 int UNUSED written = 0; 3566 IADDR UNUSED pc = abuf->addr; 3567 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3568 3569 ((void) 0); /*nop*/ 3570 3571 return vpc; 3572 #undef FLD 3573 } 3574 3575 /* lf-cust1-d32: lf.cust1.d */ 3576 3577 static SEM_PC 3578 SEM_FN_NAME (or1k32bf,lf_cust1_d32) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3579 { 3580 #define FLD(f) abuf->fields.sfmt_empty.f 3581 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3582 int UNUSED written = 0; 3583 IADDR UNUSED pc = abuf->addr; 3584 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3585 3586 ((void) 0); /*nop*/ 3587 3588 return vpc; 3589 #undef FLD 3590 } 3591 3592 /* Table of all semantic fns. */ 3593 3594 static const struct sem_fn_desc sem_fns[] = { 3595 { OR1K32BF_INSN_X_INVALID, SEM_FN_NAME (or1k32bf,x_invalid) }, 3596 { OR1K32BF_INSN_X_AFTER, SEM_FN_NAME (or1k32bf,x_after) }, 3597 { OR1K32BF_INSN_X_BEFORE, SEM_FN_NAME (or1k32bf,x_before) }, 3598 { OR1K32BF_INSN_X_CTI_CHAIN, SEM_FN_NAME (or1k32bf,x_cti_chain) }, 3599 { OR1K32BF_INSN_X_CHAIN, SEM_FN_NAME (or1k32bf,x_chain) }, 3600 { OR1K32BF_INSN_X_BEGIN, SEM_FN_NAME (or1k32bf,x_begin) }, 3601 { OR1K32BF_INSN_L_J, SEM_FN_NAME (or1k32bf,l_j) }, 3602 { OR1K32BF_INSN_L_ADRP, SEM_FN_NAME (or1k32bf,l_adrp) }, 3603 { OR1K32BF_INSN_L_JAL, SEM_FN_NAME (or1k32bf,l_jal) }, 3604 { OR1K32BF_INSN_L_JR, SEM_FN_NAME (or1k32bf,l_jr) }, 3605 { OR1K32BF_INSN_L_JALR, SEM_FN_NAME (or1k32bf,l_jalr) }, 3606 { OR1K32BF_INSN_L_BNF, SEM_FN_NAME (or1k32bf,l_bnf) }, 3607 { OR1K32BF_INSN_L_BF, SEM_FN_NAME (or1k32bf,l_bf) }, 3608 { OR1K32BF_INSN_L_TRAP, SEM_FN_NAME (or1k32bf,l_trap) }, 3609 { OR1K32BF_INSN_L_SYS, SEM_FN_NAME (or1k32bf,l_sys) }, 3610 { OR1K32BF_INSN_L_MSYNC, SEM_FN_NAME (or1k32bf,l_msync) }, 3611 { OR1K32BF_INSN_L_PSYNC, SEM_FN_NAME (or1k32bf,l_psync) }, 3612 { OR1K32BF_INSN_L_CSYNC, SEM_FN_NAME (or1k32bf,l_csync) }, 3613 { OR1K32BF_INSN_L_RFE, SEM_FN_NAME (or1k32bf,l_rfe) }, 3614 { OR1K32BF_INSN_L_NOP_IMM, SEM_FN_NAME (or1k32bf,l_nop_imm) }, 3615 { OR1K32BF_INSN_L_MOVHI, SEM_FN_NAME (or1k32bf,l_movhi) }, 3616 { OR1K32BF_INSN_L_MACRC, SEM_FN_NAME (or1k32bf,l_macrc) }, 3617 { OR1K32BF_INSN_L_MFSPR, SEM_FN_NAME (or1k32bf,l_mfspr) }, 3618 { OR1K32BF_INSN_L_MTSPR, SEM_FN_NAME (or1k32bf,l_mtspr) }, 3619 { OR1K32BF_INSN_L_LWZ, SEM_FN_NAME (or1k32bf,l_lwz) }, 3620 { OR1K32BF_INSN_L_LWS, SEM_FN_NAME (or1k32bf,l_lws) }, 3621 { OR1K32BF_INSN_L_LWA, SEM_FN_NAME (or1k32bf,l_lwa) }, 3622 { OR1K32BF_INSN_L_LBZ, SEM_FN_NAME (or1k32bf,l_lbz) }, 3623 { OR1K32BF_INSN_L_LBS, SEM_FN_NAME (or1k32bf,l_lbs) }, 3624 { OR1K32BF_INSN_L_LHZ, SEM_FN_NAME (or1k32bf,l_lhz) }, 3625 { OR1K32BF_INSN_L_LHS, SEM_FN_NAME (or1k32bf,l_lhs) }, 3626 { OR1K32BF_INSN_L_SW, SEM_FN_NAME (or1k32bf,l_sw) }, 3627 { OR1K32BF_INSN_L_SB, SEM_FN_NAME (or1k32bf,l_sb) }, 3628 { OR1K32BF_INSN_L_SH, SEM_FN_NAME (or1k32bf,l_sh) }, 3629 { OR1K32BF_INSN_L_SWA, SEM_FN_NAME (or1k32bf,l_swa) }, 3630 { OR1K32BF_INSN_L_SLL, SEM_FN_NAME (or1k32bf,l_sll) }, 3631 { OR1K32BF_INSN_L_SLLI, SEM_FN_NAME (or1k32bf,l_slli) }, 3632 { OR1K32BF_INSN_L_SRL, SEM_FN_NAME (or1k32bf,l_srl) }, 3633 { OR1K32BF_INSN_L_SRLI, SEM_FN_NAME (or1k32bf,l_srli) }, 3634 { OR1K32BF_INSN_L_SRA, SEM_FN_NAME (or1k32bf,l_sra) }, 3635 { OR1K32BF_INSN_L_SRAI, SEM_FN_NAME (or1k32bf,l_srai) }, 3636 { OR1K32BF_INSN_L_ROR, SEM_FN_NAME (or1k32bf,l_ror) }, 3637 { OR1K32BF_INSN_L_RORI, SEM_FN_NAME (or1k32bf,l_rori) }, 3638 { OR1K32BF_INSN_L_AND, SEM_FN_NAME (or1k32bf,l_and) }, 3639 { OR1K32BF_INSN_L_OR, SEM_FN_NAME (or1k32bf,l_or) }, 3640 { OR1K32BF_INSN_L_XOR, SEM_FN_NAME (or1k32bf,l_xor) }, 3641 { OR1K32BF_INSN_L_ADD, SEM_FN_NAME (or1k32bf,l_add) }, 3642 { OR1K32BF_INSN_L_SUB, SEM_FN_NAME (or1k32bf,l_sub) }, 3643 { OR1K32BF_INSN_L_ADDC, SEM_FN_NAME (or1k32bf,l_addc) }, 3644 { OR1K32BF_INSN_L_MUL, SEM_FN_NAME (or1k32bf,l_mul) }, 3645 { OR1K32BF_INSN_L_MULD, SEM_FN_NAME (or1k32bf,l_muld) }, 3646 { OR1K32BF_INSN_L_MULU, SEM_FN_NAME (or1k32bf,l_mulu) }, 3647 { OR1K32BF_INSN_L_MULDU, SEM_FN_NAME (or1k32bf,l_muldu) }, 3648 { OR1K32BF_INSN_L_DIV, SEM_FN_NAME (or1k32bf,l_div) }, 3649 { OR1K32BF_INSN_L_DIVU, SEM_FN_NAME (or1k32bf,l_divu) }, 3650 { OR1K32BF_INSN_L_FF1, SEM_FN_NAME (or1k32bf,l_ff1) }, 3651 { OR1K32BF_INSN_L_FL1, SEM_FN_NAME (or1k32bf,l_fl1) }, 3652 { OR1K32BF_INSN_L_ANDI, SEM_FN_NAME (or1k32bf,l_andi) }, 3653 { OR1K32BF_INSN_L_ORI, SEM_FN_NAME (or1k32bf,l_ori) }, 3654 { OR1K32BF_INSN_L_XORI, SEM_FN_NAME (or1k32bf,l_xori) }, 3655 { OR1K32BF_INSN_L_ADDI, SEM_FN_NAME (or1k32bf,l_addi) }, 3656 { OR1K32BF_INSN_L_ADDIC, SEM_FN_NAME (or1k32bf,l_addic) }, 3657 { OR1K32BF_INSN_L_MULI, SEM_FN_NAME (or1k32bf,l_muli) }, 3658 { OR1K32BF_INSN_L_EXTHS, SEM_FN_NAME (or1k32bf,l_exths) }, 3659 { OR1K32BF_INSN_L_EXTBS, SEM_FN_NAME (or1k32bf,l_extbs) }, 3660 { OR1K32BF_INSN_L_EXTHZ, SEM_FN_NAME (or1k32bf,l_exthz) }, 3661 { OR1K32BF_INSN_L_EXTBZ, SEM_FN_NAME (or1k32bf,l_extbz) }, 3662 { OR1K32BF_INSN_L_EXTWS, SEM_FN_NAME (or1k32bf,l_extws) }, 3663 { OR1K32BF_INSN_L_EXTWZ, SEM_FN_NAME (or1k32bf,l_extwz) }, 3664 { OR1K32BF_INSN_L_CMOV, SEM_FN_NAME (or1k32bf,l_cmov) }, 3665 { OR1K32BF_INSN_L_SFGTS, SEM_FN_NAME (or1k32bf,l_sfgts) }, 3666 { OR1K32BF_INSN_L_SFGTSI, SEM_FN_NAME (or1k32bf,l_sfgtsi) }, 3667 { OR1K32BF_INSN_L_SFGTU, SEM_FN_NAME (or1k32bf,l_sfgtu) }, 3668 { OR1K32BF_INSN_L_SFGTUI, SEM_FN_NAME (or1k32bf,l_sfgtui) }, 3669 { OR1K32BF_INSN_L_SFGES, SEM_FN_NAME (or1k32bf,l_sfges) }, 3670 { OR1K32BF_INSN_L_SFGESI, SEM_FN_NAME (or1k32bf,l_sfgesi) }, 3671 { OR1K32BF_INSN_L_SFGEU, SEM_FN_NAME (or1k32bf,l_sfgeu) }, 3672 { OR1K32BF_INSN_L_SFGEUI, SEM_FN_NAME (or1k32bf,l_sfgeui) }, 3673 { OR1K32BF_INSN_L_SFLTS, SEM_FN_NAME (or1k32bf,l_sflts) }, 3674 { OR1K32BF_INSN_L_SFLTSI, SEM_FN_NAME (or1k32bf,l_sfltsi) }, 3675 { OR1K32BF_INSN_L_SFLTU, SEM_FN_NAME (or1k32bf,l_sfltu) }, 3676 { OR1K32BF_INSN_L_SFLTUI, SEM_FN_NAME (or1k32bf,l_sfltui) }, 3677 { OR1K32BF_INSN_L_SFLES, SEM_FN_NAME (or1k32bf,l_sfles) }, 3678 { OR1K32BF_INSN_L_SFLESI, SEM_FN_NAME (or1k32bf,l_sflesi) }, 3679 { OR1K32BF_INSN_L_SFLEU, SEM_FN_NAME (or1k32bf,l_sfleu) }, 3680 { OR1K32BF_INSN_L_SFLEUI, SEM_FN_NAME (or1k32bf,l_sfleui) }, 3681 { OR1K32BF_INSN_L_SFEQ, SEM_FN_NAME (or1k32bf,l_sfeq) }, 3682 { OR1K32BF_INSN_L_SFEQI, SEM_FN_NAME (or1k32bf,l_sfeqi) }, 3683 { OR1K32BF_INSN_L_SFNE, SEM_FN_NAME (or1k32bf,l_sfne) }, 3684 { OR1K32BF_INSN_L_SFNEI, SEM_FN_NAME (or1k32bf,l_sfnei) }, 3685 { OR1K32BF_INSN_L_MAC, SEM_FN_NAME (or1k32bf,l_mac) }, 3686 { OR1K32BF_INSN_L_MACI, SEM_FN_NAME (or1k32bf,l_maci) }, 3687 { OR1K32BF_INSN_L_MACU, SEM_FN_NAME (or1k32bf,l_macu) }, 3688 { OR1K32BF_INSN_L_MSB, SEM_FN_NAME (or1k32bf,l_msb) }, 3689 { OR1K32BF_INSN_L_MSBU, SEM_FN_NAME (or1k32bf,l_msbu) }, 3690 { OR1K32BF_INSN_L_CUST1, SEM_FN_NAME (or1k32bf,l_cust1) }, 3691 { OR1K32BF_INSN_L_CUST2, SEM_FN_NAME (or1k32bf,l_cust2) }, 3692 { OR1K32BF_INSN_L_CUST3, SEM_FN_NAME (or1k32bf,l_cust3) }, 3693 { OR1K32BF_INSN_L_CUST4, SEM_FN_NAME (or1k32bf,l_cust4) }, 3694 { OR1K32BF_INSN_L_CUST5, SEM_FN_NAME (or1k32bf,l_cust5) }, 3695 { OR1K32BF_INSN_L_CUST6, SEM_FN_NAME (or1k32bf,l_cust6) }, 3696 { OR1K32BF_INSN_L_CUST7, SEM_FN_NAME (or1k32bf,l_cust7) }, 3697 { OR1K32BF_INSN_L_CUST8, SEM_FN_NAME (or1k32bf,l_cust8) }, 3698 { OR1K32BF_INSN_LF_ADD_S, SEM_FN_NAME (or1k32bf,lf_add_s) }, 3699 { OR1K32BF_INSN_LF_ADD_D32, SEM_FN_NAME (or1k32bf,lf_add_d32) }, 3700 { OR1K32BF_INSN_LF_SUB_S, SEM_FN_NAME (or1k32bf,lf_sub_s) }, 3701 { OR1K32BF_INSN_LF_SUB_D32, SEM_FN_NAME (or1k32bf,lf_sub_d32) }, 3702 { OR1K32BF_INSN_LF_MUL_S, SEM_FN_NAME (or1k32bf,lf_mul_s) }, 3703 { OR1K32BF_INSN_LF_MUL_D32, SEM_FN_NAME (or1k32bf,lf_mul_d32) }, 3704 { OR1K32BF_INSN_LF_DIV_S, SEM_FN_NAME (or1k32bf,lf_div_s) }, 3705 { OR1K32BF_INSN_LF_DIV_D32, SEM_FN_NAME (or1k32bf,lf_div_d32) }, 3706 { OR1K32BF_INSN_LF_REM_S, SEM_FN_NAME (or1k32bf,lf_rem_s) }, 3707 { OR1K32BF_INSN_LF_REM_D32, SEM_FN_NAME (or1k32bf,lf_rem_d32) }, 3708 { OR1K32BF_INSN_LF_ITOF_S, SEM_FN_NAME (or1k32bf,lf_itof_s) }, 3709 { OR1K32BF_INSN_LF_ITOF_D32, SEM_FN_NAME (or1k32bf,lf_itof_d32) }, 3710 { OR1K32BF_INSN_LF_FTOI_S, SEM_FN_NAME (or1k32bf,lf_ftoi_s) }, 3711 { OR1K32BF_INSN_LF_FTOI_D32, SEM_FN_NAME (or1k32bf,lf_ftoi_d32) }, 3712 { OR1K32BF_INSN_LF_SFEQ_S, SEM_FN_NAME (or1k32bf,lf_sfeq_s) }, 3713 { OR1K32BF_INSN_LF_SFEQ_D32, SEM_FN_NAME (or1k32bf,lf_sfeq_d32) }, 3714 { OR1K32BF_INSN_LF_SFNE_S, SEM_FN_NAME (or1k32bf,lf_sfne_s) }, 3715 { OR1K32BF_INSN_LF_SFNE_D32, SEM_FN_NAME (or1k32bf,lf_sfne_d32) }, 3716 { OR1K32BF_INSN_LF_SFGE_S, SEM_FN_NAME (or1k32bf,lf_sfge_s) }, 3717 { OR1K32BF_INSN_LF_SFGE_D32, SEM_FN_NAME (or1k32bf,lf_sfge_d32) }, 3718 { OR1K32BF_INSN_LF_SFGT_S, SEM_FN_NAME (or1k32bf,lf_sfgt_s) }, 3719 { OR1K32BF_INSN_LF_SFGT_D32, SEM_FN_NAME (or1k32bf,lf_sfgt_d32) }, 3720 { OR1K32BF_INSN_LF_SFLT_S, SEM_FN_NAME (or1k32bf,lf_sflt_s) }, 3721 { OR1K32BF_INSN_LF_SFLT_D32, SEM_FN_NAME (or1k32bf,lf_sflt_d32) }, 3722 { OR1K32BF_INSN_LF_SFLE_S, SEM_FN_NAME (or1k32bf,lf_sfle_s) }, 3723 { OR1K32BF_INSN_LF_SFLE_D32, SEM_FN_NAME (or1k32bf,lf_sfle_d32) }, 3724 { OR1K32BF_INSN_LF_SFUEQ_S, SEM_FN_NAME (or1k32bf,lf_sfueq_s) }, 3725 { OR1K32BF_INSN_LF_SFUEQ_D32, SEM_FN_NAME (or1k32bf,lf_sfueq_d32) }, 3726 { OR1K32BF_INSN_LF_SFUNE_S, SEM_FN_NAME (or1k32bf,lf_sfune_s) }, 3727 { OR1K32BF_INSN_LF_SFUNE_D32, SEM_FN_NAME (or1k32bf,lf_sfune_d32) }, 3728 { OR1K32BF_INSN_LF_SFUGT_S, SEM_FN_NAME (or1k32bf,lf_sfugt_s) }, 3729 { OR1K32BF_INSN_LF_SFUGT_D32, SEM_FN_NAME (or1k32bf,lf_sfugt_d32) }, 3730 { OR1K32BF_INSN_LF_SFUGE_S, SEM_FN_NAME (or1k32bf,lf_sfuge_s) }, 3731 { OR1K32BF_INSN_LF_SFUGE_D32, SEM_FN_NAME (or1k32bf,lf_sfuge_d32) }, 3732 { OR1K32BF_INSN_LF_SFULT_S, SEM_FN_NAME (or1k32bf,lf_sfult_s) }, 3733 { OR1K32BF_INSN_LF_SFULT_D32, SEM_FN_NAME (or1k32bf,lf_sfult_d32) }, 3734 { OR1K32BF_INSN_LF_SFULE_S, SEM_FN_NAME (or1k32bf,lf_sfule_s) }, 3735 { OR1K32BF_INSN_LF_SFULE_D32, SEM_FN_NAME (or1k32bf,lf_sfule_d32) }, 3736 { OR1K32BF_INSN_LF_SFUN_S, SEM_FN_NAME (or1k32bf,lf_sfun_s) }, 3737 { OR1K32BF_INSN_LF_SFUN_D32, SEM_FN_NAME (or1k32bf,lf_sfun_d32) }, 3738 { OR1K32BF_INSN_LF_MADD_S, SEM_FN_NAME (or1k32bf,lf_madd_s) }, 3739 { OR1K32BF_INSN_LF_MADD_D32, SEM_FN_NAME (or1k32bf,lf_madd_d32) }, 3740 { OR1K32BF_INSN_LF_CUST1_S, SEM_FN_NAME (or1k32bf,lf_cust1_s) }, 3741 { OR1K32BF_INSN_LF_CUST1_D32, SEM_FN_NAME (or1k32bf,lf_cust1_d32) }, 3742 { 0, 0 } 3743 }; 3744 3745 /* Add the semantic fns to IDESC_TABLE. */ 3746 3747 void 3748 SEM_FN_NAME (or1k32bf,init_idesc_table) (SIM_CPU *current_cpu) 3749 { 3750 IDESC *idesc_table = CPU_IDESC (current_cpu); 3751 const struct sem_fn_desc *sf; 3752 int mach_num = MACH_NUM (CPU_MACH (current_cpu)); 3753 3754 for (sf = &sem_fns[0]; sf->fn != 0; ++sf) 3755 { 3756 const CGEN_INSN *insn = idesc_table[sf->index].idata; 3757 int valid_p = (CGEN_INSN_VIRTUAL_P (insn) 3758 || CGEN_INSN_MACH_HAS_P (insn, mach_num)); 3759 #if FAST_P 3760 if (valid_p) 3761 idesc_table[sf->index].sem_fast = sf->fn; 3762 else 3763 idesc_table[sf->index].sem_fast = SEM_FN_NAME (or1k32bf,x_invalid); 3764 #else 3765 if (valid_p) 3766 idesc_table[sf->index].sem_full = sf->fn; 3767 else 3768 idesc_table[sf->index].sem_full = SEM_FN_NAME (or1k32bf,x_invalid); 3769 #endif 3770 } 3771 } 3772 3773