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

Side by Side Diff: src/x64/lithium-codegen-x64.cc

Issue 1254623002: Remove ExternalArray, derived types, and element kinds (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: updates Created 5 years, 5 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
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 3095 matching lines...) Expand 10 before | Expand all | Expand 10 after
3106 __ movsxlq(key_reg, key_reg); 3106 __ movsxlq(key_reg, key_reg);
3107 } 3107 }
3108 } 3108 }
3109 Operand operand(BuildFastArrayOperand( 3109 Operand operand(BuildFastArrayOperand(
3110 instr->elements(), 3110 instr->elements(),
3111 key, 3111 key,
3112 instr->hydrogen()->key()->representation(), 3112 instr->hydrogen()->key()->representation(),
3113 elements_kind, 3113 elements_kind,
3114 instr->base_offset())); 3114 instr->base_offset()));
3115 3115
3116 if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS || 3116 if (elements_kind == FLOAT32_ELEMENTS) {
3117 elements_kind == FLOAT32_ELEMENTS) {
3118 XMMRegister result(ToDoubleRegister(instr->result())); 3117 XMMRegister result(ToDoubleRegister(instr->result()));
3119 __ movss(result, operand); 3118 __ movss(result, operand);
3120 __ cvtss2sd(result, result); 3119 __ cvtss2sd(result, result);
3121 } else if (elements_kind == EXTERNAL_FLOAT64_ELEMENTS || 3120 } else if (elements_kind == FLOAT64_ELEMENTS) {
3122 elements_kind == FLOAT64_ELEMENTS) {
3123 __ movsd(ToDoubleRegister(instr->result()), operand); 3121 __ movsd(ToDoubleRegister(instr->result()), operand);
3124 } else { 3122 } else {
3125 Register result(ToRegister(instr->result())); 3123 Register result(ToRegister(instr->result()));
3126 switch (elements_kind) { 3124 switch (elements_kind) {
3127 case EXTERNAL_INT8_ELEMENTS:
3128 case INT8_ELEMENTS: 3125 case INT8_ELEMENTS:
3129 __ movsxbl(result, operand); 3126 __ movsxbl(result, operand);
3130 break; 3127 break;
3131 case EXTERNAL_UINT8_ELEMENTS:
3132 case EXTERNAL_UINT8_CLAMPED_ELEMENTS:
3133 case UINT8_ELEMENTS: 3128 case UINT8_ELEMENTS:
3134 case UINT8_CLAMPED_ELEMENTS: 3129 case UINT8_CLAMPED_ELEMENTS:
3135 __ movzxbl(result, operand); 3130 __ movzxbl(result, operand);
3136 break; 3131 break;
3137 case EXTERNAL_INT16_ELEMENTS:
3138 case INT16_ELEMENTS: 3132 case INT16_ELEMENTS:
3139 __ movsxwl(result, operand); 3133 __ movsxwl(result, operand);
3140 break; 3134 break;
3141 case EXTERNAL_UINT16_ELEMENTS:
3142 case UINT16_ELEMENTS: 3135 case UINT16_ELEMENTS:
3143 __ movzxwl(result, operand); 3136 __ movzxwl(result, operand);
3144 break; 3137 break;
3145 case EXTERNAL_INT32_ELEMENTS:
3146 case INT32_ELEMENTS: 3138 case INT32_ELEMENTS:
3147 __ movl(result, operand); 3139 __ movl(result, operand);
3148 break; 3140 break;
3149 case EXTERNAL_UINT32_ELEMENTS:
3150 case UINT32_ELEMENTS: 3141 case UINT32_ELEMENTS:
3151 __ movl(result, operand); 3142 __ movl(result, operand);
3152 if (!instr->hydrogen()->CheckFlag(HInstruction::kUint32)) { 3143 if (!instr->hydrogen()->CheckFlag(HInstruction::kUint32)) {
3153 __ testl(result, result); 3144 __ testl(result, result);
3154 DeoptimizeIf(negative, instr, Deoptimizer::kNegativeValue); 3145 DeoptimizeIf(negative, instr, Deoptimizer::kNegativeValue);
3155 } 3146 }
3156 break; 3147 break;
3157 case EXTERNAL_FLOAT32_ELEMENTS:
3158 case EXTERNAL_FLOAT64_ELEMENTS:
3159 case FLOAT32_ELEMENTS: 3148 case FLOAT32_ELEMENTS:
3160 case FLOAT64_ELEMENTS: 3149 case FLOAT64_ELEMENTS:
3161 case FAST_ELEMENTS: 3150 case FAST_ELEMENTS:
3162 case FAST_SMI_ELEMENTS: 3151 case FAST_SMI_ELEMENTS:
3163 case FAST_DOUBLE_ELEMENTS: 3152 case FAST_DOUBLE_ELEMENTS:
3164 case FAST_HOLEY_ELEMENTS: 3153 case FAST_HOLEY_ELEMENTS:
3165 case FAST_HOLEY_SMI_ELEMENTS: 3154 case FAST_HOLEY_SMI_ELEMENTS:
3166 case FAST_HOLEY_DOUBLE_ELEMENTS: 3155 case FAST_HOLEY_DOUBLE_ELEMENTS:
3167 case DICTIONARY_ELEMENTS: 3156 case DICTIONARY_ELEMENTS:
3168 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 3157 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
3267 Smi::FromInt(Isolate::kArrayProtectorValid)); 3256 Smi::FromInt(Isolate::kArrayProtectorValid));
3268 DeoptimizeIf(not_equal, instr, Deoptimizer::kHole); 3257 DeoptimizeIf(not_equal, instr, Deoptimizer::kHole);
3269 } 3258 }
3270 __ Move(result, isolate()->factory()->undefined_value()); 3259 __ Move(result, isolate()->factory()->undefined_value());
3271 __ bind(&done); 3260 __ bind(&done);
3272 } 3261 }
3273 } 3262 }
3274 3263
3275 3264
3276 void LCodeGen::DoLoadKeyed(LLoadKeyed* instr) { 3265 void LCodeGen::DoLoadKeyed(LLoadKeyed* instr) {
3277 if (instr->is_typed_elements()) { 3266 if (instr->is_fixed_typed_array()) {
3278 DoLoadKeyedExternalArray(instr); 3267 DoLoadKeyedExternalArray(instr);
3279 } else if (instr->hydrogen()->representation().IsDouble()) { 3268 } else if (instr->hydrogen()->representation().IsDouble()) {
3280 DoLoadKeyedFixedDoubleArray(instr); 3269 DoLoadKeyedFixedDoubleArray(instr);
3281 } else { 3270 } else {
3282 DoLoadKeyedFixedArray(instr); 3271 DoLoadKeyedFixedArray(instr);
3283 } 3272 }
3284 } 3273 }
3285 3274
3286 3275
3287 Operand LCodeGen::BuildFastArrayOperand( 3276 Operand LCodeGen::BuildFastArrayOperand(
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after
4362 __ movsxlq(key_reg, key_reg); 4351 __ movsxlq(key_reg, key_reg);
4363 } 4352 }
4364 } 4353 }
4365 Operand operand(BuildFastArrayOperand( 4354 Operand operand(BuildFastArrayOperand(
4366 instr->elements(), 4355 instr->elements(),
4367 key, 4356 key,
4368 instr->hydrogen()->key()->representation(), 4357 instr->hydrogen()->key()->representation(),
4369 elements_kind, 4358 elements_kind,
4370 instr->base_offset())); 4359 instr->base_offset()));
4371 4360
4372 if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS || 4361 if (elements_kind == FLOAT32_ELEMENTS) {
4373 elements_kind == FLOAT32_ELEMENTS) {
4374 XMMRegister value(ToDoubleRegister(instr->value())); 4362 XMMRegister value(ToDoubleRegister(instr->value()));
4375 __ cvtsd2ss(value, value); 4363 __ cvtsd2ss(value, value);
4376 __ movss(operand, value); 4364 __ movss(operand, value);
4377 } else if (elements_kind == EXTERNAL_FLOAT64_ELEMENTS || 4365 } else if (elements_kind == FLOAT64_ELEMENTS) {
4378 elements_kind == FLOAT64_ELEMENTS) {
4379 __ movsd(operand, ToDoubleRegister(instr->value())); 4366 __ movsd(operand, ToDoubleRegister(instr->value()));
4380 } else { 4367 } else {
4381 Register value(ToRegister(instr->value())); 4368 Register value(ToRegister(instr->value()));
4382 switch (elements_kind) { 4369 switch (elements_kind) {
4383 case EXTERNAL_UINT8_CLAMPED_ELEMENTS:
4384 case EXTERNAL_INT8_ELEMENTS:
4385 case EXTERNAL_UINT8_ELEMENTS:
4386 case INT8_ELEMENTS: 4370 case INT8_ELEMENTS:
4387 case UINT8_ELEMENTS: 4371 case UINT8_ELEMENTS:
4388 case UINT8_CLAMPED_ELEMENTS: 4372 case UINT8_CLAMPED_ELEMENTS:
4389 __ movb(operand, value); 4373 __ movb(operand, value);
4390 break; 4374 break;
4391 case EXTERNAL_INT16_ELEMENTS:
4392 case EXTERNAL_UINT16_ELEMENTS:
4393 case INT16_ELEMENTS: 4375 case INT16_ELEMENTS:
4394 case UINT16_ELEMENTS: 4376 case UINT16_ELEMENTS:
4395 __ movw(operand, value); 4377 __ movw(operand, value);
4396 break; 4378 break;
4397 case EXTERNAL_INT32_ELEMENTS:
4398 case EXTERNAL_UINT32_ELEMENTS:
4399 case INT32_ELEMENTS: 4379 case INT32_ELEMENTS:
4400 case UINT32_ELEMENTS: 4380 case UINT32_ELEMENTS:
4401 __ movl(operand, value); 4381 __ movl(operand, value);
4402 break; 4382 break;
4403 case EXTERNAL_FLOAT32_ELEMENTS:
4404 case EXTERNAL_FLOAT64_ELEMENTS:
4405 case FLOAT32_ELEMENTS: 4383 case FLOAT32_ELEMENTS:
4406 case FLOAT64_ELEMENTS: 4384 case FLOAT64_ELEMENTS:
4407 case FAST_ELEMENTS: 4385 case FAST_ELEMENTS:
4408 case FAST_SMI_ELEMENTS: 4386 case FAST_SMI_ELEMENTS:
4409 case FAST_DOUBLE_ELEMENTS: 4387 case FAST_DOUBLE_ELEMENTS:
4410 case FAST_HOLEY_ELEMENTS: 4388 case FAST_HOLEY_ELEMENTS:
4411 case FAST_HOLEY_SMI_ELEMENTS: 4389 case FAST_HOLEY_SMI_ELEMENTS:
4412 case FAST_HOLEY_DOUBLE_ELEMENTS: 4390 case FAST_HOLEY_DOUBLE_ELEMENTS:
4413 case DICTIONARY_ELEMENTS: 4391 case DICTIONARY_ELEMENTS:
4414 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 4392 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
4518 value, 4496 value,
4519 kSaveFPRegs, 4497 kSaveFPRegs,
4520 EMIT_REMEMBERED_SET, 4498 EMIT_REMEMBERED_SET,
4521 check_needed, 4499 check_needed,
4522 hinstr->PointersToHereCheckForValue()); 4500 hinstr->PointersToHereCheckForValue());
4523 } 4501 }
4524 } 4502 }
4525 4503
4526 4504
4527 void LCodeGen::DoStoreKeyed(LStoreKeyed* instr) { 4505 void LCodeGen::DoStoreKeyed(LStoreKeyed* instr) {
4528 if (instr->is_typed_elements()) { 4506 if (instr->is_fixed_typed_array()) {
4529 DoStoreKeyedExternalArray(instr); 4507 DoStoreKeyedExternalArray(instr);
4530 } else if (instr->hydrogen()->value()->representation().IsDouble()) { 4508 } else if (instr->hydrogen()->value()->representation().IsDouble()) {
4531 DoStoreKeyedFixedDoubleArray(instr); 4509 DoStoreKeyedFixedDoubleArray(instr);
4532 } else { 4510 } else {
4533 DoStoreKeyedFixedArray(instr); 4511 DoStoreKeyedFixedArray(instr);
4534 } 4512 }
4535 } 4513 }
4536 4514
4537 4515
4538 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { 4516 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
(...skipping 1524 matching lines...) Expand 10 before | Expand all | Expand 10 after
6063 RecordSafepoint(Safepoint::kNoLazyDeopt); 6041 RecordSafepoint(Safepoint::kNoLazyDeopt);
6064 } 6042 }
6065 6043
6066 6044
6067 #undef __ 6045 #undef __
6068 6046
6069 } // namespace internal 6047 } // namespace internal
6070 } // namespace v8 6048 } // namespace v8
6071 6049
6072 #endif // V8_TARGET_ARCH_X64 6050 #endif // V8_TARGET_ARCH_X64
OLDNEW
« src/heap/heap.cc ('K') | « src/runtime/runtime-typedarray.cc ('k') | src/x64/lithium-x64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698