diff options
Diffstat (limited to 'deps/v8/src/codegen/s390')
-rw-r--r-- | deps/v8/src/codegen/s390/assembler-s390-inl.h | 39 | ||||
-rw-r--r-- | deps/v8/src/codegen/s390/assembler-s390.cc | 9 | ||||
-rw-r--r-- | deps/v8/src/codegen/s390/constants-s390.h | 2 | ||||
-rw-r--r-- | deps/v8/src/codegen/s390/macro-assembler-s390.cc | 29 | ||||
-rw-r--r-- | deps/v8/src/codegen/s390/macro-assembler-s390.h | 8 |
5 files changed, 47 insertions, 40 deletions
diff --git a/deps/v8/src/codegen/s390/assembler-s390-inl.h b/deps/v8/src/codegen/s390/assembler-s390-inl.h index 3a63c5abbc..91f18727cd 100644 --- a/deps/v8/src/codegen/s390/assembler-s390-inl.h +++ b/deps/v8/src/codegen/s390/assembler-s390-inl.h @@ -91,7 +91,7 @@ Address RelocInfo::target_internal_reference_address() { Address RelocInfo::target_address() { DCHECK(IsRelativeCodeTarget(rmode_) || IsCodeTarget(rmode_) || - IsRuntimeEntry(rmode_) || IsWasmCall(rmode_)); + IsWasmCall(rmode_)); return Assembler::target_address_at(pc_, constant_pool_); } @@ -141,10 +141,8 @@ Handle<Object> Assembler::code_target_object_handle_at(Address pc) { HeapObject RelocInfo::target_object(PtrComprCageBase cage_base) { DCHECK(IsCodeTarget(rmode_) || IsEmbeddedObjectMode(rmode_)); - if (IsDataEmbeddedObject(rmode_)) { - return HeapObject::cast(Object(ReadUnalignedValue<Address>(pc_))); - } else if (IsCompressedEmbeddedObject(rmode_)) { - return HeapObject::cast(Object(DecompressTaggedAny( + if (IsCompressedEmbeddedObject(rmode_)) { + return HeapObject::cast(Object(V8HeapCompressionScheme::DecompressTaggedAny( cage_base, Assembler::target_compressed_address_at(pc_, constant_pool_)))); } else { @@ -161,9 +159,7 @@ Handle<HeapObject> Assembler::compressed_embedded_object_handle_at( Handle<HeapObject> RelocInfo::target_object_handle(Assembler* origin) { DCHECK(IsRelativeCodeTarget(rmode_) || IsCodeTarget(rmode_) || IsEmbeddedObjectMode(rmode_)); - if (IsDataEmbeddedObject(rmode_)) { - return Handle<HeapObject>::cast(ReadUnalignedValue<Handle<Object>>(pc_)); - } else if (IsCodeTarget(rmode_) || IsRelativeCodeTarget(rmode_)) { + if (IsCodeTarget(rmode_) || IsRelativeCodeTarget(rmode_)) { return Handle<HeapObject>::cast(origin->code_target_object_handle_at(pc_)); } else { if (IsCompressedEmbeddedObject(rmode_)) { @@ -178,12 +174,11 @@ void RelocInfo::set_target_object(Heap* heap, HeapObject target, WriteBarrierMode write_barrier_mode, ICacheFlushMode icache_flush_mode) { DCHECK(IsCodeTarget(rmode_) || IsEmbeddedObjectMode(rmode_)); - if (IsDataEmbeddedObject(rmode_)) { - WriteUnalignedValue(pc_, target.ptr()); - // No need to flush icache since no instructions were changed. - } else if (IsCompressedEmbeddedObject(rmode_)) { + if (IsCompressedEmbeddedObject(rmode_)) { Assembler::set_target_compressed_address_at( - pc_, constant_pool_, CompressTagged(target.ptr()), icache_flush_mode); + pc_, constant_pool_, + V8HeapCompressionScheme::CompressTagged(target.ptr()), + icache_flush_mode); } else { DCHECK(IsFullEmbeddedObject(rmode_)); Assembler::set_target_address_at(pc_, constant_pool_, target.ptr(), @@ -208,29 +203,15 @@ void RelocInfo::set_target_external_reference( Builtin RelocInfo::target_builtin_at(Assembler* origin) { UNREACHABLE(); } -Address RelocInfo::target_runtime_entry(Assembler* origin) { - DCHECK(IsRuntimeEntry(rmode_)); - return target_address(); -} - Address RelocInfo::target_off_heap_target() { DCHECK(IsOffHeapTarget(rmode_)); return Assembler::target_address_at(pc_, constant_pool_); } -void RelocInfo::set_target_runtime_entry(Address target, - WriteBarrierMode write_barrier_mode, - ICacheFlushMode icache_flush_mode) { - DCHECK(IsRuntimeEntry(rmode_)); - if (target_address() != target) - set_target_address(target, write_barrier_mode, icache_flush_mode); -} - void RelocInfo::WipeOut() { DCHECK(IsEmbeddedObjectMode(rmode_) || IsCodeTarget(rmode_) || - IsRuntimeEntry(rmode_) || IsExternalReference(rmode_) || - IsInternalReference(rmode_) || IsInternalReferenceEncoded(rmode_) || - IsOffHeapTarget(rmode_)); + IsExternalReference(rmode_) || IsInternalReference(rmode_) || + IsInternalReferenceEncoded(rmode_) || IsOffHeapTarget(rmode_)); if (IsInternalReference(rmode_)) { // Jump table entry Memory<Address>(pc_) = kNullAddress; diff --git a/deps/v8/src/codegen/s390/assembler-s390.cc b/deps/v8/src/codegen/s390/assembler-s390.cc index 3f5811c0d4..0b0bf2bc43 100644 --- a/deps/v8/src/codegen/s390/assembler-s390.cc +++ b/deps/v8/src/codegen/s390/assembler-s390.cc @@ -782,8 +782,7 @@ void Assembler::db(uint8_t data) { void Assembler::dd(uint32_t data, RelocInfo::Mode rmode) { CheckBuffer(); if (!RelocInfo::IsNoInfo(rmode)) { - DCHECK(RelocInfo::IsDataEmbeddedObject(rmode) || - RelocInfo::IsLiteralConstant(rmode)); + DCHECK(RelocInfo::IsLiteralConstant(rmode)); RecordRelocInfo(rmode); } *reinterpret_cast<uint32_t*>(pc_) = data; @@ -793,8 +792,7 @@ void Assembler::dd(uint32_t data, RelocInfo::Mode rmode) { void Assembler::dq(uint64_t value, RelocInfo::Mode rmode) { CheckBuffer(); if (!RelocInfo::IsNoInfo(rmode)) { - DCHECK(RelocInfo::IsDataEmbeddedObject(rmode) || - RelocInfo::IsLiteralConstant(rmode)); + DCHECK(RelocInfo::IsLiteralConstant(rmode)); RecordRelocInfo(rmode); } *reinterpret_cast<uint64_t*>(pc_) = value; @@ -804,8 +802,7 @@ void Assembler::dq(uint64_t value, RelocInfo::Mode rmode) { void Assembler::dp(uintptr_t data, RelocInfo::Mode rmode) { CheckBuffer(); if (!RelocInfo::IsNoInfo(rmode)) { - DCHECK(RelocInfo::IsDataEmbeddedObject(rmode) || - RelocInfo::IsLiteralConstant(rmode)); + DCHECK(RelocInfo::IsLiteralConstant(rmode)); RecordRelocInfo(rmode); } *reinterpret_cast<uintptr_t*>(pc_) = data; diff --git a/deps/v8/src/codegen/s390/constants-s390.h b/deps/v8/src/codegen/s390/constants-s390.h index 0e7310d2a7..edf4eba214 100644 --- a/deps/v8/src/codegen/s390/constants-s390.h +++ b/deps/v8/src/codegen/s390/constants-s390.h @@ -270,6 +270,7 @@ using SixByteInstr = uint64_t; V(xgrk, XGRK, 0xB9E7) /* type = RRF_A EXCLUSIVE OR (64) */ \ V(agrk, AGRK, 0xB9E8) /* type = RRF_A ADD (64) */ \ V(sgrk, SGRK, 0xB9E9) /* type = RRF_A SUBTRACT (64) */ \ + V(mgrk, MGRK, 0xB9EC) /* type = RRF_A MULTIPLY (64->128) */ \ V(algrk, ALGRK, 0xB9EA) /* type = RRF_A ADD LOGICAL (64) */ \ V(slgrk, SLGRK, 0xB9EB) /* type = RRF_A SUBTRACT LOGICAL (64) */ \ V(nrk, NRK, 0xB9F4) /* type = RRF_A AND (32) */ \ @@ -874,6 +875,7 @@ using SixByteInstr = uint64_t; V(ay, AY, 0xE35A) /* type = RXY_A ADD (32) */ \ V(sy, SY, 0xE35B) /* type = RXY_A SUBTRACT (32) */ \ V(mfy, MFY, 0xE35C) /* type = RXY_A MULTIPLY (64<-32) */ \ + V(mg, MG, 0xE384) /* type = RXY_A MULTIPLY (128<-64) */ \ V(aly, ALY, 0xE35E) /* type = RXY_A ADD LOGICAL (32) */ \ V(sly, SLY, 0xE35F) /* type = RXY_A SUBTRACT LOGICAL (32) */ \ V(sthy, STHY, 0xE370) /* type = RXY_A STORE HALFWORD (16) */ \ diff --git a/deps/v8/src/codegen/s390/macro-assembler-s390.cc b/deps/v8/src/codegen/s390/macro-assembler-s390.cc index 95d1246455..48758093e2 100644 --- a/deps/v8/src/codegen/s390/macro-assembler-s390.cc +++ b/deps/v8/src/codegen/s390/macro-assembler-s390.cc @@ -1165,12 +1165,12 @@ void TurboAssembler::PushStandardFrame(Register function_reg) { } void TurboAssembler::RestoreFrameStateForTailCall() { - // if (v8_flags.enable_embedded_constant_pool) { + // if (V8_EMBEDDED_CONSTANT_POOL_BOOL) { // LoadU64(kConstantPoolRegister, // MemOperand(fp, StandardFrameConstants::kConstantPoolOffset)); // set_constant_pool_available(false); // } - DCHECK(!v8_flags.enable_embedded_constant_pool); + DCHECK(!V8_EMBEDDED_CONSTANT_POOL_BOOL); LoadU64(r14, MemOperand(fp, StandardFrameConstants::kCallerPCOffset)); LoadU64(fp, MemOperand(fp, StandardFrameConstants::kCallerFPOffset)); } @@ -2146,7 +2146,7 @@ void MacroAssembler::LoadFeedbackVectorFlagsAndJumpIfNeedsProcessing( b(Condition(7), flags_need_processing); } -void MacroAssembler::MaybeOptimizeCodeOrTailCallOptimizedCodeSlot( +void MacroAssembler::OptimizeCodeOrTailCallOptimizedCodeSlot( Register flags, Register feedback_vector) { DCHECK(!AreAliased(flags, feedback_vector)); Label maybe_has_optimized_code, maybe_needs_logging; @@ -2939,6 +2939,29 @@ void TurboAssembler::MulS64(Register dst, const MemOperand& opnd) { msg(dst, opnd); } +void TurboAssembler::MulHighS64(Register dst, Register src1, Register src2) { + mgrk(r0, src1, src2); + lgr(dst, r0); +} + +void TurboAssembler::MulHighS64(Register dst, Register src1, + const MemOperand& src2) { + // TODO(v8): implement this. + UNIMPLEMENTED(); +} + +void TurboAssembler::MulHighU64(Register dst, Register src1, Register src2) { + lgr(r1, src1); + mlgr(r0, src2); + lgr(dst, r0); +} + +void TurboAssembler::MulHighU64(Register dst, Register src1, + const MemOperand& src2) { + // TODO(v8): implement this. + UNIMPLEMENTED(); +} + void TurboAssembler::Sqrt(DoubleRegister result, DoubleRegister input) { sqdbr(result, input); } diff --git a/deps/v8/src/codegen/s390/macro-assembler-s390.h b/deps/v8/src/codegen/s390/macro-assembler-s390.h index 7d9a6ca090..6a91f1c096 100644 --- a/deps/v8/src/codegen/s390/macro-assembler-s390.h +++ b/deps/v8/src/codegen/s390/macro-assembler-s390.h @@ -322,6 +322,10 @@ class V8_EXPORT_PRIVATE TurboAssembler : public TurboAssemblerBase { } } } + void MulHighS64(Register dst, Register src1, Register src2); + void MulHighS64(Register dst, Register src1, const MemOperand& src2); + void MulHighU64(Register dst, Register src1, Register src2); + void MulHighU64(Register dst, Register src1, const MemOperand& src2); void MulHighS32(Register dst, Register src1, const MemOperand& src2); void MulHighS32(Register dst, Register src1, Register src2); @@ -1764,8 +1768,8 @@ class V8_EXPORT_PRIVATE MacroAssembler : public TurboAssembler { void LoadFeedbackVectorFlagsAndJumpIfNeedsProcessing( Register flags, Register feedback_vector, CodeKind current_code_kind, Label* flags_need_processing); - void MaybeOptimizeCodeOrTailCallOptimizedCodeSlot(Register flags, - Register feedback_vector); + void OptimizeCodeOrTailCallOptimizedCodeSlot(Register flags, + Register feedback_vector); // --------------------------------------------------------------------------- // GC Support |