| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 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 1206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1217 } | 1217 } |
| 1218 | 1218 |
| 1219 | 1219 |
| 1220 void LCodeGen::DoFixedArrayBaseLength(LFixedArrayBaseLength* instr) { | 1220 void LCodeGen::DoFixedArrayBaseLength(LFixedArrayBaseLength* instr) { |
| 1221 Register result = ToRegister(instr->result()); | 1221 Register result = ToRegister(instr->result()); |
| 1222 Register array = ToRegister(instr->InputAt(0)); | 1222 Register array = ToRegister(instr->InputAt(0)); |
| 1223 __ lw(result, FieldMemOperand(array, FixedArrayBase::kLengthOffset)); | 1223 __ lw(result, FieldMemOperand(array, FixedArrayBase::kLengthOffset)); |
| 1224 } | 1224 } |
| 1225 | 1225 |
| 1226 | 1226 |
| 1227 void LCodeGen::DoMapEnumLength(LMapEnumLength* instr) { |
| 1228 Register result = ToRegister(instr->result()); |
| 1229 Register map = ToRegister(instr->InputAt(0)); |
| 1230 __ EnumLength(result, map); |
| 1231 } |
| 1232 |
| 1233 |
| 1227 void LCodeGen::DoElementsKind(LElementsKind* instr) { | 1234 void LCodeGen::DoElementsKind(LElementsKind* instr) { |
| 1228 Register result = ToRegister(instr->result()); | 1235 Register result = ToRegister(instr->result()); |
| 1229 Register input = ToRegister(instr->InputAt(0)); | 1236 Register input = ToRegister(instr->InputAt(0)); |
| 1230 | 1237 |
| 1231 // Load map into |result|. | 1238 // Load map into |result|. |
| 1232 __ lw(result, FieldMemOperand(input, HeapObject::kMapOffset)); | 1239 __ lw(result, FieldMemOperand(input, HeapObject::kMapOffset)); |
| 1233 // Load the map's "bit field 2" into |result|. We only need the first byte, | 1240 // Load the map's "bit field 2" into |result|. We only need the first byte, |
| 1234 // but the following bit field extraction takes care of that anyway. | 1241 // but the following bit field extraction takes care of that anyway. |
| 1235 __ lbu(result, FieldMemOperand(result, Map::kBitField2Offset)); | 1242 __ lbu(result, FieldMemOperand(result, Map::kBitField2Offset)); |
| 1236 // Retrieve elements_kind from bit field 2. | 1243 // Retrieve elements_kind from bit field 2. |
| (...skipping 4060 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5297 __ LoadRoot(at, Heap::kMetaMapRootIndex); | 5304 __ LoadRoot(at, Heap::kMetaMapRootIndex); |
| 5298 DeoptimizeIf(ne, instr->environment(), a1, Operand(at)); | 5305 DeoptimizeIf(ne, instr->environment(), a1, Operand(at)); |
| 5299 __ bind(&use_cache); | 5306 __ bind(&use_cache); |
| 5300 } | 5307 } |
| 5301 | 5308 |
| 5302 | 5309 |
| 5303 void LCodeGen::DoForInCacheArray(LForInCacheArray* instr) { | 5310 void LCodeGen::DoForInCacheArray(LForInCacheArray* instr) { |
| 5304 Register map = ToRegister(instr->map()); | 5311 Register map = ToRegister(instr->map()); |
| 5305 Register result = ToRegister(instr->result()); | 5312 Register result = ToRegister(instr->result()); |
| 5306 Register scratch = ToRegister(instr->scratch()); | 5313 Register scratch = ToRegister(instr->scratch()); |
| 5314 Label load_cache, done; |
| 5315 __ EnumLength(result, map); |
| 5316 __ Branch(&load_cache, ne, result, Operand(Smi::FromInt(0))); |
| 5317 __ li(result, Operand(isolate()->factory()->empty_fixed_array())); |
| 5318 __ jmp(&done); |
| 5319 |
| 5320 __ bind(&load_cache); |
| 5307 __ LoadInstanceDescriptors(map, result, scratch); | 5321 __ LoadInstanceDescriptors(map, result, scratch); |
| 5308 __ lw(result, | 5322 __ lw(result, |
| 5309 FieldMemOperand(result, DescriptorArray::kEnumCacheOffset)); | 5323 FieldMemOperand(result, DescriptorArray::kEnumCacheOffset)); |
| 5310 __ lw(result, | 5324 __ lw(result, |
| 5311 FieldMemOperand(result, FixedArray::SizeFor(instr->idx()))); | 5325 FieldMemOperand(result, FixedArray::SizeFor(instr->idx()))); |
| 5312 DeoptimizeIf(eq, instr->environment(), result, Operand(zero_reg)); | 5326 DeoptimizeIf(eq, instr->environment(), result, Operand(zero_reg)); |
| 5327 |
| 5328 __ bind(&done); |
| 5313 } | 5329 } |
| 5314 | 5330 |
| 5315 | 5331 |
| 5316 void LCodeGen::DoCheckMapValue(LCheckMapValue* instr) { | 5332 void LCodeGen::DoCheckMapValue(LCheckMapValue* instr) { |
| 5317 Register object = ToRegister(instr->value()); | 5333 Register object = ToRegister(instr->value()); |
| 5318 Register map = ToRegister(instr->map()); | 5334 Register map = ToRegister(instr->map()); |
| 5319 __ lw(scratch0(), FieldMemOperand(object, HeapObject::kMapOffset)); | 5335 __ lw(scratch0(), FieldMemOperand(object, HeapObject::kMapOffset)); |
| 5320 DeoptimizeIf(ne, instr->environment(), map, Operand(scratch0())); | 5336 DeoptimizeIf(ne, instr->environment(), map, Operand(scratch0())); |
| 5321 } | 5337 } |
| 5322 | 5338 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 5343 __ Subu(scratch, result, scratch); | 5359 __ Subu(scratch, result, scratch); |
| 5344 __ lw(result, FieldMemOperand(scratch, | 5360 __ lw(result, FieldMemOperand(scratch, |
| 5345 FixedArray::kHeaderSize - kPointerSize)); | 5361 FixedArray::kHeaderSize - kPointerSize)); |
| 5346 __ bind(&done); | 5362 __ bind(&done); |
| 5347 } | 5363 } |
| 5348 | 5364 |
| 5349 | 5365 |
| 5350 #undef __ | 5366 #undef __ |
| 5351 | 5367 |
| 5352 } } // namespace v8::internal | 5368 } } // namespace v8::internal |
| OLD | NEW |