PPC/s390: [wasm] Implement patching of far jump table
Port 0a8ddb134c
Original Commit Message:
If the jump is too large for a near jump, we patch the far jump table
instead, and patch the (near) jump table to jump to the far jump table
slot.
R=clemensh@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=
LOG=N
Change-Id: Ic42dfea83799ba6aae1d6d32607391393353815a
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1802742
Reviewed-by: Milad Farazmand <miladfar@ca.ibm.com>
Reviewed-by: Junliang Yan <jyan@ca.ibm.com>
Reviewed-by: Clemens Hammacher <clemensh@chromium.org>
Commit-Queue: Milad Farazmand <miladfar@ca.ibm.com>
Cr-Commit-Position: refs/heads/master@{#63769}
This commit is contained in:
parent
fad60ef290
commit
1603f672ff
@ -198,15 +198,21 @@ void JumpTableAssembler::EmitLazyCompileJumpSlot(uint32_t func_index,
|
||||
b(r1); // 2 bytes
|
||||
}
|
||||
|
||||
void JumpTableAssembler::EmitJumpSlot(Address target) {
|
||||
bool JumpTableAssembler::EmitJumpSlot(Address target) {
|
||||
mov(r1, Operand(target));
|
||||
b(r1);
|
||||
return true;
|
||||
}
|
||||
|
||||
void JumpTableAssembler::EmitFarJumpSlot(Address target) {
|
||||
JumpToInstructionStream(target);
|
||||
}
|
||||
|
||||
// static
|
||||
void JumpTableAssembler::PatchFarJumpSlot(Address slot, Address target) {
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
void JumpTableAssembler::NopBytes(int bytes) {
|
||||
DCHECK_LE(0, bytes);
|
||||
DCHECK_EQ(0, bytes % 2);
|
||||
@ -259,16 +265,22 @@ void JumpTableAssembler::EmitLazyCompileJumpSlot(uint32_t func_index,
|
||||
for (int i = 0; i < nop_bytes; i += kInstrSize) nop();
|
||||
}
|
||||
|
||||
void JumpTableAssembler::EmitJumpSlot(Address target) {
|
||||
bool JumpTableAssembler::EmitJumpSlot(Address target) {
|
||||
mov(r0, Operand(target));
|
||||
mtctr(r0);
|
||||
bctr();
|
||||
return true;
|
||||
}
|
||||
|
||||
void JumpTableAssembler::EmitFarJumpSlot(Address target) {
|
||||
JumpToInstructionStream(target);
|
||||
}
|
||||
|
||||
// static
|
||||
void JumpTableAssembler::PatchFarJumpSlot(Address slot, Address target) {
|
||||
UNREACHABLE();
|
||||
}
|
||||
|
||||
void JumpTableAssembler::NopBytes(int bytes) {
|
||||
DCHECK_LE(0, bytes);
|
||||
DCHECK_EQ(0, bytes % 4);
|
||||
|
Loading…
Reference in New Issue
Block a user