| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 The Native Client Authors. All rights reserved. | 2 * Copyright 2013 The Native Client Authors. All rights reserved. |
| 3 * Use of this source code is governed by a BSD-style license that can | 3 * Use of this source code is governed by a BSD-style license that can |
| 4 * be found in the LICENSE file. | 4 * be found in the LICENSE file. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 // DO NOT EDIT: GENERATED CODE | 7 // DO NOT EDIT: GENERATED CODE |
| 8 | 8 |
| 9 #include "native_client/src/trusted/validator_arm/gen/arm32_decode_baselines.h" | 9 #include "native_client/src/trusted/validator_arm/gen/arm32_decode_baselines.h" |
| 10 #include "native_client/src/trusted/validator_arm/inst_classes.h" | 10 #include "native_client/src/trusted/validator_arm/inst_classes.h" |
| (...skipping 1403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1414 // uses: '{inst(3:0)}' | 1414 // uses: '{inst(3:0)}' |
| 1415 return RegisterList(). | 1415 return RegisterList(). |
| 1416 Add(Register((inst.Bits() & 0x0000000F))); | 1416 Add(Register((inst.Bits() & 0x0000000F))); |
| 1417 } | 1417 } |
| 1418 | 1418 |
| 1419 // BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0: | 1419 // BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0: |
| 1420 // | 1420 // |
| 1421 // {Cond: Cond(31:28), | 1421 // {Cond: Cond(31:28), |
| 1422 // Lr: 14, | 1422 // Lr: 14, |
| 1423 // Pc: 15, | 1423 // Pc: 15, |
| 1424 // actual: Actual_BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_1, |
| 1424 // baseline: BranchImmediate24, | 1425 // baseline: BranchImmediate24, |
| 1425 // constraints: , | 1426 // constraints: , |
| 1426 // defs: {Pc, Lr}, | 1427 // defs: {Pc, Lr}, |
| 1427 // fields: [Cond(31:28), imm24(23:0)], | 1428 // fields: [Cond(31:28), imm24(23:0)], |
| 1428 // generated_baseline: BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case
_0, | 1429 // generated_baseline: BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case
_0, |
| 1429 // imm24: imm24(23:0), | 1430 // imm24: imm24(23:0), |
| 1430 // imm32: SignExtend(imm24:'00'(1:0), 32), | 1431 // imm32: SignExtend(imm24:'00'(1:0), 32), |
| 1431 // pattern: cccc1011iiiiiiiiiiiiiiiiiiiiiiii, | 1432 // pattern: cccc1011iiiiiiiiiiiiiiiiiiiiiiii, |
| 1432 // relative: true, | 1433 // relative: true, |
| 1433 // relative_offset: imm32, | 1434 // relative_offset: imm32 + 8, |
| 1434 // rule: BL_BLX_immediate, | 1435 // rule: BL_BLX_immediate, |
| 1435 // safety: [true => MAY_BE_SAFE], | 1436 // safety: [true => MAY_BE_SAFE], |
| 1436 // true: true, | 1437 // true: true, |
| 1437 // uses: {Pc}} | 1438 // uses: {Pc}} |
| 1438 RegisterList BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1439 RegisterList BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1439 defs(Instruction inst) const { | 1440 defs(Instruction inst) const { |
| 1440 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1441 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1441 // defs: '{15, 14}' | 1442 // defs: '{15, 14}' |
| 1442 return RegisterList(). | 1443 return RegisterList(). |
| 1443 Add(Register(15)). | 1444 Add(Register(15)). |
| 1444 Add(Register(14)); | 1445 Add(Register(14)); |
| 1445 } | 1446 } |
| 1446 | 1447 |
| 1447 bool BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1448 bool BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1448 is_relative_branch(Instruction inst) const { | 1449 is_relative_branch(Instruction inst) const { |
| 1449 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1450 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1450 // relative: 'true' | 1451 // relative: 'true' |
| 1451 return true; | 1452 return true; |
| 1452 } | 1453 } |
| 1453 | 1454 |
| 1454 int32_t BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1455 int32_t BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1455 branch_target_offset(Instruction inst) const { | 1456 branch_target_offset(Instruction inst) const { |
| 1456 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1457 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1457 // relative_offset: "SignExtend(inst(23:0):'00'(1:0), 32)" | 1458 // relative_offset: "SignExtend(inst(23:0):'00'(1:0), 32) + 8" |
| 1458 return (((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) & 0x020000
00) | 1459 return (((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) & 0x020000
00) |
| 1459 ? ((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) | 0xFC00000
0) | 1460 ? ((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) | 0xFC00000
0) |
| 1460 : ((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))); | 1461 : ((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) + 8; |
| 1461 } | 1462 } |
| 1462 | 1463 |
| 1463 SafetyLevel BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1464 SafetyLevel BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1464 safety(Instruction inst) const { | 1465 safety(Instruction inst) const { |
| 1465 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1466 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1466 | 1467 |
| 1467 // true => MAY_BE_SAFE | 1468 // true => MAY_BE_SAFE |
| 1468 if (true) | 1469 if (true) |
| 1469 return MAY_BE_SAFE; | 1470 return MAY_BE_SAFE; |
| 1470 | 1471 |
| 1471 return MAY_BE_SAFE; | 1472 return MAY_BE_SAFE; |
| 1472 } | 1473 } |
| 1473 | 1474 |
| 1474 | 1475 |
| 1475 RegisterList BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1476 RegisterList BL_BLX_immediate_cccc1011iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1476 uses(Instruction inst) const { | 1477 uses(Instruction inst) const { |
| 1477 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1478 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1478 // uses: '{15}' | 1479 // uses: '{15}' |
| 1479 return RegisterList(). | 1480 return RegisterList(). |
| 1480 Add(Register(15)); | 1481 Add(Register(15)); |
| 1481 } | 1482 } |
| 1482 | 1483 |
| 1483 // B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0: | 1484 // B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0: |
| 1484 // | 1485 // |
| 1485 // {Cond: Cond(31:28), | 1486 // {Cond: Cond(31:28), |
| 1486 // Pc: 15, | 1487 // Pc: 15, |
| 1488 // actual: Actual_B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_1, |
| 1487 // baseline: BranchImmediate24, | 1489 // baseline: BranchImmediate24, |
| 1488 // constraints: , | 1490 // constraints: , |
| 1489 // defs: {Pc}, | 1491 // defs: {Pc}, |
| 1490 // fields: [Cond(31:28), imm24(23:0)], | 1492 // fields: [Cond(31:28), imm24(23:0)], |
| 1491 // generated_baseline: B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0, | 1493 // generated_baseline: B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0, |
| 1492 // imm24: imm24(23:0), | 1494 // imm24: imm24(23:0), |
| 1493 // imm32: SignExtend(imm24:'00'(1:0), 32), | 1495 // imm32: SignExtend(imm24:'00'(1:0), 32), |
| 1494 // pattern: cccc1010iiiiiiiiiiiiiiiiiiiiiiii, | 1496 // pattern: cccc1010iiiiiiiiiiiiiiiiiiiiiiii, |
| 1495 // relative: true, | 1497 // relative: true, |
| 1496 // relative_offset: imm32, | 1498 // relative_offset: imm32 + 8, |
| 1497 // rule: B, | 1499 // rule: B, |
| 1498 // safety: [true => MAY_BE_SAFE], | 1500 // safety: [true => MAY_BE_SAFE], |
| 1499 // true: true, | 1501 // true: true, |
| 1500 // uses: {Pc}} | 1502 // uses: {Pc}} |
| 1501 RegisterList B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1503 RegisterList B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1502 defs(Instruction inst) const { | 1504 defs(Instruction inst) const { |
| 1503 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1505 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1504 // defs: '{15}' | 1506 // defs: '{15}' |
| 1505 return RegisterList(). | 1507 return RegisterList(). |
| 1506 Add(Register(15)); | 1508 Add(Register(15)); |
| 1507 } | 1509 } |
| 1508 | 1510 |
| 1509 bool B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1511 bool B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1510 is_relative_branch(Instruction inst) const { | 1512 is_relative_branch(Instruction inst) const { |
| 1511 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1513 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1512 // relative: 'true' | 1514 // relative: 'true' |
| 1513 return true; | 1515 return true; |
| 1514 } | 1516 } |
| 1515 | 1517 |
| 1516 int32_t B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1518 int32_t B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1517 branch_target_offset(Instruction inst) const { | 1519 branch_target_offset(Instruction inst) const { |
| 1518 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1520 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1519 // relative_offset: "SignExtend(inst(23:0):'00'(1:0), 32)" | 1521 // relative_offset: "SignExtend(inst(23:0):'00'(1:0), 32) + 8" |
| 1520 return (((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) & 0x020000
00) | 1522 return (((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) & 0x020000
00) |
| 1521 ? ((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) | 0xFC00000
0) | 1523 ? ((((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) | 0xFC00000
0) |
| 1522 : ((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))); | 1524 : ((((inst.Bits() & 0x00FFFFFF)) << 2) | (0 & 0x00000003))) + 8; |
| 1523 } | 1525 } |
| 1524 | 1526 |
| 1525 SafetyLevel B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: | 1527 SafetyLevel B_cccc1010iiiiiiiiiiiiiiiiiiiiiiii_case_0:: |
| 1526 safety(Instruction inst) const { | 1528 safety(Instruction inst) const { |
| 1527 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 1529 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 1528 | 1530 |
| 1529 // true => MAY_BE_SAFE | 1531 // true => MAY_BE_SAFE |
| 1530 if (true) | 1532 if (true) |
| 1531 return MAY_BE_SAFE; | 1533 return MAY_BE_SAFE; |
| 1532 | 1534 |
| (...skipping 1147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2680 // uses: '{}' | 2682 // uses: '{}' |
| 2681 return RegisterList(); | 2683 return RegisterList(); |
| 2682 } | 2684 } |
| 2683 | 2685 |
| 2684 // LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0: | 2686 // LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0: |
| 2685 // | 2687 // |
| 2686 // {None: 32, | 2688 // {None: 32, |
| 2687 // Pc: 15, | 2689 // Pc: 15, |
| 2688 // Rn: Rn(19:16), | 2690 // Rn: Rn(19:16), |
| 2689 // W: W(21), | 2691 // W: W(21), |
| 2692 // actual: Actual_LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_1, |
| 2690 // base: Rn, | 2693 // base: Rn, |
| 2691 // baseline: LoadRegisterList, | 2694 // baseline: LoadRegisterList, |
| 2692 // cond: cond(31:28), | 2695 // cond: cond(31:28), |
| 2693 // constraints: , | 2696 // constraints: , |
| 2694 // defs: Union({Rn | 2697 // defs: Union({Rn |
| 2695 // if wback | 2698 // if wback |
| 2696 // else None}, registers), | 2699 // else None}, registers), |
| 2697 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], | 2700 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], |
| 2698 // generated_baseline: LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0, | 2701 // generated_baseline: LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0, |
| 2699 // pattern: cccc100000w1nnnnrrrrrrrrrrrrrrrr, | 2702 // pattern: cccc100000w1nnnnrrrrrrrrrrrrrrrr, |
| 2700 // register_list: register_list(15:0), | 2703 // register_list: register_list(15:0), |
| 2701 // registers: RegisterList(register_list), | 2704 // registers: RegisterList(register_list), |
| 2702 // rule: LDMDA_LDMFA, | 2705 // rule: LDMDA_LDMFA, |
| 2703 // safety: [Rn == | 2706 // safety: [Rn == |
| 2704 // Pc || | 2707 // Pc || |
| 2705 // NumGPRs(registers) < | 2708 // NumGPRs(registers) < |
| 2706 // 1 => UNPREDICTABLE, | 2709 // 1 => UNPREDICTABLE, |
| 2707 // wback && | 2710 // wback && |
| 2708 // Contains(registers, Rn) => UNKNOWN, | 2711 // Contains(registers, Rn) => UNKNOWN, |
| 2709 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], | 2712 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], |
| 2710 // small_imm_base_wb: true, | 2713 // small_imm_base_wb: wback, |
| 2711 // true: true, | |
| 2712 // uses: {Rn}, | 2714 // uses: {Rn}, |
| 2713 // wback: W(21)=1} | 2715 // wback: W(21)=1} |
| 2714 Register LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2716 Register LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2715 base_address_register(Instruction inst) const { | 2717 base_address_register(Instruction inst) const { |
| 2716 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2718 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2717 // base: 'inst(19:16)' | 2719 // base: 'inst(19:16)' |
| 2718 return Register(((inst.Bits() & 0x000F0000) >> 16)); | 2720 return Register(((inst.Bits() & 0x000F0000) >> 16)); |
| 2719 } | 2721 } |
| 2720 | 2722 |
| 2721 RegisterList LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2723 RegisterList LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2755 return FORBIDDEN_OPERANDS; | 2757 return FORBIDDEN_OPERANDS; |
| 2756 | 2758 |
| 2757 return MAY_BE_SAFE; | 2759 return MAY_BE_SAFE; |
| 2758 } | 2760 } |
| 2759 | 2761 |
| 2760 | 2762 |
| 2761 bool LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2763 bool LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2762 base_address_register_writeback_small_immediate( | 2764 base_address_register_writeback_small_immediate( |
| 2763 Instruction inst) const { | 2765 Instruction inst) const { |
| 2764 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2766 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2765 // small_imm_base_wb: 'true' | 2767 // small_imm_base_wb: 'inst(21)=1' |
| 2766 return true; | 2768 return (inst.Bits() & 0x00200000) == |
| 2769 0x00200000; |
| 2767 } | 2770 } |
| 2768 | 2771 |
| 2769 RegisterList LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2772 RegisterList LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2770 uses(Instruction inst) const { | 2773 uses(Instruction inst) const { |
| 2771 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2774 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2772 // uses: '{inst(19:16)}' | 2775 // uses: '{inst(19:16)}' |
| 2773 return RegisterList(). | 2776 return RegisterList(). |
| 2774 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); | 2777 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); |
| 2775 } | 2778 } |
| 2776 | 2779 |
| 2777 // LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0: | 2780 // LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0: |
| 2778 // | 2781 // |
| 2779 // {None: 32, | 2782 // {None: 32, |
| 2780 // Pc: 15, | 2783 // Pc: 15, |
| 2781 // Rn: Rn(19:16), | 2784 // Rn: Rn(19:16), |
| 2782 // W: W(21), | 2785 // W: W(21), |
| 2786 // actual: Actual_LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_1, |
| 2783 // base: Rn, | 2787 // base: Rn, |
| 2784 // baseline: LoadRegisterList, | 2788 // baseline: LoadRegisterList, |
| 2785 // cond: cond(31:28), | 2789 // cond: cond(31:28), |
| 2786 // constraints: , | 2790 // constraints: , |
| 2787 // defs: Union({Rn | 2791 // defs: Union({Rn |
| 2788 // if wback | 2792 // if wback |
| 2789 // else None}, registers), | 2793 // else None}, registers), |
| 2790 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], | 2794 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], |
| 2791 // generated_baseline: LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0, | 2795 // generated_baseline: LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0, |
| 2792 // pattern: cccc100100w1nnnnrrrrrrrrrrrrrrrr, | 2796 // pattern: cccc100100w1nnnnrrrrrrrrrrrrrrrr, |
| 2793 // register_list: register_list(15:0), | 2797 // register_list: register_list(15:0), |
| 2794 // registers: RegisterList(register_list), | 2798 // registers: RegisterList(register_list), |
| 2795 // rule: LDMDB_LDMEA, | 2799 // rule: LDMDB_LDMEA, |
| 2796 // safety: [Rn == | 2800 // safety: [Rn == |
| 2797 // Pc || | 2801 // Pc || |
| 2798 // NumGPRs(registers) < | 2802 // NumGPRs(registers) < |
| 2799 // 1 => UNPREDICTABLE, | 2803 // 1 => UNPREDICTABLE, |
| 2800 // wback && | 2804 // wback && |
| 2801 // Contains(registers, Rn) => UNKNOWN, | 2805 // Contains(registers, Rn) => UNKNOWN, |
| 2802 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], | 2806 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], |
| 2803 // small_imm_base_wb: true, | 2807 // small_imm_base_wb: wback, |
| 2804 // true: true, | |
| 2805 // uses: {Rn}, | 2808 // uses: {Rn}, |
| 2806 // wback: W(21)=1} | 2809 // wback: W(21)=1} |
| 2807 Register LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2810 Register LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2808 base_address_register(Instruction inst) const { | 2811 base_address_register(Instruction inst) const { |
| 2809 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2812 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2810 // base: 'inst(19:16)' | 2813 // base: 'inst(19:16)' |
| 2811 return Register(((inst.Bits() & 0x000F0000) >> 16)); | 2814 return Register(((inst.Bits() & 0x000F0000) >> 16)); |
| 2812 } | 2815 } |
| 2813 | 2816 |
| 2814 RegisterList LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2817 RegisterList LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2848 return FORBIDDEN_OPERANDS; | 2851 return FORBIDDEN_OPERANDS; |
| 2849 | 2852 |
| 2850 return MAY_BE_SAFE; | 2853 return MAY_BE_SAFE; |
| 2851 } | 2854 } |
| 2852 | 2855 |
| 2853 | 2856 |
| 2854 bool LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2857 bool LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2855 base_address_register_writeback_small_immediate( | 2858 base_address_register_writeback_small_immediate( |
| 2856 Instruction inst) const { | 2859 Instruction inst) const { |
| 2857 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2860 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2858 // small_imm_base_wb: 'true' | 2861 // small_imm_base_wb: 'inst(21)=1' |
| 2859 return true; | 2862 return (inst.Bits() & 0x00200000) == |
| 2863 0x00200000; |
| 2860 } | 2864 } |
| 2861 | 2865 |
| 2862 RegisterList LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2866 RegisterList LDMDB_LDMEA_cccc100100w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2863 uses(Instruction inst) const { | 2867 uses(Instruction inst) const { |
| 2864 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2868 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2865 // uses: '{inst(19:16)}' | 2869 // uses: '{inst(19:16)}' |
| 2866 return RegisterList(). | 2870 return RegisterList(). |
| 2867 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); | 2871 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); |
| 2868 } | 2872 } |
| 2869 | 2873 |
| 2870 // LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0: | 2874 // LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0: |
| 2871 // | 2875 // |
| 2872 // {None: 32, | 2876 // {None: 32, |
| 2873 // Pc: 15, | 2877 // Pc: 15, |
| 2874 // Rn: Rn(19:16), | 2878 // Rn: Rn(19:16), |
| 2875 // W: W(21), | 2879 // W: W(21), |
| 2880 // actual: Actual_LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_1, |
| 2876 // base: Rn, | 2881 // base: Rn, |
| 2877 // baseline: LoadRegisterList, | 2882 // baseline: LoadRegisterList, |
| 2878 // cond: cond(31:28), | 2883 // cond: cond(31:28), |
| 2879 // constraints: , | 2884 // constraints: , |
| 2880 // defs: Union({Rn | 2885 // defs: Union({Rn |
| 2881 // if wback | 2886 // if wback |
| 2882 // else None}, registers), | 2887 // else None}, registers), |
| 2883 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], | 2888 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], |
| 2884 // generated_baseline: LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0, | 2889 // generated_baseline: LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0, |
| 2885 // pattern: cccc100110w1nnnnrrrrrrrrrrrrrrrr, | 2890 // pattern: cccc100110w1nnnnrrrrrrrrrrrrrrrr, |
| 2886 // register_list: register_list(15:0), | 2891 // register_list: register_list(15:0), |
| 2887 // registers: RegisterList(register_list), | 2892 // registers: RegisterList(register_list), |
| 2888 // rule: LDMIB_LDMED, | 2893 // rule: LDMIB_LDMED, |
| 2889 // safety: [Rn == | 2894 // safety: [Rn == |
| 2890 // Pc || | 2895 // Pc || |
| 2891 // NumGPRs(registers) < | 2896 // NumGPRs(registers) < |
| 2892 // 1 => UNPREDICTABLE, | 2897 // 1 => UNPREDICTABLE, |
| 2893 // wback && | 2898 // wback && |
| 2894 // Contains(registers, Rn) => UNKNOWN, | 2899 // Contains(registers, Rn) => UNKNOWN, |
| 2895 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], | 2900 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], |
| 2896 // small_imm_base_wb: true, | 2901 // small_imm_base_wb: wback, |
| 2897 // true: true, | |
| 2898 // uses: {Rn}, | 2902 // uses: {Rn}, |
| 2899 // wback: W(21)=1} | 2903 // wback: W(21)=1} |
| 2900 Register LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2904 Register LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2901 base_address_register(Instruction inst) const { | 2905 base_address_register(Instruction inst) const { |
| 2902 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2906 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2903 // base: 'inst(19:16)' | 2907 // base: 'inst(19:16)' |
| 2904 return Register(((inst.Bits() & 0x000F0000) >> 16)); | 2908 return Register(((inst.Bits() & 0x000F0000) >> 16)); |
| 2905 } | 2909 } |
| 2906 | 2910 |
| 2907 RegisterList LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2911 RegisterList LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2941 return FORBIDDEN_OPERANDS; | 2945 return FORBIDDEN_OPERANDS; |
| 2942 | 2946 |
| 2943 return MAY_BE_SAFE; | 2947 return MAY_BE_SAFE; |
| 2944 } | 2948 } |
| 2945 | 2949 |
| 2946 | 2950 |
| 2947 bool LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2951 bool LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2948 base_address_register_writeback_small_immediate( | 2952 base_address_register_writeback_small_immediate( |
| 2949 Instruction inst) const { | 2953 Instruction inst) const { |
| 2950 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2954 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2951 // small_imm_base_wb: 'true' | 2955 // small_imm_base_wb: 'inst(21)=1' |
| 2952 return true; | 2956 return (inst.Bits() & 0x00200000) == |
| 2957 0x00200000; |
| 2953 } | 2958 } |
| 2954 | 2959 |
| 2955 RegisterList LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2960 RegisterList LDMIB_LDMED_cccc100110w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2956 uses(Instruction inst) const { | 2961 uses(Instruction inst) const { |
| 2957 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 2962 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2958 // uses: '{inst(19:16)}' | 2963 // uses: '{inst(19:16)}' |
| 2959 return RegisterList(). | 2964 return RegisterList(). |
| 2960 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); | 2965 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); |
| 2961 } | 2966 } |
| 2962 | 2967 |
| 2963 // LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0: | 2968 // LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0: |
| 2964 // | 2969 // |
| 2965 // {None: 32, | 2970 // {None: 32, |
| 2966 // Pc: 15, | 2971 // Pc: 15, |
| 2967 // Rn: Rn(19:16), | 2972 // Rn: Rn(19:16), |
| 2968 // W: W(21), | 2973 // W: W(21), |
| 2974 // actual: Actual_LDMDA_LDMFA_cccc100000w1nnnnrrrrrrrrrrrrrrrr_case_1, |
| 2969 // base: Rn, | 2975 // base: Rn, |
| 2970 // baseline: LoadRegisterList, | 2976 // baseline: LoadRegisterList, |
| 2971 // cond: cond(31:28), | 2977 // cond: cond(31:28), |
| 2972 // constraints: , | 2978 // constraints: , |
| 2973 // defs: Union({Rn | 2979 // defs: Union({Rn |
| 2974 // if wback | 2980 // if wback |
| 2975 // else None}, registers), | 2981 // else None}, registers), |
| 2976 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], | 2982 // fields: [cond(31:28), W(21), Rn(19:16), register_list(15:0)], |
| 2977 // generated_baseline: LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_
0, | 2983 // generated_baseline: LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_
0, |
| 2978 // pattern: cccc100010w1nnnnrrrrrrrrrrrrrrrr, | 2984 // pattern: cccc100010w1nnnnrrrrrrrrrrrrrrrr, |
| 2979 // register_list: register_list(15:0), | 2985 // register_list: register_list(15:0), |
| 2980 // registers: RegisterList(register_list), | 2986 // registers: RegisterList(register_list), |
| 2981 // rule: LDM_LDMIA_LDMFD, | 2987 // rule: LDM_LDMIA_LDMFD, |
| 2982 // safety: [Rn == | 2988 // safety: [Rn == |
| 2983 // Pc || | 2989 // Pc || |
| 2984 // NumGPRs(registers) < | 2990 // NumGPRs(registers) < |
| 2985 // 1 => UNPREDICTABLE, | 2991 // 1 => UNPREDICTABLE, |
| 2986 // wback && | 2992 // wback && |
| 2987 // Contains(registers, Rn) => UNKNOWN, | 2993 // Contains(registers, Rn) => UNKNOWN, |
| 2988 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], | 2994 // Contains(registers, Pc) => FORBIDDEN_OPERANDS], |
| 2989 // small_imm_base_wb: true, | 2995 // small_imm_base_wb: wback, |
| 2990 // true: true, | |
| 2991 // uses: {Rn}, | 2996 // uses: {Rn}, |
| 2992 // wback: W(21)=1} | 2997 // wback: W(21)=1} |
| 2993 Register LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 2998 Register LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 2994 base_address_register(Instruction inst) const { | 2999 base_address_register(Instruction inst) const { |
| 2995 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 3000 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 2996 // base: 'inst(19:16)' | 3001 // base: 'inst(19:16)' |
| 2997 return Register(((inst.Bits() & 0x000F0000) >> 16)); | 3002 return Register(((inst.Bits() & 0x000F0000) >> 16)); |
| 2998 } | 3003 } |
| 2999 | 3004 |
| 3000 RegisterList LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 3005 RegisterList LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3034 return FORBIDDEN_OPERANDS; | 3039 return FORBIDDEN_OPERANDS; |
| 3035 | 3040 |
| 3036 return MAY_BE_SAFE; | 3041 return MAY_BE_SAFE; |
| 3037 } | 3042 } |
| 3038 | 3043 |
| 3039 | 3044 |
| 3040 bool LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 3045 bool LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 3041 base_address_register_writeback_small_immediate( | 3046 base_address_register_writeback_small_immediate( |
| 3042 Instruction inst) const { | 3047 Instruction inst) const { |
| 3043 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 3048 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 3044 // small_imm_base_wb: 'true' | 3049 // small_imm_base_wb: 'inst(21)=1' |
| 3045 return true; | 3050 return (inst.Bits() & 0x00200000) == |
| 3051 0x00200000; |
| 3046 } | 3052 } |
| 3047 | 3053 |
| 3048 RegisterList LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: | 3054 RegisterList LDM_LDMIA_LDMFD_cccc100010w1nnnnrrrrrrrrrrrrrrrr_case_0:: |
| 3049 uses(Instruction inst) const { | 3055 uses(Instruction inst) const { |
| 3050 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 3056 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 3051 // uses: '{inst(19:16)}' | 3057 // uses: '{inst(19:16)}' |
| 3052 return RegisterList(). | 3058 return RegisterList(). |
| 3053 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); | 3059 Add(Register(((inst.Bits() & 0x000F0000) >> 16))); |
| 3054 } | 3060 } |
| 3055 | 3061 |
| (...skipping 7670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10726 UNREFERENCED_PARAMETER(inst); // To silence compiler. | 10732 UNREFERENCED_PARAMETER(inst); // To silence compiler. |
| 10727 // uses: '{inst(19:16), inst(15:12), inst(11:8), inst(3:0)}' | 10733 // uses: '{inst(19:16), inst(15:12), inst(11:8), inst(3:0)}' |
| 10728 return RegisterList(). | 10734 return RegisterList(). |
| 10729 Add(Register(((inst.Bits() & 0x000F0000) >> 16))). | 10735 Add(Register(((inst.Bits() & 0x000F0000) >> 16))). |
| 10730 Add(Register(((inst.Bits() & 0x0000F000) >> 12))). | 10736 Add(Register(((inst.Bits() & 0x0000F000) >> 12))). |
| 10731 Add(Register(((inst.Bits() & 0x00000F00) >> 8))). | 10737 Add(Register(((inst.Bits() & 0x00000F00) >> 8))). |
| 10732 Add(Register((inst.Bits() & 0x0000000F))); | 10738 Add(Register((inst.Bits() & 0x0000000F))); |
| 10733 } | 10739 } |
| 10734 | 10740 |
| 10735 } // namespace nacl_arm_dec | 10741 } // namespace nacl_arm_dec |
| OLD | NEW |