| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 "vm/globals.h" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_ARCH_ARM64) | 6 #if defined(TARGET_ARCH_ARM64) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/cpu.h" | 9 #include "vm/cpu.h" |
| 10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
| (...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 } | 912 } |
| 913 } | 913 } |
| 914 | 914 |
| 915 | 915 |
| 916 // On entry to a function compiled for OSR, the caller's frame pointer, the | 916 // On entry to a function compiled for OSR, the caller's frame pointer, the |
| 917 // stack locals, and any copied parameters are already in place. The frame | 917 // stack locals, and any copied parameters are already in place. The frame |
| 918 // pointer is already set up. The PC marker is not correct for the | 918 // pointer is already set up. The PC marker is not correct for the |
| 919 // optimized function and there may be extra space for spill slots to | 919 // optimized function and there may be extra space for spill slots to |
| 920 // allocate. We must also set up the pool pointer for the function. | 920 // allocate. We must also set up the pool pointer for the function. |
| 921 void Assembler::EnterOsrFrame(intptr_t extra_size, Register new_pp) { | 921 void Assembler::EnterOsrFrame(intptr_t extra_size, Register new_pp) { |
| 922 const intptr_t offset = CodeSize(); | |
| 923 | |
| 924 Comment("EnterOsrFrame"); | 922 Comment("EnterOsrFrame"); |
| 925 adr(TMP, -CodeSize()); | 923 adr(TMP, -CodeSize()); |
| 926 | 924 |
| 927 AddImmediate(TMP, TMP, -offset, kNoPP); | |
| 928 StoreToOffset(TMP, FP, kPcMarkerSlotFromFp * kWordSize); | 925 StoreToOffset(TMP, FP, kPcMarkerSlotFromFp * kWordSize); |
| 929 | 926 |
| 930 // Setup pool pointer for this dart function. | 927 // Setup pool pointer for this dart function. |
| 931 if (new_pp == kNoPP) { | 928 if (new_pp == kNoPP) { |
| 932 LoadPoolPointer(PP); | 929 LoadPoolPointer(PP); |
| 933 } else { | 930 } else { |
| 934 mov(PP, new_pp); | 931 mov(PP, new_pp); |
| 935 } | 932 } |
| 936 | 933 |
| 937 if (extra_size > 0) { | 934 if (extra_size > 0) { |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 LoadImmediate(TMP, tags, pp); | 1153 LoadImmediate(TMP, tags, pp); |
| 1157 StoreFieldToOffset(TMP, instance_reg, Object::tags_offset()); | 1154 StoreFieldToOffset(TMP, instance_reg, Object::tags_offset()); |
| 1158 } else { | 1155 } else { |
| 1159 b(failure); | 1156 b(failure); |
| 1160 } | 1157 } |
| 1161 } | 1158 } |
| 1162 | 1159 |
| 1163 } // namespace dart | 1160 } // namespace dart |
| 1164 | 1161 |
| 1165 #endif // defined TARGET_ARCH_ARM64 | 1162 #endif // defined TARGET_ARCH_ARM64 |
| OLD | NEW |