diff options
Diffstat (limited to 'deps/v8/src/baseline/s390/baseline-assembler-s390-inl.h')
-rw-r--r-- | deps/v8/src/baseline/s390/baseline-assembler-s390-inl.h | 184 |
1 files changed, 50 insertions, 134 deletions
diff --git a/deps/v8/src/baseline/s390/baseline-assembler-s390-inl.h b/deps/v8/src/baseline/s390/baseline-assembler-s390-inl.h index c04e7734ae..517453c605 100644 --- a/deps/v8/src/baseline/s390/baseline-assembler-s390-inl.h +++ b/deps/v8/src/baseline/s390/baseline-assembler-s390-inl.h @@ -48,92 +48,6 @@ class BaselineAssembler::ScratchRegisterScope { int registers_used_; }; -// TODO(v8:11429,leszeks): Unify condition names in the MacroAssembler. -enum class Condition : uint32_t { - kEqual, - kNotEqual, - - kLessThan, - kGreaterThan, - kLessThanEqual, - kGreaterThanEqual, - - kUnsignedLessThan, - kUnsignedGreaterThan, - kUnsignedLessThanEqual, - kUnsignedGreaterThanEqual, - - kOverflow, - kNoOverflow, - - kZero, - kNotZero -}; - -inline internal::Condition AsMasmCondition(Condition cond) { - static_assert(sizeof(internal::Condition) == sizeof(Condition)); - switch (cond) { - case Condition::kEqual: - return eq; - case Condition::kNotEqual: - return ne; - case Condition::kLessThan: - return lt; - case Condition::kGreaterThan: - return gt; - case Condition::kLessThanEqual: - return le; - case Condition::kGreaterThanEqual: - return ge; - - case Condition::kUnsignedLessThan: - return lt; - case Condition::kUnsignedGreaterThan: - return gt; - case Condition::kUnsignedLessThanEqual: - return le; - case Condition::kUnsignedGreaterThanEqual: - return ge; - - case Condition::kOverflow: - return overflow; - case Condition::kNoOverflow: - return nooverflow; - - case Condition::kZero: - return eq; - case Condition::kNotZero: - return ne; - default: - UNREACHABLE(); - } -} - -inline bool IsSignedCondition(Condition cond) { - switch (cond) { - case Condition::kEqual: - case Condition::kNotEqual: - case Condition::kLessThan: - case Condition::kGreaterThan: - case Condition::kLessThanEqual: - case Condition::kGreaterThanEqual: - case Condition::kOverflow: - case Condition::kNoOverflow: - case Condition::kZero: - case Condition::kNotZero: - return true; - - case Condition::kUnsignedLessThan: - case Condition::kUnsignedGreaterThan: - case Condition::kUnsignedLessThanEqual: - case Condition::kUnsignedGreaterThanEqual: - return false; - - default: - UNREACHABLE(); - } -} - #define __ assm-> // s390x helper template <int width = 64> @@ -142,19 +56,19 @@ static void JumpIfHelper(MacroAssembler* assm, Condition cc, Register lhs, static_assert(width == 64 || width == 32, "only support 64 and 32 bit compare"); if (width == 64) { - if (IsSignedCondition(cc)) { + if (is_signed(cc)) { __ CmpS64(lhs, rhs); } else { __ CmpU64(lhs, rhs); } } else { - if (IsSignedCondition(cc)) { + if (is_signed(cc)) { __ CmpS32(lhs, rhs); } else { __ CmpU32(lhs, rhs); } } - __ b(AsMasmCondition(cc), target); + __ b(to_condition(cc), target); } #undef __ @@ -220,18 +134,27 @@ void BaselineAssembler::TestAndBranch(Register value, int mask, Condition cc, Label* target, Label::Distance) { ASM_CODE_COMMENT(masm_); __ AndP(r0, value, Operand(mask)); - __ b(AsMasmCondition(cc), target); + __ b(to_condition(cc), target); } void BaselineAssembler::JumpIf(Condition cc, Register lhs, const Operand& rhs, Label* target, Label::Distance) { ASM_CODE_COMMENT(masm_); - if (IsSignedCondition(cc)) { + if (is_signed(cc)) { __ CmpS64(lhs, rhs); } else { __ CmpU64(lhs, rhs); } - __ b(AsMasmCondition(cc), target); + __ b(to_condition(cc), target); +} + +void BaselineAssembler::JumpIfObjectTypeFast(Condition cc, Register object, + InstanceType instance_type, + Label* target, + Label::Distance distance) { + ScratchRegisterScope temps(this); + Register scratch = temps.AcquireScratch(); + JumpIfObjectType(cc, object, instance_type, scratch, target, distance); } void BaselineAssembler::JumpIfObjectType(Condition cc, Register object, @@ -287,7 +210,11 @@ void BaselineAssembler::JumpIfSmi(Condition cc, Register lhs, Register rhs, JumpIfHelper(masm_, cc, lhs, rhs, target); } +#ifdef V8_TARGET_BIG_ENDIAN constexpr static int stack_bias = 4; +#else +constexpr static int stack_bias = 0; +#endif void BaselineAssembler::JumpIfTagged(Condition cc, Register value, MemOperand operand, Label* target, @@ -297,9 +224,9 @@ void BaselineAssembler::JumpIfTagged(Condition cc, Register value, if (COMPRESS_POINTERS_BOOL) { MemOperand addr = MemOperand(operand.rx(), operand.rb(), operand.offset() + stack_bias); - __ LoadTaggedPointerField(ip, addr, r0); + __ LoadTaggedField(ip, addr, r0); } else { - __ LoadTaggedPointerField(ip, operand, r0); + __ LoadTaggedField(ip, operand, r0); } JumpIfHelper<COMPRESS_POINTERS_BOOL ? 32 : 64>(masm_, cc, value, ip, target); } @@ -312,9 +239,9 @@ void BaselineAssembler::JumpIfTagged(Condition cc, MemOperand operand, if (COMPRESS_POINTERS_BOOL) { MemOperand addr = MemOperand(operand.rx(), operand.rb(), operand.offset() + stack_bias); - __ LoadTaggedPointerField(ip, addr, r0); + __ LoadTaggedField(ip, addr, r0); } else { - __ LoadTaggedPointerField(ip, operand, r0); + __ LoadTaggedField(ip, operand, r0); } JumpIfHelper<COMPRESS_POINTERS_BOOL ? 32 : 64>(masm_, cc, ip, value, target); } @@ -473,10 +400,10 @@ void BaselineAssembler::Pop(T... registers) { detail::PopAllHelper<T...>::Pop(this, registers...); } -void BaselineAssembler::LoadTaggedPointerField(Register output, Register source, - int offset) { +void BaselineAssembler::LoadTaggedField(Register output, Register source, + int offset) { ASM_CODE_COMMENT(masm_); - __ LoadTaggedPointerField(output, FieldMemOperand(source, offset), r0); + __ LoadTaggedField(output, FieldMemOperand(source, offset), r0); } void BaselineAssembler::LoadTaggedSignedField(Register output, Register source, @@ -492,12 +419,6 @@ void BaselineAssembler::LoadTaggedSignedFieldAndUntag(Register output, SmiUntag(output); } -void BaselineAssembler::LoadTaggedAnyField(Register output, Register source, - int offset) { - ASM_CODE_COMMENT(masm_); - __ LoadAnyTaggedField(output, FieldMemOperand(source, offset), r0); -} - void BaselineAssembler::LoadWord16FieldZeroExtend(Register output, Register source, int offset) { ASM_CODE_COMMENT(masm_); @@ -542,15 +463,15 @@ void BaselineAssembler::TryLoadOptimizedOsrCode(Register scratch_and_result, Label* on_result, Label::Distance) { Label fallthrough; - LoadTaggedPointerField(scratch_and_result, feedback_vector, - FeedbackVector::OffsetOfElementAt(slot.ToInt())); + LoadTaggedField(scratch_and_result, feedback_vector, + FeedbackVector::OffsetOfElementAt(slot.ToInt())); __ LoadWeakValue(scratch_and_result, scratch_and_result, &fallthrough); // Is it marked_for_deoptimization? If yes, clear the slot. { ScratchRegisterScope temps(this); Register scratch = temps.AcquireScratch(); - __ TestCodeTIsMarkedForDeoptimization(scratch_and_result, scratch); + __ TestCodeIsMarkedForDeoptimization(scratch_and_result, scratch); __ beq(on_result); __ mov(scratch, __ ClearedValue()); StoreTaggedFieldNoWriteBarrier( @@ -568,8 +489,8 @@ void BaselineAssembler::AddToInterruptBudgetAndJumpIfNotExceeded( ScratchRegisterScope scratch_scope(this); Register feedback_cell = scratch_scope.AcquireScratch(); LoadFunction(feedback_cell); - LoadTaggedPointerField(feedback_cell, feedback_cell, - JSFunction::kFeedbackCellOffset); + LoadTaggedField(feedback_cell, feedback_cell, + JSFunction::kFeedbackCellOffset); Register interrupt_budget = scratch_scope.AcquireScratch(); __ LoadU32( @@ -593,8 +514,8 @@ void BaselineAssembler::AddToInterruptBudgetAndJumpIfNotExceeded( ScratchRegisterScope scratch_scope(this); Register feedback_cell = scratch_scope.AcquireScratch(); LoadFunction(feedback_cell); - LoadTaggedPointerField(feedback_cell, feedback_cell, - JSFunction::kFeedbackCellOffset); + LoadTaggedField(feedback_cell, feedback_cell, + JSFunction::kFeedbackCellOffset); Register interrupt_budget = scratch_scope.AcquireScratch(); __ LoadU32( @@ -611,16 +532,16 @@ void BaselineAssembler::AddToInterruptBudgetAndJumpIfNotExceeded( void BaselineAssembler::LdaContextSlot(Register context, uint32_t index, uint32_t depth) { for (; depth > 0; --depth) { - LoadTaggedPointerField(context, context, Context::kPreviousOffset); + LoadTaggedField(context, context, Context::kPreviousOffset); } - LoadTaggedAnyField(kInterpreterAccumulatorRegister, context, - Context::OffsetOfElementAt(index)); + LoadTaggedField(kInterpreterAccumulatorRegister, context, + Context::OffsetOfElementAt(index)); } void BaselineAssembler::StaContextSlot(Register context, Register value, uint32_t index, uint32_t depth) { for (; depth > 0; --depth) { - LoadTaggedPointerField(context, context, Context::kPreviousOffset); + LoadTaggedField(context, context, Context::kPreviousOffset); } StoreTaggedFieldWithWriteBarrier(context, Context::OffsetOfElementAt(index), value); @@ -629,33 +550,29 @@ void BaselineAssembler::StaContextSlot(Register context, Register value, void BaselineAssembler::LdaModuleVariable(Register context, int cell_index, uint32_t depth) { for (; depth > 0; --depth) { - LoadTaggedPointerField(context, context, Context::kPreviousOffset); + LoadTaggedField(context, context, Context::kPreviousOffset); } - LoadTaggedPointerField(context, context, Context::kExtensionOffset); + LoadTaggedField(context, context, Context::kExtensionOffset); if (cell_index > 0) { - LoadTaggedPointerField(context, context, - SourceTextModule::kRegularExportsOffset); + LoadTaggedField(context, context, SourceTextModule::kRegularExportsOffset); // The actual array index is (cell_index - 1). cell_index -= 1; } else { - LoadTaggedPointerField(context, context, - SourceTextModule::kRegularImportsOffset); + LoadTaggedField(context, context, SourceTextModule::kRegularImportsOffset); // The actual array index is (-cell_index - 1). cell_index = -cell_index - 1; } LoadFixedArrayElement(context, context, cell_index); - LoadTaggedAnyField(kInterpreterAccumulatorRegister, context, - Cell::kValueOffset); + LoadTaggedField(kInterpreterAccumulatorRegister, context, Cell::kValueOffset); } void BaselineAssembler::StaModuleVariable(Register context, Register value, int cell_index, uint32_t depth) { for (; depth > 0; --depth) { - LoadTaggedPointerField(context, context, Context::kPreviousOffset); + LoadTaggedField(context, context, Context::kPreviousOffset); } - LoadTaggedPointerField(context, context, Context::kExtensionOffset); - LoadTaggedPointerField(context, context, - SourceTextModule::kRegularExportsOffset); + LoadTaggedField(context, context, Context::kExtensionOffset); + LoadTaggedField(context, context, SourceTextModule::kRegularExportsOffset); // The actual array index is (cell_index - 1). cell_index -= 1; @@ -687,8 +604,7 @@ void BaselineAssembler::Switch(Register reg, int case_value_base, // Mostly copied from code-generator-arm.cc ScratchRegisterScope scope(this); - JumpIf(Condition::kUnsignedGreaterThanEqual, reg, Operand(num_labels), - &fallthrough); + JumpIf(kUnsignedGreaterThanEqual, reg, Operand(num_labels), &fallthrough); // Ensure to emit the constant pool first if necessary. int entry_size_log2 = 3; __ ShiftLeftU32(reg, reg, Operand(entry_size_log2)); @@ -745,8 +661,8 @@ void BaselineAssembler::EmitReturn(MacroAssembler* masm) { // If actual is bigger than formal, then we should use it to free up the stack // arguments. Label corrected_args_count; - JumpIfHelper(__ masm(), Condition::kGreaterThanEqual, params_size, - actual_params_size, &corrected_args_count); + JumpIfHelper(__ masm(), kGreaterThanEqual, params_size, actual_params_size, + &corrected_args_count); __ masm()->mov(params_size, actual_params_size); __ Bind(&corrected_args_count); @@ -754,8 +670,8 @@ void BaselineAssembler::EmitReturn(MacroAssembler* masm) { __ masm()->LeaveFrame(StackFrame::BASELINE); // Drop receiver + arguments. - __ masm()->DropArguments(params_size, TurboAssembler::kCountIsInteger, - TurboAssembler::kCountIncludesReceiver); + __ masm()->DropArguments(params_size, MacroAssembler::kCountIsInteger, + MacroAssembler::kCountIncludesReceiver); __ masm()->Ret(); } |