summaryrefslogtreecommitdiff
path: root/deps/v8/src/codegen/s390
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/codegen/s390')
-rw-r--r--deps/v8/src/codegen/s390/assembler-s390-inl.h39
-rw-r--r--deps/v8/src/codegen/s390/assembler-s390.cc9
-rw-r--r--deps/v8/src/codegen/s390/constants-s390.h2
-rw-r--r--deps/v8/src/codegen/s390/macro-assembler-s390.cc29
-rw-r--r--deps/v8/src/codegen/s390/macro-assembler-s390.h8
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