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 2199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2210 int false_block = instr->FalseDestination(chunk_); | 2210 int false_block = instr->FalseDestination(chunk_); |
2211 __ b(condition, chunk_->GetAssemblyLabel(false_block)); | 2211 __ b(condition, chunk_->GetAssemblyLabel(false_block)); |
2212 } | 2212 } |
2213 | 2213 |
2214 | 2214 |
2215 void LCodeGen::DoDebugBreak(LDebugBreak* instr) { | 2215 void LCodeGen::DoDebugBreak(LDebugBreak* instr) { |
2216 __ stop("LBreak"); | 2216 __ stop("LBreak"); |
2217 } | 2217 } |
2218 | 2218 |
2219 | 2219 |
2220 void LCodeGen::DoIsNumberAndBranch(LIsNumberAndBranch* instr) { | |
2221 Representation r = instr->hydrogen()->value()->representation(); | |
2222 if (r.IsSmiOrInteger32() || r.IsDouble()) { | |
2223 EmitBranch(instr, al); | |
2224 } else { | |
2225 ASSERT(r.IsTagged()); | |
2226 Register reg = ToRegister(instr->value()); | |
2227 HType type = instr->hydrogen()->value()->type(); | |
2228 if (type.IsTaggedNumber()) { | |
2229 EmitBranch(instr, al); | |
2230 } | |
2231 __ JumpIfSmi(reg, instr->TrueLabel(chunk_)); | |
2232 __ ldr(scratch0(), FieldMemOperand(reg, HeapObject::kMapOffset)); | |
2233 __ CompareRoot(scratch0(), Heap::kHeapNumberMapRootIndex); | |
2234 EmitBranch(instr, eq); | |
2235 } | |
2236 } | |
2237 | |
2238 | |
2239 void LCodeGen::DoBranch(LBranch* instr) { | 2220 void LCodeGen::DoBranch(LBranch* instr) { |
2240 Representation r = instr->hydrogen()->value()->representation(); | 2221 Representation r = instr->hydrogen()->value()->representation(); |
2241 if (r.IsInteger32() || r.IsSmi()) { | 2222 if (r.IsInteger32() || r.IsSmi()) { |
2242 ASSERT(!info()->IsStub()); | 2223 ASSERT(!info()->IsStub()); |
2243 Register reg = ToRegister(instr->value()); | 2224 Register reg = ToRegister(instr->value()); |
2244 __ cmp(reg, Operand::Zero()); | 2225 __ cmp(reg, Operand::Zero()); |
2245 EmitBranch(instr, ne); | 2226 EmitBranch(instr, ne); |
2246 } else if (r.IsDouble()) { | 2227 } else if (r.IsDouble()) { |
2247 ASSERT(!info()->IsStub()); | 2228 ASSERT(!info()->IsStub()); |
2248 DwVfpRegister reg = ToDoubleRegister(instr->value()); | 2229 DwVfpRegister reg = ToDoubleRegister(instr->value()); |
(...skipping 3552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5801 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); | 5782 __ sub(scratch, result, Operand::PointerOffsetFromSmiKey(index)); |
5802 __ ldr(result, FieldMemOperand(scratch, | 5783 __ ldr(result, FieldMemOperand(scratch, |
5803 FixedArray::kHeaderSize - kPointerSize)); | 5784 FixedArray::kHeaderSize - kPointerSize)); |
5804 __ bind(&done); | 5785 __ bind(&done); |
5805 } | 5786 } |
5806 | 5787 |
5807 | 5788 |
5808 #undef __ | 5789 #undef __ |
5809 | 5790 |
5810 } } // namespace v8::internal | 5791 } } // namespace v8::internal |
OLD | NEW |