Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 2064 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2075 } | 2075 } |
| 2076 } | 2076 } |
| 2077 | 2077 |
| 2078 | 2078 |
| 2079 void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) { | 2079 void LCodeGen::DoCmpObjectEqAndBranch(LCmpObjectEqAndBranch* instr) { |
| 2080 Register left = ToRegister(instr->left()); | 2080 Register left = ToRegister(instr->left()); |
| 2081 int false_block = chunk_->LookupDestination(instr->false_block_id()); | 2081 int false_block = chunk_->LookupDestination(instr->false_block_id()); |
| 2082 int true_block = chunk_->LookupDestination(instr->true_block_id()); | 2082 int true_block = chunk_->LookupDestination(instr->true_block_id()); |
| 2083 | 2083 |
| 2084 if (instr->right()->IsConstantOperand()) { | 2084 if (instr->right()->IsConstantOperand()) { |
| 2085 __ Cmp(left, ToHandle(LConstantOperand::cast(instr->right()))); | 2085 Handle<Object> right = ToHandle(LConstantOperand::cast(instr->right())); |
| 2086 __ CmpObject(left, right); | |
| 2086 } else { | 2087 } else { |
| 2087 __ cmpq(left, ToRegister(instr->right())); | 2088 Register right = ToRegister(instr->right()); |
| 2089 __ cmpq(left, right); | |
| 2088 } | 2090 } |
| 2089 EmitBranch(true_block, false_block, equal); | 2091 EmitBranch(true_block, false_block, equal); |
| 2090 } | 2092 } |
| 2091 | 2093 |
| 2092 | 2094 |
| 2093 void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) { | 2095 void LCodeGen::DoCmpConstantEqAndBranch(LCmpConstantEqAndBranch* instr) { |
| 2094 Register left = ToRegister(instr->left()); | 2096 Register left = ToRegister(instr->left()); |
| 2095 int true_block = chunk_->LookupDestination(instr->true_block_id()); | 2097 int true_block = chunk_->LookupDestination(instr->true_block_id()); |
| 2096 int false_block = chunk_->LookupDestination(instr->false_block_id()); | 2098 int false_block = chunk_->LookupDestination(instr->false_block_id()); |
| 2097 | 2099 |
| (...skipping 2848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4946 __ cmpb(kScratchRegister, Immediate(tag)); | 4948 __ cmpb(kScratchRegister, Immediate(tag)); |
| 4947 DeoptimizeIf(not_equal, instr->environment()); | 4949 DeoptimizeIf(not_equal, instr->environment()); |
| 4948 } | 4950 } |
| 4949 } | 4951 } |
| 4950 } | 4952 } |
| 4951 | 4953 |
| 4952 | 4954 |
| 4953 void LCodeGen::DoCheckFunction(LCheckFunction* instr) { | 4955 void LCodeGen::DoCheckFunction(LCheckFunction* instr) { |
| 4954 Register reg = ToRegister(instr->value()); | 4956 Register reg = ToRegister(instr->value()); |
| 4955 Handle<JSFunction> target = instr->hydrogen()->target(); | 4957 Handle<JSFunction> target = instr->hydrogen()->target(); |
| 4956 ALLOW_HANDLE_DEREF(isolate(), "using raw address"); | 4958 __ CmpHeapObject(reg, target); |
|
mvstanton
2013/05/23 13:09:14
Nice that you could refactor this code...how about
Michael Starzinger
2013/05/23 13:13:51
As discussed offline: Yes, I agree, ia32 should us
| |
| 4957 if (isolate()->heap()->InNewSpace(*target)) { | |
| 4958 Handle<JSGlobalPropertyCell> cell = | |
| 4959 isolate()->factory()->NewJSGlobalPropertyCell(target); | |
| 4960 __ movq(kScratchRegister, cell, RelocInfo::GLOBAL_PROPERTY_CELL); | |
| 4961 __ cmpq(reg, Operand(kScratchRegister, 0)); | |
| 4962 } else { | |
| 4963 __ Cmp(reg, target); | |
| 4964 } | |
| 4965 DeoptimizeIf(not_equal, instr->environment()); | 4959 DeoptimizeIf(not_equal, instr->environment()); |
| 4966 } | 4960 } |
| 4967 | 4961 |
| 4968 | 4962 |
| 4969 void LCodeGen::DoCheckMapCommon(Register reg, | 4963 void LCodeGen::DoCheckMapCommon(Register reg, |
| 4970 Handle<Map> map, | 4964 Handle<Map> map, |
| 4971 LInstruction* instr) { | 4965 LInstruction* instr) { |
| 4972 Label success; | 4966 Label success; |
| 4973 __ CompareMap(reg, map, &success); | 4967 __ CompareMap(reg, map, &success); |
| 4974 DeoptimizeIf(not_equal, instr->environment()); | 4968 DeoptimizeIf(not_equal, instr->environment()); |
| (...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5668 FixedArray::kHeaderSize - kPointerSize)); | 5662 FixedArray::kHeaderSize - kPointerSize)); |
| 5669 __ bind(&done); | 5663 __ bind(&done); |
| 5670 } | 5664 } |
| 5671 | 5665 |
| 5672 | 5666 |
| 5673 #undef __ | 5667 #undef __ |
| 5674 | 5668 |
| 5675 } } // namespace v8::internal | 5669 } } // namespace v8::internal |
| 5676 | 5670 |
| 5677 #endif // V8_TARGET_ARCH_X64 | 5671 #endif // V8_TARGET_ARCH_X64 |
| OLD | NEW |