OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include <setjmp.h> // NOLINT | 5 #include <setjmp.h> // NOLINT |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 | 7 |
8 #include "vm/globals.h" | 8 #include "vm/globals.h" |
9 #if defined(TARGET_ARCH_ARM) | 9 #if defined(TARGET_ARCH_ARM) |
10 | 10 |
(...skipping 1978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1989 // The PU field is a 2-bit field. | 1989 // The PU field is a 2-bit field. |
1990 UNREACHABLE(); | 1990 UNREACHABLE(); |
1991 break; | 1991 break; |
1992 } | 1992 } |
1993 } | 1993 } |
1994 } | 1994 } |
1995 if (IsIllegalAddress(addr)) { | 1995 if (IsIllegalAddress(addr)) { |
1996 HandleIllegalAccess(addr, instr); | 1996 HandleIllegalAccess(addr, instr); |
1997 } else { | 1997 } else { |
1998 if (write_back) { | 1998 if (write_back) { |
| 1999 ASSERT(rd != rn); // Unpredictable. |
1999 set_register(rn, rn_val); | 2000 set_register(rn, rn_val); |
2000 } | 2001 } |
2001 if (!instr->HasSign()) { | 2002 if (!instr->HasSign()) { |
2002 if (instr->HasL()) { | 2003 if (instr->HasL()) { |
2003 uint16_t val = ReadHU(addr, instr); | 2004 uint16_t val = ReadHU(addr, instr); |
2004 set_register(rd, val); | 2005 set_register(rd, val); |
2005 } else { | 2006 } else { |
2006 uint16_t val = get_register(rd); | 2007 uint16_t val = get_register(rd); |
2007 WriteH(addr, val, instr); | 2008 WriteH(addr, val, instr); |
2008 } | 2009 } |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2305 } | 2306 } |
2306 default: { | 2307 default: { |
2307 UNREACHABLE(); | 2308 UNREACHABLE(); |
2308 break; | 2309 break; |
2309 } | 2310 } |
2310 } | 2311 } |
2311 if (IsIllegalAddress(addr)) { | 2312 if (IsIllegalAddress(addr)) { |
2312 HandleIllegalAccess(addr, instr); | 2313 HandleIllegalAccess(addr, instr); |
2313 } else { | 2314 } else { |
2314 if (write_back) { | 2315 if (write_back) { |
| 2316 ASSERT(rd != rn); // Unpredictable. |
2315 set_register(rn, rn_val); | 2317 set_register(rn, rn_val); |
2316 } | 2318 } |
2317 if (instr->HasB()) { | 2319 if (instr->HasB()) { |
2318 if (instr->HasL()) { | 2320 if (instr->HasL()) { |
2319 unsigned char val = ReadBU(addr); | 2321 unsigned char val = ReadBU(addr); |
2320 set_register(rd, val); | 2322 set_register(rd, val); |
2321 } else { | 2323 } else { |
2322 unsigned char val = get_register(rd); | 2324 unsigned char val = get_register(rd); |
2323 WriteB(addr, val); | 2325 WriteB(addr, val); |
2324 } | 2326 } |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2417 } | 2419 } |
2418 default: { | 2420 default: { |
2419 UNREACHABLE(); | 2421 UNREACHABLE(); |
2420 break; | 2422 break; |
2421 } | 2423 } |
2422 } | 2424 } |
2423 if (IsIllegalAddress(addr)) { | 2425 if (IsIllegalAddress(addr)) { |
2424 HandleIllegalAccess(addr, instr); | 2426 HandleIllegalAccess(addr, instr); |
2425 } else { | 2427 } else { |
2426 if (write_back) { | 2428 if (write_back) { |
| 2429 ASSERT(rd != rn); // Unpredictable. |
2427 set_register(rn, rn_val); | 2430 set_register(rn, rn_val); |
2428 } | 2431 } |
2429 if (instr->HasB()) { | 2432 if (instr->HasB()) { |
2430 if (instr->HasL()) { | 2433 if (instr->HasL()) { |
2431 unsigned char val = ReadBU(addr); | 2434 unsigned char val = ReadBU(addr); |
2432 set_register(rd, val); | 2435 set_register(rd, val); |
2433 } else { | 2436 } else { |
2434 unsigned char val = get_register(rd); | 2437 unsigned char val = get_register(rd); |
2435 WriteB(addr, val); | 2438 WriteB(addr, val); |
2436 } | 2439 } |
(...skipping 1446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3883 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); | 3886 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); |
3884 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); | 3887 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); |
3885 buf->Longjmp(); | 3888 buf->Longjmp(); |
3886 } | 3889 } |
3887 | 3890 |
3888 } // namespace dart | 3891 } // namespace dart |
3889 | 3892 |
3890 #endif // defined(USING_SIMULATOR) | 3893 #endif // defined(USING_SIMULATOR) |
3891 | 3894 |
3892 #endif // defined TARGET_ARCH_ARM | 3895 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |