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

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

Issue 22152003: Never hchange nan-hole to hole or hole to nan-hole. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Also change in header Created 7 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 | Annotate | Revision Log
« no previous file with comments | « src/ia32/lithium-codegen-ia32.h ('k') | src/ia32/lithium-ia32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 2201 matching lines...) Expand 10 before | Expand all | Expand 10 after
2212 __ j(NegateCondition(cc), chunk_->GetAssemblyLabel(right_block)); 2212 __ j(NegateCondition(cc), chunk_->GetAssemblyLabel(right_block));
2213 } else if (right_block == next_block) { 2213 } else if (right_block == next_block) {
2214 __ j(cc, chunk_->GetAssemblyLabel(left_block)); 2214 __ j(cc, chunk_->GetAssemblyLabel(left_block));
2215 } else { 2215 } else {
2216 __ j(cc, chunk_->GetAssemblyLabel(left_block)); 2216 __ j(cc, chunk_->GetAssemblyLabel(left_block));
2217 __ jmp(chunk_->GetAssemblyLabel(right_block)); 2217 __ jmp(chunk_->GetAssemblyLabel(right_block));
2218 } 2218 }
2219 } 2219 }
2220 2220
2221 2221
2222 template<class InstrType>
2223 void LCodeGen::EmitFalseBranch(InstrType instr, Condition cc) {
2224 int false_block = instr->FalseDestination(chunk_);
2225 __ j(cc, chunk_->GetAssemblyLabel(false_block));
2226 }
2227
2228
2222 void LCodeGen::DoIsNumberAndBranch(LIsNumberAndBranch* instr) { 2229 void LCodeGen::DoIsNumberAndBranch(LIsNumberAndBranch* instr) {
2223 Representation r = instr->hydrogen()->value()->representation(); 2230 Representation r = instr->hydrogen()->value()->representation();
2224 if (r.IsSmiOrInteger32() || r.IsDouble()) { 2231 if (r.IsSmiOrInteger32() || r.IsDouble()) {
2225 EmitBranch(instr, no_condition); 2232 EmitBranch(instr, no_condition);
2226 } else { 2233 } else {
2227 ASSERT(r.IsTagged()); 2234 ASSERT(r.IsTagged());
2228 Register reg = ToRegister(instr->value()); 2235 Register reg = ToRegister(instr->value());
2229 HType type = instr->hydrogen()->value()->type(); 2236 HType type = instr->hydrogen()->value()->type();
2230 if (type.IsTaggedNumber()) { 2237 if (type.IsTaggedNumber()) {
2231 EmitBranch(instr, no_condition); 2238 EmitBranch(instr, no_condition);
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
2462 Handle<Object> right = ToHandle(LConstantOperand::cast(instr->right())); 2469 Handle<Object> right = ToHandle(LConstantOperand::cast(instr->right()));
2463 __ CmpObject(left, right); 2470 __ CmpObject(left, right);
2464 } else { 2471 } else {
2465 Operand right = ToOperand(instr->right()); 2472 Operand right = ToOperand(instr->right());
2466 __ cmp(left, right); 2473 __ cmp(left, right);
2467 } 2474 }
2468 EmitBranch(instr, equal); 2475 EmitBranch(instr, equal);
2469 } 2476 }
2470 2477
2471 2478
2479 void LCodeGen::DoCmpHoleAndBranch(LCmpHoleAndBranch* instr) {
2480 if (instr->hydrogen()->representation().IsTagged()) {
2481 Register input_reg = ToRegister(instr->object());
2482 __ cmp(input_reg, factory()->the_hole_value());
2483 EmitBranch(instr, equal);
2484 return;
2485 }
2486
2487 bool use_sse2 = CpuFeatures::IsSupported(SSE2);
2488 if (use_sse2) {
2489 CpuFeatureScope scope(masm(), SSE2);
2490 XMMRegister input_reg = ToDoubleRegister(instr->object());
2491 __ ucomisd(input_reg, input_reg);
2492 } else {
2493 // Put the value to the top of stack
2494 X87Register src = ToX87Register(instr->object());
2495 X87LoadForUsage(src);
2496 __ fld(0);
2497 __ fld(0);
2498 __ FCmp();
2499 }
2500
2501 EmitFalseBranch(instr, parity_odd);
2502
2503 __ sub(esp, Immediate(kDoubleSize));
2504 if (use_sse2) {
2505 CpuFeatureScope scope(masm(), SSE2);
2506 XMMRegister input_reg = ToDoubleRegister(instr->object());
2507 __ movdbl(MemOperand(esp, 0), input_reg);
2508 } else {
2509 __ fld(0);
2510 __ fstp_d(MemOperand(esp, 0));
2511 }
2512
2513 __ add(esp, Immediate(kDoubleSize));
2514 __ cmp(MemOperand(esp, -sizeof(kHoleNanUpper32)), Immediate(kHoleNanUpper32));
2515 EmitBranch(instr, equal);
2516 }
2517
2518
2472 Condition LCodeGen::EmitIsObject(Register input, 2519 Condition LCodeGen::EmitIsObject(Register input,
2473 Register temp1, 2520 Register temp1,
2474 Label* is_not_object, 2521 Label* is_not_object,
2475 Label* is_object) { 2522 Label* is_object) {
2476 __ JumpIfSmi(input, is_not_object); 2523 __ JumpIfSmi(input, is_not_object);
2477 2524
2478 __ cmp(input, isolate()->factory()->null_value()); 2525 __ cmp(input, isolate()->factory()->null_value());
2479 __ j(equal, is_object); 2526 __ j(equal, is_object);
2480 2527
2481 __ mov(temp1, FieldOperand(input, HeapObject::kMapOffset)); 2528 __ mov(temp1, FieldOperand(input, HeapObject::kMapOffset));
(...skipping 2580 matching lines...) Expand 10 before | Expand all | Expand 10 after
5062 DeferredNumberTagD(LCodeGen* codegen, LNumberTagD* instr) 5109 DeferredNumberTagD(LCodeGen* codegen, LNumberTagD* instr)
5063 : LDeferredCode(codegen), instr_(instr) { } 5110 : LDeferredCode(codegen), instr_(instr) { }
5064 virtual void Generate() { codegen()->DoDeferredNumberTagD(instr_); } 5111 virtual void Generate() { codegen()->DoDeferredNumberTagD(instr_); }
5065 virtual LInstruction* instr() { return instr_; } 5112 virtual LInstruction* instr() { return instr_; }
5066 private: 5113 private:
5067 LNumberTagD* instr_; 5114 LNumberTagD* instr_;
5068 }; 5115 };
5069 5116
5070 Register reg = ToRegister(instr->result()); 5117 Register reg = ToRegister(instr->result());
5071 5118
5072 bool convert_hole = false;
5073 HValue* change_input = instr->hydrogen()->value();
5074 if (change_input->IsLoadKeyed()) {
5075 HLoadKeyed* load = HLoadKeyed::cast(change_input);
5076 convert_hole = load->UsesMustHandleHole();
5077 }
5078
5079 bool use_sse2 = CpuFeatures::IsSupported(SSE2); 5119 bool use_sse2 = CpuFeatures::IsSupported(SSE2);
5080 if (!use_sse2) { 5120 if (!use_sse2) {
5081 // Put the value to the top of stack 5121 // Put the value to the top of stack
5082 X87Register src = ToX87Register(instr->value()); 5122 X87Register src = ToX87Register(instr->value());
5083 X87LoadForUsage(src); 5123 X87LoadForUsage(src);
5084 } 5124 }
5085 5125
5086 Label no_special_nan_handling;
5087 Label done;
5088 if (convert_hole) {
5089 if (use_sse2) {
5090 CpuFeatureScope scope(masm(), SSE2);
5091 XMMRegister input_reg = ToDoubleRegister(instr->value());
5092 __ ucomisd(input_reg, input_reg);
5093 } else {
5094 __ fld(0);
5095 __ fld(0);
5096 __ FCmp();
5097 }
5098
5099 __ j(parity_odd, &no_special_nan_handling);
5100 __ sub(esp, Immediate(kDoubleSize));
5101 if (use_sse2) {
5102 CpuFeatureScope scope(masm(), SSE2);
5103 XMMRegister input_reg = ToDoubleRegister(instr->value());
5104 __ movdbl(MemOperand(esp, 0), input_reg);
5105 } else {
5106 __ fld(0);
5107 __ fstp_d(MemOperand(esp, 0));
5108 }
5109 __ cmp(MemOperand(esp, sizeof(kHoleNanLower32)),
5110 Immediate(kHoleNanUpper32));
5111 Label canonicalize;
5112 __ j(not_equal, &canonicalize);
5113 __ add(esp, Immediate(kDoubleSize));
5114 __ mov(reg, factory()->the_hole_value());
5115 if (!use_sse2) {
5116 __ fstp(0);
5117 }
5118 __ jmp(&done);
5119 __ bind(&canonicalize);
5120 __ add(esp, Immediate(kDoubleSize));
5121 ExternalReference nan =
5122 ExternalReference::address_of_canonical_non_hole_nan();
5123 if (use_sse2) {
5124 CpuFeatureScope scope(masm(), SSE2);
5125 XMMRegister input_reg = ToDoubleRegister(instr->value());
5126 __ movdbl(input_reg, Operand::StaticVariable(nan));
5127 } else {
5128 __ fstp(0);
5129 __ fld_d(Operand::StaticVariable(nan));
5130 }
5131 }
5132
5133 __ bind(&no_special_nan_handling);
5134 DeferredNumberTagD* deferred = new(zone()) DeferredNumberTagD(this, instr); 5126 DeferredNumberTagD* deferred = new(zone()) DeferredNumberTagD(this, instr);
5135 if (FLAG_inline_new) { 5127 if (FLAG_inline_new) {
5136 Register tmp = ToRegister(instr->temp()); 5128 Register tmp = ToRegister(instr->temp());
5137 __ AllocateHeapNumber(reg, tmp, no_reg, deferred->entry()); 5129 __ AllocateHeapNumber(reg, tmp, no_reg, deferred->entry());
5138 } else { 5130 } else {
5139 __ jmp(deferred->entry()); 5131 __ jmp(deferred->entry());
5140 } 5132 }
5141 __ bind(deferred->exit()); 5133 __ bind(deferred->exit());
5142 if (use_sse2) { 5134 if (use_sse2) {
5143 CpuFeatureScope scope(masm(), SSE2); 5135 CpuFeatureScope scope(masm(), SSE2);
5144 XMMRegister input_reg = ToDoubleRegister(instr->value()); 5136 XMMRegister input_reg = ToDoubleRegister(instr->value());
5145 __ movdbl(FieldOperand(reg, HeapNumber::kValueOffset), input_reg); 5137 __ movdbl(FieldOperand(reg, HeapNumber::kValueOffset), input_reg);
5146 } else { 5138 } else {
5147 __ fstp_d(FieldOperand(reg, HeapNumber::kValueOffset)); 5139 __ fstp_d(FieldOperand(reg, HeapNumber::kValueOffset));
5148 } 5140 }
5149 __ bind(&done);
5150 } 5141 }
5151 5142
5152 5143
5153 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) { 5144 void LCodeGen::DoDeferredNumberTagD(LNumberTagD* instr) {
5154 // TODO(3095996): Get rid of this. For now, we need to make the 5145 // TODO(3095996): Get rid of this. For now, we need to make the
5155 // result register contain a valid pointer because it is already 5146 // result register contain a valid pointer because it is already
5156 // contained in the register pointer map. 5147 // contained in the register pointer map.
5157 Register reg = ToRegister(instr->result()); 5148 Register reg = ToRegister(instr->result());
5158 __ Set(reg, Immediate(0)); 5149 __ Set(reg, Immediate(0));
5159 5150
(...skipping 29 matching lines...) Expand all
5189 } else { 5180 } else {
5190 __ AssertSmi(result); 5181 __ AssertSmi(result);
5191 } 5182 }
5192 __ SmiUntag(result); 5183 __ SmiUntag(result);
5193 } 5184 }
5194 5185
5195 5186
5196 void LCodeGen::EmitNumberUntagDNoSSE2(Register input_reg, 5187 void LCodeGen::EmitNumberUntagDNoSSE2(Register input_reg,
5197 Register temp_reg, 5188 Register temp_reg,
5198 X87Register res_reg, 5189 X87Register res_reg,
5199 bool allow_undefined_as_nan, 5190 bool can_convert_undefined_to_nan,
5200 bool deoptimize_on_minus_zero, 5191 bool deoptimize_on_minus_zero,
5201 LEnvironment* env, 5192 LEnvironment* env,
5202 NumberUntagDMode mode) { 5193 NumberUntagDMode mode) {
5203 Label load_smi, done; 5194 Label load_smi, done;
5204 5195
5205 X87PrepareToWrite(res_reg); 5196 X87PrepareToWrite(res_reg);
5206 STATIC_ASSERT(NUMBER_CANDIDATE_IS_ANY_TAGGED_CONVERT_HOLE > 5197 if (mode == NUMBER_CANDIDATE_IS_ANY_TAGGED) {
5207 NUMBER_CANDIDATE_IS_ANY_TAGGED);
5208 if (mode >= NUMBER_CANDIDATE_IS_ANY_TAGGED) {
5209 // Smi check. 5198 // Smi check.
5210 __ JumpIfSmi(input_reg, &load_smi, Label::kNear); 5199 __ JumpIfSmi(input_reg, &load_smi, Label::kNear);
5211 5200
5212 // Heap number map check. 5201 // Heap number map check.
5213 __ cmp(FieldOperand(input_reg, HeapObject::kMapOffset), 5202 __ cmp(FieldOperand(input_reg, HeapObject::kMapOffset),
5214 factory()->heap_number_map()); 5203 factory()->heap_number_map());
5215 if (!allow_undefined_as_nan) { 5204 if (!can_convert_undefined_to_nan) {
5216 DeoptimizeIf(not_equal, env); 5205 DeoptimizeIf(not_equal, env);
5217 } else { 5206 } else {
5218 Label heap_number, convert; 5207 Label heap_number, convert;
5219 __ j(equal, &heap_number, Label::kNear); 5208 __ j(equal, &heap_number, Label::kNear);
5220 5209
5221 // Convert undefined (or hole) to NaN. 5210 // Convert undefined (or hole) to NaN.
5222 __ cmp(input_reg, factory()->undefined_value()); 5211 __ cmp(input_reg, factory()->undefined_value());
5223 if (mode == NUMBER_CANDIDATE_IS_ANY_TAGGED_CONVERT_HOLE) {
5224 __ j(equal, &convert, Label::kNear);
5225 __ cmp(input_reg, factory()->the_hole_value());
5226 }
5227 DeoptimizeIf(not_equal, env); 5212 DeoptimizeIf(not_equal, env);
5228 5213
5229 __ bind(&convert); 5214 __ bind(&convert);
5230 ExternalReference nan = 5215 ExternalReference nan =
5231 ExternalReference::address_of_canonical_non_hole_nan(); 5216 ExternalReference::address_of_canonical_non_hole_nan();
5232 __ fld_d(Operand::StaticVariable(nan)); 5217 __ fld_d(Operand::StaticVariable(nan));
5233 __ jmp(&done, Label::kNear); 5218 __ jmp(&done, Label::kNear);
5234 5219
5235 __ bind(&heap_number); 5220 __ bind(&heap_number);
5236 } 5221 }
(...skipping 26 matching lines...) Expand all
5263 __ pop(input_reg); 5248 __ pop(input_reg);
5264 __ SmiTag(input_reg); // Retag smi. 5249 __ SmiTag(input_reg); // Retag smi.
5265 __ bind(&done); 5250 __ bind(&done);
5266 X87CommitWrite(res_reg); 5251 X87CommitWrite(res_reg);
5267 } 5252 }
5268 5253
5269 5254
5270 void LCodeGen::EmitNumberUntagD(Register input_reg, 5255 void LCodeGen::EmitNumberUntagD(Register input_reg,
5271 Register temp_reg, 5256 Register temp_reg,
5272 XMMRegister result_reg, 5257 XMMRegister result_reg,
5273 bool allow_undefined_as_nan, 5258 bool can_convert_undefined_to_nan,
5274 bool deoptimize_on_minus_zero, 5259 bool deoptimize_on_minus_zero,
5275 LEnvironment* env, 5260 LEnvironment* env,
5276 NumberUntagDMode mode) { 5261 NumberUntagDMode mode) {
5277 Label load_smi, done; 5262 Label load_smi, done;
5278 5263
5279 STATIC_ASSERT(NUMBER_CANDIDATE_IS_ANY_TAGGED_CONVERT_HOLE > 5264 if (mode == NUMBER_CANDIDATE_IS_ANY_TAGGED) {
5280 NUMBER_CANDIDATE_IS_ANY_TAGGED);
5281 if (mode >= NUMBER_CANDIDATE_IS_ANY_TAGGED) {
5282 // Smi check. 5265 // Smi check.
5283 __ JumpIfSmi(input_reg, &load_smi, Label::kNear); 5266 __ JumpIfSmi(input_reg, &load_smi, Label::kNear);
5284 5267
5285 // Heap number map check. 5268 // Heap number map check.
5286 __ cmp(FieldOperand(input_reg, HeapObject::kMapOffset), 5269 __ cmp(FieldOperand(input_reg, HeapObject::kMapOffset),
5287 factory()->heap_number_map()); 5270 factory()->heap_number_map());
5288 if (!allow_undefined_as_nan) { 5271 if (!can_convert_undefined_to_nan) {
5289 DeoptimizeIf(not_equal, env); 5272 DeoptimizeIf(not_equal, env);
5290 } else { 5273 } else {
5291 Label heap_number, convert; 5274 Label heap_number, convert;
5292 __ j(equal, &heap_number, Label::kNear); 5275 __ j(equal, &heap_number, Label::kNear);
5293 5276
5294 // Convert undefined (and hole) to NaN. 5277 // Convert undefined (and hole) to NaN.
5295 __ cmp(input_reg, factory()->undefined_value()); 5278 __ cmp(input_reg, factory()->undefined_value());
5296 if (mode == NUMBER_CANDIDATE_IS_ANY_TAGGED_CONVERT_HOLE) {
5297 __ j(equal, &convert, Label::kNear);
5298 __ cmp(input_reg, factory()->the_hole_value());
5299 }
5300 DeoptimizeIf(not_equal, env); 5279 DeoptimizeIf(not_equal, env);
5301 5280
5302 __ bind(&convert); 5281 __ bind(&convert);
5303 ExternalReference nan = 5282 ExternalReference nan =
5304 ExternalReference::address_of_canonical_non_hole_nan(); 5283 ExternalReference::address_of_canonical_non_hole_nan();
5305 __ movdbl(result_reg, Operand::StaticVariable(nan)); 5284 __ movdbl(result_reg, Operand::StaticVariable(nan));
5306 __ jmp(&done, Label::kNear); 5285 __ jmp(&done, Label::kNear);
5307 5286
5308 __ bind(&heap_number); 5287 __ bind(&heap_number);
5309 } 5288 }
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
5614 LOperand* temp = instr->temp(); 5593 LOperand* temp = instr->temp();
5615 ASSERT(temp == NULL || temp->IsRegister()); 5594 ASSERT(temp == NULL || temp->IsRegister());
5616 LOperand* result = instr->result(); 5595 LOperand* result = instr->result();
5617 ASSERT(result->IsDoubleRegister()); 5596 ASSERT(result->IsDoubleRegister());
5618 5597
5619 Register input_reg = ToRegister(input); 5598 Register input_reg = ToRegister(input);
5620 bool deoptimize_on_minus_zero = 5599 bool deoptimize_on_minus_zero =
5621 instr->hydrogen()->deoptimize_on_minus_zero(); 5600 instr->hydrogen()->deoptimize_on_minus_zero();
5622 Register temp_reg = deoptimize_on_minus_zero ? ToRegister(temp) : no_reg; 5601 Register temp_reg = deoptimize_on_minus_zero ? ToRegister(temp) : no_reg;
5623 5602
5624 NumberUntagDMode mode = NUMBER_CANDIDATE_IS_ANY_TAGGED;
5625 HValue* value = instr->hydrogen()->value(); 5603 HValue* value = instr->hydrogen()->value();
5626 if (value->representation().IsSmi()) { 5604 NumberUntagDMode mode = value->representation().IsSmi()
5627 mode = NUMBER_CANDIDATE_IS_SMI; 5605 ? NUMBER_CANDIDATE_IS_SMI : NUMBER_CANDIDATE_IS_ANY_TAGGED;
5628 } else if (value->IsLoadKeyed()) {
5629 HLoadKeyed* load = HLoadKeyed::cast(value);
5630 if (load->UsesMustHandleHole()) {
5631 mode = NUMBER_CANDIDATE_IS_ANY_TAGGED_CONVERT_HOLE;
5632 }
5633 }
5634 5606
5635 if (CpuFeatures::IsSupported(SSE2)) { 5607 if (CpuFeatures::IsSupported(SSE2)) {
5636 CpuFeatureScope scope(masm(), SSE2); 5608 CpuFeatureScope scope(masm(), SSE2);
5637 XMMRegister result_reg = ToDoubleRegister(result); 5609 XMMRegister result_reg = ToDoubleRegister(result);
5638 EmitNumberUntagD(input_reg, 5610 EmitNumberUntagD(input_reg,
5639 temp_reg, 5611 temp_reg,
5640 result_reg, 5612 result_reg,
5641 instr->hydrogen()->allow_undefined_as_nan(), 5613 instr->hydrogen()->can_convert_undefined_to_nan(),
5642 deoptimize_on_minus_zero, 5614 deoptimize_on_minus_zero,
5643 instr->environment(), 5615 instr->environment(),
5644 mode); 5616 mode);
5645 } else { 5617 } else {
5646 EmitNumberUntagDNoSSE2(input_reg, 5618 EmitNumberUntagDNoSSE2(input_reg,
5647 temp_reg, 5619 temp_reg,
5648 ToX87Register(instr->result()), 5620 ToX87Register(instr->result()),
5649 instr->hydrogen()->allow_undefined_as_nan(), 5621 instr->hydrogen()->can_convert_undefined_to_nan(),
5650 deoptimize_on_minus_zero, 5622 deoptimize_on_minus_zero,
5651 instr->environment(), 5623 instr->environment(),
5652 mode); 5624 mode);
5653 } 5625 }
5654 } 5626 }
5655 5627
5656 5628
5657 void LCodeGen::DoDoubleToI(LDoubleToI* instr) { 5629 void LCodeGen::DoDoubleToI(LDoubleToI* instr) {
5658 LOperand* input = instr->value(); 5630 LOperand* input = instr->value();
5659 ASSERT(input->IsDoubleRegister()); 5631 ASSERT(input->IsDoubleRegister());
(...skipping 890 matching lines...) Expand 10 before | Expand all | Expand 10 after
6550 FixedArray::kHeaderSize - kPointerSize)); 6522 FixedArray::kHeaderSize - kPointerSize));
6551 __ bind(&done); 6523 __ bind(&done);
6552 } 6524 }
6553 6525
6554 6526
6555 #undef __ 6527 #undef __
6556 6528
6557 } } // namespace v8::internal 6529 } } // namespace v8::internal
6558 6530
6559 #endif // V8_TARGET_ARCH_IA32 6531 #endif // V8_TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « src/ia32/lithium-codegen-ia32.h ('k') | src/ia32/lithium-ia32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698