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

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

Issue 313083008: Add LoadTaggedClassIdMayBeSmi to assembly and improve performance of inline cache stubs. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
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" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_X64) 6 #if defined(TARGET_ARCH_X64)
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/heap.h" 10 #include "vm/heap.h"
(...skipping 3260 matching lines...) Expand 10 before | Expand all | Expand 10 after
3271 LoadClassById(result, TMP); 3271 LoadClassById(result, TMP);
3272 } 3272 }
3273 3273
3274 3274
3275 void Assembler::CompareClassId(Register object, intptr_t class_id) { 3275 void Assembler::CompareClassId(Register object, intptr_t class_id) {
3276 LoadClassId(TMP, object); 3276 LoadClassId(TMP, object);
3277 cmpl(TMP, Immediate(class_id)); 3277 cmpl(TMP, Immediate(class_id));
3278 } 3278 }
3279 3279
3280 3280
3281 void Assembler::LoadTaggedClassIdMayBeSmi(Register result, Register object) {
3282 Label load, done;
3283 testq(object, Immediate(kSmiTagMask));
3284 j(NOT_ZERO, &load, Assembler::kNearJump);
3285 LoadImmediate(result, Immediate(Smi::RawValue(kSmiCid)), PP);
3286 jmp(&done);
3287 Bind(&load);
3288 LoadClassId(result, object);
3289 SmiTag(result);
3290 Bind(&done);
3291 }
3292
3293
3281 static const char* cpu_reg_names[kNumberOfCpuRegisters] = { 3294 static const char* cpu_reg_names[kNumberOfCpuRegisters] = {
3282 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", 3295 "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
3283 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" 3296 "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
3284 }; 3297 };
3285 3298
3286 3299
3287 const char* Assembler::RegisterName(Register reg) { 3300 const char* Assembler::RegisterName(Register reg) {
3288 ASSERT((0 <= reg) && (reg < kNumberOfCpuRegisters)); 3301 ASSERT((0 <= reg) && (reg < kNumberOfCpuRegisters));
3289 return cpu_reg_names[reg]; 3302 return cpu_reg_names[reg];
3290 } 3303 }
3291 3304
3292 3305
3293 static const char* xmm_reg_names[kNumberOfXmmRegisters] = { 3306 static const char* xmm_reg_names[kNumberOfXmmRegisters] = {
3294 "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", 3307 "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
3295 "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15" 3308 "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"
3296 }; 3309 };
3297 3310
3298 3311
3299 const char* Assembler::FpuRegisterName(FpuRegister reg) { 3312 const char* Assembler::FpuRegisterName(FpuRegister reg) {
3300 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); 3313 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
3301 return xmm_reg_names[reg]; 3314 return xmm_reg_names[reg];
3302 } 3315 }
3303 3316
3304 } // namespace dart 3317 } // namespace dart
3305 3318
3306 #endif // defined TARGET_ARCH_X64 3319 #endif // defined TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698