| Index: runtime/vm/intrinsifier_x64.cc
|
| diff --git a/runtime/vm/intrinsifier_x64.cc b/runtime/vm/intrinsifier_x64.cc
|
| index a034e69d36a4a0faabb46c476d9124478a9e2be0..c0bba4b8b5e9ed779d1aa3a75c065a686160567e 100644
|
| --- a/runtime/vm/intrinsifier_x64.cc
|
| +++ b/runtime/vm/intrinsifier_x64.cc
|
| @@ -72,7 +72,7 @@ void Intrinsifier::GrowableArray_Allocate(Assembler* assembler) {
|
| // Try allocating in new space.
|
| const Class& cls = Class::Handle(
|
| Isolate::Current()->object_store()->growable_object_array_class());
|
| - __ TryAllocate(cls, &fall_through, Assembler::kFarJump, RAX, kNoRegister);
|
| + __ TryAllocate(cls, &fall_through, Assembler::kFarJump, RAX);
|
|
|
| // Store backing array object in growable array object.
|
| __ movq(RCX, Address(RSP, kArrayOffset)); // data argument.
|
| @@ -121,7 +121,7 @@ void Intrinsifier::GrowableArray_add(Assembler* assembler) {
|
| __ StoreIntoObject(RDX,
|
| FieldAddress(RDX, RCX, TIMES_4, Array::data_offset()),
|
| RAX);
|
| - __ LoadObject(RAX, Object::null_object(), PP);
|
| + __ LoadObject(RAX, Object::null_object());
|
| __ ret();
|
| __ Bind(&fall_through);
|
| }
|
| @@ -583,10 +583,10 @@ static void CompareIntegers(Assembler* assembler, Condition true_condition) {
|
| // RAX contains the right argument.
|
| __ cmpq(Address(RSP, + 2 * kWordSize), RAX);
|
| __ j(true_condition, &true_label, Assembler::kNearJump);
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| __ Bind(&true_label);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
| __ Bind(&fall_through);
|
| }
|
| @@ -633,10 +633,10 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) {
|
| __ testq(RAX, Immediate(kSmiTagMask));
|
| __ j(NOT_ZERO, &check_for_mint, Assembler::kNearJump);
|
| // Both arguments are smi, '===' is good enough.
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| __ Bind(&true_label);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
|
|
| // At least one of the arguments was not Smi.
|
| @@ -652,7 +652,7 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) {
|
| __ movq(RAX, Address(RSP, + kArgumentOffset * kWordSize));
|
| __ CompareClassId(RAX, kDoubleCid);
|
| __ j(EQUAL, &fall_through);
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
|
|
| __ Bind(&receiver_not_smi);
|
| @@ -664,7 +664,7 @@ void Intrinsifier::Integer_equalToInteger(Assembler* assembler) {
|
| __ testq(RAX, Immediate(kSmiTagMask));
|
| __ j(NOT_ZERO, &fall_through);
|
| // Smi == Mint -> false.
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| // TODO(srdjan): Implement Mint == Mint comparison.
|
|
|
| @@ -1262,10 +1262,10 @@ static void CompareDoubles(Assembler* assembler, Condition true_condition) {
|
| __ j(true_condition, &is_true, Assembler::kNearJump);
|
| // Fall through false.
|
| __ Bind(&is_false);
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| __ Bind(&is_true);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
| __ Bind(&is_smi);
|
| __ SmiUntag(RAX);
|
| @@ -1321,8 +1321,7 @@ static void DoubleArithmeticOperations(Assembler* assembler, Token::Kind kind) {
|
| __ TryAllocate(double_class,
|
| &fall_through,
|
| Assembler::kFarJump,
|
| - RAX, // Result register.
|
| - kNoRegister); // Pool pointer might not be loaded.
|
| + RAX); // Result register.
|
| __ movsd(FieldAddress(RAX, Double::value_offset()), XMM0);
|
| __ ret();
|
| __ Bind(&fall_through);
|
| @@ -1366,8 +1365,7 @@ void Intrinsifier::Double_mulFromInteger(Assembler* assembler) {
|
| __ TryAllocate(double_class,
|
| &fall_through,
|
| Assembler::kFarJump,
|
| - RAX, // Result register.
|
| - kNoRegister); // Pool pointer might not be loaded.
|
| + RAX); // Result register.
|
| __ movsd(FieldAddress(RAX, Double::value_offset()), XMM0);
|
| __ ret();
|
| __ Bind(&fall_through);
|
| @@ -1388,8 +1386,7 @@ void Intrinsifier::DoubleFromInteger(Assembler* assembler) {
|
| __ TryAllocate(double_class,
|
| &fall_through,
|
| Assembler::kFarJump,
|
| - RAX, // Result register.
|
| - kNoRegister); // Pool pointer might not be loaded.
|
| + RAX); // Result register.
|
| __ movsd(FieldAddress(RAX, Double::value_offset()), XMM0);
|
| __ ret();
|
| __ Bind(&fall_through);
|
| @@ -1402,10 +1399,10 @@ void Intrinsifier::Double_getIsNaN(Assembler* assembler) {
|
| __ movsd(XMM0, FieldAddress(RAX, Double::value_offset()));
|
| __ comisd(XMM0, XMM0);
|
| __ j(PARITY_EVEN, &is_true, Assembler::kNearJump); // NaN -> true;
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| __ Bind(&is_true);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
| }
|
|
|
| @@ -1420,10 +1417,10 @@ void Intrinsifier::Double_getIsNegative(Assembler* assembler) {
|
| __ j(EQUAL, &is_zero, Assembler::kNearJump); // Check for negative zero.
|
| __ j(ABOVE_EQUAL, &is_false, Assembler::kNearJump); // >= 0 -> false.
|
| __ Bind(&is_true);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
| __ Bind(&is_false);
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| __ Bind(&is_zero);
|
| // Check for negative zero (get the sign bit).
|
| @@ -1462,8 +1459,7 @@ void Intrinsifier::MathSqrt(Assembler* assembler) {
|
| __ TryAllocate(double_class,
|
| &fall_through,
|
| Assembler::kFarJump,
|
| - RAX, // Result register.
|
| - kNoRegister); // Pool pointer might not be loaded.
|
| + RAX); // Result register.
|
| __ movsd(FieldAddress(RAX, Double::value_offset()), XMM0);
|
| __ ret();
|
| __ Bind(&is_smi);
|
| @@ -1519,10 +1515,10 @@ void Intrinsifier::ObjectEquals(Assembler* assembler) {
|
| __ movq(RAX, Address(RSP, + kArgumentOffset * kWordSize));
|
| __ cmpq(RAX, Address(RSP, + kReceiverOffset * kWordSize));
|
| __ j(EQUAL, &is_true, Assembler::kNearJump);
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| __ Bind(&is_true);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
| }
|
|
|
| @@ -1534,17 +1530,17 @@ void Intrinsifier::ObjectRuntimeType(Assembler* assembler) {
|
| __ LoadClassIdMayBeSmi(RCX, RAX);
|
|
|
| // RCX: untagged cid of instance (RAX).
|
| - __ LoadClassById(RDI, RCX, PP);
|
| + __ LoadClassById(RDI, RCX);
|
| // RDI: class of instance (RAX).
|
| __ movq(RCX, FieldAddress(RDI, Class::signature_function_offset()));
|
| - __ CompareObject(RCX, Object::null_object(), PP);
|
| + __ CompareObject(RCX, Object::null_object());
|
| __ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
|
|
|
| __ movzxw(RCX, FieldAddress(RDI, Class::num_type_arguments_offset()));
|
| __ cmpq(RCX, Immediate(0));
|
| __ j(NOT_EQUAL, &fall_through, Assembler::kNearJump);
|
| __ movq(RAX, FieldAddress(RDI, Class::canonical_types_offset()));
|
| - __ CompareObject(RAX, Object::null_object(), PP);
|
| + __ CompareObject(RAX, Object::null_object());
|
| __ j(EQUAL, &fall_through, Assembler::kNearJump); // Not yet set.
|
| __ ret();
|
|
|
| @@ -1612,9 +1608,9 @@ void Intrinsifier::StringBaseCharAt(Assembler* assembler) {
|
| const ExternalLabel symbols_label(
|
| reinterpret_cast<uword>(Symbols::PredefinedAddress()));
|
| __ pushq(PP);
|
| - __ LoadPoolPointer(PP);
|
| + __ LoadPoolPointer();
|
| assembler->set_constant_pool_allowed(true);
|
| - __ LoadExternalLabel(RAX, &symbols_label, kNotPatchable, PP);
|
| + __ LoadExternalLabel(RAX, &symbols_label, kNotPatchable);
|
| assembler->set_constant_pool_allowed(false);
|
| __ popq(PP);
|
| __ movq(RAX, Address(RAX,
|
| @@ -1631,9 +1627,9 @@ void Intrinsifier::StringBaseCharAt(Assembler* assembler) {
|
| __ cmpq(RCX, Immediate(Symbols::kNumberOfOneCharCodeSymbols));
|
| __ j(GREATER_EQUAL, &fall_through);
|
| __ pushq(PP);
|
| - __ LoadPoolPointer(PP);
|
| + __ LoadPoolPointer();
|
| assembler->set_constant_pool_allowed(true);
|
| - __ LoadExternalLabel(RAX, &symbols_label, kNotPatchable, PP);
|
| + __ LoadExternalLabel(RAX, &symbols_label, kNotPatchable);
|
| assembler->set_constant_pool_allowed(false);
|
| __ popq(PP);
|
| __ movq(RAX, Address(RAX,
|
| @@ -1653,10 +1649,10 @@ void Intrinsifier::StringBaseIsEmpty(Assembler* assembler) {
|
| __ movq(RAX, FieldAddress(RAX, String::length_offset()));
|
| __ cmpq(RAX, Immediate(Smi::RawValue(0)));
|
| __ j(EQUAL, &is_true, Assembler::kNearJump);
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
| __ Bind(&is_true);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
| }
|
|
|
| @@ -1928,11 +1924,11 @@ static void StringEquality(Assembler* assembler, intptr_t string_cid) {
|
| __ jmp(&loop, Assembler::kNearJump);
|
|
|
| __ Bind(&is_true);
|
| - __ LoadObject(RAX, Bool::True(), PP);
|
| + __ LoadObject(RAX, Bool::True());
|
| __ ret();
|
|
|
| __ Bind(&is_false);
|
| - __ LoadObject(RAX, Bool::False(), PP);
|
| + __ LoadObject(RAX, Bool::False());
|
| __ ret();
|
|
|
| __ Bind(&fall_through);
|
| @@ -1966,7 +1962,7 @@ void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) {
|
| __ movq(RBX, Address(RSP, kRegExpParamOffset));
|
| __ movq(RDI, Address(RSP, kStringParamOffset));
|
| __ LoadClassId(RDI, RDI);
|
| - __ SubImmediate(RDI, Immediate(kOneByteStringCid), PP);
|
| + __ SubImmediate(RDI, Immediate(kOneByteStringCid));
|
| __ movq(RAX, FieldAddress(RBX, RDI, TIMES_8,
|
| JSRegExp::function_offset(kOneByteStringCid)));
|
|
|
| @@ -1974,7 +1970,7 @@ void Intrinsifier::JSRegExp_ExecuteMatch(Assembler* assembler) {
|
| // in RAX, the argument descriptor in R10, and IC-Data in RCX.
|
| static const intptr_t arg_count = RegExpMacroAssembler::kParamCount;
|
| __ LoadObject(R10,
|
| - Array::ZoneHandle(ArgumentsDescriptor::New(arg_count)), PP);
|
| + Array::ZoneHandle(ArgumentsDescriptor::New(arg_count)));
|
| __ xorq(RCX, RCX);
|
|
|
| // Tail-call the function.
|
|
|