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

Side by Side Diff: src/mips/lithium-codegen-mips.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, 4 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 2012 the V8 project authors. All rights reserved.7 1 // Copyright 2012 the V8 project authors. All rights reserved.7
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 3091 matching lines...) Expand 10 before | Expand all | Expand 10 after
3102 Abort(kArrayIndexConstantValueTooBig); 3102 Abort(kArrayIndexConstantValueTooBig);
3103 } 3103 }
3104 } else { 3104 } else {
3105 key = ToRegister(instr->key()); 3105 key = ToRegister(instr->key());
3106 } 3106 }
3107 int element_size_shift = ElementsKindToShiftSize(elements_kind); 3107 int element_size_shift = ElementsKindToShiftSize(elements_kind);
3108 int shift_size = (instr->hydrogen()->key()->representation().IsSmi()) 3108 int shift_size = (instr->hydrogen()->key()->representation().IsSmi())
3109 ? (element_size_shift - kSmiTagSize) : element_size_shift; 3109 ? (element_size_shift - kSmiTagSize) : element_size_shift;
3110 int base_offset = instr->base_offset(); 3110 int base_offset = instr->base_offset();
3111 3111
3112 if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS || 3112 if (elements_kind == FLOAT32_ELEMENTS || elements_kind == FLOAT64_ELEMENTS) {
3113 elements_kind == FLOAT32_ELEMENTS ||
3114 elements_kind == EXTERNAL_FLOAT64_ELEMENTS ||
3115 elements_kind == FLOAT64_ELEMENTS) {
3116 FPURegister result = ToDoubleRegister(instr->result()); 3113 FPURegister result = ToDoubleRegister(instr->result());
3117 if (key_is_constant) { 3114 if (key_is_constant) {
3118 __ Addu(scratch0(), external_pointer, constant_key << element_size_shift); 3115 __ Addu(scratch0(), external_pointer, constant_key << element_size_shift);
3119 } else { 3116 } else {
3120 __ sll(scratch0(), key, shift_size); 3117 __ sll(scratch0(), key, shift_size);
3121 __ Addu(scratch0(), scratch0(), external_pointer); 3118 __ Addu(scratch0(), scratch0(), external_pointer);
3122 } 3119 }
3123 if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS || 3120 if (elements_kind == FLOAT32_ELEMENTS) {
3124 elements_kind == FLOAT32_ELEMENTS) {
3125 __ lwc1(result, MemOperand(scratch0(), base_offset)); 3121 __ lwc1(result, MemOperand(scratch0(), base_offset));
3126 __ cvt_d_s(result, result); 3122 __ cvt_d_s(result, result);
3127 } else { // i.e. elements_kind == EXTERNAL_DOUBLE_ELEMENTS 3123 } else { // i.e. elements_kind == EXTERNAL_DOUBLE_ELEMENTS
3128 __ ldc1(result, MemOperand(scratch0(), base_offset)); 3124 __ ldc1(result, MemOperand(scratch0(), base_offset));
3129 } 3125 }
3130 } else { 3126 } else {
3131 Register result = ToRegister(instr->result()); 3127 Register result = ToRegister(instr->result());
3132 MemOperand mem_operand = PrepareKeyedOperand( 3128 MemOperand mem_operand = PrepareKeyedOperand(
3133 key, external_pointer, key_is_constant, constant_key, 3129 key, external_pointer, key_is_constant, constant_key,
3134 element_size_shift, shift_size, base_offset); 3130 element_size_shift, shift_size, base_offset);
3135 switch (elements_kind) { 3131 switch (elements_kind) {
3136 case EXTERNAL_INT8_ELEMENTS:
3137 case INT8_ELEMENTS: 3132 case INT8_ELEMENTS:
3138 __ lb(result, mem_operand); 3133 __ lb(result, mem_operand);
3139 break; 3134 break;
3140 case EXTERNAL_UINT8_CLAMPED_ELEMENTS:
3141 case EXTERNAL_UINT8_ELEMENTS:
3142 case UINT8_ELEMENTS: 3135 case UINT8_ELEMENTS:
3143 case UINT8_CLAMPED_ELEMENTS: 3136 case UINT8_CLAMPED_ELEMENTS:
3144 __ lbu(result, mem_operand); 3137 __ lbu(result, mem_operand);
3145 break; 3138 break;
3146 case EXTERNAL_INT16_ELEMENTS:
3147 case INT16_ELEMENTS: 3139 case INT16_ELEMENTS:
3148 __ lh(result, mem_operand); 3140 __ lh(result, mem_operand);
3149 break; 3141 break;
3150 case EXTERNAL_UINT16_ELEMENTS:
3151 case UINT16_ELEMENTS: 3142 case UINT16_ELEMENTS:
3152 __ lhu(result, mem_operand); 3143 __ lhu(result, mem_operand);
3153 break; 3144 break;
3154 case EXTERNAL_INT32_ELEMENTS:
3155 case INT32_ELEMENTS: 3145 case INT32_ELEMENTS:
3156 __ lw(result, mem_operand); 3146 __ lw(result, mem_operand);
3157 break; 3147 break;
3158 case EXTERNAL_UINT32_ELEMENTS:
3159 case UINT32_ELEMENTS: 3148 case UINT32_ELEMENTS:
3160 __ lw(result, mem_operand); 3149 __ lw(result, mem_operand);
3161 if (!instr->hydrogen()->CheckFlag(HInstruction::kUint32)) { 3150 if (!instr->hydrogen()->CheckFlag(HInstruction::kUint32)) {
3162 DeoptimizeIf(Ugreater_equal, instr, Deoptimizer::kNegativeValue, 3151 DeoptimizeIf(Ugreater_equal, instr, Deoptimizer::kNegativeValue,
3163 result, Operand(0x80000000)); 3152 result, Operand(0x80000000));
3164 } 3153 }
3165 break; 3154 break;
3166 case FLOAT32_ELEMENTS: 3155 case FLOAT32_ELEMENTS:
3167 case FLOAT64_ELEMENTS: 3156 case FLOAT64_ELEMENTS:
3168 case EXTERNAL_FLOAT32_ELEMENTS:
3169 case EXTERNAL_FLOAT64_ELEMENTS:
3170 case FAST_DOUBLE_ELEMENTS: 3157 case FAST_DOUBLE_ELEMENTS:
3171 case FAST_ELEMENTS: 3158 case FAST_ELEMENTS:
3172 case FAST_SMI_ELEMENTS: 3159 case FAST_SMI_ELEMENTS:
3173 case FAST_HOLEY_DOUBLE_ELEMENTS: 3160 case FAST_HOLEY_DOUBLE_ELEMENTS:
3174 case FAST_HOLEY_ELEMENTS: 3161 case FAST_HOLEY_ELEMENTS:
3175 case FAST_HOLEY_SMI_ELEMENTS: 3162 case FAST_HOLEY_SMI_ELEMENTS:
3176 case DICTIONARY_ELEMENTS: 3163 case DICTIONARY_ELEMENTS:
3177 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 3164 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
3178 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: 3165 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS:
3179 UNREACHABLE(); 3166 UNREACHABLE();
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
3271 DeoptimizeIf(ne, instr, Deoptimizer::kHole, result, 3258 DeoptimizeIf(ne, instr, Deoptimizer::kHole, result,
3272 Operand(Smi::FromInt(Isolate::kArrayProtectorValid))); 3259 Operand(Smi::FromInt(Isolate::kArrayProtectorValid)));
3273 } 3260 }
3274 __ LoadRoot(result, Heap::kUndefinedValueRootIndex); 3261 __ LoadRoot(result, Heap::kUndefinedValueRootIndex);
3275 __ bind(&done); 3262 __ bind(&done);
3276 } 3263 }
3277 } 3264 }
3278 3265
3279 3266
3280 void LCodeGen::DoLoadKeyed(LLoadKeyed* instr) { 3267 void LCodeGen::DoLoadKeyed(LLoadKeyed* instr) {
3281 if (instr->is_typed_elements()) { 3268 if (instr->is_fixed_typed_array()) {
3282 DoLoadKeyedExternalArray(instr); 3269 DoLoadKeyedExternalArray(instr);
3283 } else if (instr->hydrogen()->representation().IsDouble()) { 3270 } else if (instr->hydrogen()->representation().IsDouble()) {
3284 DoLoadKeyedFixedDoubleArray(instr); 3271 DoLoadKeyedFixedDoubleArray(instr);
3285 } else { 3272 } else {
3286 DoLoadKeyedFixedArray(instr); 3273 DoLoadKeyedFixedArray(instr);
3287 } 3274 }
3288 } 3275 }
3289 3276
3290 3277
3291 MemOperand LCodeGen::PrepareKeyedOperand(Register key, 3278 MemOperand LCodeGen::PrepareKeyedOperand(Register key,
(...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after
4258 Abort(kArrayIndexConstantValueTooBig); 4245 Abort(kArrayIndexConstantValueTooBig);
4259 } 4246 }
4260 } else { 4247 } else {
4261 key = ToRegister(instr->key()); 4248 key = ToRegister(instr->key());
4262 } 4249 }
4263 int element_size_shift = ElementsKindToShiftSize(elements_kind); 4250 int element_size_shift = ElementsKindToShiftSize(elements_kind);
4264 int shift_size = (instr->hydrogen()->key()->representation().IsSmi()) 4251 int shift_size = (instr->hydrogen()->key()->representation().IsSmi())
4265 ? (element_size_shift - kSmiTagSize) : element_size_shift; 4252 ? (element_size_shift - kSmiTagSize) : element_size_shift;
4266 int base_offset = instr->base_offset(); 4253 int base_offset = instr->base_offset();
4267 4254
4268 if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS || 4255 if (elements_kind == FLOAT32_ELEMENTS || elements_kind == FLOAT64_ELEMENTS) {
4269 elements_kind == FLOAT32_ELEMENTS ||
4270 elements_kind == EXTERNAL_FLOAT64_ELEMENTS ||
4271 elements_kind == FLOAT64_ELEMENTS) {
4272 Register address = scratch0(); 4256 Register address = scratch0();
4273 FPURegister value(ToDoubleRegister(instr->value())); 4257 FPURegister value(ToDoubleRegister(instr->value()));
4274 if (key_is_constant) { 4258 if (key_is_constant) {
4275 if (constant_key != 0) { 4259 if (constant_key != 0) {
4276 __ Addu(address, external_pointer, 4260 __ Addu(address, external_pointer,
4277 Operand(constant_key << element_size_shift)); 4261 Operand(constant_key << element_size_shift));
4278 } else { 4262 } else {
4279 address = external_pointer; 4263 address = external_pointer;
4280 } 4264 }
4281 } else { 4265 } else {
4282 __ sll(address, key, shift_size); 4266 __ sll(address, key, shift_size);
4283 __ Addu(address, external_pointer, address); 4267 __ Addu(address, external_pointer, address);
4284 } 4268 }
4285 4269
4286 if (elements_kind == EXTERNAL_FLOAT32_ELEMENTS || 4270 if (elements_kind == FLOAT32_ELEMENTS) {
4287 elements_kind == FLOAT32_ELEMENTS) {
4288 __ cvt_s_d(double_scratch0(), value); 4271 __ cvt_s_d(double_scratch0(), value);
4289 __ swc1(double_scratch0(), MemOperand(address, base_offset)); 4272 __ swc1(double_scratch0(), MemOperand(address, base_offset));
4290 } else { // Storing doubles, not floats. 4273 } else { // Storing doubles, not floats.
4291 __ sdc1(value, MemOperand(address, base_offset)); 4274 __ sdc1(value, MemOperand(address, base_offset));
4292 } 4275 }
4293 } else { 4276 } else {
4294 Register value(ToRegister(instr->value())); 4277 Register value(ToRegister(instr->value()));
4295 MemOperand mem_operand = PrepareKeyedOperand( 4278 MemOperand mem_operand = PrepareKeyedOperand(
4296 key, external_pointer, key_is_constant, constant_key, 4279 key, external_pointer, key_is_constant, constant_key,
4297 element_size_shift, shift_size, 4280 element_size_shift, shift_size,
4298 base_offset); 4281 base_offset);
4299 switch (elements_kind) { 4282 switch (elements_kind) {
4300 case EXTERNAL_UINT8_CLAMPED_ELEMENTS:
4301 case EXTERNAL_INT8_ELEMENTS:
4302 case EXTERNAL_UINT8_ELEMENTS:
4303 case UINT8_ELEMENTS: 4283 case UINT8_ELEMENTS:
4304 case UINT8_CLAMPED_ELEMENTS: 4284 case UINT8_CLAMPED_ELEMENTS:
4305 case INT8_ELEMENTS: 4285 case INT8_ELEMENTS:
4306 __ sb(value, mem_operand); 4286 __ sb(value, mem_operand);
4307 break; 4287 break;
4308 case EXTERNAL_INT16_ELEMENTS:
4309 case EXTERNAL_UINT16_ELEMENTS:
4310 case INT16_ELEMENTS: 4288 case INT16_ELEMENTS:
4311 case UINT16_ELEMENTS: 4289 case UINT16_ELEMENTS:
4312 __ sh(value, mem_operand); 4290 __ sh(value, mem_operand);
4313 break; 4291 break;
4314 case EXTERNAL_INT32_ELEMENTS:
4315 case EXTERNAL_UINT32_ELEMENTS:
4316 case INT32_ELEMENTS: 4292 case INT32_ELEMENTS:
4317 case UINT32_ELEMENTS: 4293 case UINT32_ELEMENTS:
4318 __ sw(value, mem_operand); 4294 __ sw(value, mem_operand);
4319 break; 4295 break;
4320 case FLOAT32_ELEMENTS: 4296 case FLOAT32_ELEMENTS:
4321 case FLOAT64_ELEMENTS: 4297 case FLOAT64_ELEMENTS:
4322 case EXTERNAL_FLOAT32_ELEMENTS:
4323 case EXTERNAL_FLOAT64_ELEMENTS:
4324 case FAST_DOUBLE_ELEMENTS: 4298 case FAST_DOUBLE_ELEMENTS:
4325 case FAST_ELEMENTS: 4299 case FAST_ELEMENTS:
4326 case FAST_SMI_ELEMENTS: 4300 case FAST_SMI_ELEMENTS:
4327 case FAST_HOLEY_DOUBLE_ELEMENTS: 4301 case FAST_HOLEY_DOUBLE_ELEMENTS:
4328 case FAST_HOLEY_ELEMENTS: 4302 case FAST_HOLEY_ELEMENTS:
4329 case FAST_HOLEY_SMI_ELEMENTS: 4303 case FAST_HOLEY_SMI_ELEMENTS:
4330 case DICTIONARY_ELEMENTS: 4304 case DICTIONARY_ELEMENTS:
4331 case FAST_SLOPPY_ARGUMENTS_ELEMENTS: 4305 case FAST_SLOPPY_ARGUMENTS_ELEMENTS:
4332 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: 4306 case SLOW_SLOPPY_ARGUMENTS_ELEMENTS:
4333 UNREACHABLE(); 4307 UNREACHABLE();
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
4427 kSaveFPRegs, 4401 kSaveFPRegs,
4428 EMIT_REMEMBERED_SET, 4402 EMIT_REMEMBERED_SET,
4429 check_needed, 4403 check_needed,
4430 instr->hydrogen()->PointersToHereCheckForValue()); 4404 instr->hydrogen()->PointersToHereCheckForValue());
4431 } 4405 }
4432 } 4406 }
4433 4407
4434 4408
4435 void LCodeGen::DoStoreKeyed(LStoreKeyed* instr) { 4409 void LCodeGen::DoStoreKeyed(LStoreKeyed* instr) {
4436 // By cases: external, fast double 4410 // By cases: external, fast double
4437 if (instr->is_typed_elements()) { 4411 if (instr->is_fixed_typed_array()) {
4438 DoStoreKeyedExternalArray(instr); 4412 DoStoreKeyedExternalArray(instr);
4439 } else if (instr->hydrogen()->value()->representation().IsDouble()) { 4413 } else if (instr->hydrogen()->value()->representation().IsDouble()) {
4440 DoStoreKeyedFixedDoubleArray(instr); 4414 DoStoreKeyedFixedDoubleArray(instr);
4441 } else { 4415 } else {
4442 DoStoreKeyedFixedArray(instr); 4416 DoStoreKeyedFixedArray(instr);
4443 } 4417 }
4444 } 4418 }
4445 4419
4446 4420
4447 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) { 4421 void LCodeGen::DoStoreKeyedGeneric(LStoreKeyedGeneric* instr) {
(...skipping 1631 matching lines...) Expand 10 before | Expand all | Expand 10 after
6079 __ Push(at, ToRegister(instr->function())); 6053 __ Push(at, ToRegister(instr->function()));
6080 CallRuntime(Runtime::kPushBlockContext, 2, instr); 6054 CallRuntime(Runtime::kPushBlockContext, 2, instr);
6081 RecordSafepoint(Safepoint::kNoLazyDeopt); 6055 RecordSafepoint(Safepoint::kNoLazyDeopt);
6082 } 6056 }
6083 6057
6084 6058
6085 #undef __ 6059 #undef __
6086 6060
6087 } // namespace internal 6061 } // namespace internal
6088 } // namespace v8 6062 } // namespace v8
OLDNEW
« src/heap/heap.cc ('K') | « src/lookup.cc ('k') | src/mips/lithium-mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698