fp.isa (7374:9a80d013b955) fp.isa (7376:3b781776b2d9)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 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

--- 490 unchanged lines hidden (view full) ---

499 (bits(machInst, 3, 0) << 1));
500 vn = (IntRegIndex)((bits(machInst, 7) << 5) |
501 (bits(machInst, 19, 16) << 1));
502 }
503 switch (opc1 & 0xb /* 1011 */) {
504 case 0x0:
505 if (bits(machInst, 6) == 0) {
506 if (single) {
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 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

--- 490 unchanged lines hidden (view full) ---

499 (bits(machInst, 3, 0) << 1));
500 vn = (IntRegIndex)((bits(machInst, 7) << 5) |
501 (bits(machInst, 19, 16) << 1));
502 }
503 switch (opc1 & 0xb /* 1011 */) {
504 case 0x0:
505 if (bits(machInst, 6) == 0) {
506 if (single) {
507 return new VmlaS(machInst, vd, vn, vm);
507 return decodeVfpRegRegRegOp<VmlaS>(
508 machInst, vd, vn, vm, false);
508 } else {
509 } else {
509 return new VmlaD(machInst, vd, vn, vm);
510 return decodeVfpRegRegRegOp<VmlaD>(
511 machInst, vd, vn, vm, true);
510 }
511 } else {
512 if (single) {
512 }
513 } else {
514 if (single) {
513 return new VmlsS(machInst, vd, vn, vm);
515 return decodeVfpRegRegRegOp<VmlsS>(
516 machInst, vd, vn, vm, false);
514 } else {
517 } else {
515 return new VmlsD(machInst, vd, vn, vm);
518 return decodeVfpRegRegRegOp<VmlsD>(
519 machInst, vd, vn, vm, true);
516 }
517 }
518 case 0x1:
519 if (bits(machInst, 6) == 1) {
520 if (single) {
520 }
521 }
522 case 0x1:
523 if (bits(machInst, 6) == 1) {
524 if (single) {
521 return new VnmlaS(machInst, vd, vn, vm);
525 return decodeVfpRegRegRegOp<VnmlaS>(
526 machInst, vd, vn, vm, false);
522 } else {
527 } else {
523 return new VnmlaD(machInst, vd, vn, vm);
528 return decodeVfpRegRegRegOp<VnmlaD>(
529 machInst, vd, vn, vm, true);
524 }
525 } else {
526 if (single) {
530 }
531 } else {
532 if (single) {
527 return new VnmlsS(machInst, vd, vn, vm);
533 return decodeVfpRegRegRegOp<VnmlsS>(
534 machInst, vd, vn, vm, false);
528 } else {
535 } else {
529 return new VnmlsD(machInst, vd, vn, vm);
536 return decodeVfpRegRegRegOp<VnmlsD>(
537 machInst, vd, vn, vm, true);
530 }
531 }
532 case 0x2:
533 if ((opc3 & 0x1) == 0) {
534 if (single) {
538 }
539 }
540 case 0x2:
541 if ((opc3 & 0x1) == 0) {
542 if (single) {
535 return new VmulS(machInst, vd, vn, vm);
543 return decodeVfpRegRegRegOp<VmulS>(
544 machInst, vd, vn, vm, false);
536 } else {
545 } else {
537 return new VmulD(machInst, vd, vn, vm);
546 return decodeVfpRegRegRegOp<VmulD>(
547 machInst, vd, vn, vm, true);
538 }
539 } else {
540 if (single) {
548 }
549 } else {
550 if (single) {
541 return new VnmulS(machInst, vd, vn, vm);
551 return decodeVfpRegRegRegOp<VnmulS>(
552 machInst, vd, vn, vm, false);
542 } else {
553 } else {
543 return new VnmulD(machInst, vd, vn, vm);
554 return decodeVfpRegRegRegOp<VnmulD>(
555 machInst, vd, vn, vm, true);
544 }
545 }
546 case 0x3:
547 if ((opc3 & 0x1) == 0) {
548 if (single) {
556 }
557 }
558 case 0x3:
559 if ((opc3 & 0x1) == 0) {
560 if (single) {
549 return new VaddS(machInst, vd, vn, vm);
561 return decodeVfpRegRegRegOp<VaddS>(
562 machInst, vd, vn, vm, false);
550 } else {
563 } else {
551 return new VaddD(machInst, vd, vn, vm);
564 return decodeVfpRegRegRegOp<VaddD>(
565 machInst, vd, vn, vm, true);
552 }
553 } else {
554 if (single) {
566 }
567 } else {
568 if (single) {
555 return new VsubS(machInst, vd, vn, vm);
569 return decodeVfpRegRegRegOp<VsubS>(
570 machInst, vd, vn, vm, false);
556 } else {
571 } else {
557 return new VsubD(machInst, vd, vn, vm);
572 return decodeVfpRegRegRegOp<VsubD>(
573 machInst, vd, vn, vm, true);
558 }
559 }
560 case 0x8:
561 if ((opc3 & 0x1) == 0) {
562 if (single) {
574 }
575 }
576 case 0x8:
577 if ((opc3 & 0x1) == 0) {
578 if (single) {
563 return new VdivS(machInst, vd, vn, vm);
579 return decodeVfpRegRegRegOp<VdivS>(
580 machInst, vd, vn, vm, false);
564 } else {
581 } else {
565 return new VdivD(machInst, vd, vn, vm);
582 return decodeVfpRegRegRegOp<VdivD>(
583 machInst, vd, vn, vm, true);
566 }
567 }
568 break;
569 case 0xb:
570 if ((opc3 & 0x1) == 0) {
571 const uint32_t baseImm =
572 bits(machInst, 3, 0) | (bits(machInst, 19, 16) << 4);
573 if (single) {
574 uint32_t imm = vfp_modified_imm(baseImm, false);
584 }
585 }
586 break;
587 case 0xb:
588 if ((opc3 & 0x1) == 0) {
589 const uint32_t baseImm =
590 bits(machInst, 3, 0) | (bits(machInst, 19, 16) << 4);
591 if (single) {
592 uint32_t imm = vfp_modified_imm(baseImm, false);
575 return new VmovImmS(machInst, vd, imm);
593 return decodeVfpRegImmOp<VmovImmS>(
594 machInst, vd, imm, false);
576 } else {
577 uint64_t imm = vfp_modified_imm(baseImm, true);
595 } else {
596 uint64_t imm = vfp_modified_imm(baseImm, true);
578 return new VmovImmD(machInst, vd, imm);
597 return decodeVfpRegImmOp<VmovImmD>(
598 machInst, vd, imm, true);
579 }
580 }
581 switch (opc2) {
582 case 0x0:
583 if (opc3 == 1) {
584 if (single) {
599 }
600 }
601 switch (opc2) {
602 case 0x0:
603 if (opc3 == 1) {
604 if (single) {
585 return new VmovRegS(machInst, vd, vm);
605 return decodeVfpRegRegOp<VmovRegS>(
606 machInst, vd, vm, false);
586 } else {
607 } else {
587 return new VmovRegD(machInst, vd, vm);
608 return decodeVfpRegRegOp<VmovRegD>(
609 machInst, vd, vm, true);
588 }
589 } else {
590 if (single) {
610 }
611 } else {
612 if (single) {
591 return new VabsS(machInst, vd, vm);
613 return decodeVfpRegRegOp<VabsS>(
614 machInst, vd, vm, false);
592 } else {
615 } else {
593 return new VabsD(machInst, vd, vm);
616 return decodeVfpRegRegOp<VabsD>(
617 machInst, vd, vm, true);
594 }
595 }
596 case 0x1:
597 if (opc3 == 1) {
598 if (single) {
618 }
619 }
620 case 0x1:
621 if (opc3 == 1) {
622 if (single) {
599 return new VnegS(machInst, vd, vm);
623 return decodeVfpRegRegOp<VnegS>(
624 machInst, vd, vm, false);
600 } else {
625 } else {
601 return new VnegD(machInst, vd, vm);
626 return decodeVfpRegRegOp<VnegD>(
627 machInst, vd, vm, true);
602 }
603 } else {
604 if (single) {
628 }
629 } else {
630 if (single) {
605 return new VsqrtS(machInst, vd, vm);
631 return decodeVfpRegRegOp<VsqrtS>(
632 machInst, vd, vm, false);
606 } else {
633 } else {
607 return new VsqrtD(machInst, vd, vm);
634 return decodeVfpRegRegOp<VsqrtD>(
635 machInst, vd, vm, true);
608 }
609 }
610 case 0x2:
611 case 0x3:
612 // Between half and single precision.
613 return new WarnUnimplemented("vcvtb, vcvtt", machInst);
614 case 0x4:
615 case 0x5:

--- 69 unchanged lines hidden ---
636 }
637 }
638 case 0x2:
639 case 0x3:
640 // Between half and single precision.
641 return new WarnUnimplemented("vcvtb, vcvtt", machInst);
642 case 0x4:
643 case 0x5:

--- 69 unchanged lines hidden ---