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 3249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3260 Register result = ToRegister(instr->result()); | 3260 Register result = ToRegister(instr->result()); |
3261 MemOperand operand = instr->object()->IsConstantOperand() | 3261 MemOperand operand = instr->object()->IsConstantOperand() |
3262 ? MemOperand::StaticVariable(ToExternalReference( | 3262 ? MemOperand::StaticVariable(ToExternalReference( |
3263 LConstantOperand::cast(instr->object()))) | 3263 LConstantOperand::cast(instr->object()))) |
3264 : MemOperand(ToRegister(instr->object()), offset); | 3264 : MemOperand(ToRegister(instr->object()), offset); |
3265 __ Load(result, operand, access.representation()); | 3265 __ Load(result, operand, access.representation()); |
3266 return; | 3266 return; |
3267 } | 3267 } |
3268 | 3268 |
3269 Register object = ToRegister(instr->object()); | 3269 Register object = ToRegister(instr->object()); |
3270 if (FLAG_track_double_fields && | 3270 if (instr->hydrogen()->representation().IsDouble()) { |
3271 instr->hydrogen()->representation().IsDouble()) { | |
3272 if (CpuFeatures::IsSupported(SSE2)) { | 3271 if (CpuFeatures::IsSupported(SSE2)) { |
3273 CpuFeatureScope scope(masm(), SSE2); | 3272 CpuFeatureScope scope(masm(), SSE2); |
3274 XMMRegister result = ToDoubleRegister(instr->result()); | 3273 XMMRegister result = ToDoubleRegister(instr->result()); |
3275 __ movsd(result, FieldOperand(object, offset)); | 3274 __ movsd(result, FieldOperand(object, offset)); |
3276 } else { | 3275 } else { |
3277 X87Mov(ToX87Register(instr->result()), FieldOperand(object, offset)); | 3276 X87Mov(ToX87Register(instr->result()), FieldOperand(object, offset)); |
3278 } | 3277 } |
3279 return; | 3278 return; |
3280 } | 3279 } |
3281 | 3280 |
(...skipping 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4385 if (IsInteger32(operand_value)) { | 4384 if (IsInteger32(operand_value)) { |
4386 DeoptimizeIf(no_condition, instr->environment()); | 4385 DeoptimizeIf(no_condition, instr->environment()); |
4387 } | 4386 } |
4388 } else { | 4387 } else { |
4389 if (!instr->hydrogen()->value()->type().IsHeapObject()) { | 4388 if (!instr->hydrogen()->value()->type().IsHeapObject()) { |
4390 Register value = ToRegister(instr->value()); | 4389 Register value = ToRegister(instr->value()); |
4391 __ test(value, Immediate(kSmiTagMask)); | 4390 __ test(value, Immediate(kSmiTagMask)); |
4392 DeoptimizeIf(zero, instr->environment()); | 4391 DeoptimizeIf(zero, instr->environment()); |
4393 } | 4392 } |
4394 } | 4393 } |
4395 } else if (FLAG_track_double_fields && representation.IsDouble()) { | 4394 } else if (representation.IsDouble()) { |
4396 ASSERT(transition.is_null()); | 4395 ASSERT(transition.is_null()); |
4397 ASSERT(access.IsInobject()); | 4396 ASSERT(access.IsInobject()); |
4398 ASSERT(!instr->hydrogen()->NeedsWriteBarrier()); | 4397 ASSERT(!instr->hydrogen()->NeedsWriteBarrier()); |
4399 if (CpuFeatures::IsSupported(SSE2)) { | 4398 if (CpuFeatures::IsSupported(SSE2)) { |
4400 CpuFeatureScope scope(masm(), SSE2); | 4399 CpuFeatureScope scope(masm(), SSE2); |
4401 XMMRegister value = ToDoubleRegister(instr->value()); | 4400 XMMRegister value = ToDoubleRegister(instr->value()); |
4402 __ movsd(FieldOperand(object, offset), value); | 4401 __ movsd(FieldOperand(object, offset), value); |
4403 } else { | 4402 } else { |
4404 X87Register value = ToX87Register(instr->value()); | 4403 X87Register value = ToX87Register(instr->value()); |
4405 X87Mov(FieldOperand(object, offset), value); | 4404 X87Mov(FieldOperand(object, offset), value); |
(...skipping 1942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6348 FixedArray::kHeaderSize - kPointerSize)); | 6347 FixedArray::kHeaderSize - kPointerSize)); |
6349 __ bind(&done); | 6348 __ bind(&done); |
6350 } | 6349 } |
6351 | 6350 |
6352 | 6351 |
6353 #undef __ | 6352 #undef __ |
6354 | 6353 |
6355 } } // namespace v8::internal | 6354 } } // namespace v8::internal |
6356 | 6355 |
6357 #endif // V8_TARGET_ARCH_IA32 | 6356 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |