OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
6 | 6 |
7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
8 #include "src/code-factory.h" | 8 #include "src/code-factory.h" |
9 #include "src/code-stubs.h" | 9 #include "src/code-stubs.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 1053 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1064 case CodeStub::RegExpExec: { | 1064 case CodeStub::RegExpExec: { |
1065 RegExpExecStub stub(isolate()); | 1065 RegExpExecStub stub(isolate()); |
1066 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); | 1066 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
1067 break; | 1067 break; |
1068 } | 1068 } |
1069 case CodeStub::SubString: { | 1069 case CodeStub::SubString: { |
1070 SubStringStub stub(isolate()); | 1070 SubStringStub stub(isolate()); |
1071 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); | 1071 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); |
1072 break; | 1072 break; |
1073 } | 1073 } |
1074 case CodeStub::StringCompare: { | |
1075 StringCompareStub stub(isolate()); | |
1076 CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr); | |
1077 break; | |
1078 } | |
1079 default: | 1074 default: |
1080 UNREACHABLE(); | 1075 UNREACHABLE(); |
1081 } | 1076 } |
1082 } | 1077 } |
1083 | 1078 |
1084 | 1079 |
1085 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) { | 1080 void LCodeGen::DoUnknownOSRValue(LUnknownOSRValue* instr) { |
1086 GenerateOsrPrologue(); | 1081 GenerateOsrPrologue(); |
1087 } | 1082 } |
1088 | 1083 |
(...skipping 1345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2434 case Token::GTE: | 2429 case Token::GTE: |
2435 return greater_equal; | 2430 return greater_equal; |
2436 default: | 2431 default: |
2437 UNREACHABLE(); | 2432 UNREACHABLE(); |
2438 return no_condition; | 2433 return no_condition; |
2439 } | 2434 } |
2440 } | 2435 } |
2441 | 2436 |
2442 | 2437 |
2443 void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) { | 2438 void LCodeGen::DoStringCompareAndBranch(LStringCompareAndBranch* instr) { |
2444 Token::Value op = instr->op(); | 2439 DCHECK(ToRegister(instr->context()).is(esi)); |
| 2440 DCHECK(ToRegister(instr->left()).is(edx)); |
| 2441 DCHECK(ToRegister(instr->right()).is(eax)); |
2445 | 2442 |
2446 Handle<Code> ic = | 2443 Handle<Code> code = CodeFactory::StringCompare(isolate()).code(); |
2447 CodeFactory::CompareIC(isolate(), op, Strength::WEAK).code(); | 2444 CallCode(code, RelocInfo::CODE_TARGET, instr); |
2448 CallCode(ic, RelocInfo::CODE_TARGET, instr); | 2445 __ test(eax, eax); |
2449 | 2446 |
2450 Condition condition = ComputeCompareCondition(op); | 2447 EmitBranch(instr, ComputeCompareCondition(instr->op())); |
2451 __ test(eax, Operand(eax)); | |
2452 | |
2453 EmitBranch(instr, condition); | |
2454 } | 2448 } |
2455 | 2449 |
2456 | 2450 |
2457 static InstanceType TestType(HHasInstanceTypeAndBranch* instr) { | 2451 static InstanceType TestType(HHasInstanceTypeAndBranch* instr) { |
2458 InstanceType from = instr->from(); | 2452 InstanceType from = instr->from(); |
2459 InstanceType to = instr->to(); | 2453 InstanceType to = instr->to(); |
2460 if (from == FIRST_TYPE) return to; | 2454 if (from == FIRST_TYPE) return to; |
2461 DCHECK(from == to || to == LAST_TYPE); | 2455 DCHECK(from == to || to == LAST_TYPE); |
2462 return from; | 2456 return from; |
2463 } | 2457 } |
(...skipping 3265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5729 RecordSafepoint(Safepoint::kNoLazyDeopt); | 5723 RecordSafepoint(Safepoint::kNoLazyDeopt); |
5730 } | 5724 } |
5731 | 5725 |
5732 | 5726 |
5733 #undef __ | 5727 #undef __ |
5734 | 5728 |
5735 } // namespace internal | 5729 } // namespace internal |
5736 } // namespace v8 | 5730 } // namespace v8 |
5737 | 5731 |
5738 #endif // V8_TARGET_ARCH_IA32 | 5732 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |