data.isa (7237:4c1445a9e72b) data.isa (7240:40a17fb6a9c5)
1// Copyright (c) 2010 ARM Limited
2// All rights reserved
3//
4// The license below extends only to copyright in the software and shall
5// not be construed as granting a license to any other intellectual
6// property including but not limited to intellectual property relating
7// to a hardware implementation of the functionality of the software
8// licensed hereunder. You may use the software subject to the license

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

151 return new Ssat(machInst, rd, satImm + 1, rn, imm, type);
152 } else if (bits(op1, 2, 1) == 3) {
153 return new Usat(machInst, rd, satImm, rn, imm, type);
154 }
155 return new Unknown(machInst);
156 }
157 switch (op1) {
158 case 0x0:
1// Copyright (c) 2010 ARM Limited
2// All rights reserved
3//
4// The license below extends only to copyright in the software and shall
5// not be construed as granting a license to any other intellectual
6// property including but not limited to intellectual property relating
7// to a hardware implementation of the functionality of the software
8// licensed hereunder. You may use the software subject to the license

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

151 return new Ssat(machInst, rd, satImm + 1, rn, imm, type);
152 } else if (bits(op1, 2, 1) == 3) {
153 return new Usat(machInst, rd, satImm, rn, imm, type);
154 }
155 return new Unknown(machInst);
156 }
157 switch (op1) {
158 case 0x0:
159 if (op2 == 0x3) {
159 {
160 const IntRegIndex rn =
161 (IntRegIndex)(uint32_t)bits(machInst, 19, 16);
162 const IntRegIndex rd =
163 (IntRegIndex)(uint32_t)bits(machInst, 15, 12);
164 const IntRegIndex rm =
165 (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
160 const IntRegIndex rn =
161 (IntRegIndex)(uint32_t)bits(machInst, 19, 16);
162 const IntRegIndex rd =
163 (IntRegIndex)(uint32_t)bits(machInst, 15, 12);
164 const IntRegIndex rm =
165 (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
166 const uint32_t rotation =
167 (uint32_t)bits(machInst, 11, 10) << 3;
168 if (a == 0xf) {
169 return new Sxtb16(machInst, rd, rotation, rm);
170 } else {
171 return new Sxtab16(machInst, rd, rn, rm, rotation);
166 if (op2 == 0x3) {
167 const uint32_t rotation =
168 (uint32_t)bits(machInst, 11, 10) << 3;
169 if (a == 0xf) {
170 return new Sxtb16(machInst, rd, rotation, rm);
171 } else {
172 return new Sxtab16(machInst, rd, rn, rm, rotation);
173 }
174 } else if (op2 == 0x5) {
175 return new Sel(machInst, rd, rn, rm);
172 }
176 }
173 } else if (op2 == 0x5) {
174 return new WarnUnimplemented("sel", machInst);
175 }
176 break;
177 case 0x2:
178 if (op2 == 0x1) {
179 const IntRegIndex rn =
180 (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
181 const IntRegIndex rd =
182 (IntRegIndex)(uint32_t)bits(machInst, 15, 12);

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

740 return new Uhsub8Reg(machInst, rd, rn, rm, 0, LSL);
741 }
742 break;
743 }
744 }
745 } else if (bits(op1, 3, 2) == 0x2 && bits(op2, 3, 2) == 0x2) {
746 const uint32_t op1 = bits(machInst, 21, 20);
747 const uint32_t op2 = bits(machInst, 5, 4);
177 }
178 break;
179 case 0x2:
180 if (op2 == 0x1) {
181 const IntRegIndex rn =
182 (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
183 const IntRegIndex rd =
184 (IntRegIndex)(uint32_t)bits(machInst, 15, 12);

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

742 return new Uhsub8Reg(machInst, rd, rn, rm, 0, LSL);
743 }
744 break;
745 }
746 }
747 } else if (bits(op1, 3, 2) == 0x2 && bits(op2, 3, 2) == 0x2) {
748 const uint32_t op1 = bits(machInst, 21, 20);
749 const uint32_t op2 = bits(machInst, 5, 4);
750 const IntRegIndex rd =
751 (IntRegIndex)(uint32_t)bits(machInst, 11, 8);
752 const IntRegIndex rm =
753 (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
748 switch (op1) {
749 case 0x0:
754 switch (op1) {
755 case 0x0:
750 {
751 IntRegIndex rd =
752 (IntRegIndex)(uint32_t)bits(machInst, 11, 8);
753 IntRegIndex rm =
754 (IntRegIndex)(uint32_t)bits(machInst, 3, 0);
755 switch (op2) {
756 case 0x0:
757 return new QaddRegCc(machInst, rd,
758 rm, rn, 0, LSL);
759 case 0x1:
760 return new QdaddRegCc(machInst, rd,
761 rm, rn, 0, LSL);
762 case 0x2:
763 return new QsubRegCc(machInst, rd,
764 rm, rn, 0, LSL);
765 case 0x3:
766 return new QdsubRegCc(machInst, rd,
767 rm, rn, 0, LSL);
768 }
756 switch (op2) {
757 case 0x0:
758 return new QaddRegCc(machInst, rd,
759 rm, rn, 0, LSL);
760 case 0x1:
761 return new QdaddRegCc(machInst, rd,
762 rm, rn, 0, LSL);
763 case 0x2:
764 return new QsubRegCc(machInst, rd,
765 rm, rn, 0, LSL);
766 case 0x3:
767 return new QdsubRegCc(machInst, rd,
768 rm, rn, 0, LSL);
769 }
770 break;
771 case 0x1:
769 }
770 break;
771 case 0x1:
772 {
773 IntRegIndex rd =
774 (IntRegIndex)(uint32_t)bits(machInst, 11, 8);
775 IntRegIndex rm = rn;
776 switch (op2) {
777 case 0x0:
778 return new Rev(machInst, rd, rm);
779 case 0x1:
780 return new Rev16(machInst, rd, rm);
781 case 0x2:
782 return new WarnUnimplemented("rbit", machInst);
783 case 0x3:
784 return new Revsh(machInst, rd, rm);
785 }
772 switch (op2) {
773 case 0x0:
774 return new Rev(machInst, rd, rn);
775 case 0x1:
776 return new Rev16(machInst, rd, rn);
777 case 0x2:
778 return new WarnUnimplemented("rbit", machInst);
779 case 0x3:
780 return new Revsh(machInst, rd, rn);
786 }
787 break;
788 case 0x2:
789 if (op2 == 0) {
781 }
782 break;
783 case 0x2:
784 if (op2 == 0) {
790 return new WarnUnimplemented("sel", machInst);
785 return new Sel(machInst, rd, rn, rm);
791 }
792 break;
793 case 0x3:
794 if (op2 == 0) {
795 return new WarnUnimplemented("clz", machInst);
796 }
797 }
798 }

--- 540 unchanged lines hidden ---
786 }
787 break;
788 case 0x3:
789 if (op2 == 0) {
790 return new WarnUnimplemented("clz", machInst);
791 }
792 }
793 }

--- 540 unchanged lines hidden ---