fp.isa (11671:520509f3e66c) fp.isa (12595:b5a51007feac)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010-2011,2016 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

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

125 break;
126 case 0x4: width = 2;
127 break;
128 case 0x5:
129 if ((b & 0x1) == 0) {
130 width = 1;
131 break;
132 }
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010-2011,2016 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

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

125 break;
126 case 0x4: width = 2;
127 break;
128 case 0x5:
129 if ((b & 0x1) == 0) {
130 width = 1;
131 break;
132 }
133 // Fall through on purpose.
133 M5_FALLTHROUGH;
134 default:
135 return new Unknown(machInst);
136 }
137 }
138 assert(width > 0 && width <= 4);
139
140 const RegIndex rm = (RegIndex)(uint32_t)bits(machInst, 3, 0);
141 const RegIndex rn = (RegIndex)(uint32_t)bits(machInst, 19, 16);

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

399 return new VbitD<uint64_t>(machInst, vd, vn, vm);
400 }
401 case 3:
402 if (q) {
403 return new VbifQ<uint64_t>(machInst, vd, vn, vm);
404 } else {
405 return new VbifD<uint64_t>(machInst, vd, vn, vm);
406 }
134 default:
135 return new Unknown(machInst);
136 }
137 }
138 assert(width > 0 && width <= 4);
139
140 const RegIndex rm = (RegIndex)(uint32_t)bits(machInst, 3, 0);
141 const RegIndex rn = (RegIndex)(uint32_t)bits(machInst, 19, 16);

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

399 return new VbitD<uint64_t>(machInst, vd, vn, vm);
400 }
401 case 3:
402 if (q) {
403 return new VbifQ<uint64_t>(machInst, vd, vn, vm);
404 } else {
405 return new VbifD<uint64_t>(machInst, vd, vn, vm);
406 }
407 default:
408 M5_UNREACHABLE;
407 }
408 } else {
409 switch (c) {
410 case 0:
411 if (q) {
412 return new VandQ<uint64_t>(machInst, vd, vn, vm);
413 } else {
414 return new VandD<uint64_t>(machInst, vd, vn, vm);

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

440 case 3:
441 if (q) {
442 return new VornQ<uint64_t>(
443 machInst, vd, vn, vm);
444 } else {
445 return new VornD<uint64_t>(
446 machInst, vd, vn, vm);
447 }
409 }
410 } else {
411 switch (c) {
412 case 0:
413 if (q) {
414 return new VandQ<uint64_t>(machInst, vd, vn, vm);
415 } else {
416 return new VandD<uint64_t>(machInst, vd, vn, vm);

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

442 case 3:
443 if (q) {
444 return new VornQ<uint64_t>(
445 machInst, vd, vn, vm);
446 } else {
447 return new VornD<uint64_t>(
448 machInst, vd, vn, vm);
449 }
450 default:
451 M5_UNREACHABLE;
448 }
449 }
450 }
451 case 0x2:
452 if (b) {
453 if (u) {
454 return decodeNeonUThreeReg<VqsubUD, VqsubUQ>(
455 q, size, machInst, vd, vn, vm);

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

1545 if (q)
1546 return new NVnegQFp<float>(machInst, vd, vm);
1547 else
1548 return new NVnegDFp<float>(machInst, vd, vm);
1549 } else {
1550 return decodeNeonSTwoMiscReg<NVnegD, NVnegQ>(
1551 q, size, machInst, vd, vm);
1552 }
452 }
453 }
454 }
455 case 0x2:
456 if (b) {
457 if (u) {
458 return decodeNeonUThreeReg<VqsubUD, VqsubUQ>(
459 q, size, machInst, vd, vn, vm);

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

1549 if (q)
1550 return new NVnegQFp<float>(machInst, vd, vm);
1551 else
1552 return new NVnegDFp<float>(machInst, vd, vm);
1553 } else {
1554 return decodeNeonSTwoMiscReg<NVnegD, NVnegQ>(
1555 q, size, machInst, vd, vm);
1556 }
1557 default:
1558 return new Unknown64(machInst);
1553 }
1554 case 0x2:
1555 switch (bits(b, 4, 1)) {
1556 case 0x0:
1557 if (q)
1558 return new NVswpQ<uint64_t>(machInst, vd, vm);
1559 else
1560 return new NVswpD<uint64_t>(machInst, vd, vm);

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

1854 true, false, true, offset);
1855 case 0x2:
1856 return new VLdmStm(machInst, rn, vd, single,
1857 true, true, false, offset);
1858 case 0x3:
1859 // If rn == sp, then this is called vpop.
1860 return new VLdmStm(machInst, rn, vd, single,
1861 true, true, true, offset);
1559 }
1560 case 0x2:
1561 switch (bits(b, 4, 1)) {
1562 case 0x0:
1563 if (q)
1564 return new NVswpQ<uint64_t>(machInst, vd, vm);
1565 else
1566 return new NVswpD<uint64_t>(machInst, vd, vm);

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

1860 true, false, true, offset);
1861 case 0x2:
1862 return new VLdmStm(machInst, rn, vd, single,
1863 true, true, false, offset);
1864 case 0x3:
1865 // If rn == sp, then this is called vpop.
1866 return new VLdmStm(machInst, rn, vd, single,
1867 true, true, true, offset);
1868 default:
1869 M5_UNREACHABLE;
1862 }
1863 }
1864 case 0x2:
1865 if (bits(opcode, 1, 0) == 0x2) {
1866 // If rn == sp, then this is called vpush.
1867 return new VLdmStm(machInst, rn, vd, single,
1868 false, true, false, offset);
1869 } else if (bits(opcode, 1, 0) == 0x3) {
1870 return new VLdmStm(machInst, rn, vd, single,
1871 false, true, true, offset);
1872 }
1870 }
1871 }
1872 case 0x2:
1873 if (bits(opcode, 1, 0) == 0x2) {
1874 // If rn == sp, then this is called vpush.
1875 return new VLdmStm(machInst, rn, vd, single,
1876 false, true, false, offset);
1877 } else if (bits(opcode, 1, 0) == 0x3) {
1878 return new VLdmStm(machInst, rn, vd, single,
1879 false, true, true, offset);
1880 }
1873 // Fall through on purpose
1881 M5_FALLTHROUGH;
1874 case 0x3:
1875 const bool up = (bits(machInst, 23) == 1);
1876 const uint32_t imm = bits(machInst, 7, 0) << 2;
1877 if (single) {
1878 vd = (RegIndex)(uint32_t)((bits(machInst, 15, 12) << 1) |
1879 (bits(machInst, 22)));
1880 } else {
1881 vd = (RegIndex)(uint32_t)((bits(machInst, 15, 12) << 1) |

--- 771 unchanged lines hidden ---
1882 case 0x3:
1883 const bool up = (bits(machInst, 23) == 1);
1884 const uint32_t imm = bits(machInst, 7, 0) << 2;
1885 if (single) {
1886 vd = (RegIndex)(uint32_t)((bits(machInst, 15, 12) << 1) |
1887 (bits(machInst, 22)));
1888 } else {
1889 vd = (RegIndex)(uint32_t)((bits(machInst, 15, 12) << 1) |

--- 771 unchanged lines hidden ---