| OLD | NEW |
| 1 # ARMv7 Instruction Encodings | 1 # ARMv7 Instruction Encodings |
| 2 # | 2 # |
| 3 # This table is derived from the "ARM Architecture Reference Manual, ARMv7-A | 3 # This table is derived from the "ARM Architecture Reference Manual, ARMv7-A |
| 4 # and ARMv7-R edition" and is used here with the permission of ARM Limited. | 4 # and ARMv7-R edition" and is used here with the permission of ARM Limited. |
| 5 # Reproduction for purposes other than the development and distribution of | 5 # Reproduction for purposes other than the development and distribution of |
| 6 # Native Client may require the explicit permission of ARM Limited. | 6 # Native Client may require the explicit permission of ARM Limited. |
| 7 | 7 |
| 8 # This file defines the Native Client "instruction classes" assigned to every | 8 # This file defines the Native Client "instruction classes" assigned to every |
| 9 # possible ARMv7 instruction encoding. It is organized into a series of tables, | 9 # possible ARMv7 instruction encoding. It is organized into a series of tables, |
| 10 # and directly parallels the ARM Architecture Reference Manual cited above. | 10 # and directly parallels the ARM Architecture Reference Manual cited above. |
| (...skipping 1763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1774 pattern := cccc01110101ddddaaaammmm11r1nnnn; | 1774 pattern := cccc01110101ddddaaaammmm11r1nnnn; |
| 1775 rule := SMMLS; | 1775 rule := SMMLS; |
| 1776 | else: = Undefined # Note associated with table. | 1776 | else: = Undefined # Note associated with table. |
| 1777 +-- | 1777 +-- |
| 1778 | 1778 |
| 1779 +-- branch_branch_with_link_and_block_data_transfer (See Section A5.5) | 1779 +-- branch_branch_with_link_and_block_data_transfer (See Section A5.5) |
| 1780 *RnRegs | 1780 *RnRegs |
| 1781 { cond(31:28), W(21), Rn(19:16), register_list(15:0) } | 1781 { cond(31:28), W(21), Rn(19:16), register_list(15:0) } |
| 1782 registers := RegisterList(register_list); wback := W=1; | 1782 registers := RegisterList(register_list); wback := W=1; |
| 1783 base := Rn; | 1783 base := Rn; |
| 1784 small_imm_base_wb := true; | 1784 small_imm_base_wb := wback; |
| 1785 safety := Rn == Pc | NumGPRs(registers) < 1 => UNPREDICTABLE; | 1785 safety := Rn == Pc | NumGPRs(registers) < 1 => UNPREDICTABLE; |
| 1786 *LdRnRegs *RnRegs | 1786 *LdRnRegs *RnRegs |
| 1787 baseline := LoadRegisterList; | 1787 baseline := LoadRegisterList; |
| 1788 defs := Union({Rn if wback else None}, registers); | 1788 defs := Union({Rn if wback else None}, registers); |
| 1789 uses := {Rn}; | 1789 uses := {Rn}; |
| 1790 safety := super.safety & | 1790 safety := super.safety & |
| 1791 wback & Contains(registers, Rn) => UNKNOWN & | 1791 wback & Contains(registers, Rn) => UNKNOWN & |
| 1792 Contains(registers, Pc) => FORBIDDEN_OPERANDS; | 1792 Contains(registers, Pc) => FORBIDDEN_OPERANDS; |
| 1793 *StRnRegs *RnRegs | 1793 *StRnRegs *RnRegs |
| 1794 baseline := StoreRegisterList; | 1794 baseline := StoreRegisterList; |
| 1795 defs := {Rn if wback else None}; | 1795 defs := {Rn if wback else None}; |
| 1796 uses := Union({Rn}, registers); | 1796 uses := Union({Rn}, registers); |
| 1797 safety := super.safety & | 1797 safety := super.safety & |
| 1798 wback & Contains(registers, Rn) & | 1798 wback & Contains(registers, Rn) & |
| 1799 Rn != SmallestGPR(registers) => UNKNOWN; | 1799 Rn != SmallestGPR(registers) => UNKNOWN; |
| 1800 *Branch | 1800 *Branch |
| 1801 { Cond(31:28), imm24(23:0) } | 1801 { Cond(31:28), imm24(23:0) } |
| 1802 baseline := BranchImmediate24; | 1802 baseline := BranchImmediate24; |
| 1803 imm32 := SignExtend(imm24:'00', 32); | 1803 imm32 := SignExtend(imm24:'00', 32); |
| 1804 defs := {Pc}; | 1804 defs := {Pc}; |
| 1805 uses := {Pc}; | 1805 uses := {Pc}; |
| 1806 relative := true; | 1806 relative := true; |
| 1807 relative_offset := imm32; | 1807 # The ARM manual states that "PC reads as the address of the current |
| 1808 # instruction plus 8. |
| 1809 relative_offset := imm32 + 8; |
| 1808 safety := true => MAY_BE_SAFE; | 1810 safety := true => MAY_BE_SAFE; |
| 1809 *BranchLink *Branch | 1811 *BranchLink *Branch |
| 1810 defs := {Pc, Lr}; | 1812 defs := {Pc, Lr}; |
| 1811 *Forbidden | 1813 *Forbidden |
| 1812 baseline := ForbiddenCondDecoder; | 1814 baseline := ForbiddenCondDecoder; |
| 1813 +-- | 1815 +-- |
| 1814 | op(25:20) R(15) Rn(19:16) | 1816 | op(25:20) R(15) Rn(19:16) |
| 1815 | 0000x0 - - = *StRnRegs | 1817 | 0000x0 - - = *StRnRegs |
| 1816 pattern := cccc100000w0nnnnrrrrrrrrrrrrrrrr; | 1818 pattern := cccc100000w0nnnnrrrrrrrrrrrrrrrr; |
| 1817 rule := STMDA_STMED; | 1819 rule := STMDA_STMED; |
| (...skipping 1991 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3809 rule := VLD3_single_3_element_structure_to_all_lanes; | 3811 rule := VLD3_single_3_element_structure_to_all_lanes; |
| 3810 | " " 0x11 = *VLSS4 | 3812 | " " 0x11 = *VLSS4 |
| 3811 pattern := 111101001d10nnnnddddss11aaaammmm; | 3813 pattern := 111101001d10nnnnddddss11aaaammmm; |
| 3812 rule := VLD4_single_4_element_structure_to_one_lane; | 3814 rule := VLD4_single_4_element_structure_to_one_lane; |
| 3813 | " " 1011 " | 3815 | " " 1011 " |
| 3814 | " " 1111 = *VLS4A | 3816 | " " 1111 = *VLS4A |
| 3815 pattern := 111101001d10nnnndddd1111sstammmm; | 3817 pattern := 111101001d10nnnndddd1111sstammmm; |
| 3816 rule := VLD4_single_4_element_structure_to_all_lanes; | 3818 rule := VLD4_single_4_element_structure_to_all_lanes; |
| 3817 | else: = Undefined | 3819 | else: = Undefined |
| 3818 +-- | 3820 +-- |
| OLD | NEW |