| Index: src/x64/code-stubs-x64.cc
|
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
|
| index ef0ac02055f82ab57722990428c2d36f55f80816..f64644a0d4286f2214e22a5fba70c1f3d8138e83 100644
|
| --- a/src/x64/code-stubs-x64.cc
|
| +++ b/src/x64/code-stubs-x64.cc
|
| @@ -136,7 +136,7 @@ void HydrogenCodeStub::GenerateLightweightMiss(MacroAssembler* masm) {
|
|
|
|
|
| void StoreBufferOverflowStub::Generate(MacroAssembler* masm) {
|
| - __ PushCallerSaved(save_doubles_);
|
| + __ PushCallerSaved(save_doubles() ? kSaveFPRegs : kDontSaveFPRegs);
|
| const int argument_count = 1;
|
| __ PrepareCallCFunction(argument_count);
|
| __ LoadAddress(arg_reg_1,
|
| @@ -146,7 +146,7 @@ void StoreBufferOverflowStub::Generate(MacroAssembler* masm) {
|
| __ CallCFunction(
|
| ExternalReference::store_buffer_overflow_function(isolate()),
|
| argument_count);
|
| - __ PopCallerSaved(save_doubles_);
|
| + __ PopCallerSaved(save_doubles() ? kSaveFPRegs : kDontSaveFPRegs);
|
| __ ret(0);
|
| }
|
|
|
| @@ -1624,19 +1624,10 @@ void ICCompareStub::GenerateGeneric(MacroAssembler* masm) {
|
|
|
| // Inline comparison of ASCII strings.
|
| if (cc == equal) {
|
| - StringCompareStub::GenerateFlatAsciiStringEquals(masm,
|
| - rdx,
|
| - rax,
|
| - rcx,
|
| - rbx);
|
| + StringHelper::GenerateFlatAsciiStringEquals(masm, rdx, rax, rcx, rbx);
|
| } else {
|
| - StringCompareStub::GenerateCompareFlatAsciiStrings(masm,
|
| - rdx,
|
| - rax,
|
| - rcx,
|
| - rbx,
|
| - rdi,
|
| - r8);
|
| + StringHelper::GenerateCompareFlatAsciiStrings(masm, rdx, rax, rcx, rbx, rdi,
|
| + r8);
|
| }
|
|
|
| #ifdef DEBUG
|
| @@ -3143,11 +3134,10 @@ void SubStringStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| -void StringCompareStub::GenerateFlatAsciiStringEquals(MacroAssembler* masm,
|
| - Register left,
|
| - Register right,
|
| - Register scratch1,
|
| - Register scratch2) {
|
| +void StringHelper::GenerateFlatAsciiStringEquals(MacroAssembler* masm,
|
| + Register left, Register right,
|
| + Register scratch1,
|
| + Register scratch2) {
|
| Register length = scratch1;
|
|
|
| // Compare lengths.
|
| @@ -3184,13 +3174,9 @@ void StringCompareStub::GenerateFlatAsciiStringEquals(MacroAssembler* masm,
|
| }
|
|
|
|
|
| -void StringCompareStub::GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
|
| - Register left,
|
| - Register right,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Register scratch3,
|
| - Register scratch4) {
|
| +void StringHelper::GenerateCompareFlatAsciiStrings(
|
| + MacroAssembler* masm, Register left, Register right, Register scratch1,
|
| + Register scratch2, Register scratch3, Register scratch4) {
|
| // Ensure that you can always subtract a string length from a non-negative
|
| // number (e.g. another length).
|
| STATIC_ASSERT(String::kMaxLength < 0x7fffffff);
|
| @@ -3258,14 +3244,9 @@ void StringCompareStub::GenerateCompareFlatAsciiStrings(MacroAssembler* masm,
|
| }
|
|
|
|
|
| -void StringCompareStub::GenerateAsciiCharsCompareLoop(
|
| - MacroAssembler* masm,
|
| - Register left,
|
| - Register right,
|
| - Register length,
|
| - Register scratch,
|
| - Label* chars_not_equal,
|
| - Label::Distance near_jump) {
|
| +void StringHelper::GenerateAsciiCharsCompareLoop(
|
| + MacroAssembler* masm, Register left, Register right, Register length,
|
| + Register scratch, Label* chars_not_equal, Label::Distance near_jump) {
|
| // Change index to run from -length to -1 by adding length to string
|
| // start. This means that loop ends when index reaches zero, which
|
| // doesn't need an additional compare.
|
| @@ -3320,7 +3301,8 @@ void StringCompareStub::Generate(MacroAssembler* masm) {
|
| __ PopReturnAddressTo(rcx);
|
| __ addp(rsp, Immediate(2 * kPointerSize));
|
| __ PushReturnAddressFrom(rcx);
|
| - GenerateCompareFlatAsciiStrings(masm, rdx, rax, rcx, rbx, rdi, r8);
|
| + StringHelper::GenerateCompareFlatAsciiStrings(masm, rdx, rax, rcx, rbx, rdi,
|
| + r8);
|
|
|
| // Call the runtime; it returns -1 (less), 0 (equal), or 1 (greater)
|
| // tagged as a small integer.
|
| @@ -3607,11 +3589,10 @@ void ICCompareStub::GenerateStrings(MacroAssembler* masm) {
|
|
|
| // Compare flat ASCII strings. Returns when done.
|
| if (equality) {
|
| - StringCompareStub::GenerateFlatAsciiStringEquals(
|
| - masm, left, right, tmp1, tmp2);
|
| + StringHelper::GenerateFlatAsciiStringEquals(masm, left, right, tmp1, tmp2);
|
| } else {
|
| - StringCompareStub::GenerateCompareFlatAsciiStrings(
|
| - masm, left, right, tmp1, tmp2, tmp3, kScratchRegister);
|
| + StringHelper::GenerateCompareFlatAsciiStrings(masm, left, right, tmp1, tmp2,
|
| + tmp3, kScratchRegister);
|
| }
|
|
|
| // Handle more complex cases in runtime.
|
|
|