fp.isa (11513:cb3a401c45d7) fp.isa (11671:520509f3e66c)
1// -*- mode:c++ -*-
2
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010-2013 ARM Limited
3// Copyright (c) 2010-2013,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
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

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

637 header_output += declareTempl.subst(iop)
638 decoder_output += constructorTempl.subst(iop)
639 exec_output += PredOpExecute.subst(iop)
640
641 buildSimpleUnaryFpOp("vneg", "Vneg", "FpRegRegOp", "SimdFloatMiscOp",
642 "-FpOp1", "-dbl(FpOp1P0_uw, FpOp1P1_uw)")
643 buildSimpleUnaryFpOp("vabs", "Vabs", "FpRegRegOp", "SimdFloatMiscOp",
644 "fabsf(FpOp1)", "fabs(dbl(FpOp1P0_uw, FpOp1P1_uw))")
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

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

637 header_output += declareTempl.subst(iop)
638 decoder_output += constructorTempl.subst(iop)
639 exec_output += PredOpExecute.subst(iop)
640
641 buildSimpleUnaryFpOp("vneg", "Vneg", "FpRegRegOp", "SimdFloatMiscOp",
642 "-FpOp1", "-dbl(FpOp1P0_uw, FpOp1P1_uw)")
643 buildSimpleUnaryFpOp("vabs", "Vabs", "FpRegRegOp", "SimdFloatMiscOp",
644 "fabsf(FpOp1)", "fabs(dbl(FpOp1P0_uw, FpOp1P1_uw))")
645 buildSimpleUnaryFpOp("vrintp", "VRIntP", "FpRegRegOp", "SimdFloatMiscOp",
646 "fplibRoundInt<uint32_t>(FpOp1, FPRounding_POSINF, false, fpscr)",
647 "fplibRoundInt<uint64_t>(dbl(FpOp1P0_uw, FpOp1P1_uw), " \
648 "FPRounding_POSINF, false, fpscr)"
649 )
650 buildSimpleUnaryFpOp("vrintm", "VRIntM", "FpRegRegOp", "SimdFloatMiscOp",
651 "fplibRoundInt<uint32_t>(FpOp1, FPRounding_NEGINF, false, fpscr)",
652 "fplibRoundInt<uint64_t>(dbl(FpOp1P0_uw, FpOp1P1_uw), " \
653 "FPRounding_NEGINF, false, fpscr)"
654 )
655 buildSimpleUnaryFpOp("vrinta", "VRIntA", "FpRegRegOp", "SimdFloatMiscOp",
656 "fplibRoundInt<uint32_t>(FpOp1, FPRounding_TIEAWAY, false, fpscr)",
657 "fplibRoundInt<uint64_t>(dbl(FpOp1P0_uw, FpOp1P1_uw), " \
658 "FPRounding_TIEAWAY, false, fpscr)"
659 )
660 buildSimpleUnaryFpOp("vrintn", "VRIntN", "FpRegRegOp", "SimdFloatMiscOp",
661 "fplibRoundInt<uint32_t>(FpOp1, FPRounding_TIEEVEN, false, fpscr)",
662 "fplibRoundInt<uint64_t>(dbl(FpOp1P0_uw, FpOp1P1_uw), " \
663 "FPRounding_TIEEVEN, false, fpscr)"
664 )
645}};
646
647let {{
648
649 header_output = ""
650 decoder_output = ""
651 exec_output = ""
652

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

1403}};
1404
1405let {{
1406
1407 header_output = ""
1408 decoder_output = ""
1409 exec_output = ""
1410
665}};
666
667let {{
668
669 header_output = ""
670 decoder_output = ""
671 exec_output = ""
672

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

1423}};
1424
1425let {{
1426
1427 header_output = ""
1428 decoder_output = ""
1429 exec_output = ""
1430
1431 vselSCode = vfpEnabledCheckCode + '''
1432 if (testPredicate(CondCodesNZ, CondCodesC, CondCodesV, cond)) {
1433 FpDest = FpOp1;
1434 } else {
1435 FpDest = FpOp2;
1436 } '''
1437
1438 vselSIop = InstObjParams("vsels", "VselS", "FpRegRegRegCondOp",
1439 { "code" : vselSCode,
1440 "predicate_test" : predicateTest,
1441 "op_class" : "SimdFloatCmpOp" }, [] )
1442 header_output += FpRegRegRegCondOpDeclare.subst(vselSIop);
1443 decoder_output += FpRegRegRegCondOpConstructor.subst(vselSIop);
1444 exec_output += PredOpExecute.subst(vselSIop);
1445
1446 vselDCode = vfpEnabledCheckCode + '''
1447 if (testPredicate(CondCodesNZ, CondCodesC, CondCodesV, cond)) {
1448 FpDestP0_uw = FpOp1P0_uw;
1449 FpDestP1_uw = FpOp1P1_uw;
1450 } else {
1451 FpDestP0_uw = FpOp2P0_uw;
1452 FpDestP1_uw = FpOp2P1_uw;
1453 } '''
1454
1455 vselDIop = InstObjParams("vseld", "VselD", "FpRegRegRegCondOp",
1456 { "code" : vselDCode,
1457 "predicate_test" : predicateTest,
1458 "op_class" : "SimdFloatCmpOp" }, [] )
1459 header_output += FpRegRegRegCondOpDeclare.subst(vselDIop);
1460 decoder_output += FpRegRegRegCondOpConstructor.subst(vselDIop);
1461 exec_output += PredOpExecute.subst(vselDIop);
1462}};
1463
1464
1465let {{
1466
1467 header_output = ""
1468 decoder_output = ""
1469 exec_output = ""
1470
1411 vcvtFpSFixedSCode = vfpEnabledCheckCode + '''
1412 FPSCR fpscr = (FPSCR) FpscrExc;
1413 vfpFlushToZero(fpscr, FpOp1);
1414 VfpSavedState state = prepFpState(fpscr.rMode);
1415 __asm__ __volatile__("" : "=m" (FpOp1) : "m" (FpOp1));
1416 FpDest_sw = vfpFpToFixed<float>(FpOp1, true, 32, imm);
1417 __asm__ __volatile__("" :: "m" (FpDest_sw));
1418 finishVfp(fpscr, state, fpscr.fz);

--- 304 unchanged lines hidden ---
1471 vcvtFpSFixedSCode = vfpEnabledCheckCode + '''
1472 FPSCR fpscr = (FPSCR) FpscrExc;
1473 vfpFlushToZero(fpscr, FpOp1);
1474 VfpSavedState state = prepFpState(fpscr.rMode);
1475 __asm__ __volatile__("" : "=m" (FpOp1) : "m" (FpOp1));
1476 FpDest_sw = vfpFpToFixed<float>(FpOp1, true, 32, imm);
1477 __asm__ __volatile__("" :: "m" (FpDest_sw));
1478 finishVfp(fpscr, state, fpscr.fz);

--- 304 unchanged lines hidden ---