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