1/* Simulator instruction semantics for sh64. 2 3THIS FILE IS MACHINE GENERATED WITH CGEN. 4 5Copyright 1996-2005 Free Software Foundation, Inc. 6 7This file is part of the GNU simulators. 8 9This program is free software; you can redistribute it and/or modify 10it under the terms of the GNU General Public License as published by 11the Free Software Foundation; either version 3 of the License, or 12(at your option) any later version. 13 14This program is distributed in the hope that it will be useful, 15but WITHOUT ANY WARRANTY; without even the implied warranty of 16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17GNU General Public License for more details. 18 19You should have received a copy of the GNU General Public License 20along with this program. If not, see <http://www.gnu.org/licenses/>. 21 22*/ 23 24#define WANT_CPU sh64 25#define WANT_CPU_SH64 26 27#include "sim-main.h" 28#include "cgen-mem.h" 29#include "cgen-ops.h" 30 31#undef GET_ATTR 32#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE) 33#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_##attr) 34#else 35#define GET_ATTR(cpu, num, attr) CGEN_ATTR_VALUE (NULL, abuf->idesc->attrs, CGEN_INSN_/**/attr) 36#endif 37 38/* This is used so that we can compile two copies of the semantic code, 39 one with full feature support and one without that runs fast(er). 40 FAST_P, when desired, is defined on the command line, -DFAST_P=1. */ 41#if FAST_P 42#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_semf_,fn) 43#undef TRACE_RESULT 44#define TRACE_RESULT(cpu, abuf, name, type, val) 45#else 46#define SEM_FN_NAME(cpu,fn) XCONCAT3 (cpu,_sem_,fn) 47#endif 48 49/* x-invalid: --invalid-- */ 50 51static SEM_PC 52SEM_FN_NAME (sh64_media,x_invalid) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 53{ 54#define FLD(f) abuf->fields.fmt_empty.f 55 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 56 int UNUSED written = 0; 57 IADDR UNUSED pc = abuf->addr; 58 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 59 60 { 61 /* Update the recorded pc in the cpu state struct. 62 Only necessary for WITH_SCACHE case, but to avoid the 63 conditional compilation .... */ 64 SET_H_PC (pc); 65 /* Virtual insns have zero size. Overwrite vpc with address of next insn 66 using the default-insn-bitsize spec. When executing insns in parallel 67 we may want to queue the fault and continue execution. */ 68 vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 69 vpc = sim_engine_invalid_insn (current_cpu, pc, vpc); 70 } 71 72 return vpc; 73#undef FLD 74} 75 76/* x-after: --after-- */ 77 78static SEM_PC 79SEM_FN_NAME (sh64_media,x_after) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 80{ 81#define FLD(f) abuf->fields.fmt_empty.f 82 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 83 int UNUSED written = 0; 84 IADDR UNUSED pc = abuf->addr; 85 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 86 87 { 88#if WITH_SCACHE_PBB_SH64_MEDIA 89 sh64_media_pbb_after (current_cpu, sem_arg); 90#endif 91 } 92 93 return vpc; 94#undef FLD 95} 96 97/* x-before: --before-- */ 98 99static SEM_PC 100SEM_FN_NAME (sh64_media,x_before) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 101{ 102#define FLD(f) abuf->fields.fmt_empty.f 103 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 104 int UNUSED written = 0; 105 IADDR UNUSED pc = abuf->addr; 106 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 107 108 { 109#if WITH_SCACHE_PBB_SH64_MEDIA 110 sh64_media_pbb_before (current_cpu, sem_arg); 111#endif 112 } 113 114 return vpc; 115#undef FLD 116} 117 118/* x-cti-chain: --cti-chain-- */ 119 120static SEM_PC 121SEM_FN_NAME (sh64_media,x_cti_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 122{ 123#define FLD(f) abuf->fields.fmt_empty.f 124 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 125 int UNUSED written = 0; 126 IADDR UNUSED pc = abuf->addr; 127 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 128 129 { 130#if WITH_SCACHE_PBB_SH64_MEDIA 131#ifdef DEFINE_SWITCH 132 vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg, 133 pbb_br_type, pbb_br_npc); 134 BREAK (sem); 135#else 136 /* FIXME: Allow provision of explicit ifmt spec in insn spec. */ 137 vpc = sh64_media_pbb_cti_chain (current_cpu, sem_arg, 138 CPU_PBB_BR_TYPE (current_cpu), 139 CPU_PBB_BR_NPC (current_cpu)); 140#endif 141#endif 142 } 143 144 return vpc; 145#undef FLD 146} 147 148/* x-chain: --chain-- */ 149 150static SEM_PC 151SEM_FN_NAME (sh64_media,x_chain) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 152{ 153#define FLD(f) abuf->fields.fmt_empty.f 154 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 155 int UNUSED written = 0; 156 IADDR UNUSED pc = abuf->addr; 157 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 158 159 { 160#if WITH_SCACHE_PBB_SH64_MEDIA 161 vpc = sh64_media_pbb_chain (current_cpu, sem_arg); 162#ifdef DEFINE_SWITCH 163 BREAK (sem); 164#endif 165#endif 166 } 167 168 return vpc; 169#undef FLD 170} 171 172/* x-begin: --begin-- */ 173 174static SEM_PC 175SEM_FN_NAME (sh64_media,x_begin) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 176{ 177#define FLD(f) abuf->fields.fmt_empty.f 178 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 179 int UNUSED written = 0; 180 IADDR UNUSED pc = abuf->addr; 181 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 0); 182 183 { 184#if WITH_SCACHE_PBB_SH64_MEDIA 185#if defined DEFINE_SWITCH || defined FAST_P 186 /* In the switch case FAST_P is a constant, allowing several optimizations 187 in any called inline functions. */ 188 vpc = sh64_media_pbb_begin (current_cpu, FAST_P); 189#else 190#if 0 /* cgen engine can't handle dynamic fast/full switching yet. */ 191 vpc = sh64_media_pbb_begin (current_cpu, STATE_RUN_FAST_P (CPU_STATE (current_cpu))); 192#else 193 vpc = sh64_media_pbb_begin (current_cpu, 0); 194#endif 195#endif 196#endif 197 } 198 199 return vpc; 200#undef FLD 201} 202 203/* add: add $rm, $rn, $rd */ 204 205static SEM_PC 206SEM_FN_NAME (sh64_media,add) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 207{ 208#define FLD(f) abuf->fields.sfmt_add.f 209 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 210 int UNUSED written = 0; 211 IADDR UNUSED pc = abuf->addr; 212 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 213 214 { 215 DI opval = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 216 SET_H_GR (FLD (f_dest), opval); 217 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 218 } 219 220 return vpc; 221#undef FLD 222} 223 224/* addl: add.l $rm, $rn, $rd */ 225 226static SEM_PC 227SEM_FN_NAME (sh64_media,addl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 228{ 229#define FLD(f) abuf->fields.sfmt_add.f 230 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 231 int UNUSED written = 0; 232 IADDR UNUSED pc = abuf->addr; 233 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 234 235 { 236 DI opval = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 237 SET_H_GR (FLD (f_dest), opval); 238 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 239 } 240 241 return vpc; 242#undef FLD 243} 244 245/* addi: addi $rm, $disp10, $rd */ 246 247static SEM_PC 248SEM_FN_NAME (sh64_media,addi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 249{ 250#define FLD(f) abuf->fields.sfmt_addi.f 251 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 252 int UNUSED written = 0; 253 IADDR UNUSED pc = abuf->addr; 254 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 255 256 { 257 DI opval = ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))); 258 SET_H_GR (FLD (f_dest), opval); 259 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 260 } 261 262 return vpc; 263#undef FLD 264} 265 266/* addil: addi.l $rm, $disp10, $rd */ 267 268static SEM_PC 269SEM_FN_NAME (sh64_media,addil) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 270{ 271#define FLD(f) abuf->fields.sfmt_addi.f 272 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 273 int UNUSED written = 0; 274 IADDR UNUSED pc = abuf->addr; 275 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 276 277 { 278 DI opval = EXTSIDI (ADDSI (EXTSISI (FLD (f_disp10)), SUBWORDDISI (GET_H_GR (FLD (f_left)), 1))); 279 SET_H_GR (FLD (f_dest), opval); 280 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 281 } 282 283 return vpc; 284#undef FLD 285} 286 287/* addzl: addz.l $rm, $rn, $rd */ 288 289static SEM_PC 290SEM_FN_NAME (sh64_media,addzl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 291{ 292#define FLD(f) abuf->fields.sfmt_add.f 293 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 294 int UNUSED written = 0; 295 IADDR UNUSED pc = abuf->addr; 296 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 297 298 { 299 DI opval = ZEXTSIDI (ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 300 SET_H_GR (FLD (f_dest), opval); 301 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 302 } 303 304 return vpc; 305#undef FLD 306} 307 308/* alloco: alloco $rm, $disp6x32 */ 309 310static SEM_PC 311SEM_FN_NAME (sh64_media,alloco) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 312{ 313#define FLD(f) abuf->fields.sfmt_xori.f 314 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 315 int UNUSED written = 0; 316 IADDR UNUSED pc = abuf->addr; 317 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 318 319{ 320 { 321 DI opval = GET_H_GR (FLD (f_left)); 322 SET_H_GR (FLD (f_left), opval); 323 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 324 } 325((void) 0); /*nop*/ 326} 327 328 return vpc; 329#undef FLD 330} 331 332/* and: and $rm, $rn, $rd */ 333 334static SEM_PC 335SEM_FN_NAME (sh64_media,and) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 336{ 337#define FLD(f) abuf->fields.sfmt_add.f 338 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 339 int UNUSED written = 0; 340 IADDR UNUSED pc = abuf->addr; 341 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 342 343 { 344 DI opval = ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 345 SET_H_GR (FLD (f_dest), opval); 346 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 347 } 348 349 return vpc; 350#undef FLD 351} 352 353/* andc: andc $rm, $rn, $rd */ 354 355static SEM_PC 356SEM_FN_NAME (sh64_media,andc) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 357{ 358#define FLD(f) abuf->fields.sfmt_add.f 359 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 360 int UNUSED written = 0; 361 IADDR UNUSED pc = abuf->addr; 362 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 363 364 { 365 DI opval = ANDDI (GET_H_GR (FLD (f_left)), INVDI (GET_H_GR (FLD (f_right)))); 366 SET_H_GR (FLD (f_dest), opval); 367 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 368 } 369 370 return vpc; 371#undef FLD 372} 373 374/* andi: andi $rm, $disp10, $rd */ 375 376static SEM_PC 377SEM_FN_NAME (sh64_media,andi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 378{ 379#define FLD(f) abuf->fields.sfmt_addi.f 380 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 381 int UNUSED written = 0; 382 IADDR UNUSED pc = abuf->addr; 383 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 384 385 { 386 DI opval = ANDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))); 387 SET_H_GR (FLD (f_dest), opval); 388 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 389 } 390 391 return vpc; 392#undef FLD 393} 394 395/* beq: beq$likely $rm, $rn, $tra */ 396 397static SEM_PC 398SEM_FN_NAME (sh64_media,beq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 399{ 400#define FLD(f) abuf->fields.sfmt_beq.f 401 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 402 int UNUSED written = 0; 403 IADDR UNUSED pc = abuf->addr; 404 SEM_BRANCH_INIT 405 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 406 407{ 408((void) 0); /*nop*/ 409if (EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 410 { 411 UDI opval = CPU (h_tr[FLD (f_tra)]); 412 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 413 written |= (1 << 3); 414 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 415 } 416} 417} 418 419 abuf->written = written; 420 SEM_BRANCH_FINI (vpc); 421 return vpc; 422#undef FLD 423} 424 425/* beqi: beqi$likely $rm, $imm6, $tra */ 426 427static SEM_PC 428SEM_FN_NAME (sh64_media,beqi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 429{ 430#define FLD(f) abuf->fields.sfmt_beqi.f 431 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 432 int UNUSED written = 0; 433 IADDR UNUSED pc = abuf->addr; 434 SEM_BRANCH_INIT 435 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 436 437{ 438((void) 0); /*nop*/ 439if (EQDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) { 440 { 441 UDI opval = CPU (h_tr[FLD (f_tra)]); 442 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 443 written |= (1 << 3); 444 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 445 } 446} 447} 448 449 abuf->written = written; 450 SEM_BRANCH_FINI (vpc); 451 return vpc; 452#undef FLD 453} 454 455/* bge: bge$likely $rm, $rn, $tra */ 456 457static SEM_PC 458SEM_FN_NAME (sh64_media,bge) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 459{ 460#define FLD(f) abuf->fields.sfmt_beq.f 461 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 462 int UNUSED written = 0; 463 IADDR UNUSED pc = abuf->addr; 464 SEM_BRANCH_INIT 465 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 466 467{ 468((void) 0); /*nop*/ 469if (GEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 470 { 471 UDI opval = CPU (h_tr[FLD (f_tra)]); 472 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 473 written |= (1 << 3); 474 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 475 } 476} 477} 478 479 abuf->written = written; 480 SEM_BRANCH_FINI (vpc); 481 return vpc; 482#undef FLD 483} 484 485/* bgeu: bgeu$likely $rm, $rn, $tra */ 486 487static SEM_PC 488SEM_FN_NAME (sh64_media,bgeu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 489{ 490#define FLD(f) abuf->fields.sfmt_beq.f 491 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 492 int UNUSED written = 0; 493 IADDR UNUSED pc = abuf->addr; 494 SEM_BRANCH_INIT 495 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 496 497{ 498((void) 0); /*nop*/ 499if (GEUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 500 { 501 UDI opval = CPU (h_tr[FLD (f_tra)]); 502 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 503 written |= (1 << 3); 504 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 505 } 506} 507} 508 509 abuf->written = written; 510 SEM_BRANCH_FINI (vpc); 511 return vpc; 512#undef FLD 513} 514 515/* bgt: bgt$likely $rm, $rn, $tra */ 516 517static SEM_PC 518SEM_FN_NAME (sh64_media,bgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 519{ 520#define FLD(f) abuf->fields.sfmt_beq.f 521 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 522 int UNUSED written = 0; 523 IADDR UNUSED pc = abuf->addr; 524 SEM_BRANCH_INIT 525 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 526 527{ 528((void) 0); /*nop*/ 529if (GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 530 { 531 UDI opval = CPU (h_tr[FLD (f_tra)]); 532 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 533 written |= (1 << 3); 534 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 535 } 536} 537} 538 539 abuf->written = written; 540 SEM_BRANCH_FINI (vpc); 541 return vpc; 542#undef FLD 543} 544 545/* bgtu: bgtu$likely $rm, $rn, $tra */ 546 547static SEM_PC 548SEM_FN_NAME (sh64_media,bgtu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 549{ 550#define FLD(f) abuf->fields.sfmt_beq.f 551 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 552 int UNUSED written = 0; 553 IADDR UNUSED pc = abuf->addr; 554 SEM_BRANCH_INIT 555 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 556 557{ 558((void) 0); /*nop*/ 559if (GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 560 { 561 UDI opval = CPU (h_tr[FLD (f_tra)]); 562 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 563 written |= (1 << 3); 564 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 565 } 566} 567} 568 569 abuf->written = written; 570 SEM_BRANCH_FINI (vpc); 571 return vpc; 572#undef FLD 573} 574 575/* blink: blink $trb, $rd */ 576 577static SEM_PC 578SEM_FN_NAME (sh64_media,blink) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 579{ 580#define FLD(f) abuf->fields.sfmt_blink.f 581 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 582 int UNUSED written = 0; 583 IADDR UNUSED pc = abuf->addr; 584 SEM_BRANCH_INIT 585 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 586 587{ 588 { 589 DI opval = ORDI (ADDDI (pc, 4), 1); 590 SET_H_GR (FLD (f_dest), opval); 591 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 592 } 593 { 594 UDI opval = CPU (h_tr[FLD (f_trb)]); 595 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 596 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 597 } 598if (EQSI (FLD (f_dest), 63)) { 599((void) 0); /*nop*/ 600} else { 601((void) 0); /*nop*/ 602} 603} 604 605 SEM_BRANCH_FINI (vpc); 606 return vpc; 607#undef FLD 608} 609 610/* bne: bne$likely $rm, $rn, $tra */ 611 612static SEM_PC 613SEM_FN_NAME (sh64_media,bne) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 614{ 615#define FLD(f) abuf->fields.sfmt_beq.f 616 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 617 int UNUSED written = 0; 618 IADDR UNUSED pc = abuf->addr; 619 SEM_BRANCH_INIT 620 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 621 622{ 623((void) 0); /*nop*/ 624if (NEDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) { 625 { 626 UDI opval = CPU (h_tr[FLD (f_tra)]); 627 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 628 written |= (1 << 3); 629 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 630 } 631} 632} 633 634 abuf->written = written; 635 SEM_BRANCH_FINI (vpc); 636 return vpc; 637#undef FLD 638} 639 640/* bnei: bnei$likely $rm, $imm6, $tra */ 641 642static SEM_PC 643SEM_FN_NAME (sh64_media,bnei) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 644{ 645#define FLD(f) abuf->fields.sfmt_beqi.f 646 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 647 int UNUSED written = 0; 648 IADDR UNUSED pc = abuf->addr; 649 SEM_BRANCH_INIT 650 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 651 652{ 653((void) 0); /*nop*/ 654if (NEDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6)))) { 655 { 656 UDI opval = CPU (h_tr[FLD (f_tra)]); 657 SEM_BRANCH_VIA_ADDR (current_cpu, sem_arg, opval, vpc); 658 written |= (1 << 3); 659 TRACE_RESULT (current_cpu, abuf, "pc", 'D', opval); 660 } 661} 662} 663 664 abuf->written = written; 665 SEM_BRANCH_FINI (vpc); 666 return vpc; 667#undef FLD 668} 669 670/* brk: brk */ 671 672static SEM_PC 673SEM_FN_NAME (sh64_media,brk) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 674{ 675#define FLD(f) abuf->fields.fmt_empty.f 676 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 677 int UNUSED written = 0; 678 IADDR UNUSED pc = abuf->addr; 679 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 680 681sh64_break (current_cpu, pc); 682 683 return vpc; 684#undef FLD 685} 686 687/* byterev: byterev $rm, $rd */ 688 689static SEM_PC 690SEM_FN_NAME (sh64_media,byterev) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 691{ 692#define FLD(f) abuf->fields.sfmt_xori.f 693 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 694 int UNUSED written = 0; 695 IADDR UNUSED pc = abuf->addr; 696 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 697 698{ 699 DI tmp_source; 700 DI tmp_result; 701 tmp_source = GET_H_GR (FLD (f_left)); 702 tmp_result = 0; 703{ 704 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 705 tmp_source = SRLDI (tmp_source, 8); 706} 707{ 708 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 709 tmp_source = SRLDI (tmp_source, 8); 710} 711{ 712 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 713 tmp_source = SRLDI (tmp_source, 8); 714} 715{ 716 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 717 tmp_source = SRLDI (tmp_source, 8); 718} 719{ 720 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 721 tmp_source = SRLDI (tmp_source, 8); 722} 723{ 724 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 725 tmp_source = SRLDI (tmp_source, 8); 726} 727{ 728 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 729 tmp_source = SRLDI (tmp_source, 8); 730} 731{ 732 tmp_result = ORDI (SLLDI (tmp_result, 8), ANDDI (tmp_source, 255)); 733 tmp_source = SRLDI (tmp_source, 8); 734} 735 { 736 DI opval = tmp_result; 737 SET_H_GR (FLD (f_dest), opval); 738 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 739 } 740} 741 742 return vpc; 743#undef FLD 744} 745 746/* cmpeq: cmpeq $rm, $rn, $rd */ 747 748static SEM_PC 749SEM_FN_NAME (sh64_media,cmpeq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 750{ 751#define FLD(f) abuf->fields.sfmt_add.f 752 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 753 int UNUSED written = 0; 754 IADDR UNUSED pc = abuf->addr; 755 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 756 757 { 758 DI opval = ((EQDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0)); 759 SET_H_GR (FLD (f_dest), opval); 760 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 761 } 762 763 return vpc; 764#undef FLD 765} 766 767/* cmpgt: cmpgt $rm, $rn, $rd */ 768 769static SEM_PC 770SEM_FN_NAME (sh64_media,cmpgt) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 771{ 772#define FLD(f) abuf->fields.sfmt_add.f 773 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 774 int UNUSED written = 0; 775 IADDR UNUSED pc = abuf->addr; 776 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 777 778 { 779 DI opval = ((GTDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0)); 780 SET_H_GR (FLD (f_dest), opval); 781 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 782 } 783 784 return vpc; 785#undef FLD 786} 787 788/* cmpgtu: cmpgtu $rm,$rn, $rd */ 789 790static SEM_PC 791SEM_FN_NAME (sh64_media,cmpgtu) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 792{ 793#define FLD(f) abuf->fields.sfmt_add.f 794 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 795 int UNUSED written = 0; 796 IADDR UNUSED pc = abuf->addr; 797 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 798 799 { 800 DI opval = ((GTUDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))) ? (1) : (0)); 801 SET_H_GR (FLD (f_dest), opval); 802 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 803 } 804 805 return vpc; 806#undef FLD 807} 808 809/* cmveq: cmveq $rm, $rn, $rd */ 810 811static SEM_PC 812SEM_FN_NAME (sh64_media,cmveq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 813{ 814#define FLD(f) abuf->fields.sfmt_add.f 815 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 816 int UNUSED written = 0; 817 IADDR UNUSED pc = abuf->addr; 818 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 819 820if (EQDI (GET_H_GR (FLD (f_left)), 0)) { 821 { 822 DI opval = GET_H_GR (FLD (f_right)); 823 SET_H_GR (FLD (f_dest), opval); 824 written |= (1 << 2); 825 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 826 } 827} 828 829 abuf->written = written; 830 return vpc; 831#undef FLD 832} 833 834/* cmvne: cmvne $rm, $rn, $rd */ 835 836static SEM_PC 837SEM_FN_NAME (sh64_media,cmvne) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 838{ 839#define FLD(f) abuf->fields.sfmt_add.f 840 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 841 int UNUSED written = 0; 842 IADDR UNUSED pc = abuf->addr; 843 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 844 845if (NEDI (GET_H_GR (FLD (f_left)), 0)) { 846 { 847 DI opval = GET_H_GR (FLD (f_right)); 848 SET_H_GR (FLD (f_dest), opval); 849 written |= (1 << 2); 850 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 851 } 852} 853 854 abuf->written = written; 855 return vpc; 856#undef FLD 857} 858 859/* fabsd: fabs.d $drgh, $drf */ 860 861static SEM_PC 862SEM_FN_NAME (sh64_media,fabsd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 863{ 864#define FLD(f) abuf->fields.sfmt_fabsd.f 865 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 866 int UNUSED written = 0; 867 IADDR UNUSED pc = abuf->addr; 868 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 869 870 { 871 DF opval = sh64_fabsd (current_cpu, GET_H_DR (FLD (f_left_right))); 872 SET_H_DR (FLD (f_dest), opval); 873 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 874 } 875 876 return vpc; 877#undef FLD 878} 879 880/* fabss: fabs.s $frgh, $frf */ 881 882static SEM_PC 883SEM_FN_NAME (sh64_media,fabss) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 884{ 885#define FLD(f) abuf->fields.sfmt_fabsd.f 886 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 887 int UNUSED written = 0; 888 IADDR UNUSED pc = abuf->addr; 889 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 890 891 { 892 SF opval = sh64_fabss (current_cpu, CPU (h_fr[FLD (f_left_right)])); 893 CPU (h_fr[FLD (f_dest)]) = opval; 894 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 895 } 896 897 return vpc; 898#undef FLD 899} 900 901/* faddd: fadd.d $drg, $drh, $drf */ 902 903static SEM_PC 904SEM_FN_NAME (sh64_media,faddd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 905{ 906#define FLD(f) abuf->fields.sfmt_add.f 907 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 908 int UNUSED written = 0; 909 IADDR UNUSED pc = abuf->addr; 910 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 911 912 { 913 DF opval = sh64_faddd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 914 SET_H_DR (FLD (f_dest), opval); 915 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 916 } 917 918 return vpc; 919#undef FLD 920} 921 922/* fadds: fadd.s $frg, $frh, $frf */ 923 924static SEM_PC 925SEM_FN_NAME (sh64_media,fadds) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 926{ 927#define FLD(f) abuf->fields.sfmt_add.f 928 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 929 int UNUSED written = 0; 930 IADDR UNUSED pc = abuf->addr; 931 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 932 933 { 934 SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 935 CPU (h_fr[FLD (f_dest)]) = opval; 936 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 937 } 938 939 return vpc; 940#undef FLD 941} 942 943/* fcmpeqd: fcmpeq.d $drg, $drh, $rd */ 944 945static SEM_PC 946SEM_FN_NAME (sh64_media,fcmpeqd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 947{ 948#define FLD(f) abuf->fields.sfmt_add.f 949 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 950 int UNUSED written = 0; 951 IADDR UNUSED pc = abuf->addr; 952 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 953 954 { 955 DI opval = ZEXTBIDI (sh64_fcmpeqd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 956 SET_H_GR (FLD (f_dest), opval); 957 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 958 } 959 960 return vpc; 961#undef FLD 962} 963 964/* fcmpeqs: fcmpeq.s $frg, $frh, $rd */ 965 966static SEM_PC 967SEM_FN_NAME (sh64_media,fcmpeqs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 968{ 969#define FLD(f) abuf->fields.sfmt_add.f 970 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 971 int UNUSED written = 0; 972 IADDR UNUSED pc = abuf->addr; 973 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 974 975 { 976 DI opval = ZEXTBIDI (sh64_fcmpeqs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 977 SET_H_GR (FLD (f_dest), opval); 978 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 979 } 980 981 return vpc; 982#undef FLD 983} 984 985/* fcmpged: fcmpge.d $drg, $drh, $rd */ 986 987static SEM_PC 988SEM_FN_NAME (sh64_media,fcmpged) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 989{ 990#define FLD(f) abuf->fields.sfmt_add.f 991 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 992 int UNUSED written = 0; 993 IADDR UNUSED pc = abuf->addr; 994 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 995 996 { 997 DI opval = ZEXTBIDI (sh64_fcmpged (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 998 SET_H_GR (FLD (f_dest), opval); 999 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1000 } 1001 1002 return vpc; 1003#undef FLD 1004} 1005 1006/* fcmpges: fcmpge.s $frg, $frh, $rd */ 1007 1008static SEM_PC 1009SEM_FN_NAME (sh64_media,fcmpges) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1010{ 1011#define FLD(f) abuf->fields.sfmt_add.f 1012 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1013 int UNUSED written = 0; 1014 IADDR UNUSED pc = abuf->addr; 1015 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1016 1017 { 1018 DI opval = ZEXTBIDI (sh64_fcmpges (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1019 SET_H_GR (FLD (f_dest), opval); 1020 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1021 } 1022 1023 return vpc; 1024#undef FLD 1025} 1026 1027/* fcmpgtd: fcmpgt.d $drg, $drh, $rd */ 1028 1029static SEM_PC 1030SEM_FN_NAME (sh64_media,fcmpgtd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1031{ 1032#define FLD(f) abuf->fields.sfmt_add.f 1033 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1034 int UNUSED written = 0; 1035 IADDR UNUSED pc = abuf->addr; 1036 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1037 1038 { 1039 DI opval = ZEXTBIDI (sh64_fcmpgtd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 1040 SET_H_GR (FLD (f_dest), opval); 1041 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1042 } 1043 1044 return vpc; 1045#undef FLD 1046} 1047 1048/* fcmpgts: fcmpgt.s $frg, $frh, $rd */ 1049 1050static SEM_PC 1051SEM_FN_NAME (sh64_media,fcmpgts) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1052{ 1053#define FLD(f) abuf->fields.sfmt_add.f 1054 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1055 int UNUSED written = 0; 1056 IADDR UNUSED pc = abuf->addr; 1057 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1058 1059 { 1060 DI opval = ZEXTBIDI (sh64_fcmpgts (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1061 SET_H_GR (FLD (f_dest), opval); 1062 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1063 } 1064 1065 return vpc; 1066#undef FLD 1067} 1068 1069/* fcmpund: fcmpun.d $drg, $drh, $rd */ 1070 1071static SEM_PC 1072SEM_FN_NAME (sh64_media,fcmpund) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1073{ 1074#define FLD(f) abuf->fields.sfmt_add.f 1075 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1076 int UNUSED written = 0; 1077 IADDR UNUSED pc = abuf->addr; 1078 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1079 1080 { 1081 DI opval = ZEXTBIDI (sh64_fcmpund (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right)))); 1082 SET_H_GR (FLD (f_dest), opval); 1083 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1084 } 1085 1086 return vpc; 1087#undef FLD 1088} 1089 1090/* fcmpuns: fcmpun.s $frg, $frh, $rd */ 1091 1092static SEM_PC 1093SEM_FN_NAME (sh64_media,fcmpuns) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1094{ 1095#define FLD(f) abuf->fields.sfmt_add.f 1096 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1097 int UNUSED written = 0; 1098 IADDR UNUSED pc = abuf->addr; 1099 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1100 1101 { 1102 DI opval = ZEXTBIDI (sh64_fcmpuns (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1103 SET_H_GR (FLD (f_dest), opval); 1104 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1105 } 1106 1107 return vpc; 1108#undef FLD 1109} 1110 1111/* fcnvds: fcnv.ds $drgh, $frf */ 1112 1113static SEM_PC 1114SEM_FN_NAME (sh64_media,fcnvds) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1115{ 1116#define FLD(f) abuf->fields.sfmt_fabsd.f 1117 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1118 int UNUSED written = 0; 1119 IADDR UNUSED pc = abuf->addr; 1120 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1121 1122 { 1123 SF opval = sh64_fcnvds (current_cpu, GET_H_DR (FLD (f_left_right))); 1124 CPU (h_fr[FLD (f_dest)]) = opval; 1125 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1126 } 1127 1128 return vpc; 1129#undef FLD 1130} 1131 1132/* fcnvsd: fcnv.sd $frgh, $drf */ 1133 1134static SEM_PC 1135SEM_FN_NAME (sh64_media,fcnvsd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1136{ 1137#define FLD(f) abuf->fields.sfmt_fabsd.f 1138 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1139 int UNUSED written = 0; 1140 IADDR UNUSED pc = abuf->addr; 1141 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1142 1143 { 1144 DF opval = sh64_fcnvsd (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1145 SET_H_DR (FLD (f_dest), opval); 1146 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1147 } 1148 1149 return vpc; 1150#undef FLD 1151} 1152 1153/* fdivd: fdiv.d $drg, $drh, $drf */ 1154 1155static SEM_PC 1156SEM_FN_NAME (sh64_media,fdivd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1157{ 1158#define FLD(f) abuf->fields.sfmt_add.f 1159 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1160 int UNUSED written = 0; 1161 IADDR UNUSED pc = abuf->addr; 1162 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1163 1164 { 1165 DF opval = sh64_fdivd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 1166 SET_H_DR (FLD (f_dest), opval); 1167 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1168 } 1169 1170 return vpc; 1171#undef FLD 1172} 1173 1174/* fdivs: fdiv.s $frg, $frh, $frf */ 1175 1176static SEM_PC 1177SEM_FN_NAME (sh64_media,fdivs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1178{ 1179#define FLD(f) abuf->fields.sfmt_add.f 1180 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1181 int UNUSED written = 0; 1182 IADDR UNUSED pc = abuf->addr; 1183 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1184 1185 { 1186 SF opval = sh64_fdivs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 1187 CPU (h_fr[FLD (f_dest)]) = opval; 1188 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1189 } 1190 1191 return vpc; 1192#undef FLD 1193} 1194 1195/* fgetscr: fgetscr $frf */ 1196 1197static SEM_PC 1198SEM_FN_NAME (sh64_media,fgetscr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1199{ 1200#define FLD(f) abuf->fields.sfmt_shori.f 1201 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1202 int UNUSED written = 0; 1203 IADDR UNUSED pc = abuf->addr; 1204 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1205 1206 { 1207 SF opval = SUBWORDSISF (CPU (h_fpscr)); 1208 CPU (h_fr[FLD (f_dest)]) = opval; 1209 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1210 } 1211 1212 return vpc; 1213#undef FLD 1214} 1215 1216/* fiprs: fipr.s $fvg, $fvh, $frf */ 1217 1218static SEM_PC 1219SEM_FN_NAME (sh64_media,fiprs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1220{ 1221#define FLD(f) abuf->fields.sfmt_add.f 1222 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1223 int UNUSED written = 0; 1224 IADDR UNUSED pc = abuf->addr; 1225 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1226 1227{ 1228 { 1229 SF opval = GET_H_FV (FLD (f_left)); 1230 SET_H_FV (FLD (f_left), opval); 1231 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 1232 } 1233 { 1234 SF opval = GET_H_FV (FLD (f_right)); 1235 SET_H_FV (FLD (f_right), opval); 1236 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 1237 } 1238 { 1239 SF opval = sh64_fiprs (current_cpu, FLD (f_left), FLD (f_right)); 1240 CPU (h_fr[FLD (f_dest)]) = opval; 1241 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1242 } 1243} 1244 1245 return vpc; 1246#undef FLD 1247} 1248 1249/* fldd: fld.d $rm, $disp10x8, $drf */ 1250 1251static SEM_PC 1252SEM_FN_NAME (sh64_media,fldd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1253{ 1254#define FLD(f) abuf->fields.sfmt_fldd.f 1255 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1256 int UNUSED written = 0; 1257 IADDR UNUSED pc = abuf->addr; 1258 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1259 1260 { 1261 DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8))); 1262 SET_H_DR (FLD (f_dest), opval); 1263 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1264 } 1265 1266 return vpc; 1267#undef FLD 1268} 1269 1270/* fldp: fld.p $rm, $disp10x8, $fpf */ 1271 1272static SEM_PC 1273SEM_FN_NAME (sh64_media,fldp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1274{ 1275#define FLD(f) abuf->fields.sfmt_fldd.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 SF opval = GET_H_FP (FLD (f_dest)); 1284 SET_H_FP (FLD (f_dest), opval); 1285 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1286 } 1287sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest)); 1288} 1289 1290 return vpc; 1291#undef FLD 1292} 1293 1294/* flds: fld.s $rm, $disp10x4, $frf */ 1295 1296static SEM_PC 1297SEM_FN_NAME (sh64_media,flds) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1298{ 1299#define FLD(f) abuf->fields.sfmt_flds.f 1300 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1301 int UNUSED written = 0; 1302 IADDR UNUSED pc = abuf->addr; 1303 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1304 1305 { 1306 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4))); 1307 CPU (h_fr[FLD (f_dest)]) = opval; 1308 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1309 } 1310 1311 return vpc; 1312#undef FLD 1313} 1314 1315/* fldxd: fldx.d $rm, $rn, $drf */ 1316 1317static SEM_PC 1318SEM_FN_NAME (sh64_media,fldxd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1319{ 1320#define FLD(f) abuf->fields.sfmt_add.f 1321 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1322 int UNUSED written = 0; 1323 IADDR UNUSED pc = abuf->addr; 1324 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1325 1326 { 1327 DF opval = GETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))); 1328 SET_H_DR (FLD (f_dest), opval); 1329 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1330 } 1331 1332 return vpc; 1333#undef FLD 1334} 1335 1336/* fldxp: fldx.p $rm, $rn, $fpf */ 1337 1338static SEM_PC 1339SEM_FN_NAME (sh64_media,fldxp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1340{ 1341#define FLD(f) abuf->fields.sfmt_add.f 1342 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1343 int UNUSED written = 0; 1344 IADDR UNUSED pc = abuf->addr; 1345 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1346 1347{ 1348 { 1349 SF opval = GET_H_FP (FLD (f_dest)); 1350 SET_H_FP (FLD (f_dest), opval); 1351 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1352 } 1353sh64_fldp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest)); 1354} 1355 1356 return vpc; 1357#undef FLD 1358} 1359 1360/* fldxs: fldx.s $rm, $rn, $frf */ 1361 1362static SEM_PC 1363SEM_FN_NAME (sh64_media,fldxs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1364{ 1365#define FLD(f) abuf->fields.sfmt_add.f 1366 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1367 int UNUSED written = 0; 1368 IADDR UNUSED pc = abuf->addr; 1369 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1370 1371 { 1372 SF opval = GETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))); 1373 CPU (h_fr[FLD (f_dest)]) = opval; 1374 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1375 } 1376 1377 return vpc; 1378#undef FLD 1379} 1380 1381/* floatld: float.ld $frgh, $drf */ 1382 1383static SEM_PC 1384SEM_FN_NAME (sh64_media,floatld) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1385{ 1386#define FLD(f) abuf->fields.sfmt_fabsd.f 1387 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1388 int UNUSED written = 0; 1389 IADDR UNUSED pc = abuf->addr; 1390 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1391 1392 { 1393 DF opval = sh64_floatld (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1394 SET_H_DR (FLD (f_dest), opval); 1395 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1396 } 1397 1398 return vpc; 1399#undef FLD 1400} 1401 1402/* floatls: float.ls $frgh, $frf */ 1403 1404static SEM_PC 1405SEM_FN_NAME (sh64_media,floatls) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1406{ 1407#define FLD(f) abuf->fields.sfmt_fabsd.f 1408 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1409 int UNUSED written = 0; 1410 IADDR UNUSED pc = abuf->addr; 1411 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1412 1413 { 1414 SF opval = sh64_floatls (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1415 CPU (h_fr[FLD (f_dest)]) = opval; 1416 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1417 } 1418 1419 return vpc; 1420#undef FLD 1421} 1422 1423/* floatqd: float.qd $drgh, $drf */ 1424 1425static SEM_PC 1426SEM_FN_NAME (sh64_media,floatqd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1427{ 1428#define FLD(f) abuf->fields.sfmt_fabsd.f 1429 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1430 int UNUSED written = 0; 1431 IADDR UNUSED pc = abuf->addr; 1432 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1433 1434 { 1435 DF opval = sh64_floatqd (current_cpu, GET_H_DR (FLD (f_left_right))); 1436 SET_H_DR (FLD (f_dest), opval); 1437 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1438 } 1439 1440 return vpc; 1441#undef FLD 1442} 1443 1444/* floatqs: float.qs $drgh, $frf */ 1445 1446static SEM_PC 1447SEM_FN_NAME (sh64_media,floatqs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1448{ 1449#define FLD(f) abuf->fields.sfmt_fabsd.f 1450 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1451 int UNUSED written = 0; 1452 IADDR UNUSED pc = abuf->addr; 1453 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1454 1455 { 1456 SF opval = sh64_floatqs (current_cpu, GET_H_DR (FLD (f_left_right))); 1457 CPU (h_fr[FLD (f_dest)]) = opval; 1458 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1459 } 1460 1461 return vpc; 1462#undef FLD 1463} 1464 1465/* fmacs: fmac.s $frg, $frh, $frf */ 1466 1467static SEM_PC 1468SEM_FN_NAME (sh64_media,fmacs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1469{ 1470#define FLD(f) abuf->fields.sfmt_add.f 1471 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1472 int UNUSED written = 0; 1473 IADDR UNUSED pc = abuf->addr; 1474 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1475 1476 { 1477 SF opval = sh64_fadds (current_cpu, CPU (h_fr[FLD (f_dest)]), sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)]))); 1478 CPU (h_fr[FLD (f_dest)]) = opval; 1479 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1480 } 1481 1482 return vpc; 1483#undef FLD 1484} 1485 1486/* fmovd: fmov.d $drgh, $drf */ 1487 1488static SEM_PC 1489SEM_FN_NAME (sh64_media,fmovd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1490{ 1491#define FLD(f) abuf->fields.sfmt_fabsd.f 1492 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1493 int UNUSED written = 0; 1494 IADDR UNUSED pc = abuf->addr; 1495 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1496 1497 { 1498 DF opval = GET_H_DR (FLD (f_left_right)); 1499 SET_H_DR (FLD (f_dest), opval); 1500 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1501 } 1502 1503 return vpc; 1504#undef FLD 1505} 1506 1507/* fmovdq: fmov.dq $drgh, $rd */ 1508 1509static SEM_PC 1510SEM_FN_NAME (sh64_media,fmovdq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1511{ 1512#define FLD(f) abuf->fields.sfmt_fabsd.f 1513 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1514 int UNUSED written = 0; 1515 IADDR UNUSED pc = abuf->addr; 1516 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1517 1518 { 1519 DI opval = SUBWORDDFDI (GET_H_DR (FLD (f_left_right))); 1520 SET_H_GR (FLD (f_dest), opval); 1521 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1522 } 1523 1524 return vpc; 1525#undef FLD 1526} 1527 1528/* fmovls: fmov.ls $rm, $frf */ 1529 1530static SEM_PC 1531SEM_FN_NAME (sh64_media,fmovls) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1532{ 1533#define FLD(f) abuf->fields.sfmt_xori.f 1534 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1535 int UNUSED written = 0; 1536 IADDR UNUSED pc = abuf->addr; 1537 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1538 1539 { 1540 SF opval = SUBWORDSISF (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)); 1541 CPU (h_fr[FLD (f_dest)]) = opval; 1542 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1543 } 1544 1545 return vpc; 1546#undef FLD 1547} 1548 1549/* fmovqd: fmov.qd $rm, $drf */ 1550 1551static SEM_PC 1552SEM_FN_NAME (sh64_media,fmovqd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1553{ 1554#define FLD(f) abuf->fields.sfmt_xori.f 1555 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1556 int UNUSED written = 0; 1557 IADDR UNUSED pc = abuf->addr; 1558 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1559 1560 { 1561 DF opval = SUBWORDDIDF (GET_H_GR (FLD (f_left))); 1562 SET_H_DR (FLD (f_dest), opval); 1563 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1564 } 1565 1566 return vpc; 1567#undef FLD 1568} 1569 1570/* fmovs: fmov.s $frgh, $frf */ 1571 1572static SEM_PC 1573SEM_FN_NAME (sh64_media,fmovs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1574{ 1575#define FLD(f) abuf->fields.sfmt_fabsd.f 1576 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1577 int UNUSED written = 0; 1578 IADDR UNUSED pc = abuf->addr; 1579 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1580 1581 { 1582 SF opval = CPU (h_fr[FLD (f_left_right)]); 1583 CPU (h_fr[FLD (f_dest)]) = opval; 1584 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1585 } 1586 1587 return vpc; 1588#undef FLD 1589} 1590 1591/* fmovsl: fmov.sl $frgh, $rd */ 1592 1593static SEM_PC 1594SEM_FN_NAME (sh64_media,fmovsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1595{ 1596#define FLD(f) abuf->fields.sfmt_fabsd.f 1597 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1598 int UNUSED written = 0; 1599 IADDR UNUSED pc = abuf->addr; 1600 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1601 1602 { 1603 DI opval = EXTSIDI (SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)]))); 1604 SET_H_GR (FLD (f_dest), opval); 1605 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 1606 } 1607 1608 return vpc; 1609#undef FLD 1610} 1611 1612/* fmuld: fmul.d $drg, $drh, $drf */ 1613 1614static SEM_PC 1615SEM_FN_NAME (sh64_media,fmuld) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1616{ 1617#define FLD(f) abuf->fields.sfmt_add.f 1618 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1619 int UNUSED written = 0; 1620 IADDR UNUSED pc = abuf->addr; 1621 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1622 1623 { 1624 DF opval = sh64_fmuld (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 1625 SET_H_DR (FLD (f_dest), opval); 1626 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1627 } 1628 1629 return vpc; 1630#undef FLD 1631} 1632 1633/* fmuls: fmul.s $frg, $frh, $frf */ 1634 1635static SEM_PC 1636SEM_FN_NAME (sh64_media,fmuls) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1637{ 1638#define FLD(f) abuf->fields.sfmt_add.f 1639 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1640 int UNUSED written = 0; 1641 IADDR UNUSED pc = abuf->addr; 1642 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1643 1644 { 1645 SF opval = sh64_fmuls (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 1646 CPU (h_fr[FLD (f_dest)]) = opval; 1647 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1648 } 1649 1650 return vpc; 1651#undef FLD 1652} 1653 1654/* fnegd: fneg.d $drgh, $drf */ 1655 1656static SEM_PC 1657SEM_FN_NAME (sh64_media,fnegd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1658{ 1659#define FLD(f) abuf->fields.sfmt_fabsd.f 1660 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1661 int UNUSED written = 0; 1662 IADDR UNUSED pc = abuf->addr; 1663 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1664 1665 { 1666 DF opval = sh64_fnegd (current_cpu, GET_H_DR (FLD (f_left_right))); 1667 SET_H_DR (FLD (f_dest), opval); 1668 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1669 } 1670 1671 return vpc; 1672#undef FLD 1673} 1674 1675/* fnegs: fneg.s $frgh, $frf */ 1676 1677static SEM_PC 1678SEM_FN_NAME (sh64_media,fnegs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1679{ 1680#define FLD(f) abuf->fields.sfmt_fabsd.f 1681 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1682 int UNUSED written = 0; 1683 IADDR UNUSED pc = abuf->addr; 1684 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1685 1686 { 1687 SF opval = sh64_fnegs (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1688 CPU (h_fr[FLD (f_dest)]) = opval; 1689 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1690 } 1691 1692 return vpc; 1693#undef FLD 1694} 1695 1696/* fputscr: fputscr $frgh */ 1697 1698static SEM_PC 1699SEM_FN_NAME (sh64_media,fputscr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1700{ 1701#define FLD(f) abuf->fields.sfmt_fabsd.f 1702 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1703 int UNUSED written = 0; 1704 IADDR UNUSED pc = abuf->addr; 1705 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1706 1707 { 1708 SI opval = SUBWORDSFSI (CPU (h_fr[FLD (f_left_right)])); 1709 CPU (h_fpscr) = opval; 1710 TRACE_RESULT (current_cpu, abuf, "fpscr", 'x', opval); 1711 } 1712 1713 return vpc; 1714#undef FLD 1715} 1716 1717/* fsqrtd: fsqrt.d $drgh, $drf */ 1718 1719static SEM_PC 1720SEM_FN_NAME (sh64_media,fsqrtd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1721{ 1722#define FLD(f) abuf->fields.sfmt_fabsd.f 1723 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1724 int UNUSED written = 0; 1725 IADDR UNUSED pc = abuf->addr; 1726 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1727 1728 { 1729 DF opval = sh64_fsqrtd (current_cpu, GET_H_DR (FLD (f_left_right))); 1730 SET_H_DR (FLD (f_dest), opval); 1731 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1732 } 1733 1734 return vpc; 1735#undef FLD 1736} 1737 1738/* fsqrts: fsqrt.s $frgh, $frf */ 1739 1740static SEM_PC 1741SEM_FN_NAME (sh64_media,fsqrts) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1742{ 1743#define FLD(f) abuf->fields.sfmt_fabsd.f 1744 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1745 int UNUSED written = 0; 1746 IADDR UNUSED pc = abuf->addr; 1747 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1748 1749 { 1750 SF opval = sh64_fsqrts (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1751 CPU (h_fr[FLD (f_dest)]) = opval; 1752 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1753 } 1754 1755 return vpc; 1756#undef FLD 1757} 1758 1759/* fstd: fst.d $rm, $disp10x8, $drf */ 1760 1761static SEM_PC 1762SEM_FN_NAME (sh64_media,fstd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1763{ 1764#define FLD(f) abuf->fields.sfmt_fldd.f 1765 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1766 int UNUSED written = 0; 1767 IADDR UNUSED pc = abuf->addr; 1768 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1769 1770 { 1771 DF opval = GET_H_DR (FLD (f_dest)); 1772 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x8)), opval); 1773 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1774 } 1775 1776 return vpc; 1777#undef FLD 1778} 1779 1780/* fstp: fst.p $rm, $disp10x8, $fpf */ 1781 1782static SEM_PC 1783SEM_FN_NAME (sh64_media,fstp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1784{ 1785#define FLD(f) abuf->fields.sfmt_fldd.f 1786 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1787 int UNUSED written = 0; 1788 IADDR UNUSED pc = abuf->addr; 1789 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1790 1791{ 1792 { 1793 SF opval = GET_H_FP (FLD (f_dest)); 1794 SET_H_FP (FLD (f_dest), opval); 1795 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1796 } 1797sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), FLD (f_disp10x8), FLD (f_dest)); 1798} 1799 1800 return vpc; 1801#undef FLD 1802} 1803 1804/* fsts: fst.s $rm, $disp10x4, $frf */ 1805 1806static SEM_PC 1807SEM_FN_NAME (sh64_media,fsts) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1808{ 1809#define FLD(f) abuf->fields.sfmt_flds.f 1810 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1811 int UNUSED written = 0; 1812 IADDR UNUSED pc = abuf->addr; 1813 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1814 1815 { 1816 SF opval = CPU (h_fr[FLD (f_dest)]); 1817 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp10x4)), opval); 1818 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1819 } 1820 1821 return vpc; 1822#undef FLD 1823} 1824 1825/* fstxd: fstx.d $rm, $rn, $drf */ 1826 1827static SEM_PC 1828SEM_FN_NAME (sh64_media,fstxd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1829{ 1830#define FLD(f) abuf->fields.sfmt_add.f 1831 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1832 int UNUSED written = 0; 1833 IADDR UNUSED pc = abuf->addr; 1834 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1835 1836 { 1837 DF opval = GET_H_DR (FLD (f_dest)); 1838 SETMEMDF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 1839 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1840 } 1841 1842 return vpc; 1843#undef FLD 1844} 1845 1846/* fstxp: fstx.p $rm, $rn, $fpf */ 1847 1848static SEM_PC 1849SEM_FN_NAME (sh64_media,fstxp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1850{ 1851#define FLD(f) abuf->fields.sfmt_add.f 1852 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1853 int UNUSED written = 0; 1854 IADDR UNUSED pc = abuf->addr; 1855 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1856 1857{ 1858 { 1859 SF opval = GET_H_FP (FLD (f_dest)); 1860 SET_H_FP (FLD (f_dest), opval); 1861 TRACE_RESULT (current_cpu, abuf, "fp", 'f', opval); 1862 } 1863sh64_fstp (current_cpu, pc, GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)), FLD (f_dest)); 1864} 1865 1866 return vpc; 1867#undef FLD 1868} 1869 1870/* fstxs: fstx.s $rm, $rn, $frf */ 1871 1872static SEM_PC 1873SEM_FN_NAME (sh64_media,fstxs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1874{ 1875#define FLD(f) abuf->fields.sfmt_add.f 1876 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1877 int UNUSED written = 0; 1878 IADDR UNUSED pc = abuf->addr; 1879 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1880 1881 { 1882 SF opval = CPU (h_fr[FLD (f_dest)]); 1883 SETMEMSF (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 1884 TRACE_RESULT (current_cpu, abuf, "memory", 'f', opval); 1885 } 1886 1887 return vpc; 1888#undef FLD 1889} 1890 1891/* fsubd: fsub.d $drg, $drh, $drf */ 1892 1893static SEM_PC 1894SEM_FN_NAME (sh64_media,fsubd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1895{ 1896#define FLD(f) abuf->fields.sfmt_add.f 1897 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1898 int UNUSED written = 0; 1899 IADDR UNUSED pc = abuf->addr; 1900 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1901 1902 { 1903 DF opval = sh64_fsubd (current_cpu, GET_H_DR (FLD (f_left)), GET_H_DR (FLD (f_right))); 1904 SET_H_DR (FLD (f_dest), opval); 1905 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1906 } 1907 1908 return vpc; 1909#undef FLD 1910} 1911 1912/* fsubs: fsub.s $frg, $frh, $frf */ 1913 1914static SEM_PC 1915SEM_FN_NAME (sh64_media,fsubs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1916{ 1917#define FLD(f) abuf->fields.sfmt_add.f 1918 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1919 int UNUSED written = 0; 1920 IADDR UNUSED pc = abuf->addr; 1921 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1922 1923 { 1924 SF opval = sh64_fsubs (current_cpu, CPU (h_fr[FLD (f_left)]), CPU (h_fr[FLD (f_right)])); 1925 CPU (h_fr[FLD (f_dest)]) = opval; 1926 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1927 } 1928 1929 return vpc; 1930#undef FLD 1931} 1932 1933/* ftrcdl: ftrc.dl $drgh, $frf */ 1934 1935static SEM_PC 1936SEM_FN_NAME (sh64_media,ftrcdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1937{ 1938#define FLD(f) abuf->fields.sfmt_fabsd.f 1939 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1940 int UNUSED written = 0; 1941 IADDR UNUSED pc = abuf->addr; 1942 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1943 1944 { 1945 SF opval = sh64_ftrcdl (current_cpu, GET_H_DR (FLD (f_left_right))); 1946 CPU (h_fr[FLD (f_dest)]) = opval; 1947 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1948 } 1949 1950 return vpc; 1951#undef FLD 1952} 1953 1954/* ftrcsl: ftrc.sl $frgh, $frf */ 1955 1956static SEM_PC 1957SEM_FN_NAME (sh64_media,ftrcsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1958{ 1959#define FLD(f) abuf->fields.sfmt_fabsd.f 1960 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1961 int UNUSED written = 0; 1962 IADDR UNUSED pc = abuf->addr; 1963 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1964 1965 { 1966 SF opval = sh64_ftrcsl (current_cpu, CPU (h_fr[FLD (f_left_right)])); 1967 CPU (h_fr[FLD (f_dest)]) = opval; 1968 TRACE_RESULT (current_cpu, abuf, "fr", 'f', opval); 1969 } 1970 1971 return vpc; 1972#undef FLD 1973} 1974 1975/* ftrcdq: ftrc.dq $drgh, $drf */ 1976 1977static SEM_PC 1978SEM_FN_NAME (sh64_media,ftrcdq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 1979{ 1980#define FLD(f) abuf->fields.sfmt_fabsd.f 1981 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 1982 int UNUSED written = 0; 1983 IADDR UNUSED pc = abuf->addr; 1984 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 1985 1986 { 1987 DF opval = sh64_ftrcdq (current_cpu, GET_H_DR (FLD (f_left_right))); 1988 SET_H_DR (FLD (f_dest), opval); 1989 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 1990 } 1991 1992 return vpc; 1993#undef FLD 1994} 1995 1996/* ftrcsq: ftrc.sq $frgh, $drf */ 1997 1998static SEM_PC 1999SEM_FN_NAME (sh64_media,ftrcsq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2000{ 2001#define FLD(f) abuf->fields.sfmt_fabsd.f 2002 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2003 int UNUSED written = 0; 2004 IADDR UNUSED pc = abuf->addr; 2005 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2006 2007 { 2008 DF opval = sh64_ftrcsq (current_cpu, CPU (h_fr[FLD (f_left_right)])); 2009 SET_H_DR (FLD (f_dest), opval); 2010 TRACE_RESULT (current_cpu, abuf, "dr", 'f', opval); 2011 } 2012 2013 return vpc; 2014#undef FLD 2015} 2016 2017/* ftrvs: ftrv.s $mtrxg, $fvh, $fvf */ 2018 2019static SEM_PC 2020SEM_FN_NAME (sh64_media,ftrvs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2021{ 2022#define FLD(f) abuf->fields.sfmt_add.f 2023 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2024 int UNUSED written = 0; 2025 IADDR UNUSED pc = abuf->addr; 2026 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2027 2028{ 2029 { 2030 SF opval = GET_H_FMTX (FLD (f_left)); 2031 SET_H_FMTX (FLD (f_left), opval); 2032 TRACE_RESULT (current_cpu, abuf, "fmtx", 'f', opval); 2033 } 2034 { 2035 SF opval = GET_H_FV (FLD (f_right)); 2036 SET_H_FV (FLD (f_right), opval); 2037 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 2038 } 2039 { 2040 SF opval = GET_H_FV (FLD (f_dest)); 2041 SET_H_FV (FLD (f_dest), opval); 2042 TRACE_RESULT (current_cpu, abuf, "fv", 'f', opval); 2043 } 2044sh64_ftrvs (current_cpu, FLD (f_left), FLD (f_right), FLD (f_dest)); 2045} 2046 2047 return vpc; 2048#undef FLD 2049} 2050 2051/* getcfg: getcfg $rm, $disp6, $rd */ 2052 2053static SEM_PC 2054SEM_FN_NAME (sh64_media,getcfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2055{ 2056#define FLD(f) abuf->fields.sfmt_getcfg.f 2057 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2058 int UNUSED written = 0; 2059 IADDR UNUSED pc = abuf->addr; 2060 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2061 2062{ 2063 SI tmp_address; 2064 tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2065((void) 0); /*nop*/ 2066 { 2067 DI opval = GETMEMSI (current_cpu, pc, tmp_address); 2068 SET_H_GR (FLD (f_dest), opval); 2069 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2070 } 2071} 2072 2073 return vpc; 2074#undef FLD 2075} 2076 2077/* getcon: getcon $crk, $rd */ 2078 2079static SEM_PC 2080SEM_FN_NAME (sh64_media,getcon) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2081{ 2082#define FLD(f) abuf->fields.sfmt_xori.f 2083 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2084 int UNUSED written = 0; 2085 IADDR UNUSED pc = abuf->addr; 2086 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2087 2088 { 2089 DI opval = GET_H_CR (FLD (f_left)); 2090 SET_H_GR (FLD (f_dest), opval); 2091 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2092 } 2093 2094 return vpc; 2095#undef FLD 2096} 2097 2098/* gettr: gettr $trb, $rd */ 2099 2100static SEM_PC 2101SEM_FN_NAME (sh64_media,gettr) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2102{ 2103#define FLD(f) abuf->fields.sfmt_blink.f 2104 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2105 int UNUSED written = 0; 2106 IADDR UNUSED pc = abuf->addr; 2107 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2108 2109 { 2110 DI opval = CPU (h_tr[FLD (f_trb)]); 2111 SET_H_GR (FLD (f_dest), opval); 2112 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2113 } 2114 2115 return vpc; 2116#undef FLD 2117} 2118 2119/* icbi: icbi $rm, $disp6x32 */ 2120 2121static SEM_PC 2122SEM_FN_NAME (sh64_media,icbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2123{ 2124#define FLD(f) abuf->fields.sfmt_xori.f 2125 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2126 int UNUSED written = 0; 2127 IADDR UNUSED pc = abuf->addr; 2128 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2129 2130{ 2131 { 2132 DI opval = GET_H_GR (FLD (f_left)); 2133 SET_H_GR (FLD (f_left), opval); 2134 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2135 } 2136((void) 0); /*nop*/ 2137} 2138 2139 return vpc; 2140#undef FLD 2141} 2142 2143/* ldb: ld.b $rm, $disp10, $rd */ 2144 2145static SEM_PC 2146SEM_FN_NAME (sh64_media,ldb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2147{ 2148#define FLD(f) abuf->fields.sfmt_addi.f 2149 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2150 int UNUSED written = 0; 2151 IADDR UNUSED pc = abuf->addr; 2152 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2153 2154 { 2155 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))))); 2156 SET_H_GR (FLD (f_dest), opval); 2157 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2158 } 2159 2160 return vpc; 2161#undef FLD 2162} 2163 2164/* ldl: ld.l $rm, $disp10x4, $rd */ 2165 2166static SEM_PC 2167SEM_FN_NAME (sh64_media,ldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2168{ 2169#define FLD(f) abuf->fields.sfmt_flds.f 2170 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2171 int UNUSED written = 0; 2172 IADDR UNUSED pc = abuf->addr; 2173 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2174 2175 { 2176 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))))); 2177 SET_H_GR (FLD (f_dest), opval); 2178 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2179 } 2180 2181 return vpc; 2182#undef FLD 2183} 2184 2185/* ldq: ld.q $rm, $disp10x8, $rd */ 2186 2187static SEM_PC 2188SEM_FN_NAME (sh64_media,ldq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2189{ 2190#define FLD(f) abuf->fields.sfmt_fldd.f 2191 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2192 int UNUSED written = 0; 2193 IADDR UNUSED pc = abuf->addr; 2194 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2195 2196 { 2197 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8)))); 2198 SET_H_GR (FLD (f_dest), opval); 2199 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2200 } 2201 2202 return vpc; 2203#undef FLD 2204} 2205 2206/* ldub: ld.ub $rm, $disp10, $rd */ 2207 2208static SEM_PC 2209SEM_FN_NAME (sh64_media,ldub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2210{ 2211#define FLD(f) abuf->fields.sfmt_addi.f 2212 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2213 int UNUSED written = 0; 2214 IADDR UNUSED pc = abuf->addr; 2215 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2216 2217 { 2218 DI opval = ZEXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))))); 2219 SET_H_GR (FLD (f_dest), opval); 2220 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2221 } 2222 2223 return vpc; 2224#undef FLD 2225} 2226 2227/* lduw: ld.uw $rm, $disp10x2, $rd */ 2228 2229static SEM_PC 2230SEM_FN_NAME (sh64_media,lduw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2231{ 2232#define FLD(f) abuf->fields.sfmt_lduw.f 2233 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2234 int UNUSED written = 0; 2235 IADDR UNUSED pc = abuf->addr; 2236 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2237 2238 { 2239 DI opval = ZEXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))))); 2240 SET_H_GR (FLD (f_dest), opval); 2241 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2242 } 2243 2244 return vpc; 2245#undef FLD 2246} 2247 2248/* ldw: ld.w $rm, $disp10x2, $rd */ 2249 2250static SEM_PC 2251SEM_FN_NAME (sh64_media,ldw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2252{ 2253#define FLD(f) abuf->fields.sfmt_lduw.f 2254 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2255 int UNUSED written = 0; 2256 IADDR UNUSED pc = abuf->addr; 2257 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2258 2259 { 2260 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))))); 2261 SET_H_GR (FLD (f_dest), opval); 2262 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2263 } 2264 2265 return vpc; 2266#undef FLD 2267} 2268 2269/* ldhil: ldhi.l $rm, $disp6, $rd */ 2270 2271static SEM_PC 2272SEM_FN_NAME (sh64_media,ldhil) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2273{ 2274#define FLD(f) abuf->fields.sfmt_getcfg.f 2275 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2276 int UNUSED written = 0; 2277 IADDR UNUSED pc = abuf->addr; 2278 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2279 2280{ 2281 DI tmp_addr; 2282 QI tmp_bytecount; 2283 SI tmp_val; 2284 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2285 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1); 2286 tmp_val = 0; 2287if (ANDQI (tmp_bytecount, 4)) { 2288 { 2289 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4))); 2290 SET_H_GR (FLD (f_dest), opval); 2291 written |= (1 << 6); 2292 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2293 } 2294} else { 2295if (GET_H_ENDIAN ()) { 2296{ 2297if (ANDQI (tmp_bytecount, 2)) { 2298 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2299} 2300if (ANDQI (tmp_bytecount, 1)) { 2301 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2302} 2303 { 2304 DI opval = EXTSIDI (tmp_val); 2305 SET_H_GR (FLD (f_dest), opval); 2306 written |= (1 << 6); 2307 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2308 } 2309} 2310} else { 2311{ 2312if (ANDQI (tmp_bytecount, 1)) { 2313 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2314} 2315if (ANDQI (tmp_bytecount, 2)) { 2316 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2317} 2318 { 2319 DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount)))); 2320 SET_H_GR (FLD (f_dest), opval); 2321 written |= (1 << 6); 2322 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2323 } 2324} 2325} 2326} 2327} 2328 2329 abuf->written = written; 2330 return vpc; 2331#undef FLD 2332} 2333 2334/* ldhiq: ldhi.q $rm, $disp6, $rd */ 2335 2336static SEM_PC 2337SEM_FN_NAME (sh64_media,ldhiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2338{ 2339#define FLD(f) abuf->fields.sfmt_getcfg.f 2340 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2341 int UNUSED written = 0; 2342 IADDR UNUSED pc = abuf->addr; 2343 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2344 2345{ 2346 DI tmp_addr; 2347 QI tmp_bytecount; 2348 DI tmp_val; 2349 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2350 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1); 2351 tmp_val = 0; 2352if (ANDQI (tmp_bytecount, 8)) { 2353 { 2354 DI opval = GETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8)); 2355 SET_H_GR (FLD (f_dest), opval); 2356 written |= (1 << 7); 2357 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2358 } 2359} else { 2360if (GET_H_ENDIAN ()) { 2361{ 2362if (ANDQI (tmp_bytecount, 4)) { 2363 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8)))); 2364} 2365if (ANDQI (tmp_bytecount, 2)) { 2366 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2367} 2368if (ANDQI (tmp_bytecount, 1)) { 2369 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2370} 2371 { 2372 DI opval = tmp_val; 2373 SET_H_GR (FLD (f_dest), opval); 2374 written |= (1 << 7); 2375 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2376 } 2377} 2378} else { 2379{ 2380if (ANDQI (tmp_bytecount, 1)) { 2381 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2382} 2383if (ANDQI (tmp_bytecount, 2)) { 2384 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4)))); 2385} 2386if (ANDQI (tmp_bytecount, 4)) { 2387 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8)))); 2388} 2389 { 2390 DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount))); 2391 SET_H_GR (FLD (f_dest), opval); 2392 written |= (1 << 7); 2393 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2394 } 2395} 2396} 2397} 2398} 2399 2400 abuf->written = written; 2401 return vpc; 2402#undef FLD 2403} 2404 2405/* ldlol: ldlo.l $rm, $disp6, $rd */ 2406 2407static SEM_PC 2408SEM_FN_NAME (sh64_media,ldlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2409{ 2410#define FLD(f) abuf->fields.sfmt_getcfg.f 2411 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2412 int UNUSED written = 0; 2413 IADDR UNUSED pc = abuf->addr; 2414 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2415 2416{ 2417 DI tmp_addr; 2418 QI tmp_bytecount; 2419 SI tmp_val; 2420 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2421 tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3)); 2422 tmp_val = 0; 2423if (ANDQI (tmp_bytecount, 4)) { 2424 { 2425 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, tmp_addr)); 2426 SET_H_GR (FLD (f_dest), opval); 2427 written |= (1 << 6); 2428 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2429 } 2430} else { 2431if (GET_H_ENDIAN ()) { 2432{ 2433if (ANDQI (tmp_bytecount, 1)) { 2434 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2435} 2436if (ANDQI (tmp_bytecount, 2)) { 2437 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2438} 2439 { 2440 DI opval = EXTSIDI (SLLSI (tmp_val, SUBSI (32, MULSI (8, tmp_bytecount)))); 2441 SET_H_GR (FLD (f_dest), opval); 2442 written |= (1 << 6); 2443 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2444 } 2445} 2446} else { 2447{ 2448if (ANDQI (tmp_bytecount, 2)) { 2449 tmp_val = ADDSI (SLLSI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2450} 2451if (ANDQI (tmp_bytecount, 1)) { 2452 tmp_val = ADDSI (SLLSI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2453} 2454 { 2455 DI opval = EXTSIDI (tmp_val); 2456 SET_H_GR (FLD (f_dest), opval); 2457 written |= (1 << 6); 2458 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2459 } 2460} 2461} 2462} 2463} 2464 2465 abuf->written = written; 2466 return vpc; 2467#undef FLD 2468} 2469 2470/* ldloq: ldlo.q $rm, $disp6, $rd */ 2471 2472static SEM_PC 2473SEM_FN_NAME (sh64_media,ldloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2474{ 2475#define FLD(f) abuf->fields.sfmt_getcfg.f 2476 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2477 int UNUSED written = 0; 2478 IADDR UNUSED pc = abuf->addr; 2479 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2480 2481{ 2482 DI tmp_addr; 2483 QI tmp_bytecount; 2484 DI tmp_val; 2485 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 2486 tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7)); 2487 tmp_val = 0; 2488if (ANDQI (tmp_bytecount, 8)) { 2489 { 2490 DI opval = GETMEMDI (current_cpu, pc, tmp_addr); 2491 SET_H_GR (FLD (f_dest), opval); 2492 written |= (1 << 7); 2493 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2494 } 2495} else { 2496if (GET_H_ENDIAN ()) { 2497{ 2498if (ANDQI (tmp_bytecount, 1)) { 2499 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2500} 2501if (ANDQI (tmp_bytecount, 2)) { 2502 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2503} 2504if (ANDQI (tmp_bytecount, 4)) { 2505 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4)))); 2506} 2507 { 2508 DI opval = SLLDI (tmp_val, SUBSI (64, MULSI (8, tmp_bytecount))); 2509 SET_H_GR (FLD (f_dest), opval); 2510 written |= (1 << 7); 2511 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2512 } 2513} 2514} else { 2515{ 2516if (ANDQI (tmp_bytecount, 4)) { 2517 tmp_val = ADDDI (SLLDI (tmp_val, 32), ZEXTSIDI (GETMEMSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4)))); 2518} 2519if (ANDQI (tmp_bytecount, 2)) { 2520 tmp_val = ADDDI (SLLDI (tmp_val, 16), ZEXTHIDI (GETMEMHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2)))); 2521} 2522if (ANDQI (tmp_bytecount, 1)) { 2523 tmp_val = ADDDI (SLLDI (tmp_val, 8), ZEXTQIDI (GETMEMQI (current_cpu, pc, tmp_addr))); 2524} 2525 { 2526 DI opval = tmp_val; 2527 SET_H_GR (FLD (f_dest), opval); 2528 written |= (1 << 7); 2529 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2530 } 2531} 2532} 2533} 2534} 2535 2536 abuf->written = written; 2537 return vpc; 2538#undef FLD 2539} 2540 2541/* ldxb: ldx.b $rm, $rn, $rd */ 2542 2543static SEM_PC 2544SEM_FN_NAME (sh64_media,ldxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2545{ 2546#define FLD(f) abuf->fields.sfmt_add.f 2547 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2548 int UNUSED written = 0; 2549 IADDR UNUSED pc = abuf->addr; 2550 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2551 2552 { 2553 DI opval = EXTQIDI (GETMEMQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2554 SET_H_GR (FLD (f_dest), opval); 2555 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2556 } 2557 2558 return vpc; 2559#undef FLD 2560} 2561 2562/* ldxl: ldx.l $rm, $rn, $rd */ 2563 2564static SEM_PC 2565SEM_FN_NAME (sh64_media,ldxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2566{ 2567#define FLD(f) abuf->fields.sfmt_add.f 2568 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2569 int UNUSED written = 0; 2570 IADDR UNUSED pc = abuf->addr; 2571 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2572 2573 { 2574 DI opval = EXTSIDI (GETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2575 SET_H_GR (FLD (f_dest), opval); 2576 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2577 } 2578 2579 return vpc; 2580#undef FLD 2581} 2582 2583/* ldxq: ldx.q $rm, $rn, $rd */ 2584 2585static SEM_PC 2586SEM_FN_NAME (sh64_media,ldxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2587{ 2588#define FLD(f) abuf->fields.sfmt_add.f 2589 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2590 int UNUSED written = 0; 2591 IADDR UNUSED pc = abuf->addr; 2592 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2593 2594 { 2595 DI opval = GETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right)))); 2596 SET_H_GR (FLD (f_dest), opval); 2597 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2598 } 2599 2600 return vpc; 2601#undef FLD 2602} 2603 2604/* ldxub: ldx.ub $rm, $rn, $rd */ 2605 2606static SEM_PC 2607SEM_FN_NAME (sh64_media,ldxub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2608{ 2609#define FLD(f) abuf->fields.sfmt_add.f 2610 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2611 int UNUSED written = 0; 2612 IADDR UNUSED pc = abuf->addr; 2613 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2614 2615 { 2616 DI opval = ZEXTQIDI (GETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2617 SET_H_GR (FLD (f_dest), opval); 2618 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2619 } 2620 2621 return vpc; 2622#undef FLD 2623} 2624 2625/* ldxuw: ldx.uw $rm, $rn, $rd */ 2626 2627static SEM_PC 2628SEM_FN_NAME (sh64_media,ldxuw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2629{ 2630#define FLD(f) abuf->fields.sfmt_add.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 { 2637 DI opval = ZEXTHIDI (GETMEMUHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2638 SET_H_GR (FLD (f_dest), opval); 2639 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2640 } 2641 2642 return vpc; 2643#undef FLD 2644} 2645 2646/* ldxw: ldx.w $rm, $rn, $rd */ 2647 2648static SEM_PC 2649SEM_FN_NAME (sh64_media,ldxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2650{ 2651#define FLD(f) abuf->fields.sfmt_add.f 2652 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2653 int UNUSED written = 0; 2654 IADDR UNUSED pc = abuf->addr; 2655 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2656 2657 { 2658 DI opval = EXTHIDI (GETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))))); 2659 SET_H_GR (FLD (f_dest), opval); 2660 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2661 } 2662 2663 return vpc; 2664#undef FLD 2665} 2666 2667/* mabsl: mabs.l $rm, $rd */ 2668 2669static SEM_PC 2670SEM_FN_NAME (sh64_media,mabsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2671{ 2672#define FLD(f) abuf->fields.sfmt_xori.f 2673 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2674 int UNUSED written = 0; 2675 IADDR UNUSED pc = abuf->addr; 2676 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2677 2678{ 2679 SI tmp_result1; 2680 SI tmp_result0; 2681 tmp_result0 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)); 2682 tmp_result1 = ABSSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)); 2683 { 2684 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2685 SET_H_GR (FLD (f_dest), opval); 2686 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2687 } 2688} 2689 2690 return vpc; 2691#undef FLD 2692} 2693 2694/* mabsw: mabs.w $rm, $rd */ 2695 2696static SEM_PC 2697SEM_FN_NAME (sh64_media,mabsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2698{ 2699#define FLD(f) abuf->fields.sfmt_xori.f 2700 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2701 int UNUSED written = 0; 2702 IADDR UNUSED pc = abuf->addr; 2703 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2704 2705{ 2706 HI tmp_result3; 2707 HI tmp_result2; 2708 HI tmp_result1; 2709 HI tmp_result0; 2710 tmp_result0 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)); 2711 tmp_result1 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)); 2712 tmp_result2 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)); 2713 tmp_result3 = ABSHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)); 2714 { 2715 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2716 SET_H_GR (FLD (f_dest), opval); 2717 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2718 } 2719} 2720 2721 return vpc; 2722#undef FLD 2723} 2724 2725/* maddl: madd.l $rm, $rn, $rd */ 2726 2727static SEM_PC 2728SEM_FN_NAME (sh64_media,maddl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2729{ 2730#define FLD(f) abuf->fields.sfmt_add.f 2731 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2732 int UNUSED written = 0; 2733 IADDR UNUSED pc = abuf->addr; 2734 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2735 2736{ 2737 SI tmp_result1; 2738 SI tmp_result0; 2739 tmp_result0 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 2740 tmp_result1 = ADDSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)); 2741 { 2742 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2743 SET_H_GR (FLD (f_dest), opval); 2744 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2745 } 2746} 2747 2748 return vpc; 2749#undef FLD 2750} 2751 2752/* maddw: madd.w $rm, $rn, $rd */ 2753 2754static SEM_PC 2755SEM_FN_NAME (sh64_media,maddw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2756{ 2757#define FLD(f) abuf->fields.sfmt_add.f 2758 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2759 int UNUSED written = 0; 2760 IADDR UNUSED pc = abuf->addr; 2761 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2762 2763{ 2764 HI tmp_result3; 2765 HI tmp_result2; 2766 HI tmp_result1; 2767 HI tmp_result0; 2768 tmp_result0 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)); 2769 tmp_result1 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)); 2770 tmp_result2 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)); 2771 tmp_result3 = ADDHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)); 2772 { 2773 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2774 SET_H_GR (FLD (f_dest), opval); 2775 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2776 } 2777} 2778 2779 return vpc; 2780#undef FLD 2781} 2782 2783/* maddsl: madds.l $rm, $rn, $rd */ 2784 2785static SEM_PC 2786SEM_FN_NAME (sh64_media,maddsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2787{ 2788#define FLD(f) abuf->fields.sfmt_add.f 2789 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2790 int UNUSED written = 0; 2791 IADDR UNUSED pc = abuf->addr; 2792 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2793 2794{ 2795 SI tmp_result1; 2796 SI tmp_result0; 2797 tmp_result0 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 2798 tmp_result1 = ((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 2799 { 2800 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2801 SET_H_GR (FLD (f_dest), opval); 2802 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2803 } 2804} 2805 2806 return vpc; 2807#undef FLD 2808} 2809 2810/* maddsub: madds.ub $rm, $rn, $rd */ 2811 2812static SEM_PC 2813SEM_FN_NAME (sh64_media,maddsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2814{ 2815#define FLD(f) abuf->fields.sfmt_add.f 2816 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2817 int UNUSED written = 0; 2818 IADDR UNUSED pc = abuf->addr; 2819 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2820 2821{ 2822 QI tmp_result7; 2823 QI tmp_result6; 2824 QI tmp_result5; 2825 QI tmp_result4; 2826 QI tmp_result3; 2827 QI tmp_result2; 2828 QI tmp_result1; 2829 QI tmp_result0; 2830 tmp_result0 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1))))); 2831 tmp_result1 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1))))); 2832 tmp_result2 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1))))); 2833 tmp_result3 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1))))); 2834 tmp_result4 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1))))); 2835 tmp_result5 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1))))); 2836 tmp_result6 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1))))); 2837 tmp_result7 = ((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (ADDDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1))))); 2838 { 2839 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 2840 SET_H_GR (FLD (f_dest), opval); 2841 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2842 } 2843} 2844 2845 return vpc; 2846#undef FLD 2847} 2848 2849/* maddsw: madds.w $rm, $rn, $rd */ 2850 2851static SEM_PC 2852SEM_FN_NAME (sh64_media,maddsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2853{ 2854#define FLD(f) abuf->fields.sfmt_add.f 2855 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2856 int UNUSED written = 0; 2857 IADDR UNUSED pc = abuf->addr; 2858 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2859 2860{ 2861 HI tmp_result3; 2862 HI tmp_result2; 2863 HI tmp_result1; 2864 HI tmp_result0; 2865 tmp_result0 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2866 tmp_result1 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2867 tmp_result2 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2868 tmp_result3 = ((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (ADDDI (EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), EXTHIDI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 2869 { 2870 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2871 SET_H_GR (FLD (f_dest), opval); 2872 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2873 } 2874} 2875 2876 return vpc; 2877#undef FLD 2878} 2879 2880/* mcmpeqb: mcmpeq.b $rm, $rn, $rd */ 2881 2882static SEM_PC 2883SEM_FN_NAME (sh64_media,mcmpeqb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2884{ 2885#define FLD(f) abuf->fields.sfmt_add.f 2886 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2887 int UNUSED written = 0; 2888 IADDR UNUSED pc = abuf->addr; 2889 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2890 2891{ 2892 QI tmp_result7; 2893 QI tmp_result6; 2894 QI tmp_result5; 2895 QI tmp_result4; 2896 QI tmp_result3; 2897 QI tmp_result2; 2898 QI tmp_result1; 2899 QI tmp_result0; 2900 tmp_result0 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0)); 2901 tmp_result1 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0)); 2902 tmp_result2 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0)); 2903 tmp_result3 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0)); 2904 tmp_result4 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0)); 2905 tmp_result5 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0)); 2906 tmp_result6 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0)); 2907 tmp_result7 = ((EQQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0)); 2908 { 2909 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 2910 SET_H_GR (FLD (f_dest), opval); 2911 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2912 } 2913} 2914 2915 return vpc; 2916#undef FLD 2917} 2918 2919/* mcmpeql: mcmpeq.l $rm, $rn, $rd */ 2920 2921static SEM_PC 2922SEM_FN_NAME (sh64_media,mcmpeql) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2923{ 2924#define FLD(f) abuf->fields.sfmt_add.f 2925 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2926 int UNUSED written = 0; 2927 IADDR UNUSED pc = abuf->addr; 2928 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2929 2930{ 2931 SI tmp_result1; 2932 SI tmp_result0; 2933 tmp_result0 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0)); 2934 tmp_result1 = ((EQSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0)); 2935 { 2936 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2937 SET_H_GR (FLD (f_dest), opval); 2938 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2939 } 2940} 2941 2942 return vpc; 2943#undef FLD 2944} 2945 2946/* mcmpeqw: mcmpeq.w $rm, $rn, $rd */ 2947 2948static SEM_PC 2949SEM_FN_NAME (sh64_media,mcmpeqw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2950{ 2951#define FLD(f) abuf->fields.sfmt_add.f 2952 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2953 int UNUSED written = 0; 2954 IADDR UNUSED pc = abuf->addr; 2955 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2956 2957{ 2958 HI tmp_result3; 2959 HI tmp_result2; 2960 HI tmp_result1; 2961 HI tmp_result0; 2962 tmp_result0 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0)); 2963 tmp_result1 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0)); 2964 tmp_result2 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0)); 2965 tmp_result3 = ((EQHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0)); 2966 { 2967 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 2968 SET_H_GR (FLD (f_dest), opval); 2969 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2970 } 2971} 2972 2973 return vpc; 2974#undef FLD 2975} 2976 2977/* mcmpgtl: mcmpgt.l $rm, $rn, $rd */ 2978 2979static SEM_PC 2980SEM_FN_NAME (sh64_media,mcmpgtl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 2981{ 2982#define FLD(f) abuf->fields.sfmt_add.f 2983 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 2984 int UNUSED written = 0; 2985 IADDR UNUSED pc = abuf->addr; 2986 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 2987 2988{ 2989 SI tmp_result1; 2990 SI tmp_result0; 2991 tmp_result0 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))) ? (INVSI (0)) : (0)); 2992 tmp_result1 = ((GTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))) ? (INVSI (0)) : (0)); 2993 { 2994 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 2995 SET_H_GR (FLD (f_dest), opval); 2996 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 2997 } 2998} 2999 3000 return vpc; 3001#undef FLD 3002} 3003 3004/* mcmpgtub: mcmpgt.ub $rm, $rn, $rd */ 3005 3006static SEM_PC 3007SEM_FN_NAME (sh64_media,mcmpgtub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3008{ 3009#define FLD(f) abuf->fields.sfmt_add.f 3010 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3011 int UNUSED written = 0; 3012 IADDR UNUSED pc = abuf->addr; 3013 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3014 3015{ 3016 QI tmp_result7; 3017 QI tmp_result6; 3018 QI tmp_result5; 3019 QI tmp_result4; 3020 QI tmp_result3; 3021 QI tmp_result2; 3022 QI tmp_result1; 3023 QI tmp_result0; 3024 tmp_result0 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))) ? (INVQI (0)) : (0)); 3025 tmp_result1 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))) ? (INVQI (0)) : (0)); 3026 tmp_result2 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))) ? (INVQI (0)) : (0)); 3027 tmp_result3 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))) ? (INVQI (0)) : (0)); 3028 tmp_result4 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))) ? (INVQI (0)) : (0)); 3029 tmp_result5 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))) ? (INVQI (0)) : (0)); 3030 tmp_result6 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))) ? (INVQI (0)) : (0)); 3031 tmp_result7 = ((GTUQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))) ? (INVQI (0)) : (0)); 3032 { 3033 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3034 SET_H_GR (FLD (f_dest), opval); 3035 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3036 } 3037} 3038 3039 return vpc; 3040#undef FLD 3041} 3042 3043/* mcmpgtw: mcmpgt.w $rm, $rn, $rd */ 3044 3045static SEM_PC 3046SEM_FN_NAME (sh64_media,mcmpgtw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3047{ 3048#define FLD(f) abuf->fields.sfmt_add.f 3049 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3050 int UNUSED written = 0; 3051 IADDR UNUSED pc = abuf->addr; 3052 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3053 3054{ 3055 HI tmp_result3; 3056 HI tmp_result2; 3057 HI tmp_result1; 3058 HI tmp_result0; 3059 tmp_result0 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))) ? (INVHI (0)) : (0)); 3060 tmp_result1 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))) ? (INVHI (0)) : (0)); 3061 tmp_result2 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))) ? (INVHI (0)) : (0)); 3062 tmp_result3 = ((GTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))) ? (INVHI (0)) : (0)); 3063 { 3064 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3065 SET_H_GR (FLD (f_dest), opval); 3066 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3067 } 3068} 3069 3070 return vpc; 3071#undef FLD 3072} 3073 3074/* mcmv: mcmv $rm, $rn, $rd */ 3075 3076static SEM_PC 3077SEM_FN_NAME (sh64_media,mcmv) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3078{ 3079#define FLD(f) abuf->fields.sfmt_add.f 3080 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3081 int UNUSED written = 0; 3082 IADDR UNUSED pc = abuf->addr; 3083 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3084 3085 { 3086 DI opval = ORDI (ANDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), ANDDI (GET_H_GR (FLD (f_dest)), INVDI (GET_H_GR (FLD (f_right))))); 3087 SET_H_GR (FLD (f_dest), opval); 3088 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3089 } 3090 3091 return vpc; 3092#undef FLD 3093} 3094 3095/* mcnvslw: mcnvs.lw $rm, $rn, $rd */ 3096 3097static SEM_PC 3098SEM_FN_NAME (sh64_media,mcnvslw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3099{ 3100#define FLD(f) abuf->fields.sfmt_add.f 3101 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3102 int UNUSED written = 0; 3103 IADDR UNUSED pc = abuf->addr; 3104 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3105 3106{ 3107 HI tmp_result3; 3108 HI tmp_result2; 3109 HI tmp_result1; 3110 HI tmp_result0; 3111 tmp_result0 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3112 tmp_result1 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3113 tmp_result2 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3114 tmp_result3 = ((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (16, 1)))) ? (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3115 { 3116 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3117 SET_H_GR (FLD (f_dest), opval); 3118 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3119 } 3120} 3121 3122 return vpc; 3123#undef FLD 3124} 3125 3126/* mcnvswb: mcnvs.wb $rm, $rn, $rd */ 3127 3128static SEM_PC 3129SEM_FN_NAME (sh64_media,mcnvswb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3130{ 3131#define FLD(f) abuf->fields.sfmt_add.f 3132 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3133 int UNUSED written = 0; 3134 IADDR UNUSED pc = abuf->addr; 3135 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3136 3137{ 3138 QI tmp_result7; 3139 QI tmp_result6; 3140 QI tmp_result5; 3141 QI tmp_result4; 3142 QI tmp_result3; 3143 QI tmp_result2; 3144 QI tmp_result1; 3145 QI tmp_result0; 3146 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3147 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3148 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3149 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3150 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3151 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3152 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3153 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), NEGDI (SLLDI (1, SUBSI (8, 1))))) ? (NEGQI (SLLQI (1, SUBSI (8, 1)))) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, SUBSI (8, 1)))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, SUBSI (8, 1)), 1))))); 3154 { 3155 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3156 SET_H_GR (FLD (f_dest), opval); 3157 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3158 } 3159} 3160 3161 return vpc; 3162#undef FLD 3163} 3164 3165/* mcnvswub: mcnvs.wub $rm, $rn, $rd */ 3166 3167static SEM_PC 3168SEM_FN_NAME (sh64_media,mcnvswub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3169{ 3170#define FLD(f) abuf->fields.sfmt_add.f 3171 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3172 int UNUSED written = 0; 3173 IADDR UNUSED pc = abuf->addr; 3174 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3175 3176{ 3177 QI tmp_result7; 3178 QI tmp_result6; 3179 QI tmp_result5; 3180 QI tmp_result4; 3181 QI tmp_result3; 3182 QI tmp_result2; 3183 QI tmp_result1; 3184 QI tmp_result0; 3185 tmp_result0 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)) : (SUBQI (SLLQI (1, 8), 1))))); 3186 tmp_result1 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)) : (SUBQI (SLLQI (1, 8), 1))))); 3187 tmp_result2 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)) : (SUBQI (SLLQI (1, 8), 1))))); 3188 tmp_result3 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)) : (SUBQI (SLLQI (1, 8), 1))))); 3189 tmp_result4 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)) : (SUBQI (SLLQI (1, 8), 1))))); 3190 tmp_result5 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)) : (SUBQI (SLLQI (1, 8), 1))))); 3191 tmp_result6 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)) : (SUBQI (SLLQI (1, 8), 1))))); 3192 tmp_result7 = ((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), MAKEDI (0, 0))) ? (0) : (((LTHI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0), SLLDI (1, 8))) ? (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)) : (SUBQI (SLLQI (1, 8), 1))))); 3193 { 3194 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3195 SET_H_GR (FLD (f_dest), opval); 3196 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3197 } 3198} 3199 3200 return vpc; 3201#undef FLD 3202} 3203 3204/* mextr1: mextr1 $rm, $rn, $rd */ 3205 3206static SEM_PC 3207SEM_FN_NAME (sh64_media,mextr1) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3208{ 3209#define FLD(f) abuf->fields.sfmt_add.f 3210 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3211 int UNUSED written = 0; 3212 IADDR UNUSED pc = abuf->addr; 3213 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3214 3215{ 3216 QI tmp_count; 3217 DI tmp_mask; 3218 DI tmp_rhs; 3219 tmp_count = MULQI (8, 1); 3220 tmp_mask = SLLDI (INVSI (0), tmp_count); 3221 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3222 tmp_count = MULQI (8, SUBQI (8, 1)); 3223 tmp_mask = SRLDI (INVSI (0), tmp_count); 3224 { 3225 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3226 SET_H_GR (FLD (f_dest), opval); 3227 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3228 } 3229} 3230 3231 return vpc; 3232#undef FLD 3233} 3234 3235/* mextr2: mextr2 $rm, $rn, $rd */ 3236 3237static SEM_PC 3238SEM_FN_NAME (sh64_media,mextr2) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3239{ 3240#define FLD(f) abuf->fields.sfmt_add.f 3241 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3242 int UNUSED written = 0; 3243 IADDR UNUSED pc = abuf->addr; 3244 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3245 3246{ 3247 QI tmp_count; 3248 DI tmp_mask; 3249 DI tmp_rhs; 3250 tmp_count = MULQI (8, 2); 3251 tmp_mask = SLLDI (INVSI (0), tmp_count); 3252 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3253 tmp_count = MULQI (8, SUBQI (8, 2)); 3254 tmp_mask = SRLDI (INVSI (0), tmp_count); 3255 { 3256 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3257 SET_H_GR (FLD (f_dest), opval); 3258 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3259 } 3260} 3261 3262 return vpc; 3263#undef FLD 3264} 3265 3266/* mextr3: mextr3 $rm, $rn, $rd */ 3267 3268static SEM_PC 3269SEM_FN_NAME (sh64_media,mextr3) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3270{ 3271#define FLD(f) abuf->fields.sfmt_add.f 3272 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3273 int UNUSED written = 0; 3274 IADDR UNUSED pc = abuf->addr; 3275 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3276 3277{ 3278 QI tmp_count; 3279 DI tmp_mask; 3280 DI tmp_rhs; 3281 tmp_count = MULQI (8, 3); 3282 tmp_mask = SLLDI (INVSI (0), tmp_count); 3283 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3284 tmp_count = MULQI (8, SUBQI (8, 3)); 3285 tmp_mask = SRLDI (INVSI (0), tmp_count); 3286 { 3287 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3288 SET_H_GR (FLD (f_dest), opval); 3289 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3290 } 3291} 3292 3293 return vpc; 3294#undef FLD 3295} 3296 3297/* mextr4: mextr4 $rm, $rn, $rd */ 3298 3299static SEM_PC 3300SEM_FN_NAME (sh64_media,mextr4) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3301{ 3302#define FLD(f) abuf->fields.sfmt_add.f 3303 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3304 int UNUSED written = 0; 3305 IADDR UNUSED pc = abuf->addr; 3306 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3307 3308{ 3309 QI tmp_count; 3310 DI tmp_mask; 3311 DI tmp_rhs; 3312 tmp_count = MULQI (8, 4); 3313 tmp_mask = SLLDI (INVSI (0), tmp_count); 3314 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3315 tmp_count = MULQI (8, SUBQI (8, 4)); 3316 tmp_mask = SRLDI (INVSI (0), tmp_count); 3317 { 3318 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3319 SET_H_GR (FLD (f_dest), opval); 3320 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3321 } 3322} 3323 3324 return vpc; 3325#undef FLD 3326} 3327 3328/* mextr5: mextr5 $rm, $rn, $rd */ 3329 3330static SEM_PC 3331SEM_FN_NAME (sh64_media,mextr5) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3332{ 3333#define FLD(f) abuf->fields.sfmt_add.f 3334 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3335 int UNUSED written = 0; 3336 IADDR UNUSED pc = abuf->addr; 3337 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3338 3339{ 3340 QI tmp_count; 3341 DI tmp_mask; 3342 DI tmp_rhs; 3343 tmp_count = MULQI (8, 5); 3344 tmp_mask = SLLDI (INVSI (0), tmp_count); 3345 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3346 tmp_count = MULQI (8, SUBQI (8, 5)); 3347 tmp_mask = SRLDI (INVSI (0), tmp_count); 3348 { 3349 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3350 SET_H_GR (FLD (f_dest), opval); 3351 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3352 } 3353} 3354 3355 return vpc; 3356#undef FLD 3357} 3358 3359/* mextr6: mextr6 $rm, $rn, $rd */ 3360 3361static SEM_PC 3362SEM_FN_NAME (sh64_media,mextr6) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3363{ 3364#define FLD(f) abuf->fields.sfmt_add.f 3365 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3366 int UNUSED written = 0; 3367 IADDR UNUSED pc = abuf->addr; 3368 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3369 3370{ 3371 QI tmp_count; 3372 DI tmp_mask; 3373 DI tmp_rhs; 3374 tmp_count = MULQI (8, 6); 3375 tmp_mask = SLLDI (INVSI (0), tmp_count); 3376 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3377 tmp_count = MULQI (8, SUBQI (8, 6)); 3378 tmp_mask = SRLDI (INVSI (0), tmp_count); 3379 { 3380 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3381 SET_H_GR (FLD (f_dest), opval); 3382 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3383 } 3384} 3385 3386 return vpc; 3387#undef FLD 3388} 3389 3390/* mextr7: mextr7 $rm, $rn, $rd */ 3391 3392static SEM_PC 3393SEM_FN_NAME (sh64_media,mextr7) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3394{ 3395#define FLD(f) abuf->fields.sfmt_add.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 QI tmp_count; 3403 DI tmp_mask; 3404 DI tmp_rhs; 3405 tmp_count = MULQI (8, 7); 3406 tmp_mask = SLLDI (INVSI (0), tmp_count); 3407 tmp_rhs = SRLDI (ANDDI (GET_H_GR (FLD (f_left)), tmp_mask), tmp_count); 3408 tmp_count = MULQI (8, SUBQI (8, 7)); 3409 tmp_mask = SRLDI (INVSI (0), tmp_count); 3410 { 3411 DI opval = ORDI (tmp_rhs, SLLDI (ANDDI (GET_H_GR (FLD (f_right)), tmp_mask), tmp_count)); 3412 SET_H_GR (FLD (f_dest), opval); 3413 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3414 } 3415} 3416 3417 return vpc; 3418#undef FLD 3419} 3420 3421/* mmacfxwl: mmacfx.wl $rm, $rn, $rd */ 3422 3423static SEM_PC 3424SEM_FN_NAME (sh64_media,mmacfxwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3425{ 3426#define FLD(f) abuf->fields.sfmt_add.f 3427 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3428 int UNUSED written = 0; 3429 IADDR UNUSED pc = abuf->addr; 3430 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3431 3432{ 3433 SI tmp_temp; 3434 SI tmp_result1; 3435 SI tmp_result0; 3436 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1); 3437 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0); 3438 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3439 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3440 tmp_result0 = ((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3441 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3442 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3443 tmp_result1 = ((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (ADDDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3444 { 3445 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3446 SET_H_GR (FLD (f_dest), opval); 3447 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3448 } 3449} 3450 3451 return vpc; 3452#undef FLD 3453} 3454 3455/* mmacnfx.wl: mmacnfx.wl $rm, $rn, $rd */ 3456 3457static SEM_PC 3458SEM_FN_NAME (sh64_media,mmacnfx_wl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3459{ 3460#define FLD(f) abuf->fields.sfmt_add.f 3461 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3462 int UNUSED written = 0; 3463 IADDR UNUSED pc = abuf->addr; 3464 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3465 3466{ 3467 SI tmp_temp; 3468 SI tmp_result1; 3469 SI tmp_result0; 3470 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1); 3471 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 0); 3472 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3473 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3474 tmp_result0 = ((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result0), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3475 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3476 tmp_temp = ((LTDI (SLLDI (tmp_temp, 1), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (tmp_temp, 1), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (tmp_temp, 1)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3477 tmp_result1 = ((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp)), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (tmp_result1), EXTSIDI (tmp_temp))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3478 { 3479 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3480 SET_H_GR (FLD (f_dest), opval); 3481 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3482 } 3483} 3484 3485 return vpc; 3486#undef FLD 3487} 3488 3489/* mmull: mmul.l $rm, $rn, $rd */ 3490 3491static SEM_PC 3492SEM_FN_NAME (sh64_media,mmull) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3493{ 3494#define FLD(f) abuf->fields.sfmt_add.f 3495 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3496 int UNUSED written = 0; 3497 IADDR UNUSED pc = abuf->addr; 3498 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3499 3500{ 3501 SI tmp_result1; 3502 SI tmp_result0; 3503 tmp_result0 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 3504 tmp_result1 = MULSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)); 3505 { 3506 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3507 SET_H_GR (FLD (f_dest), opval); 3508 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3509 } 3510} 3511 3512 return vpc; 3513#undef FLD 3514} 3515 3516/* mmulw: mmul.w $rm, $rn, $rd */ 3517 3518static SEM_PC 3519SEM_FN_NAME (sh64_media,mmulw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3520{ 3521#define FLD(f) abuf->fields.sfmt_add.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 HI tmp_result3; 3529 HI tmp_result2; 3530 HI tmp_result1; 3531 HI tmp_result0; 3532 tmp_result0 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)); 3533 tmp_result1 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)); 3534 tmp_result2 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)); 3535 tmp_result3 = MULHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)); 3536 { 3537 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3538 SET_H_GR (FLD (f_dest), opval); 3539 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3540 } 3541} 3542 3543 return vpc; 3544#undef FLD 3545} 3546 3547/* mmulfxl: mmulfx.l $rm, $rn, $rd */ 3548 3549static SEM_PC 3550SEM_FN_NAME (sh64_media,mmulfxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3551{ 3552#define FLD(f) abuf->fields.sfmt_add.f 3553 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3554 int UNUSED written = 0; 3555 IADDR UNUSED pc = abuf->addr; 3556 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3557 3558{ 3559 DI tmp_temp; 3560 SI tmp_result0; 3561 SI tmp_result1; 3562 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 3563 tmp_result0 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3564 tmp_temp = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))); 3565 tmp_result1 = ((LTDI (SRADI (tmp_temp, 31), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SRADI (tmp_temp, 31), SLLDI (1, SUBSI (32, 1)))) ? (SRADI (tmp_temp, 31)) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3566 { 3567 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3568 SET_H_GR (FLD (f_dest), opval); 3569 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3570 } 3571} 3572 3573 return vpc; 3574#undef FLD 3575} 3576 3577/* mmulfxw: mmulfx.w $rm, $rn, $rd */ 3578 3579static SEM_PC 3580SEM_FN_NAME (sh64_media,mmulfxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3581{ 3582#define FLD(f) abuf->fields.sfmt_add.f 3583 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3584 int UNUSED written = 0; 3585 IADDR UNUSED pc = abuf->addr; 3586 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3587 3588{ 3589 SI tmp_temp; 3590 HI tmp_result0; 3591 HI tmp_result1; 3592 HI tmp_result2; 3593 HI tmp_result3; 3594 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3595 tmp_result0 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3596 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3597 tmp_result1 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3598 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))); 3599 tmp_result2 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3600 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3601 tmp_result3 = ((LTSI (SRASI (tmp_temp, 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (tmp_temp, 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (tmp_temp, 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3602 { 3603 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3604 SET_H_GR (FLD (f_dest), opval); 3605 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3606 } 3607} 3608 3609 return vpc; 3610#undef FLD 3611} 3612 3613/* mmulfxrpw: mmulfxrp.w $rm, $rn, $rd */ 3614 3615static SEM_PC 3616SEM_FN_NAME (sh64_media,mmulfxrpw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3617{ 3618#define FLD(f) abuf->fields.sfmt_add.f 3619 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3620 int UNUSED written = 0; 3621 IADDR UNUSED pc = abuf->addr; 3622 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3623 3624{ 3625 SI tmp_temp; 3626 HI tmp_result0; 3627 HI tmp_result1; 3628 HI tmp_result2; 3629 HI tmp_result3; 3630 HI tmp_c; 3631 tmp_c = SLLSI (1, 14); 3632 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3633 tmp_result0 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3634 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3635 tmp_result1 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3636 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))); 3637 tmp_result2 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3638 tmp_temp = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3639 tmp_result3 = ((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTSI (SRASI (ADDSI (tmp_temp, tmp_c), 15), SLLDI (1, SUBSI (16, 1)))) ? (SRASI (ADDSI (tmp_temp, tmp_c), 15)) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3640 { 3641 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3642 SET_H_GR (FLD (f_dest), opval); 3643 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3644 } 3645} 3646 3647 return vpc; 3648#undef FLD 3649} 3650 3651/* mmulhiwl: mmulhi.wl $rm, $rn, $rd */ 3652 3653static SEM_PC 3654SEM_FN_NAME (sh64_media,mmulhiwl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3655{ 3656#define FLD(f) abuf->fields.sfmt_add.f 3657 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3658 int UNUSED written = 0; 3659 IADDR UNUSED pc = abuf->addr; 3660 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3661 3662{ 3663 SI tmp_result1; 3664 SI tmp_result0; 3665 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1))); 3666 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3667 { 3668 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3669 SET_H_GR (FLD (f_dest), opval); 3670 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3671 } 3672} 3673 3674 return vpc; 3675#undef FLD 3676} 3677 3678/* mmullowl: mmullo.wl $rm, $rn, $rd */ 3679 3680static SEM_PC 3681SEM_FN_NAME (sh64_media,mmullowl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3682{ 3683#define FLD(f) abuf->fields.sfmt_add.f 3684 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3685 int UNUSED written = 0; 3686 IADDR UNUSED pc = abuf->addr; 3687 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3688 3689{ 3690 SI tmp_result1; 3691 SI tmp_result0; 3692 tmp_result0 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3))); 3693 tmp_result1 = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2))); 3694 { 3695 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3696 SET_H_GR (FLD (f_dest), opval); 3697 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3698 } 3699} 3700 3701 return vpc; 3702#undef FLD 3703} 3704 3705/* mmulsumwq: mmulsum.wq $rm, $rn, $rd */ 3706 3707static SEM_PC 3708SEM_FN_NAME (sh64_media,mmulsumwq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3709{ 3710#define FLD(f) abuf->fields.sfmt_add.f 3711 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3712 int UNUSED written = 0; 3713 IADDR UNUSED pc = abuf->addr; 3714 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3715 3716{ 3717 DI tmp_acc; 3718 tmp_acc = MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0))); 3719 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)))); 3720 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)))); 3721 tmp_acc = ADDDI (tmp_acc, MULSI (ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3)), ZEXTHISI (SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)))); 3722 { 3723 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc); 3724 SET_H_GR (FLD (f_dest), opval); 3725 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3726 } 3727} 3728 3729 return vpc; 3730#undef FLD 3731} 3732 3733/* movi: movi $imm16, $rd */ 3734 3735static SEM_PC 3736SEM_FN_NAME (sh64_media,movi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3737{ 3738#define FLD(f) abuf->fields.sfmt_movi.f 3739 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3740 int UNUSED written = 0; 3741 IADDR UNUSED pc = abuf->addr; 3742 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3743 3744 { 3745 DI opval = EXTSIDI (FLD (f_imm16)); 3746 SET_H_GR (FLD (f_dest), opval); 3747 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3748 } 3749 3750 return vpc; 3751#undef FLD 3752} 3753 3754/* mpermw: mperm.w $rm, $rn, $rd */ 3755 3756static SEM_PC 3757SEM_FN_NAME (sh64_media,mpermw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3758{ 3759#define FLD(f) abuf->fields.sfmt_add.f 3760 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3761 int UNUSED written = 0; 3762 IADDR UNUSED pc = abuf->addr; 3763 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3764 3765{ 3766 QI tmp_control; 3767 HI tmp_result3; 3768 HI tmp_result2; 3769 HI tmp_result1; 3770 HI tmp_result0; 3771 tmp_control = ANDQI (GET_H_GR (FLD (f_right)), 255); 3772 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (tmp_control, 3))); 3773 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 2), 3))); 3774 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 4), 3))); 3775 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), SUBSI (3, ANDQI (SRLQI (tmp_control, 6), 3))); 3776 { 3777 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3778 SET_H_GR (FLD (f_dest), opval); 3779 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3780 } 3781} 3782 3783 return vpc; 3784#undef FLD 3785} 3786 3787/* msadubq: msad.ubq $rm, $rn, $rd */ 3788 3789static SEM_PC 3790SEM_FN_NAME (sh64_media,msadubq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3791{ 3792#define FLD(f) abuf->fields.sfmt_add.f 3793 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3794 int UNUSED written = 0; 3795 IADDR UNUSED pc = abuf->addr; 3796 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3797 3798{ 3799 DI tmp_acc; 3800 tmp_acc = ABSDI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))); 3801 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))); 3802 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))); 3803 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))); 3804 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))); 3805 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))); 3806 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))); 3807 tmp_acc = ADDDI (tmp_acc, ABSQI (SUBQI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7), SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))); 3808 { 3809 DI opval = ADDDI (GET_H_GR (FLD (f_dest)), tmp_acc); 3810 SET_H_GR (FLD (f_dest), opval); 3811 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3812 } 3813} 3814 3815 return vpc; 3816#undef FLD 3817} 3818 3819/* mshaldsl: mshalds.l $rm, $rn, $rd */ 3820 3821static SEM_PC 3822SEM_FN_NAME (sh64_media,mshaldsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3823{ 3824#define FLD(f) abuf->fields.sfmt_add.f 3825 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3826 int UNUSED written = 0; 3827 IADDR UNUSED pc = abuf->addr; 3828 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3829 3830{ 3831 SI tmp_result1; 3832 SI tmp_result0; 3833 tmp_result0 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3834 tmp_result1 = ((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)), SLLDI (1, SUBSI (32, 1)))) ? (SLLDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 3835 { 3836 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3837 SET_H_GR (FLD (f_dest), opval); 3838 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3839 } 3840} 3841 3842 return vpc; 3843#undef FLD 3844} 3845 3846/* mshaldsw: mshalds.w $rm, $rn, $rd */ 3847 3848static SEM_PC 3849SEM_FN_NAME (sh64_media,mshaldsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3850{ 3851#define FLD(f) abuf->fields.sfmt_add.f 3852 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3853 int UNUSED written = 0; 3854 IADDR UNUSED pc = abuf->addr; 3855 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3856 3857{ 3858 HI tmp_result3; 3859 HI tmp_result2; 3860 HI tmp_result1; 3861 HI tmp_result0; 3862 tmp_result0 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3863 tmp_result1 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3864 tmp_result2 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3865 tmp_result3 = ((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)), SLLDI (1, SUBSI (16, 1)))) ? (SLLDI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 3866 { 3867 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3868 SET_H_GR (FLD (f_dest), opval); 3869 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3870 } 3871} 3872 3873 return vpc; 3874#undef FLD 3875} 3876 3877/* mshardl: mshard.l $rm, $rn, $rd */ 3878 3879static SEM_PC 3880SEM_FN_NAME (sh64_media,mshardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3881{ 3882#define FLD(f) abuf->fields.sfmt_add.f 3883 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3884 int UNUSED written = 0; 3885 IADDR UNUSED pc = abuf->addr; 3886 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3887 3888{ 3889 SI tmp_result1; 3890 SI tmp_result0; 3891 tmp_result0 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)); 3892 tmp_result1 = SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)); 3893 { 3894 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 3895 SET_H_GR (FLD (f_dest), opval); 3896 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3897 } 3898} 3899 3900 return vpc; 3901#undef FLD 3902} 3903 3904/* mshardw: mshard.w $rm, $rn, $rd */ 3905 3906static SEM_PC 3907SEM_FN_NAME (sh64_media,mshardw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3908{ 3909#define FLD(f) abuf->fields.sfmt_add.f 3910 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3911 int UNUSED written = 0; 3912 IADDR UNUSED pc = abuf->addr; 3913 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3914 3915{ 3916 HI tmp_result3; 3917 HI tmp_result2; 3918 HI tmp_result1; 3919 HI tmp_result0; 3920 tmp_result0 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3921 tmp_result1 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3922 tmp_result2 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3923 tmp_result3 = SRAHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)); 3924 { 3925 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 3926 SET_H_GR (FLD (f_dest), opval); 3927 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3928 } 3929} 3930 3931 return vpc; 3932#undef FLD 3933} 3934 3935/* mshardsq: mshards.q $rm, $rn, $rd */ 3936 3937static SEM_PC 3938SEM_FN_NAME (sh64_media,mshardsq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3939{ 3940#define FLD(f) abuf->fields.sfmt_add.f 3941 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3942 int UNUSED written = 0; 3943 IADDR UNUSED pc = abuf->addr; 3944 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3945 3946 { 3947 DI opval = ((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGDI (SLLDI (1, SUBSI (16, 1)))) : (((LTDI (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)), SLLDI (1, SUBSI (16, 1)))) ? (SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63))) : (SUBDI (SLLDI (1, SUBSI (16, 1)), 1))))); 3948 SET_H_GR (FLD (f_dest), opval); 3949 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3950 } 3951 3952 return vpc; 3953#undef FLD 3954} 3955 3956/* mshfhib: mshfhi.b $rm, $rn, $rd */ 3957 3958static SEM_PC 3959SEM_FN_NAME (sh64_media,mshfhib) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3960{ 3961#define FLD(f) abuf->fields.sfmt_add.f 3962 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 3963 int UNUSED written = 0; 3964 IADDR UNUSED pc = abuf->addr; 3965 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 3966 3967{ 3968 QI tmp_result7; 3969 QI tmp_result6; 3970 QI tmp_result5; 3971 QI tmp_result4; 3972 QI tmp_result3; 3973 QI tmp_result2; 3974 QI tmp_result1; 3975 QI tmp_result0; 3976 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3); 3977 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3); 3978 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2); 3979 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2); 3980 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1); 3981 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1); 3982 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0); 3983 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0); 3984 { 3985 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 3986 SET_H_GR (FLD (f_dest), opval); 3987 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 3988 } 3989} 3990 3991 return vpc; 3992#undef FLD 3993} 3994 3995/* mshfhil: mshfhi.l $rm, $rn, $rd */ 3996 3997static SEM_PC 3998SEM_FN_NAME (sh64_media,mshfhil) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 3999{ 4000#define FLD(f) abuf->fields.sfmt_add.f 4001 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4002 int UNUSED written = 0; 4003 IADDR UNUSED pc = abuf->addr; 4004 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4005 4006{ 4007 SI tmp_result1; 4008 SI tmp_result0; 4009 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 0); 4010 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 0); 4011 { 4012 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4013 SET_H_GR (FLD (f_dest), opval); 4014 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4015 } 4016} 4017 4018 return vpc; 4019#undef FLD 4020} 4021 4022/* mshfhiw: mshfhi.w $rm, $rn, $rd */ 4023 4024static SEM_PC 4025SEM_FN_NAME (sh64_media,mshfhiw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4026{ 4027#define FLD(f) abuf->fields.sfmt_add.f 4028 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4029 int UNUSED written = 0; 4030 IADDR UNUSED pc = abuf->addr; 4031 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4032 4033{ 4034 HI tmp_result3; 4035 HI tmp_result2; 4036 HI tmp_result1; 4037 HI tmp_result0; 4038 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1); 4039 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1); 4040 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0); 4041 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0); 4042 { 4043 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4044 SET_H_GR (FLD (f_dest), opval); 4045 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4046 } 4047} 4048 4049 return vpc; 4050#undef FLD 4051} 4052 4053/* mshflob: mshflo.b $rm, $rn, $rd */ 4054 4055static SEM_PC 4056SEM_FN_NAME (sh64_media,mshflob) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4057{ 4058#define FLD(f) abuf->fields.sfmt_add.f 4059 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4060 int UNUSED written = 0; 4061 IADDR UNUSED pc = abuf->addr; 4062 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4063 4064{ 4065 QI tmp_result7; 4066 QI tmp_result6; 4067 QI tmp_result5; 4068 QI tmp_result4; 4069 QI tmp_result3; 4070 QI tmp_result2; 4071 QI tmp_result1; 4072 QI tmp_result0; 4073 tmp_result0 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7); 4074 tmp_result1 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7); 4075 tmp_result2 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6); 4076 tmp_result3 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6); 4077 tmp_result4 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5); 4078 tmp_result5 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5); 4079 tmp_result6 = SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4); 4080 tmp_result7 = SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4); 4081 { 4082 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 4083 SET_H_GR (FLD (f_dest), opval); 4084 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4085 } 4086} 4087 4088 return vpc; 4089#undef FLD 4090} 4091 4092/* mshflol: mshflo.l $rm, $rn, $rd */ 4093 4094static SEM_PC 4095SEM_FN_NAME (sh64_media,mshflol) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4096{ 4097#define FLD(f) abuf->fields.sfmt_add.f 4098 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4099 int UNUSED written = 0; 4100 IADDR UNUSED pc = abuf->addr; 4101 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4102 4103{ 4104 SI tmp_result1; 4105 SI tmp_result0; 4106 tmp_result0 = SUBWORDDISI (GET_H_GR (FLD (f_left)), 1); 4107 tmp_result1 = SUBWORDDISI (GET_H_GR (FLD (f_right)), 1); 4108 { 4109 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4110 SET_H_GR (FLD (f_dest), opval); 4111 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4112 } 4113} 4114 4115 return vpc; 4116#undef FLD 4117} 4118 4119/* mshflow: mshflo.w $rm, $rn, $rd */ 4120 4121static SEM_PC 4122SEM_FN_NAME (sh64_media,mshflow) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4123{ 4124#define FLD(f) abuf->fields.sfmt_add.f 4125 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4126 int UNUSED written = 0; 4127 IADDR UNUSED pc = abuf->addr; 4128 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4129 4130{ 4131 HI tmp_result3; 4132 HI tmp_result2; 4133 HI tmp_result1; 4134 HI tmp_result0; 4135 tmp_result0 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3); 4136 tmp_result1 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3); 4137 tmp_result2 = SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2); 4138 tmp_result3 = SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2); 4139 { 4140 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4141 SET_H_GR (FLD (f_dest), opval); 4142 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4143 } 4144} 4145 4146 return vpc; 4147#undef FLD 4148} 4149 4150/* mshlldl: mshlld.l $rm, $rn, $rd */ 4151 4152static SEM_PC 4153SEM_FN_NAME (sh64_media,mshlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4154{ 4155#define FLD(f) abuf->fields.sfmt_add.f 4156 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4157 int UNUSED written = 0; 4158 IADDR UNUSED pc = abuf->addr; 4159 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4160 4161{ 4162 SI tmp_result1; 4163 SI tmp_result0; 4164 tmp_result0 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4165 tmp_result1 = SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4166 { 4167 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4168 SET_H_GR (FLD (f_dest), opval); 4169 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4170 } 4171} 4172 4173 return vpc; 4174#undef FLD 4175} 4176 4177/* mshlldw: mshlld.w $rm, $rn, $rd */ 4178 4179static SEM_PC 4180SEM_FN_NAME (sh64_media,mshlldw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4181{ 4182#define FLD(f) abuf->fields.sfmt_add.f 4183 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4184 int UNUSED written = 0; 4185 IADDR UNUSED pc = abuf->addr; 4186 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4187 4188{ 4189 HI tmp_result3; 4190 HI tmp_result2; 4191 HI tmp_result1; 4192 HI tmp_result0; 4193 tmp_result0 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4194 tmp_result1 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4195 tmp_result2 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4196 tmp_result3 = SLLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4197 { 4198 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4199 SET_H_GR (FLD (f_dest), opval); 4200 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4201 } 4202} 4203 4204 return vpc; 4205#undef FLD 4206} 4207 4208/* mshlrdl: mshlrd.l $rm, $rn, $rd */ 4209 4210static SEM_PC 4211SEM_FN_NAME (sh64_media,mshlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4212{ 4213#define FLD(f) abuf->fields.sfmt_add.f 4214 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4215 int UNUSED written = 0; 4216 IADDR UNUSED pc = abuf->addr; 4217 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4218 4219{ 4220 SI tmp_result1; 4221 SI tmp_result0; 4222 tmp_result0 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4223 tmp_result1 = SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 31)); 4224 { 4225 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4226 SET_H_GR (FLD (f_dest), opval); 4227 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4228 } 4229} 4230 4231 return vpc; 4232#undef FLD 4233} 4234 4235/* mshlrdw: mshlrd.w $rm, $rn, $rd */ 4236 4237static SEM_PC 4238SEM_FN_NAME (sh64_media,mshlrdw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4239{ 4240#define FLD(f) abuf->fields.sfmt_add.f 4241 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4242 int UNUSED written = 0; 4243 IADDR UNUSED pc = abuf->addr; 4244 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4245 4246{ 4247 HI tmp_result3; 4248 HI tmp_result2; 4249 HI tmp_result1; 4250 HI tmp_result0; 4251 tmp_result0 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4252 tmp_result1 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4253 tmp_result2 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4254 tmp_result3 = SRLHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), ANDDI (GET_H_GR (FLD (f_right)), 15)); 4255 { 4256 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4257 SET_H_GR (FLD (f_dest), opval); 4258 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4259 } 4260} 4261 4262 return vpc; 4263#undef FLD 4264} 4265 4266/* msubl: msub.l $rm, $rn, $rd */ 4267 4268static SEM_PC 4269SEM_FN_NAME (sh64_media,msubl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4270{ 4271#define FLD(f) abuf->fields.sfmt_add.f 4272 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4273 int UNUSED written = 0; 4274 IADDR UNUSED pc = abuf->addr; 4275 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4276 4277{ 4278 SI tmp_result1; 4279 SI tmp_result0; 4280 tmp_result0 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)); 4281 tmp_result1 = SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0), SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)); 4282 { 4283 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4284 SET_H_GR (FLD (f_dest), opval); 4285 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4286 } 4287} 4288 4289 return vpc; 4290#undef FLD 4291} 4292 4293/* msubw: msub.w $rm, $rn, $rd */ 4294 4295static SEM_PC 4296SEM_FN_NAME (sh64_media,msubw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4297{ 4298#define FLD(f) abuf->fields.sfmt_add.f 4299 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4300 int UNUSED written = 0; 4301 IADDR UNUSED pc = abuf->addr; 4302 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4303 4304{ 4305 HI tmp_result3; 4306 HI tmp_result2; 4307 HI tmp_result1; 4308 HI tmp_result0; 4309 tmp_result0 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 3), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 3)); 4310 tmp_result1 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 2), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 2)); 4311 tmp_result2 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 1), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 1)); 4312 tmp_result3 = SUBHI (SUBWORDDIHI (GET_H_GR (FLD (f_left)), 0), SUBWORDDIHI (GET_H_GR (FLD (f_right)), 0)); 4313 { 4314 DI opval = ORDI (SLLDI (ZEXTHIDI (tmp_result3), 48), ORDI (SLLDI (ZEXTHIDI (tmp_result2), 32), ORDI (SLLDI (ZEXTHIDI (tmp_result1), 16), ZEXTHIDI (tmp_result0)))); 4315 SET_H_GR (FLD (f_dest), opval); 4316 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4317 } 4318} 4319 4320 return vpc; 4321#undef FLD 4322} 4323 4324/* msubsl: msubs.l $rm, $rn, $rd */ 4325 4326static SEM_PC 4327SEM_FN_NAME (sh64_media,msubsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4328{ 4329#define FLD(f) abuf->fields.sfmt_add.f 4330 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4331 int UNUSED written = 0; 4332 IADDR UNUSED pc = abuf->addr; 4333 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4334 4335{ 4336 SI tmp_result1; 4337 SI tmp_result0; 4338 tmp_result0 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 4339 tmp_result1 = ((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (32, 1))))) ? (NEGSI (SLLSI (1, SUBSI (32, 1)))) : (((LTDI (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (32, 1)))) ? (SUBDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 0)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 0)))) : (SUBSI (SLLSI (1, SUBSI (32, 1)), 1))))); 4340 { 4341 DI opval = ORDI (SLLDI (ZEXTSIDI (tmp_result1), 32), ZEXTSIDI (tmp_result0)); 4342 SET_H_GR (FLD (f_dest), opval); 4343 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4344 } 4345} 4346 4347 return vpc; 4348#undef FLD 4349} 4350 4351/* msubsub: msubs.ub $rm, $rn, $rd */ 4352 4353static SEM_PC 4354SEM_FN_NAME (sh64_media,msubsub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4355{ 4356#define FLD(f) abuf->fields.sfmt_add.f 4357 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4358 int UNUSED written = 0; 4359 IADDR UNUSED pc = abuf->addr; 4360 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4361 4362{ 4363 QI tmp_result7; 4364 QI tmp_result6; 4365 QI tmp_result5; 4366 QI tmp_result4; 4367 QI tmp_result3; 4368 QI tmp_result2; 4369 QI tmp_result1; 4370 QI tmp_result0; 4371 tmp_result0 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBQI (SLLQI (1, 8), 1))))); 4372 tmp_result1 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBQI (SLLQI (1, 8), 1))))); 4373 tmp_result2 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBQI (SLLQI (1, 8), 1))))); 4374 tmp_result3 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBQI (SLLQI (1, 8), 1))))); 4375 tmp_result4 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBQI (SLLQI (1, 8), 1))))); 4376 tmp_result5 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBQI (SLLQI (1, 8), 1))))); 4377 tmp_result6 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBQI (SLLQI (1, 8), 1))))); 4378 tmp_result7 = ((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), MAKEDI (0, 0))) ? (0) : (((LTDI (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, 8))) ? (SUBDI (ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), ZEXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBQI (SLLQI (1, 8), 1))))); 4379 { 4380 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 4381 SET_H_GR (FLD (f_dest), opval); 4382 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4383 } 4384} 4385 4386 return vpc; 4387#undef FLD 4388} 4389 4390/* msubsw: msubs.w $rm, $rn, $rd */ 4391 4392static SEM_PC 4393SEM_FN_NAME (sh64_media,msubsw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4394{ 4395#define FLD(f) abuf->fields.sfmt_add.f 4396 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4397 int UNUSED written = 0; 4398 IADDR UNUSED pc = abuf->addr; 4399 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4400 4401{ 4402 QI tmp_result7; 4403 QI tmp_result6; 4404 QI tmp_result5; 4405 QI tmp_result4; 4406 QI tmp_result3; 4407 QI tmp_result2; 4408 QI tmp_result1; 4409 QI tmp_result0; 4410 tmp_result0 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 7)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 7)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4411 tmp_result1 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 6)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 6)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4412 tmp_result2 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 5)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 5)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4413 tmp_result3 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 4)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 4)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4414 tmp_result4 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 3)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 3)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4415 tmp_result5 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 2)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 2)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4416 tmp_result6 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 1)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 1)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4417 tmp_result7 = ((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), NEGDI (SLLDI (1, SUBSI (16, 1))))) ? (NEGHI (SLLHI (1, SUBSI (16, 1)))) : (((LTDI (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0))), SLLDI (1, SUBSI (16, 1)))) ? (SUBDI (EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_left)), 0)), EXTQIDI (SUBWORDDIQI (GET_H_GR (FLD (f_right)), 0)))) : (SUBHI (SLLHI (1, SUBSI (16, 1)), 1))))); 4418 { 4419 DI opval = ORDI (SLLDI (ZEXTQIDI (tmp_result7), 56), ORDI (SLLDI (ZEXTQIDI (tmp_result6), 48), ORDI (SLLDI (ZEXTQIDI (tmp_result5), 40), ORDI (SLLDI (ZEXTQIDI (tmp_result4), 32), ORDI (SLLDI (ZEXTQIDI (tmp_result3), 24), ORDI (SLLDI (ZEXTQIDI (tmp_result2), 16), ORDI (SLLDI (ZEXTQIDI (tmp_result1), 8), ZEXTQIDI (tmp_result0)))))))); 4420 SET_H_GR (FLD (f_dest), opval); 4421 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4422 } 4423} 4424 4425 return vpc; 4426#undef FLD 4427} 4428 4429/* mulsl: muls.l $rm, $rn, $rd */ 4430 4431static SEM_PC 4432SEM_FN_NAME (sh64_media,mulsl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4433{ 4434#define FLD(f) abuf->fields.sfmt_add.f 4435 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4436 int UNUSED written = 0; 4437 IADDR UNUSED pc = abuf->addr; 4438 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4439 4440 { 4441 DI opval = MULDI (EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), EXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 4442 SET_H_GR (FLD (f_dest), opval); 4443 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4444 } 4445 4446 return vpc; 4447#undef FLD 4448} 4449 4450/* mulul: mulu.l $rm, $rn, $rd */ 4451 4452static SEM_PC 4453SEM_FN_NAME (sh64_media,mulul) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4454{ 4455#define FLD(f) abuf->fields.sfmt_add.f 4456 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4457 int UNUSED written = 0; 4458 IADDR UNUSED pc = abuf->addr; 4459 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4460 4461 { 4462 DI opval = MULDI (ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1)), ZEXTSIDI (SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 4463 SET_H_GR (FLD (f_dest), opval); 4464 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4465 } 4466 4467 return vpc; 4468#undef FLD 4469} 4470 4471/* nop: nop */ 4472 4473static SEM_PC 4474SEM_FN_NAME (sh64_media,nop) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4475{ 4476#define FLD(f) abuf->fields.fmt_empty.f 4477 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4478 int UNUSED written = 0; 4479 IADDR UNUSED pc = abuf->addr; 4480 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4481 4482((void) 0); /*nop*/ 4483 4484 return vpc; 4485#undef FLD 4486} 4487 4488/* nsb: nsb $rm, $rd */ 4489 4490static SEM_PC 4491SEM_FN_NAME (sh64_media,nsb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4492{ 4493#define FLD(f) abuf->fields.sfmt_xori.f 4494 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4495 int UNUSED written = 0; 4496 IADDR UNUSED pc = abuf->addr; 4497 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4498 4499 { 4500 DI opval = sh64_nsb (current_cpu, GET_H_GR (FLD (f_left))); 4501 SET_H_GR (FLD (f_dest), opval); 4502 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4503 } 4504 4505 return vpc; 4506#undef FLD 4507} 4508 4509/* ocbi: ocbi $rm, $disp6x32 */ 4510 4511static SEM_PC 4512SEM_FN_NAME (sh64_media,ocbi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4513{ 4514#define FLD(f) abuf->fields.sfmt_xori.f 4515 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4516 int UNUSED written = 0; 4517 IADDR UNUSED pc = abuf->addr; 4518 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4519 4520{ 4521 { 4522 DI opval = GET_H_GR (FLD (f_left)); 4523 SET_H_GR (FLD (f_left), opval); 4524 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4525 } 4526((void) 0); /*nop*/ 4527} 4528 4529 return vpc; 4530#undef FLD 4531} 4532 4533/* ocbp: ocbp $rm, $disp6x32 */ 4534 4535static SEM_PC 4536SEM_FN_NAME (sh64_media,ocbp) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4537{ 4538#define FLD(f) abuf->fields.sfmt_xori.f 4539 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4540 int UNUSED written = 0; 4541 IADDR UNUSED pc = abuf->addr; 4542 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4543 4544{ 4545 { 4546 DI opval = GET_H_GR (FLD (f_left)); 4547 SET_H_GR (FLD (f_left), opval); 4548 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4549 } 4550((void) 0); /*nop*/ 4551} 4552 4553 return vpc; 4554#undef FLD 4555} 4556 4557/* ocbwb: ocbwb $rm, $disp6x32 */ 4558 4559static SEM_PC 4560SEM_FN_NAME (sh64_media,ocbwb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4561{ 4562#define FLD(f) abuf->fields.sfmt_xori.f 4563 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4564 int UNUSED written = 0; 4565 IADDR UNUSED pc = abuf->addr; 4566 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4567 4568{ 4569 { 4570 DI opval = GET_H_GR (FLD (f_left)); 4571 SET_H_GR (FLD (f_left), opval); 4572 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4573 } 4574((void) 0); /*nop*/ 4575} 4576 4577 return vpc; 4578#undef FLD 4579} 4580 4581/* or: or $rm, $rn, $rd */ 4582 4583static SEM_PC 4584SEM_FN_NAME (sh64_media,or) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4585{ 4586#define FLD(f) abuf->fields.sfmt_add.f 4587 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4588 int UNUSED written = 0; 4589 IADDR UNUSED pc = abuf->addr; 4590 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4591 4592 { 4593 DI opval = ORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 4594 SET_H_GR (FLD (f_dest), opval); 4595 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4596 } 4597 4598 return vpc; 4599#undef FLD 4600} 4601 4602/* ori: ori $rm, $imm10, $rd */ 4603 4604static SEM_PC 4605SEM_FN_NAME (sh64_media,ori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4606{ 4607#define FLD(f) abuf->fields.sfmt_ori.f 4608 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4609 int UNUSED written = 0; 4610 IADDR UNUSED pc = abuf->addr; 4611 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4612 4613 { 4614 DI opval = ORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm10))); 4615 SET_H_GR (FLD (f_dest), opval); 4616 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4617 } 4618 4619 return vpc; 4620#undef FLD 4621} 4622 4623/* prefi: prefi $rm, $disp6x32 */ 4624 4625static SEM_PC 4626SEM_FN_NAME (sh64_media,prefi) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4627{ 4628#define FLD(f) abuf->fields.sfmt_xori.f 4629 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4630 int UNUSED written = 0; 4631 IADDR UNUSED pc = abuf->addr; 4632 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4633 4634{ 4635 { 4636 DI opval = GET_H_GR (FLD (f_left)); 4637 SET_H_GR (FLD (f_left), opval); 4638 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4639 } 4640((void) 0); /*nop*/ 4641} 4642 4643 return vpc; 4644#undef FLD 4645} 4646 4647/* pta: pta$likely $disp16, $tra */ 4648 4649static SEM_PC 4650SEM_FN_NAME (sh64_media,pta) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4651{ 4652#define FLD(f) abuf->fields.sfmt_pta.f 4653 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4654 int UNUSED written = 0; 4655 IADDR UNUSED pc = abuf->addr; 4656 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4657 4658{ 4659((void) 0); /*nop*/ 4660 { 4661 DI opval = ADDSI (FLD (f_disp16), 1); 4662 CPU (h_tr[FLD (f_tra)]) = opval; 4663 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4664 } 4665} 4666 4667 return vpc; 4668#undef FLD 4669} 4670 4671/* ptabs: ptabs$likely $rn, $tra */ 4672 4673static SEM_PC 4674SEM_FN_NAME (sh64_media,ptabs) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4675{ 4676#define FLD(f) abuf->fields.sfmt_beq.f 4677 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4678 int UNUSED written = 0; 4679 IADDR UNUSED pc = abuf->addr; 4680 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4681 4682{ 4683((void) 0); /*nop*/ 4684 { 4685 DI opval = GET_H_GR (FLD (f_right)); 4686 CPU (h_tr[FLD (f_tra)]) = opval; 4687 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4688 } 4689} 4690 4691 return vpc; 4692#undef FLD 4693} 4694 4695/* ptb: ptb$likely $disp16, $tra */ 4696 4697static SEM_PC 4698SEM_FN_NAME (sh64_media,ptb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4699{ 4700#define FLD(f) abuf->fields.sfmt_pta.f 4701 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4702 int UNUSED written = 0; 4703 IADDR UNUSED pc = abuf->addr; 4704 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4705 4706{ 4707((void) 0); /*nop*/ 4708 { 4709 DI opval = FLD (f_disp16); 4710 CPU (h_tr[FLD (f_tra)]) = opval; 4711 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4712 } 4713} 4714 4715 return vpc; 4716#undef FLD 4717} 4718 4719/* ptrel: ptrel$likely $rn, $tra */ 4720 4721static SEM_PC 4722SEM_FN_NAME (sh64_media,ptrel) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4723{ 4724#define FLD(f) abuf->fields.sfmt_beq.f 4725 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4726 int UNUSED written = 0; 4727 IADDR UNUSED pc = abuf->addr; 4728 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4729 4730{ 4731((void) 0); /*nop*/ 4732 { 4733 DI opval = ADDDI (pc, GET_H_GR (FLD (f_right))); 4734 CPU (h_tr[FLD (f_tra)]) = opval; 4735 TRACE_RESULT (current_cpu, abuf, "tr", 'D', opval); 4736 } 4737} 4738 4739 return vpc; 4740#undef FLD 4741} 4742 4743/* putcfg: putcfg $rm, $disp6, $rd */ 4744 4745static SEM_PC 4746SEM_FN_NAME (sh64_media,putcfg) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4747{ 4748#define FLD(f) abuf->fields.sfmt_getcfg.f 4749 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4750 int UNUSED written = 0; 4751 IADDR UNUSED pc = abuf->addr; 4752 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4753 4754{ 4755 SI tmp_address; 4756 tmp_address = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 4757((void) 0); /*nop*/ 4758 { 4759 SI opval = GET_H_GR (FLD (f_dest)); 4760 SETMEMSI (current_cpu, pc, tmp_address, opval); 4761 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 4762 } 4763} 4764 4765 return vpc; 4766#undef FLD 4767} 4768 4769/* putcon: putcon $rm, $crj */ 4770 4771static SEM_PC 4772SEM_FN_NAME (sh64_media,putcon) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4773{ 4774#define FLD(f) abuf->fields.sfmt_xori.f 4775 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4776 int UNUSED written = 0; 4777 IADDR UNUSED pc = abuf->addr; 4778 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4779 4780 { 4781 DI opval = GET_H_GR (FLD (f_left)); 4782 SET_H_CR (FLD (f_dest), opval); 4783 TRACE_RESULT (current_cpu, abuf, "cr", 'D', opval); 4784 } 4785 4786 return vpc; 4787#undef FLD 4788} 4789 4790/* rte: rte */ 4791 4792static SEM_PC 4793SEM_FN_NAME (sh64_media,rte) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4794{ 4795#define FLD(f) abuf->fields.fmt_empty.f 4796 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4797 int UNUSED written = 0; 4798 IADDR UNUSED pc = abuf->addr; 4799 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4800 4801((void) 0); /*nop*/ 4802 4803 return vpc; 4804#undef FLD 4805} 4806 4807/* shard: shard $rm, $rn, $rd */ 4808 4809static SEM_PC 4810SEM_FN_NAME (sh64_media,shard) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4811{ 4812#define FLD(f) abuf->fields.sfmt_add.f 4813 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4814 int UNUSED written = 0; 4815 IADDR UNUSED pc = abuf->addr; 4816 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4817 4818 { 4819 DI opval = SRADI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)); 4820 SET_H_GR (FLD (f_dest), opval); 4821 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4822 } 4823 4824 return vpc; 4825#undef FLD 4826} 4827 4828/* shardl: shard.l $rm, $rn, $rd */ 4829 4830static SEM_PC 4831SEM_FN_NAME (sh64_media,shardl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4832{ 4833#define FLD(f) abuf->fields.sfmt_add.f 4834 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4835 int UNUSED written = 0; 4836 IADDR UNUSED pc = abuf->addr; 4837 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4838 4839 { 4840 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63))); 4841 SET_H_GR (FLD (f_dest), opval); 4842 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4843 } 4844 4845 return vpc; 4846#undef FLD 4847} 4848 4849/* shari: shari $rm, $uimm6, $rd */ 4850 4851static SEM_PC 4852SEM_FN_NAME (sh64_media,shari) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4853{ 4854#define FLD(f) abuf->fields.sfmt_shari.f 4855 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4856 int UNUSED written = 0; 4857 IADDR UNUSED pc = abuf->addr; 4858 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4859 4860 { 4861 DI opval = SRADI (GET_H_GR (FLD (f_left)), FLD (f_uimm6)); 4862 SET_H_GR (FLD (f_dest), opval); 4863 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4864 } 4865 4866 return vpc; 4867#undef FLD 4868} 4869 4870/* sharil: shari.l $rm, $uimm6, $rd */ 4871 4872static SEM_PC 4873SEM_FN_NAME (sh64_media,sharil) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4874{ 4875#define FLD(f) abuf->fields.sfmt_shari.f 4876 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4877 int UNUSED written = 0; 4878 IADDR UNUSED pc = abuf->addr; 4879 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4880 4881 { 4882 DI opval = EXTSIDI (SRASI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63))); 4883 SET_H_GR (FLD (f_dest), opval); 4884 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4885 } 4886 4887 return vpc; 4888#undef FLD 4889} 4890 4891/* shlld: shlld $rm, $rn, $rd */ 4892 4893static SEM_PC 4894SEM_FN_NAME (sh64_media,shlld) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4895{ 4896#define FLD(f) abuf->fields.sfmt_add.f 4897 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4898 int UNUSED written = 0; 4899 IADDR UNUSED pc = abuf->addr; 4900 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4901 4902 { 4903 DI opval = SLLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)); 4904 SET_H_GR (FLD (f_dest), opval); 4905 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4906 } 4907 4908 return vpc; 4909#undef FLD 4910} 4911 4912/* shlldl: shlld.l $rm, $rn, $rd */ 4913 4914static SEM_PC 4915SEM_FN_NAME (sh64_media,shlldl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4916{ 4917#define FLD(f) abuf->fields.sfmt_add.f 4918 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4919 int UNUSED written = 0; 4920 IADDR UNUSED pc = abuf->addr; 4921 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4922 4923 { 4924 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63))); 4925 SET_H_GR (FLD (f_dest), opval); 4926 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4927 } 4928 4929 return vpc; 4930#undef FLD 4931} 4932 4933/* shlli: shlli $rm, $uimm6, $rd */ 4934 4935static SEM_PC 4936SEM_FN_NAME (sh64_media,shlli) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4937{ 4938#define FLD(f) abuf->fields.sfmt_shari.f 4939 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4940 int UNUSED written = 0; 4941 IADDR UNUSED pc = abuf->addr; 4942 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4943 4944 { 4945 DI opval = SLLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6)); 4946 SET_H_GR (FLD (f_dest), opval); 4947 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4948 } 4949 4950 return vpc; 4951#undef FLD 4952} 4953 4954/* shllil: shlli.l $rm, $uimm6, $rd */ 4955 4956static SEM_PC 4957SEM_FN_NAME (sh64_media,shllil) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4958{ 4959#define FLD(f) abuf->fields.sfmt_shari.f 4960 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4961 int UNUSED written = 0; 4962 IADDR UNUSED pc = abuf->addr; 4963 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4964 4965 { 4966 DI opval = EXTSIDI (SLLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63))); 4967 SET_H_GR (FLD (f_dest), opval); 4968 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4969 } 4970 4971 return vpc; 4972#undef FLD 4973} 4974 4975/* shlrd: shlrd $rm, $rn, $rd */ 4976 4977static SEM_PC 4978SEM_FN_NAME (sh64_media,shlrd) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 4979{ 4980#define FLD(f) abuf->fields.sfmt_add.f 4981 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 4982 int UNUSED written = 0; 4983 IADDR UNUSED pc = abuf->addr; 4984 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 4985 4986 { 4987 DI opval = SRLDI (GET_H_GR (FLD (f_left)), ANDDI (GET_H_GR (FLD (f_right)), 63)); 4988 SET_H_GR (FLD (f_dest), opval); 4989 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 4990 } 4991 4992 return vpc; 4993#undef FLD 4994} 4995 4996/* shlrdl: shlrd.l $rm, $rn, $rd */ 4997 4998static SEM_PC 4999SEM_FN_NAME (sh64_media,shlrdl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5000{ 5001#define FLD(f) abuf->fields.sfmt_add.f 5002 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5003 int UNUSED written = 0; 5004 IADDR UNUSED pc = abuf->addr; 5005 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5006 5007 { 5008 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDDI (GET_H_GR (FLD (f_right)), 63))); 5009 SET_H_GR (FLD (f_dest), opval); 5010 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5011 } 5012 5013 return vpc; 5014#undef FLD 5015} 5016 5017/* shlri: shlri $rm, $uimm6, $rd */ 5018 5019static SEM_PC 5020SEM_FN_NAME (sh64_media,shlri) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5021{ 5022#define FLD(f) abuf->fields.sfmt_shari.f 5023 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5024 int UNUSED written = 0; 5025 IADDR UNUSED pc = abuf->addr; 5026 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5027 5028 { 5029 DI opval = SRLDI (GET_H_GR (FLD (f_left)), FLD (f_uimm6)); 5030 SET_H_GR (FLD (f_dest), opval); 5031 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5032 } 5033 5034 return vpc; 5035#undef FLD 5036} 5037 5038/* shlril: shlri.l $rm, $uimm6, $rd */ 5039 5040static SEM_PC 5041SEM_FN_NAME (sh64_media,shlril) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5042{ 5043#define FLD(f) abuf->fields.sfmt_shari.f 5044 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5045 int UNUSED written = 0; 5046 IADDR UNUSED pc = abuf->addr; 5047 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5048 5049 { 5050 DI opval = EXTSIDI (SRLSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), ANDSI (FLD (f_uimm6), 63))); 5051 SET_H_GR (FLD (f_dest), opval); 5052 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5053 } 5054 5055 return vpc; 5056#undef FLD 5057} 5058 5059/* shori: shori $uimm16, $rd */ 5060 5061static SEM_PC 5062SEM_FN_NAME (sh64_media,shori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5063{ 5064#define FLD(f) abuf->fields.sfmt_shori.f 5065 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5066 int UNUSED written = 0; 5067 IADDR UNUSED pc = abuf->addr; 5068 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5069 5070 { 5071 DI opval = ORDI (SLLDI (GET_H_GR (FLD (f_dest)), 16), ZEXTSIDI (FLD (f_uimm16))); 5072 SET_H_GR (FLD (f_dest), opval); 5073 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5074 } 5075 5076 return vpc; 5077#undef FLD 5078} 5079 5080/* sleep: sleep */ 5081 5082static SEM_PC 5083SEM_FN_NAME (sh64_media,sleep) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5084{ 5085#define FLD(f) abuf->fields.fmt_empty.f 5086 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5087 int UNUSED written = 0; 5088 IADDR UNUSED pc = abuf->addr; 5089 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5090 5091((void) 0); /*nop*/ 5092 5093 return vpc; 5094#undef FLD 5095} 5096 5097/* stb: st.b $rm, $disp10, $rd */ 5098 5099static SEM_PC 5100SEM_FN_NAME (sh64_media,stb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5101{ 5102#define FLD(f) abuf->fields.sfmt_addi.f 5103 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5104 int UNUSED written = 0; 5105 IADDR UNUSED pc = abuf->addr; 5106 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5107 5108 { 5109 UQI opval = ANDQI (GET_H_GR (FLD (f_dest)), 255); 5110 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10))), opval); 5111 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5112 } 5113 5114 return vpc; 5115#undef FLD 5116} 5117 5118/* stl: st.l $rm, $disp10x4, $rd */ 5119 5120static SEM_PC 5121SEM_FN_NAME (sh64_media,stl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5122{ 5123#define FLD(f) abuf->fields.sfmt_flds.f 5124 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5125 int UNUSED written = 0; 5126 IADDR UNUSED pc = abuf->addr; 5127 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5128 5129 { 5130 SI opval = ANDSI (GET_H_GR (FLD (f_dest)), 0xffffffff); 5131 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x4))), opval); 5132 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5133 } 5134 5135 return vpc; 5136#undef FLD 5137} 5138 5139/* stq: st.q $rm, $disp10x8, $rd */ 5140 5141static SEM_PC 5142SEM_FN_NAME (sh64_media,stq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5143{ 5144#define FLD(f) abuf->fields.sfmt_fldd.f 5145 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5146 int UNUSED written = 0; 5147 IADDR UNUSED pc = abuf->addr; 5148 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5149 5150 { 5151 DI opval = GET_H_GR (FLD (f_dest)); 5152 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x8))), opval); 5153 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5154 } 5155 5156 return vpc; 5157#undef FLD 5158} 5159 5160/* stw: st.w $rm, $disp10x2, $rd */ 5161 5162static SEM_PC 5163SEM_FN_NAME (sh64_media,stw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5164{ 5165#define FLD(f) abuf->fields.sfmt_lduw.f 5166 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5167 int UNUSED written = 0; 5168 IADDR UNUSED pc = abuf->addr; 5169 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5170 5171 { 5172 HI opval = ANDHI (GET_H_GR (FLD (f_dest)), 65535); 5173 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_disp10x2))), opval); 5174 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5175 } 5176 5177 return vpc; 5178#undef FLD 5179} 5180 5181/* sthil: sthi.l $rm, $disp6, $rd */ 5182 5183static SEM_PC 5184SEM_FN_NAME (sh64_media,sthil) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5185{ 5186#define FLD(f) abuf->fields.sfmt_getcfg.f 5187 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5188 int UNUSED written = 0; 5189 IADDR UNUSED pc = abuf->addr; 5190 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5191 5192{ 5193 DI tmp_addr; 5194 QI tmp_bytecount; 5195 DI tmp_val; 5196 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5197 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 3), 1); 5198if (ANDQI (tmp_bytecount, 4)) { 5199 { 5200 SI opval = GET_H_GR (FLD (f_dest)); 5201 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5202 written |= (1 << 5); 5203 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5204 } 5205} else { 5206if (GET_H_ENDIAN ()) { 5207{ 5208 tmp_val = GET_H_GR (FLD (f_dest)); 5209if (ANDQI (tmp_bytecount, 1)) { 5210{ 5211 { 5212 UQI opval = ANDQI (tmp_val, 255); 5213 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5214 written |= (1 << 6); 5215 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5216 } 5217 tmp_val = SRLDI (tmp_val, 8); 5218} 5219} 5220if (ANDQI (tmp_bytecount, 2)) { 5221{ 5222 { 5223 HI opval = ANDHI (tmp_val, 65535); 5224 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5225 written |= (1 << 4); 5226 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5227 } 5228 tmp_val = SRLDI (tmp_val, 16); 5229} 5230} 5231} 5232} else { 5233{ 5234 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount))); 5235if (ANDQI (tmp_bytecount, 2)) { 5236{ 5237 { 5238 HI opval = ANDHI (tmp_val, 65535); 5239 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5240 written |= (1 << 4); 5241 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5242 } 5243 tmp_val = SRLDI (tmp_val, 16); 5244} 5245} 5246if (ANDQI (tmp_bytecount, 1)) { 5247{ 5248 { 5249 UQI opval = ANDQI (tmp_val, 255); 5250 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5251 written |= (1 << 6); 5252 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5253 } 5254 tmp_val = SRLDI (tmp_val, 8); 5255} 5256} 5257} 5258} 5259} 5260} 5261 5262 abuf->written = written; 5263 return vpc; 5264#undef FLD 5265} 5266 5267/* sthiq: sthi.q $rm, $disp6, $rd */ 5268 5269static SEM_PC 5270SEM_FN_NAME (sh64_media,sthiq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5271{ 5272#define FLD(f) abuf->fields.sfmt_getcfg.f 5273 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5274 int UNUSED written = 0; 5275 IADDR UNUSED pc = abuf->addr; 5276 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5277 5278{ 5279 DI tmp_addr; 5280 QI tmp_bytecount; 5281 DI tmp_val; 5282 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5283 tmp_bytecount = ADDDI (ANDDI (tmp_addr, 7), 1); 5284if (ANDQI (tmp_bytecount, 8)) { 5285 { 5286 DI opval = GET_H_GR (FLD (f_dest)); 5287 SETMEMDI (current_cpu, pc, ANDDI (tmp_addr, -8), opval); 5288 written |= (1 << 4); 5289 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5290 } 5291} else { 5292if (GET_H_ENDIAN ()) { 5293{ 5294 tmp_val = GET_H_GR (FLD (f_dest)); 5295if (ANDQI (tmp_bytecount, 1)) { 5296{ 5297 { 5298 UQI opval = ANDQI (tmp_val, 255); 5299 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5300 written |= (1 << 7); 5301 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5302 } 5303 tmp_val = SRLDI (tmp_val, 8); 5304} 5305} 5306if (ANDQI (tmp_bytecount, 2)) { 5307{ 5308 { 5309 HI opval = ANDHI (tmp_val, 65535); 5310 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5311 written |= (1 << 5); 5312 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5313 } 5314 tmp_val = SRLDI (tmp_val, 16); 5315} 5316} 5317if (ANDQI (tmp_bytecount, 4)) { 5318{ 5319 { 5320 SI opval = ANDSI (tmp_val, 0xffffffff); 5321 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval); 5322 written |= (1 << 6); 5323 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5324 } 5325 tmp_val = SRLDI (tmp_val, 32); 5326} 5327} 5328} 5329} else { 5330{ 5331 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount))); 5332if (ANDQI (tmp_bytecount, 4)) { 5333{ 5334 { 5335 SI opval = ANDSI (tmp_val, 0xffffffff); 5336 SETMEMSI (current_cpu, pc, ANDDI (tmp_addr, -8), opval); 5337 written |= (1 << 6); 5338 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5339 } 5340 tmp_val = SRLDI (tmp_val, 32); 5341} 5342} 5343if (ANDQI (tmp_bytecount, 2)) { 5344{ 5345 { 5346 HI opval = ANDHI (tmp_val, 65535); 5347 SETMEMHI (current_cpu, pc, ANDDI (tmp_addr, -4), opval); 5348 written |= (1 << 5); 5349 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5350 } 5351 tmp_val = SRLDI (tmp_val, 16); 5352} 5353} 5354if (ANDQI (tmp_bytecount, 1)) { 5355{ 5356 { 5357 UQI opval = ANDQI (tmp_val, 255); 5358 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5359 written |= (1 << 7); 5360 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5361 } 5362 tmp_val = SRLDI (tmp_val, 8); 5363} 5364} 5365} 5366} 5367} 5368} 5369 5370 abuf->written = written; 5371 return vpc; 5372#undef FLD 5373} 5374 5375/* stlol: stlo.l $rm, $disp6, $rd */ 5376 5377static SEM_PC 5378SEM_FN_NAME (sh64_media,stlol) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5379{ 5380#define FLD(f) abuf->fields.sfmt_getcfg.f 5381 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5382 int UNUSED written = 0; 5383 IADDR UNUSED pc = abuf->addr; 5384 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5385 5386{ 5387 DI tmp_addr; 5388 QI tmp_bytecount; 5389 DI tmp_val; 5390 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5391 tmp_bytecount = SUBSI (4, ANDDI (tmp_addr, 3)); 5392if (ANDQI (tmp_bytecount, 4)) { 5393 { 5394 USI opval = GET_H_GR (FLD (f_dest)); 5395 SETMEMUSI (current_cpu, pc, tmp_addr, opval); 5396 written |= (1 << 6); 5397 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5398 } 5399} else { 5400if (GET_H_ENDIAN ()) { 5401{ 5402 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (32, MULSI (8, tmp_bytecount))); 5403if (ANDQI (tmp_bytecount, 2)) { 5404{ 5405 { 5406 UHI opval = ANDHI (tmp_val, 65535); 5407 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5408 written |= (1 << 4); 5409 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5410 } 5411 tmp_val = SRLDI (tmp_val, 16); 5412} 5413} 5414if (ANDQI (tmp_bytecount, 1)) { 5415{ 5416 { 5417 UQI opval = ANDQI (tmp_val, 255); 5418 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5419 written |= (1 << 5); 5420 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5421 } 5422 tmp_val = SRLDI (tmp_val, 8); 5423} 5424} 5425} 5426} else { 5427{ 5428 tmp_val = GET_H_GR (FLD (f_dest)); 5429if (ANDQI (tmp_bytecount, 1)) { 5430{ 5431 { 5432 UQI opval = ANDQI (tmp_val, 255); 5433 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5434 written |= (1 << 5); 5435 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5436 } 5437 tmp_val = SRLDI (tmp_val, 8); 5438} 5439} 5440if (ANDQI (tmp_bytecount, 2)) { 5441{ 5442 { 5443 UHI opval = ANDHI (tmp_val, 65535); 5444 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5445 written |= (1 << 4); 5446 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5447 } 5448 tmp_val = SRLDI (tmp_val, 16); 5449} 5450} 5451} 5452} 5453} 5454} 5455 5456 abuf->written = written; 5457 return vpc; 5458#undef FLD 5459} 5460 5461/* stloq: stlo.q $rm, $disp6, $rd */ 5462 5463static SEM_PC 5464SEM_FN_NAME (sh64_media,stloq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5465{ 5466#define FLD(f) abuf->fields.sfmt_getcfg.f 5467 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5468 int UNUSED written = 0; 5469 IADDR UNUSED pc = abuf->addr; 5470 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5471 5472{ 5473 DI tmp_addr; 5474 QI tmp_bytecount; 5475 DI tmp_val; 5476 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), FLD (f_disp6)); 5477 tmp_bytecount = SUBSI (8, ANDDI (tmp_addr, 7)); 5478if (ANDQI (tmp_bytecount, 8)) { 5479 { 5480 UDI opval = GET_H_GR (FLD (f_dest)); 5481 SETMEMUDI (current_cpu, pc, tmp_addr, opval); 5482 written |= (1 << 4); 5483 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5484 } 5485} else { 5486if (GET_H_ENDIAN ()) { 5487{ 5488 tmp_val = SRLDI (GET_H_GR (FLD (f_dest)), SUBSI (64, MULSI (8, tmp_bytecount))); 5489if (ANDQI (tmp_bytecount, 4)) { 5490{ 5491 { 5492 USI opval = ANDSI (tmp_val, 0xffffffff); 5493 SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval); 5494 written |= (1 << 7); 5495 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5496 } 5497 tmp_val = SRLDI (tmp_val, 32); 5498} 5499} 5500if (ANDQI (tmp_bytecount, 2)) { 5501{ 5502 { 5503 UHI opval = ANDHI (tmp_val, 65535); 5504 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5505 written |= (1 << 5); 5506 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5507 } 5508 tmp_val = SRLDI (tmp_val, 16); 5509} 5510} 5511if (ANDQI (tmp_bytecount, 1)) { 5512{ 5513 { 5514 UQI opval = ANDQI (tmp_val, 255); 5515 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5516 written |= (1 << 6); 5517 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5518 } 5519 tmp_val = SRLDI (tmp_val, 8); 5520} 5521} 5522} 5523} else { 5524{ 5525 tmp_val = GET_H_GR (FLD (f_dest)); 5526if (ANDQI (tmp_bytecount, 1)) { 5527{ 5528 { 5529 UQI opval = ANDQI (tmp_val, 255); 5530 SETMEMUQI (current_cpu, pc, tmp_addr, opval); 5531 written |= (1 << 6); 5532 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5533 } 5534 tmp_val = SRLDI (tmp_val, 8); 5535} 5536} 5537if (ANDQI (tmp_bytecount, 2)) { 5538{ 5539 { 5540 UHI opval = ANDHI (tmp_val, 65535); 5541 SETMEMUHI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 1), -2), opval); 5542 written |= (1 << 5); 5543 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5544 } 5545 tmp_val = SRLDI (tmp_val, 16); 5546} 5547} 5548if (ANDQI (tmp_bytecount, 4)) { 5549{ 5550 { 5551 USI opval = ANDSI (tmp_val, 0xffffffff); 5552 SETMEMUSI (current_cpu, pc, ANDDI (ADDDI (tmp_addr, 3), -4), opval); 5553 written |= (1 << 7); 5554 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5555 } 5556 tmp_val = SRLDI (tmp_val, 32); 5557} 5558} 5559} 5560} 5561} 5562} 5563 5564 abuf->written = written; 5565 return vpc; 5566#undef FLD 5567} 5568 5569/* stxb: stx.b $rm, $rn, $rd */ 5570 5571static SEM_PC 5572SEM_FN_NAME (sh64_media,stxb) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5573{ 5574#define FLD(f) abuf->fields.sfmt_add.f 5575 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5576 int UNUSED written = 0; 5577 IADDR UNUSED pc = abuf->addr; 5578 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5579 5580 { 5581 UQI opval = SUBWORDDIQI (GET_H_GR (FLD (f_dest)), 7); 5582 SETMEMUQI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5583 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5584 } 5585 5586 return vpc; 5587#undef FLD 5588} 5589 5590/* stxl: stx.l $rm, $rn, $rd */ 5591 5592static SEM_PC 5593SEM_FN_NAME (sh64_media,stxl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5594{ 5595#define FLD(f) abuf->fields.sfmt_add.f 5596 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5597 int UNUSED written = 0; 5598 IADDR UNUSED pc = abuf->addr; 5599 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5600 5601 { 5602 SI opval = SUBWORDDISI (GET_H_GR (FLD (f_dest)), 1); 5603 SETMEMSI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5604 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5605 } 5606 5607 return vpc; 5608#undef FLD 5609} 5610 5611/* stxq: stx.q $rm, $rn, $rd */ 5612 5613static SEM_PC 5614SEM_FN_NAME (sh64_media,stxq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5615{ 5616#define FLD(f) abuf->fields.sfmt_add.f 5617 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5618 int UNUSED written = 0; 5619 IADDR UNUSED pc = abuf->addr; 5620 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5621 5622 { 5623 DI opval = GET_H_GR (FLD (f_dest)); 5624 SETMEMDI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5625 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5626 } 5627 5628 return vpc; 5629#undef FLD 5630} 5631 5632/* stxw: stx.w $rm, $rn, $rd */ 5633 5634static SEM_PC 5635SEM_FN_NAME (sh64_media,stxw) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5636{ 5637#define FLD(f) abuf->fields.sfmt_add.f 5638 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5639 int UNUSED written = 0; 5640 IADDR UNUSED pc = abuf->addr; 5641 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5642 5643 { 5644 HI opval = SUBWORDDIHI (GET_H_GR (FLD (f_dest)), 3); 5645 SETMEMHI (current_cpu, pc, ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))), opval); 5646 TRACE_RESULT (current_cpu, abuf, "memory", 'x', opval); 5647 } 5648 5649 return vpc; 5650#undef FLD 5651} 5652 5653/* sub: sub $rm, $rn, $rd */ 5654 5655static SEM_PC 5656SEM_FN_NAME (sh64_media,sub) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5657{ 5658#define FLD(f) abuf->fields.sfmt_add.f 5659 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5660 int UNUSED written = 0; 5661 IADDR UNUSED pc = abuf->addr; 5662 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5663 5664 { 5665 DI opval = SUBDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 5666 SET_H_GR (FLD (f_dest), opval); 5667 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5668 } 5669 5670 return vpc; 5671#undef FLD 5672} 5673 5674/* subl: sub.l $rm, $rn, $rd */ 5675 5676static SEM_PC 5677SEM_FN_NAME (sh64_media,subl) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5678{ 5679#define FLD(f) abuf->fields.sfmt_add.f 5680 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5681 int UNUSED written = 0; 5682 IADDR UNUSED pc = abuf->addr; 5683 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5684 5685 { 5686 DI opval = EXTSIDI (SUBSI (SUBWORDDISI (GET_H_GR (FLD (f_left)), 1), SUBWORDDISI (GET_H_GR (FLD (f_right)), 1))); 5687 SET_H_GR (FLD (f_dest), opval); 5688 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5689 } 5690 5691 return vpc; 5692#undef FLD 5693} 5694 5695/* swapq: swap.q $rm, $rn, $rd */ 5696 5697static SEM_PC 5698SEM_FN_NAME (sh64_media,swapq) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5699{ 5700#define FLD(f) abuf->fields.sfmt_add.f 5701 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5702 int UNUSED written = 0; 5703 IADDR UNUSED pc = abuf->addr; 5704 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5705 5706{ 5707 DI tmp_addr; 5708 DI tmp_temp; 5709 tmp_addr = ADDDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 5710 tmp_temp = GETMEMDI (current_cpu, pc, tmp_addr); 5711 { 5712 DI opval = GET_H_GR (FLD (f_dest)); 5713 SETMEMDI (current_cpu, pc, tmp_addr, opval); 5714 TRACE_RESULT (current_cpu, abuf, "memory", 'D', opval); 5715 } 5716 { 5717 DI opval = tmp_temp; 5718 SET_H_GR (FLD (f_dest), opval); 5719 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5720 } 5721} 5722 5723 return vpc; 5724#undef FLD 5725} 5726 5727/* synci: synci */ 5728 5729static SEM_PC 5730SEM_FN_NAME (sh64_media,synci) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5731{ 5732#define FLD(f) abuf->fields.fmt_empty.f 5733 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5734 int UNUSED written = 0; 5735 IADDR UNUSED pc = abuf->addr; 5736 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5737 5738((void) 0); /*nop*/ 5739 5740 return vpc; 5741#undef FLD 5742} 5743 5744/* synco: synco */ 5745 5746static SEM_PC 5747SEM_FN_NAME (sh64_media,synco) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5748{ 5749#define FLD(f) abuf->fields.fmt_empty.f 5750 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5751 int UNUSED written = 0; 5752 IADDR UNUSED pc = abuf->addr; 5753 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5754 5755((void) 0); /*nop*/ 5756 5757 return vpc; 5758#undef FLD 5759} 5760 5761/* trapa: trapa $rm */ 5762 5763static SEM_PC 5764SEM_FN_NAME (sh64_media,trapa) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5765{ 5766#define FLD(f) abuf->fields.sfmt_xori.f 5767 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5768 int UNUSED written = 0; 5769 IADDR UNUSED pc = abuf->addr; 5770 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5771 5772sh64_trapa (current_cpu, GET_H_GR (FLD (f_left)), pc); 5773 5774 return vpc; 5775#undef FLD 5776} 5777 5778/* xor: xor $rm, $rn, $rd */ 5779 5780static SEM_PC 5781SEM_FN_NAME (sh64_media,xor) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5782{ 5783#define FLD(f) abuf->fields.sfmt_add.f 5784 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5785 int UNUSED written = 0; 5786 IADDR UNUSED pc = abuf->addr; 5787 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5788 5789 { 5790 DI opval = XORDI (GET_H_GR (FLD (f_left)), GET_H_GR (FLD (f_right))); 5791 SET_H_GR (FLD (f_dest), opval); 5792 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5793 } 5794 5795 return vpc; 5796#undef FLD 5797} 5798 5799/* xori: xori $rm, $imm6, $rd */ 5800 5801static SEM_PC 5802SEM_FN_NAME (sh64_media,xori) (SIM_CPU *current_cpu, SEM_ARG sem_arg) 5803{ 5804#define FLD(f) abuf->fields.sfmt_xori.f 5805 ARGBUF *abuf = SEM_ARGBUF (sem_arg); 5806 int UNUSED written = 0; 5807 IADDR UNUSED pc = abuf->addr; 5808 SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 4); 5809 5810 { 5811 DI opval = XORDI (GET_H_GR (FLD (f_left)), EXTSIDI (FLD (f_imm6))); 5812 SET_H_GR (FLD (f_dest), opval); 5813 TRACE_RESULT (current_cpu, abuf, "gr", 'D', opval); 5814 } 5815 5816 return vpc; 5817#undef FLD 5818} 5819 5820/* Table of all semantic fns. */ 5821 5822static const struct sem_fn_desc sem_fns[] = { 5823 { SH64_MEDIA_INSN_X_INVALID, SEM_FN_NAME (sh64_media,x_invalid) }, 5824 { SH64_MEDIA_INSN_X_AFTER, SEM_FN_NAME (sh64_media,x_after) }, 5825 { SH64_MEDIA_INSN_X_BEFORE, SEM_FN_NAME (sh64_media,x_before) }, 5826 { SH64_MEDIA_INSN_X_CTI_CHAIN, SEM_FN_NAME (sh64_media,x_cti_chain) }, 5827 { SH64_MEDIA_INSN_X_CHAIN, SEM_FN_NAME (sh64_media,x_chain) }, 5828 { SH64_MEDIA_INSN_X_BEGIN, SEM_FN_NAME (sh64_media,x_begin) }, 5829 { SH64_MEDIA_INSN_ADD, SEM_FN_NAME (sh64_media,add) }, 5830 { SH64_MEDIA_INSN_ADDL, SEM_FN_NAME (sh64_media,addl) }, 5831 { SH64_MEDIA_INSN_ADDI, SEM_FN_NAME (sh64_media,addi) }, 5832 { SH64_MEDIA_INSN_ADDIL, SEM_FN_NAME (sh64_media,addil) }, 5833 { SH64_MEDIA_INSN_ADDZL, SEM_FN_NAME (sh64_media,addzl) }, 5834 { SH64_MEDIA_INSN_ALLOCO, SEM_FN_NAME (sh64_media,alloco) }, 5835 { SH64_MEDIA_INSN_AND, SEM_FN_NAME (sh64_media,and) }, 5836 { SH64_MEDIA_INSN_ANDC, SEM_FN_NAME (sh64_media,andc) }, 5837 { SH64_MEDIA_INSN_ANDI, SEM_FN_NAME (sh64_media,andi) }, 5838 { SH64_MEDIA_INSN_BEQ, SEM_FN_NAME (sh64_media,beq) }, 5839 { SH64_MEDIA_INSN_BEQI, SEM_FN_NAME (sh64_media,beqi) }, 5840 { SH64_MEDIA_INSN_BGE, SEM_FN_NAME (sh64_media,bge) }, 5841 { SH64_MEDIA_INSN_BGEU, SEM_FN_NAME (sh64_media,bgeu) }, 5842 { SH64_MEDIA_INSN_BGT, SEM_FN_NAME (sh64_media,bgt) }, 5843 { SH64_MEDIA_INSN_BGTU, SEM_FN_NAME (sh64_media,bgtu) }, 5844 { SH64_MEDIA_INSN_BLINK, SEM_FN_NAME (sh64_media,blink) }, 5845 { SH64_MEDIA_INSN_BNE, SEM_FN_NAME (sh64_media,bne) }, 5846 { SH64_MEDIA_INSN_BNEI, SEM_FN_NAME (sh64_media,bnei) }, 5847 { SH64_MEDIA_INSN_BRK, SEM_FN_NAME (sh64_media,brk) }, 5848 { SH64_MEDIA_INSN_BYTEREV, SEM_FN_NAME (sh64_media,byterev) }, 5849 { SH64_MEDIA_INSN_CMPEQ, SEM_FN_NAME (sh64_media,cmpeq) }, 5850 { SH64_MEDIA_INSN_CMPGT, SEM_FN_NAME (sh64_media,cmpgt) }, 5851 { SH64_MEDIA_INSN_CMPGTU, SEM_FN_NAME (sh64_media,cmpgtu) }, 5852 { SH64_MEDIA_INSN_CMVEQ, SEM_FN_NAME (sh64_media,cmveq) }, 5853 { SH64_MEDIA_INSN_CMVNE, SEM_FN_NAME (sh64_media,cmvne) }, 5854 { SH64_MEDIA_INSN_FABSD, SEM_FN_NAME (sh64_media,fabsd) }, 5855 { SH64_MEDIA_INSN_FABSS, SEM_FN_NAME (sh64_media,fabss) }, 5856 { SH64_MEDIA_INSN_FADDD, SEM_FN_NAME (sh64_media,faddd) }, 5857 { SH64_MEDIA_INSN_FADDS, SEM_FN_NAME (sh64_media,fadds) }, 5858 { SH64_MEDIA_INSN_FCMPEQD, SEM_FN_NAME (sh64_media,fcmpeqd) }, 5859 { SH64_MEDIA_INSN_FCMPEQS, SEM_FN_NAME (sh64_media,fcmpeqs) }, 5860 { SH64_MEDIA_INSN_FCMPGED, SEM_FN_NAME (sh64_media,fcmpged) }, 5861 { SH64_MEDIA_INSN_FCMPGES, SEM_FN_NAME (sh64_media,fcmpges) }, 5862 { SH64_MEDIA_INSN_FCMPGTD, SEM_FN_NAME (sh64_media,fcmpgtd) }, 5863 { SH64_MEDIA_INSN_FCMPGTS, SEM_FN_NAME (sh64_media,fcmpgts) }, 5864 { SH64_MEDIA_INSN_FCMPUND, SEM_FN_NAME (sh64_media,fcmpund) }, 5865 { SH64_MEDIA_INSN_FCMPUNS, SEM_FN_NAME (sh64_media,fcmpuns) }, 5866 { SH64_MEDIA_INSN_FCNVDS, SEM_FN_NAME (sh64_media,fcnvds) }, 5867 { SH64_MEDIA_INSN_FCNVSD, SEM_FN_NAME (sh64_media,fcnvsd) }, 5868 { SH64_MEDIA_INSN_FDIVD, SEM_FN_NAME (sh64_media,fdivd) }, 5869 { SH64_MEDIA_INSN_FDIVS, SEM_FN_NAME (sh64_media,fdivs) }, 5870 { SH64_MEDIA_INSN_FGETSCR, SEM_FN_NAME (sh64_media,fgetscr) }, 5871 { SH64_MEDIA_INSN_FIPRS, SEM_FN_NAME (sh64_media,fiprs) }, 5872 { SH64_MEDIA_INSN_FLDD, SEM_FN_NAME (sh64_media,fldd) }, 5873 { SH64_MEDIA_INSN_FLDP, SEM_FN_NAME (sh64_media,fldp) }, 5874 { SH64_MEDIA_INSN_FLDS, SEM_FN_NAME (sh64_media,flds) }, 5875 { SH64_MEDIA_INSN_FLDXD, SEM_FN_NAME (sh64_media,fldxd) }, 5876 { SH64_MEDIA_INSN_FLDXP, SEM_FN_NAME (sh64_media,fldxp) }, 5877 { SH64_MEDIA_INSN_FLDXS, SEM_FN_NAME (sh64_media,fldxs) }, 5878 { SH64_MEDIA_INSN_FLOATLD, SEM_FN_NAME (sh64_media,floatld) }, 5879 { SH64_MEDIA_INSN_FLOATLS, SEM_FN_NAME (sh64_media,floatls) }, 5880 { SH64_MEDIA_INSN_FLOATQD, SEM_FN_NAME (sh64_media,floatqd) }, 5881 { SH64_MEDIA_INSN_FLOATQS, SEM_FN_NAME (sh64_media,floatqs) }, 5882 { SH64_MEDIA_INSN_FMACS, SEM_FN_NAME (sh64_media,fmacs) }, 5883 { SH64_MEDIA_INSN_FMOVD, SEM_FN_NAME (sh64_media,fmovd) }, 5884 { SH64_MEDIA_INSN_FMOVDQ, SEM_FN_NAME (sh64_media,fmovdq) }, 5885 { SH64_MEDIA_INSN_FMOVLS, SEM_FN_NAME (sh64_media,fmovls) }, 5886 { SH64_MEDIA_INSN_FMOVQD, SEM_FN_NAME (sh64_media,fmovqd) }, 5887 { SH64_MEDIA_INSN_FMOVS, SEM_FN_NAME (sh64_media,fmovs) }, 5888 { SH64_MEDIA_INSN_FMOVSL, SEM_FN_NAME (sh64_media,fmovsl) }, 5889 { SH64_MEDIA_INSN_FMULD, SEM_FN_NAME (sh64_media,fmuld) }, 5890 { SH64_MEDIA_INSN_FMULS, SEM_FN_NAME (sh64_media,fmuls) }, 5891 { SH64_MEDIA_INSN_FNEGD, SEM_FN_NAME (sh64_media,fnegd) }, 5892 { SH64_MEDIA_INSN_FNEGS, SEM_FN_NAME (sh64_media,fnegs) }, 5893 { SH64_MEDIA_INSN_FPUTSCR, SEM_FN_NAME (sh64_media,fputscr) }, 5894 { SH64_MEDIA_INSN_FSQRTD, SEM_FN_NAME (sh64_media,fsqrtd) }, 5895 { SH64_MEDIA_INSN_FSQRTS, SEM_FN_NAME (sh64_media,fsqrts) }, 5896 { SH64_MEDIA_INSN_FSTD, SEM_FN_NAME (sh64_media,fstd) }, 5897 { SH64_MEDIA_INSN_FSTP, SEM_FN_NAME (sh64_media,fstp) }, 5898 { SH64_MEDIA_INSN_FSTS, SEM_FN_NAME (sh64_media,fsts) }, 5899 { SH64_MEDIA_INSN_FSTXD, SEM_FN_NAME (sh64_media,fstxd) }, 5900 { SH64_MEDIA_INSN_FSTXP, SEM_FN_NAME (sh64_media,fstxp) }, 5901 { SH64_MEDIA_INSN_FSTXS, SEM_FN_NAME (sh64_media,fstxs) }, 5902 { SH64_MEDIA_INSN_FSUBD, SEM_FN_NAME (sh64_media,fsubd) }, 5903 { SH64_MEDIA_INSN_FSUBS, SEM_FN_NAME (sh64_media,fsubs) }, 5904 { SH64_MEDIA_INSN_FTRCDL, SEM_FN_NAME (sh64_media,ftrcdl) }, 5905 { SH64_MEDIA_INSN_FTRCSL, SEM_FN_NAME (sh64_media,ftrcsl) }, 5906 { SH64_MEDIA_INSN_FTRCDQ, SEM_FN_NAME (sh64_media,ftrcdq) }, 5907 { SH64_MEDIA_INSN_FTRCSQ, SEM_FN_NAME (sh64_media,ftrcsq) }, 5908 { SH64_MEDIA_INSN_FTRVS, SEM_FN_NAME (sh64_media,ftrvs) }, 5909 { SH64_MEDIA_INSN_GETCFG, SEM_FN_NAME (sh64_media,getcfg) }, 5910 { SH64_MEDIA_INSN_GETCON, SEM_FN_NAME (sh64_media,getcon) }, 5911 { SH64_MEDIA_INSN_GETTR, SEM_FN_NAME (sh64_media,gettr) }, 5912 { SH64_MEDIA_INSN_ICBI, SEM_FN_NAME (sh64_media,icbi) }, 5913 { SH64_MEDIA_INSN_LDB, SEM_FN_NAME (sh64_media,ldb) }, 5914 { SH64_MEDIA_INSN_LDL, SEM_FN_NAME (sh64_media,ldl) }, 5915 { SH64_MEDIA_INSN_LDQ, SEM_FN_NAME (sh64_media,ldq) }, 5916 { SH64_MEDIA_INSN_LDUB, SEM_FN_NAME (sh64_media,ldub) }, 5917 { SH64_MEDIA_INSN_LDUW, SEM_FN_NAME (sh64_media,lduw) }, 5918 { SH64_MEDIA_INSN_LDW, SEM_FN_NAME (sh64_media,ldw) }, 5919 { SH64_MEDIA_INSN_LDHIL, SEM_FN_NAME (sh64_media,ldhil) }, 5920 { SH64_MEDIA_INSN_LDHIQ, SEM_FN_NAME (sh64_media,ldhiq) }, 5921 { SH64_MEDIA_INSN_LDLOL, SEM_FN_NAME (sh64_media,ldlol) }, 5922 { SH64_MEDIA_INSN_LDLOQ, SEM_FN_NAME (sh64_media,ldloq) }, 5923 { SH64_MEDIA_INSN_LDXB, SEM_FN_NAME (sh64_media,ldxb) }, 5924 { SH64_MEDIA_INSN_LDXL, SEM_FN_NAME (sh64_media,ldxl) }, 5925 { SH64_MEDIA_INSN_LDXQ, SEM_FN_NAME (sh64_media,ldxq) }, 5926 { SH64_MEDIA_INSN_LDXUB, SEM_FN_NAME (sh64_media,ldxub) }, 5927 { SH64_MEDIA_INSN_LDXUW, SEM_FN_NAME (sh64_media,ldxuw) }, 5928 { SH64_MEDIA_INSN_LDXW, SEM_FN_NAME (sh64_media,ldxw) }, 5929 { SH64_MEDIA_INSN_MABSL, SEM_FN_NAME (sh64_media,mabsl) }, 5930 { SH64_MEDIA_INSN_MABSW, SEM_FN_NAME (sh64_media,mabsw) }, 5931 { SH64_MEDIA_INSN_MADDL, SEM_FN_NAME (sh64_media,maddl) }, 5932 { SH64_MEDIA_INSN_MADDW, SEM_FN_NAME (sh64_media,maddw) }, 5933 { SH64_MEDIA_INSN_MADDSL, SEM_FN_NAME (sh64_media,maddsl) }, 5934 { SH64_MEDIA_INSN_MADDSUB, SEM_FN_NAME (sh64_media,maddsub) }, 5935 { SH64_MEDIA_INSN_MADDSW, SEM_FN_NAME (sh64_media,maddsw) }, 5936 { SH64_MEDIA_INSN_MCMPEQB, SEM_FN_NAME (sh64_media,mcmpeqb) }, 5937 { SH64_MEDIA_INSN_MCMPEQL, SEM_FN_NAME (sh64_media,mcmpeql) }, 5938 { SH64_MEDIA_INSN_MCMPEQW, SEM_FN_NAME (sh64_media,mcmpeqw) }, 5939 { SH64_MEDIA_INSN_MCMPGTL, SEM_FN_NAME (sh64_media,mcmpgtl) }, 5940 { SH64_MEDIA_INSN_MCMPGTUB, SEM_FN_NAME (sh64_media,mcmpgtub) }, 5941 { SH64_MEDIA_INSN_MCMPGTW, SEM_FN_NAME (sh64_media,mcmpgtw) }, 5942 { SH64_MEDIA_INSN_MCMV, SEM_FN_NAME (sh64_media,mcmv) }, 5943 { SH64_MEDIA_INSN_MCNVSLW, SEM_FN_NAME (sh64_media,mcnvslw) }, 5944 { SH64_MEDIA_INSN_MCNVSWB, SEM_FN_NAME (sh64_media,mcnvswb) }, 5945 { SH64_MEDIA_INSN_MCNVSWUB, SEM_FN_NAME (sh64_media,mcnvswub) }, 5946 { SH64_MEDIA_INSN_MEXTR1, SEM_FN_NAME (sh64_media,mextr1) }, 5947 { SH64_MEDIA_INSN_MEXTR2, SEM_FN_NAME (sh64_media,mextr2) }, 5948 { SH64_MEDIA_INSN_MEXTR3, SEM_FN_NAME (sh64_media,mextr3) }, 5949 { SH64_MEDIA_INSN_MEXTR4, SEM_FN_NAME (sh64_media,mextr4) }, 5950 { SH64_MEDIA_INSN_MEXTR5, SEM_FN_NAME (sh64_media,mextr5) }, 5951 { SH64_MEDIA_INSN_MEXTR6, SEM_FN_NAME (sh64_media,mextr6) }, 5952 { SH64_MEDIA_INSN_MEXTR7, SEM_FN_NAME (sh64_media,mextr7) }, 5953 { SH64_MEDIA_INSN_MMACFXWL, SEM_FN_NAME (sh64_media,mmacfxwl) }, 5954 { SH64_MEDIA_INSN_MMACNFX_WL, SEM_FN_NAME (sh64_media,mmacnfx_wl) }, 5955 { SH64_MEDIA_INSN_MMULL, SEM_FN_NAME (sh64_media,mmull) }, 5956 { SH64_MEDIA_INSN_MMULW, SEM_FN_NAME (sh64_media,mmulw) }, 5957 { SH64_MEDIA_INSN_MMULFXL, SEM_FN_NAME (sh64_media,mmulfxl) }, 5958 { SH64_MEDIA_INSN_MMULFXW, SEM_FN_NAME (sh64_media,mmulfxw) }, 5959 { SH64_MEDIA_INSN_MMULFXRPW, SEM_FN_NAME (sh64_media,mmulfxrpw) }, 5960 { SH64_MEDIA_INSN_MMULHIWL, SEM_FN_NAME (sh64_media,mmulhiwl) }, 5961 { SH64_MEDIA_INSN_MMULLOWL, SEM_FN_NAME (sh64_media,mmullowl) }, 5962 { SH64_MEDIA_INSN_MMULSUMWQ, SEM_FN_NAME (sh64_media,mmulsumwq) }, 5963 { SH64_MEDIA_INSN_MOVI, SEM_FN_NAME (sh64_media,movi) }, 5964 { SH64_MEDIA_INSN_MPERMW, SEM_FN_NAME (sh64_media,mpermw) }, 5965 { SH64_MEDIA_INSN_MSADUBQ, SEM_FN_NAME (sh64_media,msadubq) }, 5966 { SH64_MEDIA_INSN_MSHALDSL, SEM_FN_NAME (sh64_media,mshaldsl) }, 5967 { SH64_MEDIA_INSN_MSHALDSW, SEM_FN_NAME (sh64_media,mshaldsw) }, 5968 { SH64_MEDIA_INSN_MSHARDL, SEM_FN_NAME (sh64_media,mshardl) }, 5969 { SH64_MEDIA_INSN_MSHARDW, SEM_FN_NAME (sh64_media,mshardw) }, 5970 { SH64_MEDIA_INSN_MSHARDSQ, SEM_FN_NAME (sh64_media,mshardsq) }, 5971 { SH64_MEDIA_INSN_MSHFHIB, SEM_FN_NAME (sh64_media,mshfhib) }, 5972 { SH64_MEDIA_INSN_MSHFHIL, SEM_FN_NAME (sh64_media,mshfhil) }, 5973 { SH64_MEDIA_INSN_MSHFHIW, SEM_FN_NAME (sh64_media,mshfhiw) }, 5974 { SH64_MEDIA_INSN_MSHFLOB, SEM_FN_NAME (sh64_media,mshflob) }, 5975 { SH64_MEDIA_INSN_MSHFLOL, SEM_FN_NAME (sh64_media,mshflol) }, 5976 { SH64_MEDIA_INSN_MSHFLOW, SEM_FN_NAME (sh64_media,mshflow) }, 5977 { SH64_MEDIA_INSN_MSHLLDL, SEM_FN_NAME (sh64_media,mshlldl) }, 5978 { SH64_MEDIA_INSN_MSHLLDW, SEM_FN_NAME (sh64_media,mshlldw) }, 5979 { SH64_MEDIA_INSN_MSHLRDL, SEM_FN_NAME (sh64_media,mshlrdl) }, 5980 { SH64_MEDIA_INSN_MSHLRDW, SEM_FN_NAME (sh64_media,mshlrdw) }, 5981 { SH64_MEDIA_INSN_MSUBL, SEM_FN_NAME (sh64_media,msubl) }, 5982 { SH64_MEDIA_INSN_MSUBW, SEM_FN_NAME (sh64_media,msubw) }, 5983 { SH64_MEDIA_INSN_MSUBSL, SEM_FN_NAME (sh64_media,msubsl) }, 5984 { SH64_MEDIA_INSN_MSUBSUB, SEM_FN_NAME (sh64_media,msubsub) }, 5985 { SH64_MEDIA_INSN_MSUBSW, SEM_FN_NAME (sh64_media,msubsw) }, 5986 { SH64_MEDIA_INSN_MULSL, SEM_FN_NAME (sh64_media,mulsl) }, 5987 { SH64_MEDIA_INSN_MULUL, SEM_FN_NAME (sh64_media,mulul) }, 5988 { SH64_MEDIA_INSN_NOP, SEM_FN_NAME (sh64_media,nop) }, 5989 { SH64_MEDIA_INSN_NSB, SEM_FN_NAME (sh64_media,nsb) }, 5990 { SH64_MEDIA_INSN_OCBI, SEM_FN_NAME (sh64_media,ocbi) }, 5991 { SH64_MEDIA_INSN_OCBP, SEM_FN_NAME (sh64_media,ocbp) }, 5992 { SH64_MEDIA_INSN_OCBWB, SEM_FN_NAME (sh64_media,ocbwb) }, 5993 { SH64_MEDIA_INSN_OR, SEM_FN_NAME (sh64_media,or) }, 5994 { SH64_MEDIA_INSN_ORI, SEM_FN_NAME (sh64_media,ori) }, 5995 { SH64_MEDIA_INSN_PREFI, SEM_FN_NAME (sh64_media,prefi) }, 5996 { SH64_MEDIA_INSN_PTA, SEM_FN_NAME (sh64_media,pta) }, 5997 { SH64_MEDIA_INSN_PTABS, SEM_FN_NAME (sh64_media,ptabs) }, 5998 { SH64_MEDIA_INSN_PTB, SEM_FN_NAME (sh64_media,ptb) }, 5999 { SH64_MEDIA_INSN_PTREL, SEM_FN_NAME (sh64_media,ptrel) }, 6000 { SH64_MEDIA_INSN_PUTCFG, SEM_FN_NAME (sh64_media,putcfg) }, 6001 { SH64_MEDIA_INSN_PUTCON, SEM_FN_NAME (sh64_media,putcon) }, 6002 { SH64_MEDIA_INSN_RTE, SEM_FN_NAME (sh64_media,rte) }, 6003 { SH64_MEDIA_INSN_SHARD, SEM_FN_NAME (sh64_media,shard) }, 6004 { SH64_MEDIA_INSN_SHARDL, SEM_FN_NAME (sh64_media,shardl) }, 6005 { SH64_MEDIA_INSN_SHARI, SEM_FN_NAME (sh64_media,shari) }, 6006 { SH64_MEDIA_INSN_SHARIL, SEM_FN_NAME (sh64_media,sharil) }, 6007 { SH64_MEDIA_INSN_SHLLD, SEM_FN_NAME (sh64_media,shlld) }, 6008 { SH64_MEDIA_INSN_SHLLDL, SEM_FN_NAME (sh64_media,shlldl) }, 6009 { SH64_MEDIA_INSN_SHLLI, SEM_FN_NAME (sh64_media,shlli) }, 6010 { SH64_MEDIA_INSN_SHLLIL, SEM_FN_NAME (sh64_media,shllil) }, 6011 { SH64_MEDIA_INSN_SHLRD, SEM_FN_NAME (sh64_media,shlrd) }, 6012 { SH64_MEDIA_INSN_SHLRDL, SEM_FN_NAME (sh64_media,shlrdl) }, 6013 { SH64_MEDIA_INSN_SHLRI, SEM_FN_NAME (sh64_media,shlri) }, 6014 { SH64_MEDIA_INSN_SHLRIL, SEM_FN_NAME (sh64_media,shlril) }, 6015 { SH64_MEDIA_INSN_SHORI, SEM_FN_NAME (sh64_media,shori) }, 6016 { SH64_MEDIA_INSN_SLEEP, SEM_FN_NAME (sh64_media,sleep) }, 6017 { SH64_MEDIA_INSN_STB, SEM_FN_NAME (sh64_media,stb) }, 6018 { SH64_MEDIA_INSN_STL, SEM_FN_NAME (sh64_media,stl) }, 6019 { SH64_MEDIA_INSN_STQ, SEM_FN_NAME (sh64_media,stq) }, 6020 { SH64_MEDIA_INSN_STW, SEM_FN_NAME (sh64_media,stw) }, 6021 { SH64_MEDIA_INSN_STHIL, SEM_FN_NAME (sh64_media,sthil) }, 6022 { SH64_MEDIA_INSN_STHIQ, SEM_FN_NAME (sh64_media,sthiq) }, 6023 { SH64_MEDIA_INSN_STLOL, SEM_FN_NAME (sh64_media,stlol) }, 6024 { SH64_MEDIA_INSN_STLOQ, SEM_FN_NAME (sh64_media,stloq) }, 6025 { SH64_MEDIA_INSN_STXB, SEM_FN_NAME (sh64_media,stxb) }, 6026 { SH64_MEDIA_INSN_STXL, SEM_FN_NAME (sh64_media,stxl) }, 6027 { SH64_MEDIA_INSN_STXQ, SEM_FN_NAME (sh64_media,stxq) }, 6028 { SH64_MEDIA_INSN_STXW, SEM_FN_NAME (sh64_media,stxw) }, 6029 { SH64_MEDIA_INSN_SUB, SEM_FN_NAME (sh64_media,sub) }, 6030 { SH64_MEDIA_INSN_SUBL, SEM_FN_NAME (sh64_media,subl) }, 6031 { SH64_MEDIA_INSN_SWAPQ, SEM_FN_NAME (sh64_media,swapq) }, 6032 { SH64_MEDIA_INSN_SYNCI, SEM_FN_NAME (sh64_media,synci) }, 6033 { SH64_MEDIA_INSN_SYNCO, SEM_FN_NAME (sh64_media,synco) }, 6034 { SH64_MEDIA_INSN_TRAPA, SEM_FN_NAME (sh64_media,trapa) }, 6035 { SH64_MEDIA_INSN_XOR, SEM_FN_NAME (sh64_media,xor) }, 6036 { SH64_MEDIA_INSN_XORI, SEM_FN_NAME (sh64_media,xori) }, 6037 { 0, 0 } 6038}; 6039 6040/* Add the semantic fns to IDESC_TABLE. */ 6041 6042void 6043SEM_FN_NAME (sh64_media,init_idesc_table) (SIM_CPU *current_cpu) 6044{ 6045 IDESC *idesc_table = CPU_IDESC (current_cpu); 6046 const struct sem_fn_desc *sf; 6047 int mach_num = MACH_NUM (CPU_MACH (current_cpu)); 6048 6049 for (sf = &sem_fns[0]; sf->fn != 0; ++sf) 6050 { 6051 const CGEN_INSN *insn = idesc_table[sf->index].idata; 6052 int valid_p = (CGEN_INSN_VIRTUAL_P (insn) 6053 || CGEN_INSN_MACH_HAS_P (insn, mach_num)); 6054#if FAST_P 6055 if (valid_p) 6056 idesc_table[sf->index].sem_fast = sf->fn; 6057 else 6058 idesc_table[sf->index].sem_fast = SEM_FN_NAME (sh64_media,x_invalid); 6059#else 6060 if (valid_p) 6061 idesc_table[sf->index].sem_full = sf->fn; 6062 else 6063 idesc_table[sf->index].sem_full = SEM_FN_NAME (sh64_media,x_invalid); 6064#endif 6065 } 6066} 6067 6068