neon.isa (9557:8666e81607a6) | neon.isa (10037:5cac77888310) |
---|---|
1// -*- mode:c++ -*- 2 | 1// -*- mode:c++ -*- 2 |
3// Copyright (c) 2010 ARM Limited | 3// Copyright (c) 2010-2011 ARM Limited |
4// All rights reserved 5// 6// The license below extends only to copyright in the software and shall 7// not be construed as granting a license to any other intellectual 8// property including but not limited to intellectual property relating 9// to a hardware implementation of the functionality of the software 10// licensed hereunder. You may use the software subject to the license 11// terms below provided that you ensure that this notice is replicated --- 77 unchanged lines hidden (view full) --- 89 } else { 90 return decodeNeonSThreeUReg<Base>(size, machInst, dest, op1, op2); 91 } 92 } 93 94 template <template <typename T> class Base> 95 StaticInstPtr 96 decodeNeonUThreeUSReg(unsigned size, | 4// All rights reserved 5// 6// The license below extends only to copyright in the software and shall 7// not be construed as granting a license to any other intellectual 8// property including but not limited to intellectual property relating 9// to a hardware implementation of the functionality of the software 10// licensed hereunder. You may use the software subject to the license 11// terms below provided that you ensure that this notice is replicated --- 77 unchanged lines hidden (view full) --- 89 } else { 90 return decodeNeonSThreeUReg<Base>(size, machInst, dest, op1, op2); 91 } 92 } 93 94 template <template <typename T> class Base> 95 StaticInstPtr 96 decodeNeonUThreeUSReg(unsigned size, |
97 ExtMachInst machInst, IntRegIndex dest, 98 IntRegIndex op1, IntRegIndex op2) | 97 ExtMachInst machInst, IntRegIndex dest, 98 IntRegIndex op1, IntRegIndex op2) |
99 { 100 switch (size) { 101 case 0: 102 return new Base<uint8_t>(machInst, dest, op1, op2); 103 case 1: 104 return new Base<uint16_t>(machInst, dest, op1, op2); 105 case 2: 106 return new Base<uint32_t>(machInst, dest, op1, op2); 107 default: 108 return new Unknown(machInst); 109 } 110 } 111 112 template <template <typename T> class Base> 113 StaticInstPtr 114 decodeNeonSThreeUSReg(unsigned size, | 99 { 100 switch (size) { 101 case 0: 102 return new Base<uint8_t>(machInst, dest, op1, op2); 103 case 1: 104 return new Base<uint16_t>(machInst, dest, op1, op2); 105 case 2: 106 return new Base<uint32_t>(machInst, dest, op1, op2); 107 default: 108 return new Unknown(machInst); 109 } 110 } 111 112 template <template <typename T> class Base> 113 StaticInstPtr 114 decodeNeonSThreeUSReg(unsigned size, |
115 ExtMachInst machInst, IntRegIndex dest, 116 IntRegIndex op1, IntRegIndex op2) | 115 ExtMachInst machInst, IntRegIndex dest, 116 IntRegIndex op1, IntRegIndex op2) |
117 { 118 switch (size) { 119 case 0: 120 return new Base<int8_t>(machInst, dest, op1, op2); 121 case 1: 122 return new Base<int16_t>(machInst, dest, op1, op2); 123 case 2: 124 return new Base<int32_t>(machInst, dest, op1, op2); 125 default: 126 return new Unknown(machInst); 127 } 128 } 129 130 template <template <typename T> class Base> 131 StaticInstPtr | 117 { 118 switch (size) { 119 case 0: 120 return new Base<int8_t>(machInst, dest, op1, op2); 121 case 1: 122 return new Base<int16_t>(machInst, dest, op1, op2); 123 case 2: 124 return new Base<int32_t>(machInst, dest, op1, op2); 125 default: 126 return new Unknown(machInst); 127 } 128 } 129 130 template <template <typename T> class Base> 131 StaticInstPtr |
132 decodeNeonSThreeHAndWReg(unsigned size, ExtMachInst machInst, 133 IntRegIndex dest, IntRegIndex op1, 134 IntRegIndex op2) 135 { 136 switch (size) { 137 case 1: 138 return new Base<int16_t>(machInst, dest, op1, op2); 139 case 2: 140 return new Base<int32_t>(machInst, dest, op1, op2); 141 default: 142 return new Unknown(machInst); 143 } 144 } 145 146 template <template <typename T> class Base> 147 StaticInstPtr 148 decodeNeonSThreeImmHAndWReg(unsigned size, ExtMachInst machInst, 149 IntRegIndex dest, IntRegIndex op1, 150 IntRegIndex op2, uint64_t imm) 151 { 152 switch (size) { 153 case 1: 154 return new Base<int16_t>(machInst, dest, op1, op2, imm); 155 case 2: 156 return new Base<int32_t>(machInst, dest, op1, op2, imm); 157 default: 158 return new Unknown(machInst); 159 } 160 } 161 162 template <template <typename T> class Base> 163 StaticInstPtr |
|
132 decodeNeonUSThreeUSReg(bool notSigned, unsigned size, 133 ExtMachInst machInst, IntRegIndex dest, 134 IntRegIndex op1, IntRegIndex op2) 135 { 136 if (notSigned) { 137 return decodeNeonUThreeUSReg<Base>( 138 size, machInst, dest, op1, op2); 139 } else { --- 32 unchanged lines hidden (view full) --- 172 return decodeNeonSThreeUSReg<BaseD>( 173 size, machInst, dest, op1, op2); 174 } 175 } 176 177 template <template <typename T> class BaseD, 178 template <typename T> class BaseQ> 179 StaticInstPtr | 164 decodeNeonUSThreeUSReg(bool notSigned, unsigned size, 165 ExtMachInst machInst, IntRegIndex dest, 166 IntRegIndex op1, IntRegIndex op2) 167 { 168 if (notSigned) { 169 return decodeNeonUThreeUSReg<Base>( 170 size, machInst, dest, op1, op2); 171 } else { --- 32 unchanged lines hidden (view full) --- 204 return decodeNeonSThreeUSReg<BaseD>( 205 size, machInst, dest, op1, op2); 206 } 207 } 208 209 template <template <typename T> class BaseD, 210 template <typename T> class BaseQ> 211 StaticInstPtr |
212 decodeNeonSThreeXReg(bool q, unsigned size, 213 ExtMachInst machInst, IntRegIndex dest, 214 IntRegIndex op1, IntRegIndex op2) 215 { 216 if (q) { 217 return decodeNeonSThreeUReg<BaseQ>( 218 size, machInst, dest, op1, op2); 219 } else { 220 return decodeNeonSThreeUSReg<BaseD>( 221 size, machInst, dest, op1, op2); 222 } 223 } 224 225 template <template <typename T> class BaseD, 226 template <typename T> class BaseQ> 227 StaticInstPtr 228 decodeNeonUThreeXReg(bool q, unsigned size, 229 ExtMachInst machInst, IntRegIndex dest, 230 IntRegIndex op1, IntRegIndex op2) 231 { 232 if (q) { 233 return decodeNeonUThreeUReg<BaseQ>( 234 size, machInst, dest, op1, op2); 235 } else { 236 return decodeNeonUThreeUSReg<BaseD>( 237 size, machInst, dest, op1, op2); 238 } 239 } 240 241 template <template <typename T> class BaseD, 242 template <typename T> class BaseQ> 243 StaticInstPtr |
|
180 decodeNeonUSThreeSReg(bool q, bool notSigned, unsigned size, 181 ExtMachInst machInst, IntRegIndex dest, 182 IntRegIndex op1, IntRegIndex op2) 183 { 184 if (notSigned) { 185 return decodeNeonUThreeSReg<BaseD, BaseQ>( 186 q, size, machInst, dest, op1, op2); 187 } else { --- 48 unchanged lines hidden (view full) --- 236 return decodeNeonSThreeReg<BaseD, BaseQ>( 237 q, size, machInst, dest, op1, op2); 238 } 239 } 240 241 template <template <typename T> class BaseD, 242 template <typename T> class BaseQ> 243 StaticInstPtr | 244 decodeNeonUSThreeSReg(bool q, bool notSigned, unsigned size, 245 ExtMachInst machInst, IntRegIndex dest, 246 IntRegIndex op1, IntRegIndex op2) 247 { 248 if (notSigned) { 249 return decodeNeonUThreeSReg<BaseD, BaseQ>( 250 q, size, machInst, dest, op1, op2); 251 } else { --- 48 unchanged lines hidden (view full) --- 300 return decodeNeonSThreeReg<BaseD, BaseQ>( 301 q, size, machInst, dest, op1, op2); 302 } 303 } 304 305 template <template <typename T> class BaseD, 306 template <typename T> class BaseQ> 307 StaticInstPtr |
308 decodeNeonUThreeFpReg(bool q, unsigned size, ExtMachInst machInst, 309 IntRegIndex dest, IntRegIndex op1, IntRegIndex op2) 310 { 311 if (q) { 312 if (size) 313 return new BaseQ<uint64_t>(machInst, dest, op1, op2); 314 else 315 return new BaseQ<uint32_t>(machInst, dest, op1, op2); 316 } else { 317 if (size) 318 return new Unknown(machInst); 319 else 320 return new BaseD<uint32_t>(machInst, dest, op1, op2); 321 } 322 } 323 324 template <template <typename T> class Base> 325 StaticInstPtr 326 decodeNeonUThreeScFpReg(bool size, ExtMachInst machInst, 327 IntRegIndex dest, IntRegIndex op1, IntRegIndex op2) 328 { 329 if (size) 330 return new Base<uint64_t>(machInst, dest, op1, op2); 331 else 332 return new Base<uint32_t>(machInst, dest, op1, op2); 333 } 334 335 template <template <typename T> class Base> 336 StaticInstPtr 337 decodeNeonUThreeImmScFpReg(bool size, ExtMachInst machInst, 338 IntRegIndex dest, IntRegIndex op1, 339 IntRegIndex op2, uint64_t imm) 340 { 341 if (size) 342 return new Base<uint64_t>(machInst, dest, op1, op2, imm); 343 else 344 return new Base<uint32_t>(machInst, dest, op1, op2, imm); 345 } 346 347 template <template <typename T> class BaseD, 348 template <typename T> class BaseQ> 349 StaticInstPtr 350 decodeNeonUThreeImmHAndWReg(bool q, unsigned size, ExtMachInst machInst, 351 IntRegIndex dest, IntRegIndex op1, 352 IntRegIndex op2, uint64_t imm) 353 { 354 if (q) { 355 switch (size) { 356 case 1: 357 return new BaseQ<uint16_t>(machInst, dest, op1, op2, imm); 358 case 2: 359 return new BaseQ<uint32_t>(machInst, dest, op1, op2, imm); 360 default: 361 return new Unknown(machInst); 362 } 363 } else { 364 switch (size) { 365 case 1: 366 return new BaseD<uint16_t>(machInst, dest, op1, op2, imm); 367 case 2: 368 return new BaseD<uint32_t>(machInst, dest, op1, op2, imm); 369 default: 370 return new Unknown(machInst); 371 } 372 } 373 } 374 375 template <template <typename T> class BaseD, 376 template <typename T> class BaseQ> 377 StaticInstPtr 378 decodeNeonSThreeImmHAndWReg(bool q, unsigned size, ExtMachInst machInst, 379 IntRegIndex dest, IntRegIndex op1, 380 IntRegIndex op2, uint64_t imm) 381 { 382 if (q) { 383 switch (size) { 384 case 1: 385 return new BaseQ<int16_t>(machInst, dest, op1, op2, imm); 386 case 2: 387 return new BaseQ<int32_t>(machInst, dest, op1, op2, imm); 388 default: 389 return new Unknown(machInst); 390 } 391 } else { 392 switch (size) { 393 case 1: 394 return new BaseD<int16_t>(machInst, dest, op1, op2, imm); 395 case 2: 396 return new BaseD<int32_t>(machInst, dest, op1, op2, imm); 397 default: 398 return new Unknown(machInst); 399 } 400 } 401 } 402 403 template <template <typename T> class BaseD, 404 template <typename T> class BaseQ> 405 StaticInstPtr 406 decodeNeonUThreeImmFpReg(bool q, unsigned size, ExtMachInst machInst, 407 IntRegIndex dest, IntRegIndex op1, 408 IntRegIndex op2, uint64_t imm) 409 { 410 if (q) { 411 if (size) 412 return new BaseQ<uint64_t>(machInst, dest, op1, op2, imm); 413 else 414 return new BaseQ<uint32_t>(machInst, dest, op1, op2, imm); 415 } else { 416 if (size) 417 return new Unknown(machInst); 418 else 419 return new BaseD<uint32_t>(machInst, dest, op1, op2, imm); 420 } 421 } 422 423 template <template <typename T> class BaseD, 424 template <typename T> class BaseQ> 425 StaticInstPtr |
|
244 decodeNeonUTwoShiftReg(bool q, unsigned size, 245 ExtMachInst machInst, IntRegIndex dest, 246 IntRegIndex op1, uint64_t imm) 247 { 248 if (q) { 249 switch (size) { 250 case 0: 251 return new BaseQ<uint8_t>(machInst, dest, op1, imm); --- 88 unchanged lines hidden (view full) --- 340 return new Base<uint16_t>(machInst, dest, op1, imm); 341 case 2: 342 return new Base<uint32_t>(machInst, dest, op1, imm); 343 default: 344 return new Unknown(machInst); 345 } 346 } 347 | 426 decodeNeonUTwoShiftReg(bool q, unsigned size, 427 ExtMachInst machInst, IntRegIndex dest, 428 IntRegIndex op1, uint64_t imm) 429 { 430 if (q) { 431 switch (size) { 432 case 0: 433 return new BaseQ<uint8_t>(machInst, dest, op1, imm); --- 88 unchanged lines hidden (view full) --- 522 return new Base<uint16_t>(machInst, dest, op1, imm); 523 case 2: 524 return new Base<uint32_t>(machInst, dest, op1, imm); 525 default: 526 return new Unknown(machInst); 527 } 528 } 529 |
530 template <template <typename T> class Base> 531 StaticInstPtr 532 decodeNeonUTwoShiftUReg(unsigned size, 533 ExtMachInst machInst, IntRegIndex dest, 534 IntRegIndex op1, uint64_t imm) 535 { 536 switch (size) { 537 case 0: 538 return new Base<uint8_t>(machInst, dest, op1, imm); 539 case 1: 540 return new Base<uint16_t>(machInst, dest, op1, imm); 541 case 2: 542 return new Base<uint32_t>(machInst, dest, op1, imm); 543 case 3: 544 return new Base<uint64_t>(machInst, dest, op1, imm); 545 default: 546 return new Unknown(machInst); 547 } 548 } 549 550 template <template <typename T> class Base> 551 StaticInstPtr 552 decodeNeonSTwoShiftUReg(unsigned size, 553 ExtMachInst machInst, IntRegIndex dest, 554 IntRegIndex op1, uint64_t imm) 555 { 556 switch (size) { 557 case 0: 558 return new Base<int8_t>(machInst, dest, op1, imm); 559 case 1: 560 return new Base<int16_t>(machInst, dest, op1, imm); 561 case 2: 562 return new Base<int32_t>(machInst, dest, op1, imm); 563 case 3: 564 return new Base<int64_t>(machInst, dest, op1, imm); 565 default: 566 return new Unknown(machInst); 567 } 568 } 569 |
|
348 template <template <typename T> class BaseD, 349 template <typename T> class BaseQ> 350 StaticInstPtr 351 decodeNeonUTwoShiftSReg(bool q, unsigned size, 352 ExtMachInst machInst, IntRegIndex dest, 353 IntRegIndex op1, uint64_t imm) 354 { 355 if (q) { --- 50 unchanged lines hidden (view full) --- 406 return decodeNeonUTwoShiftSReg<BaseD, BaseQ>( 407 q, size, machInst, dest, op1, imm); 408 } else { 409 return decodeNeonSTwoShiftSReg<BaseD, BaseQ>( 410 q, size, machInst, dest, op1, imm); 411 } 412 } 413 | 570 template <template <typename T> class BaseD, 571 template <typename T> class BaseQ> 572 StaticInstPtr 573 decodeNeonUTwoShiftSReg(bool q, unsigned size, 574 ExtMachInst machInst, IntRegIndex dest, 575 IntRegIndex op1, uint64_t imm) 576 { 577 if (q) { --- 50 unchanged lines hidden (view full) --- 628 return decodeNeonUTwoShiftSReg<BaseD, BaseQ>( 629 q, size, machInst, dest, op1, imm); 630 } else { 631 return decodeNeonSTwoShiftSReg<BaseD, BaseQ>( 632 q, size, machInst, dest, op1, imm); 633 } 634 } 635 |
636 template <template <typename T> class BaseD, 637 template <typename T> class BaseQ> 638 StaticInstPtr 639 decodeNeonUTwoShiftXReg(bool q, unsigned size, ExtMachInst machInst, 640 IntRegIndex dest, IntRegIndex op1, uint64_t imm) 641 { 642 if (q) { 643 return decodeNeonUTwoShiftUReg<BaseQ>( 644 size, machInst, dest, op1, imm); 645 } else { 646 return decodeNeonUTwoShiftUSReg<BaseD>( 647 size, machInst, dest, op1, imm); 648 } 649 } 650 651 template <template <typename T> class BaseD, 652 template <typename T> class BaseQ> 653 StaticInstPtr 654 decodeNeonSTwoShiftXReg(bool q, unsigned size, ExtMachInst machInst, 655 IntRegIndex dest, IntRegIndex op1, uint64_t imm) 656 { 657 if (q) { 658 return decodeNeonSTwoShiftUReg<BaseQ>( 659 size, machInst, dest, op1, imm); 660 } else { 661 return decodeNeonSTwoShiftUSReg<BaseD>( 662 size, machInst, dest, op1, imm); 663 } 664 } 665 |
|
414 template <template <typename T> class Base> 415 StaticInstPtr | 666 template <template <typename T> class Base> 667 StaticInstPtr |
668 decodeNeonUTwoShiftUFpReg(unsigned size, ExtMachInst machInst, 669 IntRegIndex dest, IntRegIndex op1, uint64_t imm) 670 { 671 if (size) 672 return new Base<uint64_t>(machInst, dest, op1, imm); 673 else 674 return new Base<uint32_t>(machInst, dest, op1, imm); 675 } 676 677 template <template <typename T> class BaseD, 678 template <typename T> class BaseQ> 679 StaticInstPtr 680 decodeNeonUTwoShiftFpReg(bool q, unsigned size, ExtMachInst machInst, 681 IntRegIndex dest, IntRegIndex op1, uint64_t imm) 682 { 683 if (q) { 684 if (size) 685 return new BaseQ<uint64_t>(machInst, dest, op1, imm); 686 else 687 return new BaseQ<uint32_t>(machInst, dest, op1, imm); 688 } else { 689 if (size) 690 return new Unknown(machInst); 691 else 692 return new BaseD<uint32_t>(machInst, dest, op1, imm); 693 } 694 } 695 696 template <template <typename T> class Base> 697 StaticInstPtr |
|
416 decodeNeonUTwoMiscUSReg(unsigned size, 417 ExtMachInst machInst, IntRegIndex dest, 418 IntRegIndex op1) 419 { 420 switch (size) { 421 case 0: 422 return new Base<uint8_t>(machInst, dest, op1); 423 case 1: --- 22 unchanged lines hidden (view full) --- 446 return new Unknown(machInst); 447 } 448 } 449 450 template <template <typename T> class BaseD, 451 template <typename T> class BaseQ> 452 StaticInstPtr 453 decodeNeonUTwoMiscSReg(bool q, unsigned size, | 698 decodeNeonUTwoMiscUSReg(unsigned size, 699 ExtMachInst machInst, IntRegIndex dest, 700 IntRegIndex op1) 701 { 702 switch (size) { 703 case 0: 704 return new Base<uint8_t>(machInst, dest, op1); 705 case 1: --- 22 unchanged lines hidden (view full) --- 728 return new Unknown(machInst); 729 } 730 } 731 732 template <template <typename T> class BaseD, 733 template <typename T> class BaseQ> 734 StaticInstPtr 735 decodeNeonUTwoMiscSReg(bool q, unsigned size, |
454 ExtMachInst machInst, IntRegIndex dest, 455 IntRegIndex op1) | 736 ExtMachInst machInst, IntRegIndex dest, 737 IntRegIndex op1) |
456 { 457 if (q) { 458 return decodeNeonUTwoMiscUSReg<BaseQ>(size, machInst, dest, op1); 459 } else { 460 return decodeNeonUTwoMiscUSReg<BaseD>(size, machInst, dest, op1); 461 } 462 } 463 464 template <template <typename T> class BaseD, 465 template <typename T> class BaseQ> 466 StaticInstPtr 467 decodeNeonSTwoMiscSReg(bool q, unsigned size, | 738 { 739 if (q) { 740 return decodeNeonUTwoMiscUSReg<BaseQ>(size, machInst, dest, op1); 741 } else { 742 return decodeNeonUTwoMiscUSReg<BaseD>(size, machInst, dest, op1); 743 } 744 } 745 746 template <template <typename T> class BaseD, 747 template <typename T> class BaseQ> 748 StaticInstPtr 749 decodeNeonSTwoMiscSReg(bool q, unsigned size, |
468 ExtMachInst machInst, IntRegIndex dest, 469 IntRegIndex op1) | 750 ExtMachInst machInst, IntRegIndex dest, 751 IntRegIndex op1) |
470 { 471 if (q) { 472 return decodeNeonSTwoMiscUSReg<BaseQ>(size, machInst, dest, op1); 473 } else { 474 return decodeNeonSTwoMiscUSReg<BaseD>(size, machInst, dest, op1); 475 } 476 } 477 --- 15 unchanged lines hidden (view full) --- 493 default: 494 return new Unknown(machInst); 495 } 496 } 497 498 template <template <typename T> class Base> 499 StaticInstPtr 500 decodeNeonSTwoMiscUReg(unsigned size, | 752 { 753 if (q) { 754 return decodeNeonSTwoMiscUSReg<BaseQ>(size, machInst, dest, op1); 755 } else { 756 return decodeNeonSTwoMiscUSReg<BaseD>(size, machInst, dest, op1); 757 } 758 } 759 --- 15 unchanged lines hidden (view full) --- 775 default: 776 return new Unknown(machInst); 777 } 778 } 779 780 template <template <typename T> class Base> 781 StaticInstPtr 782 decodeNeonSTwoMiscUReg(unsigned size, |
501 ExtMachInst machInst, IntRegIndex dest, 502 IntRegIndex op1) | 783 ExtMachInst machInst, IntRegIndex dest, 784 IntRegIndex op1) |
503 { 504 switch (size) { 505 case 0: 506 return new Base<int8_t>(machInst, dest, op1); 507 case 1: 508 return new Base<int16_t>(machInst, dest, op1); 509 case 2: 510 return new Base<int32_t>(machInst, dest, op1); --- 43 unchanged lines hidden (view full) --- 554 return decodeNeonUTwoShiftSReg<BaseD, BaseQ>( 555 q, size, machInst, dest, op1); 556 } else { 557 return decodeNeonSTwoShiftSReg<BaseD, BaseQ>( 558 q, size, machInst, dest, op1); 559 } 560 } 561 | 785 { 786 switch (size) { 787 case 0: 788 return new Base<int8_t>(machInst, dest, op1); 789 case 1: 790 return new Base<int16_t>(machInst, dest, op1); 791 case 2: 792 return new Base<int32_t>(machInst, dest, op1); --- 43 unchanged lines hidden (view full) --- 836 return decodeNeonUTwoShiftSReg<BaseD, BaseQ>( 837 q, size, machInst, dest, op1); 838 } else { 839 return decodeNeonSTwoShiftSReg<BaseD, BaseQ>( 840 q, size, machInst, dest, op1); 841 } 842 } 843 |
844 template <template <typename T> class BaseD, 845 template <typename T> class BaseQ> 846 StaticInstPtr 847 decodeNeonUTwoMiscXReg(bool q, unsigned size, ExtMachInst machInst, 848 IntRegIndex dest, IntRegIndex op1) 849 { 850 if (q) { 851 return decodeNeonUTwoMiscUReg<BaseQ>(size, machInst, dest, op1); 852 } else { 853 return decodeNeonUTwoMiscUSReg<BaseD>(size, machInst, dest, op1); 854 } 855 } 856 857 template <template <typename T> class BaseD, 858 template <typename T> class BaseQ> 859 StaticInstPtr 860 decodeNeonSTwoMiscXReg(bool q, unsigned size, ExtMachInst machInst, 861 IntRegIndex dest, IntRegIndex op1) 862 { 863 if (q) { 864 return decodeNeonSTwoMiscUReg<BaseQ>(size, machInst, dest, op1); 865 } else { 866 return decodeNeonSTwoMiscUSReg<BaseD>(size, machInst, dest, op1); 867 } 868 } 869 870 template <template <typename T> class BaseD, 871 template <typename T> class BaseQ> 872 StaticInstPtr 873 decodeNeonUTwoMiscFpReg(bool q, unsigned size, ExtMachInst machInst, 874 IntRegIndex dest, IntRegIndex op1) 875 { 876 if (q) { 877 if (size) 878 return new BaseQ<uint64_t>(machInst, dest, op1); 879 else 880 return new BaseQ<uint32_t>(machInst, dest, op1); 881 } else { 882 if (size) 883 return new Unknown(machInst); 884 else 885 return new BaseD<uint32_t>(machInst, dest, op1); 886 } 887 } 888 889 template <template <typename T> class BaseD, 890 template <typename T> class BaseQ> 891 StaticInstPtr 892 decodeNeonUTwoMiscPwiseScFpReg(unsigned size, ExtMachInst machInst, 893 IntRegIndex dest, IntRegIndex op1) 894 { 895 if (size) 896 return new BaseQ<uint64_t>(machInst, dest, op1); 897 else 898 return new BaseD<uint32_t>(machInst, dest, op1); 899 } 900 901 template <template <typename T> class Base> 902 StaticInstPtr 903 decodeNeonUTwoMiscScFpReg(unsigned size, ExtMachInst machInst, 904 IntRegIndex dest, IntRegIndex op1) 905 { 906 if (size) 907 return new Base<uint64_t>(machInst, dest, op1); 908 else 909 return new Base<uint32_t>(machInst, dest, op1); 910 } 911 912 template <template <typename T> class BaseD, 913 template <typename T> class BaseQ> 914 StaticInstPtr 915 decodeNeonUAcrossLanesReg(bool q, unsigned size, ExtMachInst machInst, 916 IntRegIndex dest, IntRegIndex op1) 917 { 918 if (q) { 919 switch (size) { 920 case 0x0: 921 return new BaseQ<uint8_t>(machInst, dest, op1); 922 case 0x1: 923 return new BaseQ<uint16_t>(machInst, dest, op1); 924 case 0x2: 925 return new BaseQ<uint32_t>(machInst, dest, op1); 926 default: 927 return new Unknown(machInst); 928 } 929 } else { 930 switch (size) { 931 case 0x0: 932 return new BaseD<uint8_t>(machInst, dest, op1); 933 case 0x1: 934 return new BaseD<uint16_t>(machInst, dest, op1); 935 default: 936 return new Unknown(machInst); 937 } 938 } 939 } 940 941 template <template <typename T> class BaseD, 942 template <typename T> class BaseQ, 943 template <typename T> class BaseBQ> 944 StaticInstPtr 945 decodeNeonUAcrossLanesReg(bool q, unsigned size, ExtMachInst machInst, 946 IntRegIndex dest, IntRegIndex op1) 947 { 948 if (q) { 949 switch (size) { 950 case 0x0: 951 return new BaseQ<uint8_t>(machInst, dest, op1); 952 case 0x1: 953 return new BaseQ<uint16_t>(machInst, dest, op1); 954 case 0x2: 955 return new BaseBQ<uint32_t>(machInst, dest, op1); 956 default: 957 return new Unknown(machInst); 958 } 959 } else { 960 switch (size) { 961 case 0x0: 962 return new BaseD<uint8_t>(machInst, dest, op1); 963 case 0x1: 964 return new BaseD<uint16_t>(machInst, dest, op1); 965 default: 966 return new Unknown(machInst); 967 } 968 } 969 } 970 971 template <template <typename T> class BaseD, 972 template <typename T> class BaseQ> 973 StaticInstPtr 974 decodeNeonSAcrossLanesReg(bool q, unsigned size, ExtMachInst machInst, 975 IntRegIndex dest, IntRegIndex op1) 976 { 977 if (q) { 978 switch (size) { 979 case 0x0: 980 return new BaseQ<int8_t>(machInst, dest, op1); 981 case 0x1: 982 return new BaseQ<int16_t>(machInst, dest, op1); 983 case 0x2: 984 return new BaseQ<int32_t>(machInst, dest, op1); 985 default: 986 return new Unknown(machInst); 987 } 988 } else { 989 switch (size) { 990 case 0x0: 991 return new BaseD<int8_t>(machInst, dest, op1); 992 case 0x1: 993 return new BaseD<int16_t>(machInst, dest, op1); 994 default: 995 return new Unknown(machInst); 996 } 997 } 998 } 999 1000 template <template <typename T> class BaseD, 1001 template <typename T> class BaseQ, 1002 template <typename T> class BaseBQ> 1003 StaticInstPtr 1004 decodeNeonUAcrossLanesLongReg(bool q, unsigned size, ExtMachInst machInst, 1005 IntRegIndex dest, IntRegIndex op1) 1006 { 1007 if (q) { 1008 switch (size) { 1009 case 0x0: 1010 return new BaseQ<uint8_t>(machInst, dest, op1); 1011 case 0x1: 1012 return new BaseQ<uint16_t>(machInst, dest, op1); 1013 case 0x2: 1014 return new BaseBQ<uint32_t>(machInst, dest, op1); 1015 default: 1016 return new Unknown(machInst); 1017 } 1018 } else { 1019 switch (size) { 1020 case 0x0: 1021 return new BaseD<uint8_t>(machInst, dest, op1); 1022 case 0x1: 1023 return new BaseD<uint16_t>(machInst, dest, op1); 1024 default: 1025 return new Unknown(machInst); 1026 } 1027 } 1028 } 1029 1030 template <template <typename T> class BaseD, 1031 template <typename T> class BaseQ, 1032 template <typename T> class BaseBQ> 1033 StaticInstPtr 1034 decodeNeonSAcrossLanesLongReg(bool q, unsigned size, ExtMachInst machInst, 1035 IntRegIndex dest, IntRegIndex op1) 1036 { 1037 if (q) { 1038 switch (size) { 1039 case 0x0: 1040 return new BaseQ<int8_t>(machInst, dest, op1); 1041 case 0x1: 1042 return new BaseQ<int16_t>(machInst, dest, op1); 1043 case 0x2: 1044 return new BaseBQ<int32_t>(machInst, dest, op1); 1045 default: 1046 return new Unknown(machInst); 1047 } 1048 } else { 1049 switch (size) { 1050 case 0x0: 1051 return new BaseD<int8_t>(machInst, dest, op1); 1052 case 0x1: 1053 return new BaseD<int16_t>(machInst, dest, op1); 1054 default: 1055 return new Unknown(machInst); 1056 } 1057 } 1058 } |
|
562}}; 563 564output exec {{ 565 static float 566 vcgtFunc(float op1, float op2) 567 { 568 if (std::isnan(op1) || std::isnan(op2)) 569 return 2.0; --- 297 unchanged lines hidden (view full) --- 867 eWalkCode += ''' 868 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d_uw); 869 ''' % { "reg" : reg } 870 readDestCode = '' 871 if readDest: 872 readDestCode = 'destElem = gtoh(destReg.elements[i]);' 873 eWalkCode += ''' 874 if (imm < 0 && imm >= eCount) { | 1059}}; 1060 1061output exec {{ 1062 static float 1063 vcgtFunc(float op1, float op2) 1064 { 1065 if (std::isnan(op1) || std::isnan(op2)) 1066 return 2.0; --- 297 unchanged lines hidden (view full) --- 1364 eWalkCode += ''' 1365 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d_uw); 1366 ''' % { "reg" : reg } 1367 readDestCode = '' 1368 if readDest: 1369 readDestCode = 'destElem = gtoh(destReg.elements[i]);' 1370 eWalkCode += ''' 1371 if (imm < 0 && imm >= eCount) { |
875 if (FullSystem) 876 fault = new UndefinedInstruction; 877 else 878 fault = new UndefinedInstruction(false, mnemonic); | 1372 fault = new UndefinedInstruction(machInst, false, mnemonic); |
879 } else { 880 for (unsigned i = 0; i < eCount; i++) { 881 Element srcElem1 = gtoh(srcReg1.elements[i]); 882 Element srcElem2 = gtoh(srcReg2.elements[imm]); 883 Element destElem; 884 %(readDest)s 885 %(op)s 886 destReg.elements[i] = htog(destElem); --- 34 unchanged lines hidden (view full) --- 921 eWalkCode += ''' 922 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d_uw); 923 ''' % { "reg" : reg } 924 readDestCode = '' 925 if readDest: 926 readDestCode = 'destElem = gtoh(destReg.elements[i]);' 927 eWalkCode += ''' 928 if (imm < 0 && imm >= eCount) { | 1373 } else { 1374 for (unsigned i = 0; i < eCount; i++) { 1375 Element srcElem1 = gtoh(srcReg1.elements[i]); 1376 Element srcElem2 = gtoh(srcReg2.elements[imm]); 1377 Element destElem; 1378 %(readDest)s 1379 %(op)s 1380 destReg.elements[i] = htog(destElem); --- 34 unchanged lines hidden (view full) --- 1415 eWalkCode += ''' 1416 destReg.regs[%(reg)d] = htog(FpDestP%(reg)d_uw); 1417 ''' % { "reg" : reg } 1418 readDestCode = '' 1419 if readDest: 1420 readDestCode = 'destElem = gtoh(destReg.elements[i]);' 1421 eWalkCode += ''' 1422 if (imm < 0 && imm >= eCount) { |
929 if (FullSystem) 930 fault = new UndefinedInstruction; 931 else 932 fault = new UndefinedInstruction(false, mnemonic); | 1423 fault = new UndefinedInstruction(machInst, false, mnemonic); |
933 } else { 934 for (unsigned i = 0; i < eCount; i++) { 935 Element srcElem1 = gtoh(srcReg1.elements[i]); 936 Element srcElem2 = gtoh(srcReg2.elements[imm]); 937 BigElement destElem; 938 %(readDest)s 939 %(op)s 940 destReg.elements[i] = htog(destElem); --- 32 unchanged lines hidden (view full) --- 973 eWalkCode += ''' 974 destRegs[%(reg)d] = FpDestP%(reg)d; 975 ''' % { "reg" : reg } 976 readDestCode = '' 977 if readDest: 978 readDestCode = 'destReg = destRegs[i];' 979 eWalkCode += ''' 980 if (imm < 0 && imm >= eCount) { | 1424 } else { 1425 for (unsigned i = 0; i < eCount; i++) { 1426 Element srcElem1 = gtoh(srcReg1.elements[i]); 1427 Element srcElem2 = gtoh(srcReg2.elements[imm]); 1428 BigElement destElem; 1429 %(readDest)s 1430 %(op)s 1431 destReg.elements[i] = htog(destElem); --- 32 unchanged lines hidden (view full) --- 1464 eWalkCode += ''' 1465 destRegs[%(reg)d] = FpDestP%(reg)d; 1466 ''' % { "reg" : reg } 1467 readDestCode = '' 1468 if readDest: 1469 readDestCode = 'destReg = destRegs[i];' 1470 eWalkCode += ''' 1471 if (imm < 0 && imm >= eCount) { |
981 if (FullSystem) 982 fault = new UndefinedInstruction; 983 else 984 fault = new UndefinedInstruction(false, mnemonic); | 1472 fault = new UndefinedInstruction(machInst, false, mnemonic); |
985 } else { 986 for (unsigned i = 0; i < rCount; i++) { 987 FloatReg srcReg1 = srcRegs1[i]; 988 FloatReg srcReg2 = srcRegs2[imm]; 989 FloatReg destReg; 990 %(readDest)s 991 %(op)s 992 destRegs[i] = destReg; --- 1158 unchanged lines hidden (view full) --- 2151 threeEqualRegInst("vqrdmulh", "VqrdmulhQ", 2152 "SimdMultOp", smallSignedTypes, 4, vqrdmulhCode) 2153 2154 vmaxfpCode = ''' 2155 FPSCR fpscr = (FPSCR) FpscrExc; 2156 bool done; 2157 destReg = processNans(fpscr, done, true, srcReg1, srcReg2); 2158 if (!done) { | 1473 } else { 1474 for (unsigned i = 0; i < rCount; i++) { 1475 FloatReg srcReg1 = srcRegs1[i]; 1476 FloatReg srcReg2 = srcRegs2[imm]; 1477 FloatReg destReg; 1478 %(readDest)s 1479 %(op)s 1480 destRegs[i] = destReg; --- 1158 unchanged lines hidden (view full) --- 2639 threeEqualRegInst("vqrdmulh", "VqrdmulhQ", 2640 "SimdMultOp", smallSignedTypes, 4, vqrdmulhCode) 2641 2642 vmaxfpCode = ''' 2643 FPSCR fpscr = (FPSCR) FpscrExc; 2644 bool done; 2645 destReg = processNans(fpscr, done, true, srcReg1, srcReg2); 2646 if (!done) { |
2159 destReg = binaryOp(fpscr, srcReg1, srcReg2, fpMaxS, | 2647 destReg = binaryOp(fpscr, srcReg1, srcReg2, fpMax<float>, |
2160 true, true, VfpRoundNearest); 2161 } else if (flushToZero(srcReg1, srcReg2)) { 2162 fpscr.idc = 1; 2163 } 2164 FpscrExc = fpscr; 2165 ''' 2166 threeEqualRegInstFp("vmax", "VmaxDFp", "SimdFloatCmpOp", ("float",), 2, vmaxfpCode) 2167 threeEqualRegInstFp("vmax", "VmaxQFp", "SimdFloatCmpOp", ("float",), 4, vmaxfpCode) 2168 2169 vminfpCode = ''' 2170 FPSCR fpscr = (FPSCR) FpscrExc; 2171 bool done; 2172 destReg = processNans(fpscr, done, true, srcReg1, srcReg2); 2173 if (!done) { | 2648 true, true, VfpRoundNearest); 2649 } else if (flushToZero(srcReg1, srcReg2)) { 2650 fpscr.idc = 1; 2651 } 2652 FpscrExc = fpscr; 2653 ''' 2654 threeEqualRegInstFp("vmax", "VmaxDFp", "SimdFloatCmpOp", ("float",), 2, vmaxfpCode) 2655 threeEqualRegInstFp("vmax", "VmaxQFp", "SimdFloatCmpOp", ("float",), 4, vmaxfpCode) 2656 2657 vminfpCode = ''' 2658 FPSCR fpscr = (FPSCR) FpscrExc; 2659 bool done; 2660 destReg = processNans(fpscr, done, true, srcReg1, srcReg2); 2661 if (!done) { |
2174 destReg = binaryOp(fpscr, srcReg1, srcReg2, fpMinS, | 2662 destReg = binaryOp(fpscr, srcReg1, srcReg2, fpMin<float>, |
2175 true, true, VfpRoundNearest); 2176 } else if (flushToZero(srcReg1, srcReg2)) { 2177 fpscr.idc = 1; 2178 } 2179 FpscrExc = fpscr; 2180 ''' 2181 threeEqualRegInstFp("vmin", "VminDFp", "SimdFloatCmpOp", ("float",), 2, vminfpCode) 2182 threeEqualRegInstFp("vmin", "VminQFp", "SimdFloatCmpOp", ("float",), 4, vminfpCode) --- 46 unchanged lines hidden (view full) --- 2229 true, true, VfpRoundNearest); 2230 destReg = binaryOp(fpscr, mid, destReg, fpAddS, 2231 true, true, VfpRoundNearest); 2232 FpscrExc = fpscr; 2233 ''' 2234 threeEqualRegInstFp("vmla", "NVmlaDFp", "SimdFloatMultAccOp", ("float",), 2, vmlafpCode, True) 2235 threeEqualRegInstFp("vmla", "NVmlaQFp", "SimdFloatMultAccOp", ("float",), 4, vmlafpCode, True) 2236 | 2663 true, true, VfpRoundNearest); 2664 } else if (flushToZero(srcReg1, srcReg2)) { 2665 fpscr.idc = 1; 2666 } 2667 FpscrExc = fpscr; 2668 ''' 2669 threeEqualRegInstFp("vmin", "VminDFp", "SimdFloatCmpOp", ("float",), 2, vminfpCode) 2670 threeEqualRegInstFp("vmin", "VminQFp", "SimdFloatCmpOp", ("float",), 4, vminfpCode) --- 46 unchanged lines hidden (view full) --- 2717 true, true, VfpRoundNearest); 2718 destReg = binaryOp(fpscr, mid, destReg, fpAddS, 2719 true, true, VfpRoundNearest); 2720 FpscrExc = fpscr; 2721 ''' 2722 threeEqualRegInstFp("vmla", "NVmlaDFp", "SimdFloatMultAccOp", ("float",), 2, vmlafpCode, True) 2723 threeEqualRegInstFp("vmla", "NVmlaQFp", "SimdFloatMultAccOp", ("float",), 4, vmlafpCode, True) 2724 |
2725 vfmafpCode = ''' 2726 FPSCR fpscr = (FPSCR) FpscrExc; 2727 destReg = ternaryOp(fpscr, srcReg1, srcReg2, destReg, fpMulAdd<float>, 2728 true, true, VfpRoundNearest); 2729 FpscrExc = fpscr; 2730 ''' 2731 threeEqualRegInstFp("vfma", "NVfmaDFp", "SimdFloatMultAccOp", ("float",), 2, vfmafpCode, True) 2732 threeEqualRegInstFp("vfma", "NVfmaQFp", "SimdFloatMultAccOp", ("float",), 4, vfmafpCode, True) 2733 2734 vfmsfpCode = ''' 2735 FPSCR fpscr = (FPSCR) FpscrExc; 2736 destReg = ternaryOp(fpscr, -srcReg1, srcReg2, destReg, fpMulAdd<float>, 2737 true, true, VfpRoundNearest); 2738 FpscrExc = fpscr; 2739 ''' 2740 threeEqualRegInstFp("vfms", "NVfmsDFp", "SimdFloatMultAccOp", ("float",), 2, vfmsfpCode, True) 2741 threeEqualRegInstFp("vfms", "NVfmsQFp", "SimdFloatMultAccOp", ("float",), 4, vfmsfpCode, True) 2742 |
|
2237 vmlsfpCode = ''' 2238 FPSCR fpscr = (FPSCR) FpscrExc; 2239 float mid = binaryOp(fpscr, srcReg1, srcReg2, fpMulS, 2240 true, true, VfpRoundNearest); 2241 destReg = binaryOp(fpscr, destReg, mid, fpSubS, 2242 true, true, VfpRoundNearest); 2243 FpscrExc = fpscr; 2244 ''' --- 515 unchanged lines hidden (view full) --- 2760 twoRegLongShiftInst("vmovl", "NVmovl", "SimdMiscOp", smallTypes, vmovlCode) 2761 2762 vcvt2ufxCode = ''' 2763 FPSCR fpscr = (FPSCR) FpscrExc; 2764 if (flushToZero(srcElem1)) 2765 fpscr.idc = 1; 2766 VfpSavedState state = prepFpState(VfpRoundNearest); 2767 __asm__ __volatile__("" : "=m" (srcElem1) : "m" (srcElem1)); | 2743 vmlsfpCode = ''' 2744 FPSCR fpscr = (FPSCR) FpscrExc; 2745 float mid = binaryOp(fpscr, srcReg1, srcReg2, fpMulS, 2746 true, true, VfpRoundNearest); 2747 destReg = binaryOp(fpscr, destReg, mid, fpSubS, 2748 true, true, VfpRoundNearest); 2749 FpscrExc = fpscr; 2750 ''' --- 515 unchanged lines hidden (view full) --- 3266 twoRegLongShiftInst("vmovl", "NVmovl", "SimdMiscOp", smallTypes, vmovlCode) 3267 3268 vcvt2ufxCode = ''' 3269 FPSCR fpscr = (FPSCR) FpscrExc; 3270 if (flushToZero(srcElem1)) 3271 fpscr.idc = 1; 3272 VfpSavedState state = prepFpState(VfpRoundNearest); 3273 __asm__ __volatile__("" : "=m" (srcElem1) : "m" (srcElem1)); |
2768 destReg = vfpFpSToFixed(srcElem1, false, false, imm); | 3274 destReg = vfpFpToFixed<float>(srcElem1, false, 32, imm); |
2769 __asm__ __volatile__("" :: "m" (destReg)); 2770 finishVfp(fpscr, state, true); 2771 FpscrExc = fpscr; 2772 ''' 2773 twoRegShiftInst("vcvt", "NVcvt2ufxD", "SimdCvtOp", ("float",), 2774 2, vcvt2ufxCode, toInt = True) 2775 twoRegShiftInst("vcvt", "NVcvt2ufxQ", "SimdCvtOp", ("float",), 2776 4, vcvt2ufxCode, toInt = True) 2777 2778 vcvt2sfxCode = ''' 2779 FPSCR fpscr = (FPSCR) FpscrExc; 2780 if (flushToZero(srcElem1)) 2781 fpscr.idc = 1; 2782 VfpSavedState state = prepFpState(VfpRoundNearest); 2783 __asm__ __volatile__("" : "=m" (srcElem1) : "m" (srcElem1)); | 3275 __asm__ __volatile__("" :: "m" (destReg)); 3276 finishVfp(fpscr, state, true); 3277 FpscrExc = fpscr; 3278 ''' 3279 twoRegShiftInst("vcvt", "NVcvt2ufxD", "SimdCvtOp", ("float",), 3280 2, vcvt2ufxCode, toInt = True) 3281 twoRegShiftInst("vcvt", "NVcvt2ufxQ", "SimdCvtOp", ("float",), 3282 4, vcvt2ufxCode, toInt = True) 3283 3284 vcvt2sfxCode = ''' 3285 FPSCR fpscr = (FPSCR) FpscrExc; 3286 if (flushToZero(srcElem1)) 3287 fpscr.idc = 1; 3288 VfpSavedState state = prepFpState(VfpRoundNearest); 3289 __asm__ __volatile__("" : "=m" (srcElem1) : "m" (srcElem1)); |
2784 destReg = vfpFpSToFixed(srcElem1, true, false, imm); | 3290 destReg = vfpFpToFixed<float>(srcElem1, true, 32, imm); |
2785 __asm__ __volatile__("" :: "m" (destReg)); 2786 finishVfp(fpscr, state, true); 2787 FpscrExc = fpscr; 2788 ''' 2789 twoRegShiftInst("vcvt", "NVcvt2sfxD", "SimdCvtOp", ("float",), 2790 2, vcvt2sfxCode, toInt = True) 2791 twoRegShiftInst("vcvt", "NVcvt2sfxQ", "SimdCvtOp", ("float",), 2792 4, vcvt2sfxCode, toInt = True) 2793 2794 vcvtu2fpCode = ''' 2795 FPSCR fpscr = (FPSCR) FpscrExc; 2796 VfpSavedState state = prepFpState(VfpRoundNearest); 2797 __asm__ __volatile__("" : "=m" (srcReg1) : "m" (srcReg1)); | 3291 __asm__ __volatile__("" :: "m" (destReg)); 3292 finishVfp(fpscr, state, true); 3293 FpscrExc = fpscr; 3294 ''' 3295 twoRegShiftInst("vcvt", "NVcvt2sfxD", "SimdCvtOp", ("float",), 3296 2, vcvt2sfxCode, toInt = True) 3297 twoRegShiftInst("vcvt", "NVcvt2sfxQ", "SimdCvtOp", ("float",), 3298 4, vcvt2sfxCode, toInt = True) 3299 3300 vcvtu2fpCode = ''' 3301 FPSCR fpscr = (FPSCR) FpscrExc; 3302 VfpSavedState state = prepFpState(VfpRoundNearest); 3303 __asm__ __volatile__("" : "=m" (srcReg1) : "m" (srcReg1)); |
2798 destElem = vfpUFixedToFpS(true, true, srcReg1, false, imm); | 3304 destElem = vfpUFixedToFpS(true, true, srcReg1, 32, imm); |
2799 __asm__ __volatile__("" :: "m" (destElem)); 2800 finishVfp(fpscr, state, true); 2801 FpscrExc = fpscr; 2802 ''' 2803 twoRegShiftInst("vcvt", "NVcvtu2fpD", "SimdCvtOp", ("float",), 2804 2, vcvtu2fpCode, fromInt = True) 2805 twoRegShiftInst("vcvt", "NVcvtu2fpQ", "SimdCvtOp", ("float",), 2806 4, vcvtu2fpCode, fromInt = True) 2807 2808 vcvts2fpCode = ''' 2809 FPSCR fpscr = (FPSCR) FpscrExc; 2810 VfpSavedState state = prepFpState(VfpRoundNearest); 2811 __asm__ __volatile__("" : "=m" (srcReg1) : "m" (srcReg1)); | 3305 __asm__ __volatile__("" :: "m" (destElem)); 3306 finishVfp(fpscr, state, true); 3307 FpscrExc = fpscr; 3308 ''' 3309 twoRegShiftInst("vcvt", "NVcvtu2fpD", "SimdCvtOp", ("float",), 3310 2, vcvtu2fpCode, fromInt = True) 3311 twoRegShiftInst("vcvt", "NVcvtu2fpQ", "SimdCvtOp", ("float",), 3312 4, vcvtu2fpCode, fromInt = True) 3313 3314 vcvts2fpCode = ''' 3315 FPSCR fpscr = (FPSCR) FpscrExc; 3316 VfpSavedState state = prepFpState(VfpRoundNearest); 3317 __asm__ __volatile__("" : "=m" (srcReg1) : "m" (srcReg1)); |
2812 destElem = vfpSFixedToFpS(true, true, srcReg1, false, imm); | 3318 destElem = vfpSFixedToFpS(true, true, srcReg1, 32, imm); |
2813 __asm__ __volatile__("" :: "m" (destElem)); 2814 finishVfp(fpscr, state, true); 2815 FpscrExc = fpscr; 2816 ''' 2817 twoRegShiftInst("vcvt", "NVcvts2fpD", "SimdCvtOp", ("float",), 2818 2, vcvts2fpCode, fromInt = True) 2819 twoRegShiftInst("vcvt", "NVcvts2fpQ", "SimdCvtOp", ("float",), 2820 4, vcvts2fpCode, fromInt = True) --- 470 unchanged lines hidden (view full) --- 3291 vextCode = ''' 3292 for (unsigned i = 0; i < eCount; i++) { 3293 unsigned index = i + imm; 3294 if (index < eCount) { 3295 destReg.elements[i] = srcReg1.elements[index]; 3296 } else { 3297 index -= eCount; 3298 if (index >= eCount) { | 3319 __asm__ __volatile__("" :: "m" (destElem)); 3320 finishVfp(fpscr, state, true); 3321 FpscrExc = fpscr; 3322 ''' 3323 twoRegShiftInst("vcvt", "NVcvts2fpD", "SimdCvtOp", ("float",), 3324 2, vcvts2fpCode, fromInt = True) 3325 twoRegShiftInst("vcvt", "NVcvts2fpQ", "SimdCvtOp", ("float",), 3326 4, vcvts2fpCode, fromInt = True) --- 470 unchanged lines hidden (view full) --- 3797 vextCode = ''' 3798 for (unsigned i = 0; i < eCount; i++) { 3799 unsigned index = i + imm; 3800 if (index < eCount) { 3801 destReg.elements[i] = srcReg1.elements[index]; 3802 } else { 3803 index -= eCount; 3804 if (index >= eCount) { |
3299 if (FullSystem) 3300 fault = new UndefinedInstruction; 3301 else 3302 fault = new UndefinedInstruction(false, mnemonic); | 3805 fault = new UndefinedInstruction(machInst, false, mnemonic); |
3303 } else { 3304 destReg.elements[i] = srcReg2.elements[index]; 3305 } 3306 } 3307 } 3308 ''' 3309 buildVext("vext", "NVextD", "SimdMiscOp", ("uint8_t",), 2, vextCode) 3310 buildVext("vext", "NVextQ", "SimdMiscOp", ("uint8_t",), 4, vextCode) --- 65 unchanged lines hidden --- | 3806 } else { 3807 destReg.elements[i] = srcReg2.elements[index]; 3808 } 3809 } 3810 } 3811 ''' 3812 buildVext("vext", "NVextD", "SimdMiscOp", ("uint8_t",), 2, vextCode) 3813 buildVext("vext", "NVextQ", "SimdMiscOp", ("uint8_t",), 4, vextCode) --- 65 unchanged lines hidden --- |