OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // A Disassembler object is used to disassemble a block of code instruction by | 5 // A Disassembler object is used to disassemble a block of code instruction by |
6 // instruction. The default implementation of the NameConverter object can be | 6 // instruction. The default implementation of the NameConverter object can be |
7 // overriden to modify register names or to do symbol lookup on addresses. | 7 // overriden to modify register names or to do symbol lookup on addresses. |
8 // | 8 // |
9 // The example below will disassemble a block of code and print it to stdout. | 9 // The example below will disassemble a block of code and print it to stdout. |
10 // | 10 // |
(...skipping 1878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1889 if (dp_operation) { | 1889 if (dp_operation) { |
1890 Format(instr, "vrintm.f64.f64 'Dd, 'Dm"); | 1890 Format(instr, "vrintm.f64.f64 'Dd, 'Dm"); |
1891 } else { | 1891 } else { |
1892 Format(instr, "vrintm.f32.f32 'Sd, 'Sm"); | 1892 Format(instr, "vrintm.f32.f32 'Sd, 'Sm"); |
1893 } | 1893 } |
1894 break; | 1894 break; |
1895 default: | 1895 default: |
1896 UNREACHABLE(); // Case analysis is exhaustive. | 1896 UNREACHABLE(); // Case analysis is exhaustive. |
1897 break; | 1897 break; |
1898 } | 1898 } |
| 1899 } else if ((instr->Opc1Value() == 0x4) && (instr->Bits(11, 9) == 0x5) && |
| 1900 (instr->Bit(4) == 0x0)) { |
| 1901 // VMAXNM, VMINNM (floating-point) |
| 1902 if (instr->SzValue() == 0x1) { |
| 1903 if (instr->Bit(6) == 0x1) { |
| 1904 Format(instr, "vminnm.f64 'Dd, 'Dn, 'Dm"); |
| 1905 } else { |
| 1906 Format(instr, "vmaxnm.f64 'Dd, 'Dn, 'Dm"); |
| 1907 } |
| 1908 } else { |
| 1909 if (instr->Bit(6) == 0x1) { |
| 1910 Format(instr, "vminnm.f32 'Sd, 'Sn, 'Sm"); |
| 1911 } else { |
| 1912 Format(instr, "vmaxnm.f32 'Sd, 'Sn, 'Sm"); |
| 1913 } |
| 1914 } |
1899 } else { | 1915 } else { |
1900 Unknown(instr); | 1916 Unknown(instr); |
1901 } | 1917 } |
1902 break; | 1918 break; |
1903 case 0x1C: | 1919 case 0x1C: |
1904 if ((instr->Bits(11, 9) == 0x5) && (instr->Bit(6) == 0) && | 1920 if ((instr->Bits(11, 9) == 0x5) && (instr->Bit(6) == 0) && |
1905 (instr->Bit(4) == 0)) { | 1921 (instr->Bit(4) == 0)) { |
1906 // VSEL* (floating-point) | 1922 // VSEL* (floating-point) |
1907 bool dp_operation = (instr->SzValue() == 1); | 1923 bool dp_operation = (instr->SzValue() == 1); |
1908 switch (instr->Bits(21, 20)) { | 1924 switch (instr->Bits(21, 20)) { |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2106 pc += d.InstructionDecode(buffer, pc); | 2122 pc += d.InstructionDecode(buffer, pc); |
2107 v8::internal::PrintF(f, "%p %08x %s\n", static_cast<void*>(prev_pc), | 2123 v8::internal::PrintF(f, "%p %08x %s\n", static_cast<void*>(prev_pc), |
2108 *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); | 2124 *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); |
2109 } | 2125 } |
2110 } | 2126 } |
2111 | 2127 |
2112 | 2128 |
2113 } // namespace disasm | 2129 } // namespace disasm |
2114 | 2130 |
2115 #endif // V8_TARGET_ARCH_ARM | 2131 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |