| Index: runtime/vm/flow_graph_compiler_arm.cc
|
| ===================================================================
|
| --- runtime/vm/flow_graph_compiler_arm.cc (revision 36715)
|
| +++ runtime/vm/flow_graph_compiler_arm.cc (working copy)
|
| @@ -251,7 +251,7 @@
|
| const bool smi_is_ok = int_type.IsSubtypeOf(type, &malformed_error);
|
| // Malformed type should have been handled at graph construction time.
|
| ASSERT(smi_is_ok || malformed_error.IsNull());
|
| - __ tst(kInstanceReg, ShifterOperand(kSmiTagMask));
|
| + __ tst(kInstanceReg, Operand(kSmiTagMask));
|
| if (smi_is_ok) {
|
| __ b(is_instance_lbl, EQ);
|
| } else {
|
| @@ -337,7 +337,7 @@
|
| ASSERT(type_class.NumTypeArguments() == 0);
|
|
|
| const Register kInstanceReg = R0;
|
| - __ tst(kInstanceReg, ShifterOperand(kSmiTagMask));
|
| + __ tst(kInstanceReg, Operand(kSmiTagMask));
|
| // If instance is Smi, check directly.
|
| const Class& smi_class = Class::Handle(Smi::Class());
|
| if (smi_class.IsSubtypeOf(TypeArguments::Handle(),
|
| @@ -447,7 +447,7 @@
|
|
|
| // For Smi check quickly against int and num interfaces.
|
| Label not_smi;
|
| - __ tst(R0, ShifterOperand(kSmiTagMask)); // Value is Smi?
|
| + __ tst(R0, Operand(kSmiTagMask)); // Value is Smi?
|
| __ b(¬_smi, NE);
|
| __ CompareObject(R2, Type::ZoneHandle(Type::IntType()));
|
| __ b(is_instance_lbl, EQ);
|
| @@ -477,7 +477,7 @@
|
| if (type.IsType()) {
|
| const Register kInstanceReg = R0;
|
| const Register kTypeArgumentsReg = R1;
|
| - __ tst(kInstanceReg, ShifterOperand(kSmiTagMask)); // Is instance Smi?
|
| + __ tst(kInstanceReg, Operand(kSmiTagMask)); // Is instance Smi?
|
| __ b(is_not_instance_lbl, EQ);
|
| __ ldr(kTypeArgumentsReg, Address(SP, 0)); // Instantiator type args.
|
| // Uninstantiated type class is known at compile time, but the type
|
| @@ -608,7 +608,7 @@
|
| if (negate_result) {
|
| __ Pop(R1);
|
| __ LoadObject(R0, Bool::True());
|
| - __ cmp(R1, ShifterOperand(R0));
|
| + __ cmp(R1, Operand(R0));
|
| __ b(&done, NE);
|
| __ LoadObject(R0, Bool::False());
|
| } else {
|
| @@ -760,14 +760,14 @@
|
| // Since R7 and R8 are Smi, use LSL 1 instead of LSL 2.
|
| // Let R7 point to the last passed positional argument, i.e. to
|
| // fp[kParamEndSlotFromFp + num_args - (num_pos_args - 1)].
|
| - __ sub(R7, R7, ShifterOperand(R8));
|
| - __ add(R7, FP, ShifterOperand(R7, LSL, 1));
|
| - __ add(R7, R7, ShifterOperand((kParamEndSlotFromFp + 1) * kWordSize));
|
| + __ sub(R7, R7, Operand(R8));
|
| + __ add(R7, FP, Operand(R7, LSL, 1));
|
| + __ add(R7, R7, Operand((kParamEndSlotFromFp + 1) * kWordSize));
|
|
|
| // Let R6 point to the last copied positional argument, i.e. to
|
| // fp[kFirstLocalSlotFromFp - (num_pos_args - 1)].
|
| __ AddImmediate(R6, FP, (kFirstLocalSlotFromFp + 1) * kWordSize);
|
| - __ sub(R6, R6, ShifterOperand(R8, LSL, 1)); // R8 is a Smi.
|
| + __ sub(R6, R6, Operand(R8, LSL, 1)); // R8 is a Smi.
|
| __ SmiUntag(R8);
|
| Label loop, loop_condition;
|
| __ b(&loop_condition);
|
| @@ -780,7 +780,7 @@
|
| __ ldr(IP, argument_addr);
|
| __ str(IP, copy_addr);
|
| __ Bind(&loop_condition);
|
| - __ subs(R8, R8, ShifterOperand(1));
|
| + __ subs(R8, R8, Operand(1));
|
| __ b(&loop, PL);
|
|
|
| // Copy or initialize optional named arguments.
|
| @@ -816,10 +816,10 @@
|
| __ SmiUntag(R8);
|
| // Let R7 point to the first passed argument, i.e. to
|
| // fp[kParamEndSlotFromFp + num_args - 0]; num_args (R7) is Smi.
|
| - __ add(R7, FP, ShifterOperand(R7, LSL, 1));
|
| + __ add(R7, FP, Operand(R7, LSL, 1));
|
| __ AddImmediate(R7, R7, kParamEndSlotFromFp * kWordSize);
|
| // Let R6 point to the entry of the first named argument.
|
| - __ add(R6, R4, ShifterOperand(
|
| + __ add(R6, R4, Operand(
|
| ArgumentsDescriptor::first_named_entry_offset() - kHeapObjectTag));
|
| for (int i = 0; i < num_opt_named_params; i++) {
|
| Label load_default_value, assign_optional_parameter;
|
| @@ -835,8 +835,8 @@
|
| __ ldr(R5, Address(R6, ArgumentsDescriptor::position_offset()));
|
| // R5 is arg_pos as Smi.
|
| // Point to next named entry.
|
| - __ add(R6, R6, ShifterOperand(ArgumentsDescriptor::named_entry_size()));
|
| - __ rsb(R5, R5, ShifterOperand(0));
|
| + __ add(R6, R6, Operand(ArgumentsDescriptor::named_entry_size()));
|
| + __ rsb(R5, R5, Operand(0));
|
| Address argument_addr(R7, R5, LSL, 1); // R5 is a negative Smi.
|
| __ ldr(R5, argument_addr);
|
| __ b(&assign_optional_parameter);
|
| @@ -894,7 +894,7 @@
|
| __ ldr(R7, FieldAddress(R4, ArgumentsDescriptor::count_offset()));
|
| __ SmiUntag(R7);
|
| // Check that R8 equals R7, i.e. no named arguments passed.
|
| - __ cmp(R8, ShifterOperand(R7));
|
| + __ cmp(R8, Operand(R7));
|
| __ b(&all_arguments_processed, EQ);
|
| }
|
| }
|
| @@ -925,7 +925,7 @@
|
| // R4 : arguments descriptor array.
|
| __ ldr(R8, FieldAddress(R4, ArgumentsDescriptor::count_offset()));
|
| __ SmiUntag(R8);
|
| - __ add(R7, FP, ShifterOperand((kParamEndSlotFromFp + 1) * kWordSize));
|
| + __ add(R7, FP, Operand((kParamEndSlotFromFp + 1) * kWordSize));
|
| const Address original_argument_addr(R7, R8, LSL, 2);
|
| __ LoadImmediate(IP, reinterpret_cast<intptr_t>(Object::null()));
|
| Label null_args_loop, null_args_loop_condition;
|
| @@ -933,7 +933,7 @@
|
| __ Bind(&null_args_loop);
|
| __ str(IP, original_argument_addr);
|
| __ Bind(&null_args_loop_condition);
|
| - __ subs(R8, R8, ShifterOperand(1));
|
| + __ subs(R8, R8, Operand(1));
|
| __ b(&null_args_loop, PL);
|
| }
|
|
|
| @@ -972,13 +972,13 @@
|
|
|
| // The pool pointer is not setup before entering the Dart frame.
|
| // Preserve PP of caller.
|
| - __ mov(R7, ShifterOperand(PP));
|
| + __ mov(R7, Operand(PP));
|
| // Temporarily setup pool pointer for this dart function.
|
| __ LoadPoolPointer();
|
| // Load function object from object pool.
|
| __ LoadObject(function_reg, function); // Uses PP.
|
| // Restore PP of caller.
|
| - __ mov(PP, ShifterOperand(R7));
|
| + __ mov(PP, Operand(R7));
|
|
|
| // Patch point is after the eventually inlined function object.
|
| AddCurrentDescriptor(PcDescriptors::kEntryPatch,
|
| @@ -992,7 +992,7 @@
|
| // IC stubs, but not at the entry of the function.
|
| threshold = FLAG_reoptimization_counter_threshold;
|
| } else {
|
| - __ add(R7, R7, ShifterOperand(1));
|
| + __ add(R7, R7, Operand(1));
|
| __ str(R7, FieldAddress(function_reg,
|
| Function::usage_counter_offset()));
|
| }
|
| @@ -1059,7 +1059,7 @@
|
| __ b(&wrong_num_arguments, NE);
|
| __ ldr(R1, FieldAddress(R4,
|
| ArgumentsDescriptor::positional_count_offset()));
|
| - __ cmp(R0, ShifterOperand(R1));
|
| + __ cmp(R0, Operand(R1));
|
| __ b(&correct_num_arguments, EQ);
|
| __ Bind(&wrong_num_arguments);
|
| if (function.IsClosureFunction()) {
|
| @@ -1183,7 +1183,7 @@
|
| __ Comment("Edge counter");
|
| __ LoadObject(R0, counter);
|
| __ ldr(IP, FieldAddress(R0, Array::element_offset(0)));
|
| - __ add(IP, IP, ShifterOperand(Smi::RawValue(1)));
|
| + __ add(IP, IP, Operand(Smi::RawValue(1)));
|
| __ str(IP, FieldAddress(R0, Array::element_offset(0)));
|
| }
|
|
|
| @@ -1246,9 +1246,9 @@
|
| MegamorphicCache::ZoneHandle(table->Lookup(name, arguments_descriptor));
|
| Label not_smi, load_cache;
|
| __ LoadFromOffset(kWord, R0, SP, (argument_count - 1) * kWordSize);
|
| - __ tst(R0, ShifterOperand(kSmiTagMask));
|
| + __ tst(R0, Operand(kSmiTagMask));
|
| __ b(¬_smi, NE);
|
| - __ mov(R0, ShifterOperand(Smi::RawValue(kSmiCid)));
|
| + __ mov(R0, Operand(Smi::RawValue(kSmiCid)));
|
| __ b(&load_cache);
|
|
|
| __ Bind(¬_smi);
|
| @@ -1262,24 +1262,24 @@
|
| __ ldr(R1, FieldAddress(R1, MegamorphicCache::mask_offset()));
|
| // R2: cache buckets array.
|
| // R1: mask.
|
| - __ mov(R3, ShifterOperand(R0));
|
| + __ mov(R3, Operand(R0));
|
|
|
| Label loop, update, call_target_function;
|
| __ b(&loop);
|
|
|
| __ Bind(&update);
|
| - __ add(R3, R3, ShifterOperand(Smi::RawValue(1)));
|
| + __ add(R3, R3, Operand(Smi::RawValue(1)));
|
| __ Bind(&loop);
|
| - __ and_(R3, R3, ShifterOperand(R1));
|
| + __ and_(R3, R3, Operand(R1));
|
| const intptr_t base = Array::data_offset();
|
| // R3 is smi tagged, but table entries are two words, so LSL 2.
|
| - __ add(IP, R2, ShifterOperand(R3, LSL, 2));
|
| + __ add(IP, R2, Operand(R3, LSL, 2));
|
| __ ldr(R4, FieldAddress(IP, base));
|
|
|
| ASSERT(kIllegalCid == 0);
|
| - __ tst(R4, ShifterOperand(R4));
|
| + __ tst(R4, Operand(R4));
|
| __ b(&call_target_function, EQ);
|
| - __ cmp(R4, ShifterOperand(R0));
|
| + __ cmp(R4, Operand(R0));
|
| __ b(&update, NE);
|
|
|
| __ Bind(&call_target_function);
|
| @@ -1287,7 +1287,7 @@
|
| // proper target for the given name and arguments descriptor. If the
|
| // illegal class id was found, the target is a cache miss handler that can
|
| // be invoked as a normal Dart function.
|
| - __ add(IP, R2, ShifterOperand(R3, LSL, 2));
|
| + __ add(IP, R2, Operand(R3, LSL, 2));
|
| __ ldr(R0, FieldAddress(IP, base + kWordSize));
|
| __ ldr(R1, FieldAddress(R0, Function::code_offset()));
|
| __ ldr(R1, FieldAddress(R1, Code::instructions_offset()));
|
| @@ -1415,7 +1415,7 @@
|
| __ Pop(right);
|
| __ Pop(left);
|
| } else {
|
| - __ cmp(left, ShifterOperand(right));
|
| + __ cmp(left, Operand(right));
|
| }
|
| }
|
|
|
| @@ -1549,7 +1549,7 @@
|
|
|
| if (source.IsRegister()) {
|
| if (destination.IsRegister()) {
|
| - __ mov(destination.reg(), ShifterOperand(source.reg()));
|
| + __ mov(destination.reg(), Operand(source.reg()));
|
| } else {
|
| ASSERT(destination.IsStackSlot());
|
| const intptr_t dest_offset = destination.ToStackSlotOffset();
|
| @@ -1649,9 +1649,9 @@
|
| if (source.IsRegister() && destination.IsRegister()) {
|
| ASSERT(source.reg() != IP);
|
| ASSERT(destination.reg() != IP);
|
| - __ mov(IP, ShifterOperand(source.reg()));
|
| - __ mov(source.reg(), ShifterOperand(destination.reg()));
|
| - __ mov(destination.reg(), ShifterOperand(IP));
|
| + __ mov(IP, Operand(source.reg()));
|
| + __ mov(source.reg(), Operand(destination.reg()));
|
| + __ mov(destination.reg(), Operand(IP));
|
| } else if (source.IsRegister() && destination.IsStackSlot()) {
|
| Exchange(source.reg(), destination.ToStackSlotOffset());
|
| } else if (source.IsStackSlot() && destination.IsRegister()) {
|
| @@ -1747,7 +1747,7 @@
|
|
|
|
|
| void ParallelMoveResolver::Exchange(Register reg, intptr_t stack_offset) {
|
| - __ mov(TMP, ShifterOperand(reg));
|
| + __ mov(TMP, Operand(reg));
|
| __ LoadFromOffset(kWord, reg, FP, stack_offset);
|
| __ StoreToOffset(kWord, TMP, FP, stack_offset);
|
| }
|
|
|