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

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

Issue 1722733002: In background compilation make a copy of Field in order to freeze its state (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: s Created 4 years, 9 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 void Assembler::LoadIsolate(Register dst) { 2159 void Assembler::LoadIsolate(Register dst) {
2160 movl(dst, Address(THR, Thread::isolate_offset())); 2160 movl(dst, Address(THR, Thread::isolate_offset()));
2161 } 2161 }
2162 2162
2163 2163
2164 void Assembler::LoadObject(Register dst, const Object& object) { 2164 void Assembler::LoadObject(Register dst, const Object& object) {
2165 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal()); 2165 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2166 ASSERT(!object.IsField() || Field::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) {
2179 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal()); 2180 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2181 ASSERT(!object.IsField() || Field::Cast(object).IsOriginal());
2180 if (Assembler::IsSafe(object)) { 2182 if (Assembler::IsSafe(object)) {
2181 LoadObject(dst, object); 2183 LoadObject(dst, object);
2182 } else { 2184 } else {
2183 int32_t cookie = jit_cookie(); 2185 int32_t cookie = jit_cookie();
2184 movl(dst, Immediate(reinterpret_cast<int32_t>(object.raw()) ^ cookie)); 2186 movl(dst, Immediate(reinterpret_cast<int32_t>(object.raw()) ^ cookie));
2185 xorl(dst, Immediate(cookie)); 2187 xorl(dst, Immediate(cookie));
2186 } 2188 }
2187 } 2189 }
2188 2190
2189 2191
2190 void Assembler::PushObject(const Object& object) { 2192 void Assembler::PushObject(const Object& object) {
2191 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal()); 2193 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2194 ASSERT(!object.IsField() || Field::Cast(object).IsOriginal());
2192 if (object.IsSmi() || object.InVMHeap()) { 2195 if (object.IsSmi() || object.InVMHeap()) {
2193 pushl(Immediate(reinterpret_cast<int32_t>(object.raw()))); 2196 pushl(Immediate(reinterpret_cast<int32_t>(object.raw())));
2194 } else { 2197 } else {
2195 ASSERT(object.IsNotTemporaryScopedHandle()); 2198 ASSERT(object.IsNotTemporaryScopedHandle());
2196 ASSERT(object.IsOld()); 2199 ASSERT(object.IsOld());
2197 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2200 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2198 EmitUint8(0x68); 2201 EmitUint8(0x68);
2199 buffer_.EmitObject(object); 2202 buffer_.EmitObject(object);
2200 } 2203 }
2201 } 2204 }
2202 2205
2203 2206
2204 void Assembler::CompareObject(Register reg, const Object& object) { 2207 void Assembler::CompareObject(Register reg, const Object& object) {
2205 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal()); 2208 ASSERT(!object.IsICData() || ICData::Cast(object).IsOriginal());
2209 ASSERT(!object.IsField() || Field::Cast(object).IsOriginal());
2206 if (object.IsSmi() || object.InVMHeap()) { 2210 if (object.IsSmi() || object.InVMHeap()) {
2207 cmpl(reg, Immediate(reinterpret_cast<int32_t>(object.raw()))); 2211 cmpl(reg, Immediate(reinterpret_cast<int32_t>(object.raw())));
2208 } else { 2212 } else {
2209 ASSERT(object.IsNotTemporaryScopedHandle()); 2213 ASSERT(object.IsNotTemporaryScopedHandle());
2210 ASSERT(object.IsOld()); 2214 ASSERT(object.IsOld());
2211 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2215 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2212 if (reg == EAX) { 2216 if (reg == EAX) {
2213 EmitUint8(0x05 + (7 << 3)); 2217 EmitUint8(0x05 + (7 << 3));
2214 buffer_.EmitObject(object); 2218 buffer_.EmitObject(object);
2215 } else { 2219 } else {
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
2395 Bind(&done); 2399 Bind(&done);
2396 popl(value); 2400 popl(value);
2397 #endif // defined(DEBUG) 2401 #endif // defined(DEBUG)
2398 // No store buffer update. 2402 // No store buffer update.
2399 } 2403 }
2400 2404
2401 2405
2402 void Assembler::UnverifiedStoreOldObject(const Address& dest, 2406 void Assembler::UnverifiedStoreOldObject(const Address& dest,
2403 const Object& value) { 2407 const Object& value) {
2404 ASSERT(!value.IsICData() || ICData::Cast(value).IsOriginal()); 2408 ASSERT(!value.IsICData() || ICData::Cast(value).IsOriginal());
2409 ASSERT(!value.IsField() || Field::Cast(value).IsOriginal());
2405 ASSERT(value.IsOld()); 2410 ASSERT(value.IsOld());
2406 ASSERT(!value.InVMHeap()); 2411 ASSERT(!value.InVMHeap());
2407 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 2412 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
2408 EmitUint8(0xC7); 2413 EmitUint8(0xC7);
2409 EmitOperand(0, dest); 2414 EmitOperand(0, dest);
2410 buffer_.EmitObject(value); 2415 buffer_.EmitObject(value);
2411 } 2416 }
2412 2417
2413 2418
2414 void Assembler::StoreIntoObjectNoBarrier(Register object, 2419 void Assembler::StoreIntoObjectNoBarrier(Register object,
2415 const Address& dest, 2420 const Address& dest,
2416 const Object& value, 2421 const Object& value,
2417 FieldContent old_content) { 2422 FieldContent old_content) {
2418 ASSERT(!value.IsICData() || ICData::Cast(value).IsOriginal()); 2423 ASSERT(!value.IsICData() || ICData::Cast(value).IsOriginal());
2424 ASSERT(!value.IsField() || Field::Cast(value).IsOriginal());
2419 VerifyHeapWord(dest, old_content); 2425 VerifyHeapWord(dest, old_content);
2420 if (value.IsSmi() || value.InVMHeap()) { 2426 if (value.IsSmi() || value.InVMHeap()) {
2421 Immediate imm_value(reinterpret_cast<int32_t>(value.raw())); 2427 Immediate imm_value(reinterpret_cast<int32_t>(value.raw()));
2422 movl(dest, imm_value); 2428 movl(dest, imm_value);
2423 if (VerifiedMemory::enabled()) { 2429 if (VerifiedMemory::enabled()) {
2424 Register temp = ECX; 2430 Register temp = ECX;
2425 pushl(temp); 2431 pushl(temp);
2426 leal(temp, dest); 2432 leal(temp, dest);
2427 movl(Address(temp, VerifiedMemory::offset()), imm_value); 2433 movl(Address(temp, VerifiedMemory::offset()), imm_value);
2428 popl(temp); 2434 popl(temp);
(...skipping 788 matching lines...) Expand 10 before | Expand all | Expand 10 after
3217 3223
3218 const char* Assembler::FpuRegisterName(FpuRegister reg) { 3224 const char* Assembler::FpuRegisterName(FpuRegister reg) {
3219 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); 3225 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
3220 return xmm_reg_names[reg]; 3226 return xmm_reg_names[reg];
3221 } 3227 }
3222 3228
3223 3229
3224 } // namespace dart 3230 } // namespace dart
3225 3231
3226 #endif // defined TARGET_ARCH_IA32 3232 #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