Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Side by Side Diff: runtime/vm/assembler_ia32.cc

Issue 1544583002: For background compilation we copy ICData so that it is immutable during comnpilation. However, we … (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: remove flag Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/assembler_arm64.cc ('k') | runtime/vm/assembler_mips.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "vm/globals.h" // NOLINT 5 #include "vm/globals.h" // NOLINT
6 #if defined(TARGET_ARCH_IA32) 6 #if defined(TARGET_ARCH_IA32)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/code_generator.h" 9 #include "vm/code_generator.h"
10 #include "vm/cpu.h" 10 #include "vm/cpu.h"
(...skipping 2145 matching lines...) Expand 10 before | Expand all | Expand 10 after
2156 } 2156 }
2157 } 2157 }
2158 2158
2159 2159
2160 void Assembler::LoadIsolate(Register dst) { 2160 void Assembler::LoadIsolate(Register dst) {
2161 movl(dst, Address(THR, Thread::isolate_offset())); 2161 movl(dst, Address(THR, Thread::isolate_offset()));
2162 } 2162 }
2163 2163
2164 2164
2165 void Assembler::LoadObject(Register dst, const Object& object) { 2165 void Assembler::LoadObject(Register dst, const Object& object) {
2166 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2166 if (object.IsSmi() || object.InVMHeap()) { 2167 if (object.IsSmi() || object.InVMHeap()) {
2167 movl(dst, Immediate(reinterpret_cast<int32_t>(object.raw()))); 2168 movl(dst, Immediate(reinterpret_cast<int32_t>(object.raw())));
2168 } else { 2169 } else {
2169 ASSERT(object.IsNotTemporaryScopedHandle()); 2170 ASSERT(object.IsNotTemporaryScopedHandle());
2170 ASSERT(object.IsOld()); 2171 ASSERT(object.IsOld());
2171 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2172 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2172 EmitUint8(0xB8 + dst); 2173 EmitUint8(0xB8 + dst);
2173 buffer_.EmitObject(object); 2174 buffer_.EmitObject(object);
2174 } 2175 }
2175 } 2176 }
2176 2177
2177 2178
2178 void Assembler::LoadObjectSafely(Register dst, const Object& object) { 2179 void Assembler::LoadObjectSafely(Register dst, const Object& object) {
2180 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2179 if (Assembler::IsSafe(object)) { 2181 if (Assembler::IsSafe(object)) {
2180 LoadObject(dst, object); 2182 LoadObject(dst, object);
2181 } else { 2183 } else {
2182 int32_t cookie = jit_cookie(); 2184 int32_t cookie = jit_cookie();
2183 movl(dst, Immediate(reinterpret_cast<int32_t>(object.raw()) ^ cookie)); 2185 movl(dst, Immediate(reinterpret_cast<int32_t>(object.raw()) ^ cookie));
2184 xorl(dst, Immediate(cookie)); 2186 xorl(dst, Immediate(cookie));
2185 } 2187 }
2186 } 2188 }
2187 2189
2188 2190
2189 void Assembler::PushObject(const Object& object) { 2191 void Assembler::PushObject(const Object& object) {
2192 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2190 if (object.IsSmi() || object.InVMHeap()) { 2193 if (object.IsSmi() || object.InVMHeap()) {
2191 pushl(Immediate(reinterpret_cast<int32_t>(object.raw()))); 2194 pushl(Immediate(reinterpret_cast<int32_t>(object.raw())));
2192 } else { 2195 } else {
2193 ASSERT(object.IsNotTemporaryScopedHandle()); 2196 ASSERT(object.IsNotTemporaryScopedHandle());
2194 ASSERT(object.IsOld()); 2197 ASSERT(object.IsOld());
2195 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2198 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2196 EmitUint8(0x68); 2199 EmitUint8(0x68);
2197 buffer_.EmitObject(object); 2200 buffer_.EmitObject(object);
2198 } 2201 }
2199 } 2202 }
2200 2203
2201 2204
2202 void Assembler::CompareObject(Register reg, const Object& object) { 2205 void Assembler::CompareObject(Register reg, const Object& object) {
2206 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2203 if (object.IsSmi() || object.InVMHeap()) { 2207 if (object.IsSmi() || object.InVMHeap()) {
2204 cmpl(reg, Immediate(reinterpret_cast<int32_t>(object.raw()))); 2208 cmpl(reg, Immediate(reinterpret_cast<int32_t>(object.raw())));
2205 } else { 2209 } else {
2206 ASSERT(object.IsNotTemporaryScopedHandle()); 2210 ASSERT(object.IsNotTemporaryScopedHandle());
2207 ASSERT(object.IsOld()); 2211 ASSERT(object.IsOld());
2208 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2212 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2209 if (reg == EAX) { 2213 if (reg == EAX) {
2210 EmitUint8(0x05 + (7 << 3)); 2214 EmitUint8(0x05 + (7 << 3));
2211 buffer_.EmitObject(object); 2215 buffer_.EmitObject(object);
2212 } else { 2216 } else {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
2391 Stop("Store buffer update is required"); 2395 Stop("Store buffer update is required");
2392 Bind(&done); 2396 Bind(&done);
2393 popl(value); 2397 popl(value);
2394 #endif // defined(DEBUG) 2398 #endif // defined(DEBUG)
2395 // No store buffer update. 2399 // No store buffer update.
2396 } 2400 }
2397 2401
2398 2402
2399 void Assembler::UnverifiedStoreOldObject(const Address& dest, 2403 void Assembler::UnverifiedStoreOldObject(const Address& dest,
2400 const Object& value) { 2404 const Object& value) {
2405 ASSERT(!value.IsICData() || ICData::Cast(value).IsOriginal());
2401 ASSERT(value.IsOld()); 2406 ASSERT(value.IsOld());
2402 ASSERT(!value.InVMHeap()); 2407 ASSERT(!value.InVMHeap());
2403 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2408 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2404 EmitUint8(0xC7); 2409 EmitUint8(0xC7);
2405 EmitOperand(0, dest); 2410 EmitOperand(0, dest);
2406 buffer_.EmitObject(value); 2411 buffer_.EmitObject(value);
2407 } 2412 }
2408 2413
2409 2414
2410 void Assembler::StoreIntoObjectNoBarrier(Register object, 2415 void Assembler::StoreIntoObjectNoBarrier(Register object,
2411 const Address& dest, 2416 const Address& dest,
2412 const Object& value, 2417 const Object& value,
2413 FieldContent old_content) { 2418 FieldContent old_content) {
2419 ASSERT(!value.IsICData() || ICData::Cast(value).IsOriginal());
2414 VerifyHeapWord(dest, old_content); 2420 VerifyHeapWord(dest, old_content);
2415 if (value.IsSmi() || value.InVMHeap()) { 2421 if (value.IsSmi() || value.InVMHeap()) {
2416 Immediate imm_value(reinterpret_cast<int32_t>(value.raw())); 2422 Immediate imm_value(reinterpret_cast<int32_t>(value.raw()));
2417 movl(dest, imm_value); 2423 movl(dest, imm_value);
2418 if (VerifiedMemory::enabled()) { 2424 if (VerifiedMemory::enabled()) {
2419 Register temp = ECX; 2425 Register temp = ECX;
2420 pushl(temp); 2426 pushl(temp);
2421 leal(temp, dest); 2427 leal(temp, dest);
2422 movl(Address(temp, VerifiedMemory::offset()), imm_value); 2428 movl(Address(temp, VerifiedMemory::offset()), imm_value);
2423 popl(temp); 2429 popl(temp);
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after
3212 3218
3213 const char* Assembler::FpuRegisterName(FpuRegister reg) { 3219 const char* Assembler::FpuRegisterName(FpuRegister reg) {
3214 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); 3220 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
3215 return xmm_reg_names[reg]; 3221 return xmm_reg_names[reg];
3216 } 3222 }
3217 3223
3218 3224
3219 } // namespace dart 3225 } // namespace dart
3220 3226
3221 #endif // defined TARGET_ARCH_IA32 3227 #endif // defined TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « runtime/vm/assembler_arm64.cc ('k') | runtime/vm/assembler_mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698