| 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 2049 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2060 __ BranchF(chunk_->GetAssemblyLabel(false_block), NULL, | 2060 __ BranchF(chunk_->GetAssemblyLabel(false_block), NULL, |
| 2061 condition, src1, src2); | 2061 condition, src1, src2); |
| 2062 } | 2062 } |
| 2063 | 2063 |
| 2064 | 2064 |
| 2065 void LCodeGen::DoDebugBreak(LDebugBreak* instr) { | 2065 void LCodeGen::DoDebugBreak(LDebugBreak* instr) { |
| 2066 __ stop("LDebugBreak"); | 2066 __ stop("LDebugBreak"); |
| 2067 } | 2067 } |
| 2068 | 2068 |
| 2069 | 2069 |
| 2070 void LCodeGen::DoIsNumberAndBranch(LIsNumberAndBranch* instr) { | |
| 2071 Representation r = instr->hydrogen()->value()->representation(); | |
| 2072 if (r.IsSmiOrInteger32() || r.IsDouble()) { | |
| 2073 EmitBranch(instr, al, zero_reg, Operand(zero_reg)); | |
| 2074 } else { | |
| 2075 ASSERT(r.IsTagged()); | |
| 2076 Register reg = ToRegister(instr->value()); | |
| 2077 HType type = instr->hydrogen()->value()->type(); | |
| 2078 if (type.IsTaggedNumber()) { | |
| 2079 EmitBranch(instr, al, zero_reg, Operand(zero_reg)); | |
| 2080 } | |
| 2081 __ JumpIfSmi(reg, instr->TrueLabel(chunk_)); | |
| 2082 __ lw(scratch0(), FieldMemOperand(reg, HeapObject::kMapOffset)); | |
| 2083 __ LoadRoot(at, Heap::kHeapNumberMapRootIndex); | |
| 2084 EmitBranch(instr, eq, scratch0(), Operand(at)); | |
| 2085 } | |
| 2086 } | |
| 2087 | |
| 2088 | |
| 2089 void LCodeGen::DoBranch(LBranch* instr) { | 2070 void LCodeGen::DoBranch(LBranch* instr) { |
| 2090 Representation r = instr->hydrogen()->value()->representation(); | 2071 Representation r = instr->hydrogen()->value()->representation(); |
| 2091 if (r.IsInteger32() || r.IsSmi()) { | 2072 if (r.IsInteger32() || r.IsSmi()) { |
| 2092 ASSERT(!info()->IsStub()); | 2073 ASSERT(!info()->IsStub()); |
| 2093 Register reg = ToRegister(instr->value()); | 2074 Register reg = ToRegister(instr->value()); |
| 2094 EmitBranch(instr, ne, reg, Operand(zero_reg)); | 2075 EmitBranch(instr, ne, reg, Operand(zero_reg)); |
| 2095 } else if (r.IsDouble()) { | 2076 } else if (r.IsDouble()) { |
| 2096 ASSERT(!info()->IsStub()); | 2077 ASSERT(!info()->IsStub()); |
| 2097 DoubleRegister reg = ToDoubleRegister(instr->value()); | 2078 DoubleRegister reg = ToDoubleRegister(instr->value()); |
| 2098 // Test the double value. Zero and NaN are false. | 2079 // Test the double value. Zero and NaN are false. |
| (...skipping 3688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5787 __ Subu(scratch, result, scratch); | 5768 __ Subu(scratch, result, scratch); |
| 5788 __ lw(result, FieldMemOperand(scratch, | 5769 __ lw(result, FieldMemOperand(scratch, |
| 5789 FixedArray::kHeaderSize - kPointerSize)); | 5770 FixedArray::kHeaderSize - kPointerSize)); |
| 5790 __ bind(&done); | 5771 __ bind(&done); |
| 5791 } | 5772 } |
| 5792 | 5773 |
| 5793 | 5774 |
| 5794 #undef __ | 5775 #undef __ |
| 5795 | 5776 |
| 5796 } } // namespace v8::internal | 5777 } } // namespace v8::internal |
| OLD | NEW |