Commit 904bee3b authored by bjaideep's avatar bjaideep Committed by Commit bot

PPC/s390: [wasm] Prerequisites for WebAssembly Table.Grow

Port 0c4b8ff4

Original Commit Message:

     - Refactor Dispatch tables to have separate function, signature tables
     - New Relocation type for WasmFunctionTableReference, assembler, compiler support.
     - RelocInfo helper functions for Wasm references

R=gdeepti@chromium.org, joransiu@ca.ibm.com, jyan@ca.ibm.com, michael_dawson@ca.ibm.com
BUG=
LOG=N

Review-Url: https://codereview.chromium.org/2625683004
Cr-Commit-Position: refs/heads/master@{#42201}
parent 0e03bea7
...@@ -2277,11 +2277,9 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, ...@@ -2277,11 +2277,9 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
switch (src.type()) { switch (src.type()) {
case Constant::kInt32: case Constant::kInt32:
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
if (src.rmode() == RelocInfo::WASM_MEMORY_SIZE_REFERENCE) { if (RelocInfo::IsWasmSizeReference(src.rmode())) {
#else #else
if (src.rmode() == RelocInfo::WASM_MEMORY_REFERENCE || if (RelocInfo::IsWasmReference(src.rmode())) {
src.rmode() == RelocInfo::WASM_GLOBAL_REFERENCE ||
src.rmode() == RelocInfo::WASM_MEMORY_SIZE_REFERENCE) {
#endif #endif
__ mov(dst, Operand(src.ToInt32(), src.rmode())); __ mov(dst, Operand(src.ToInt32(), src.rmode()));
} else { } else {
...@@ -2290,11 +2288,10 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, ...@@ -2290,11 +2288,10 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
break; break;
case Constant::kInt64: case Constant::kInt64:
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
if (src.rmode() == RelocInfo::WASM_MEMORY_REFERENCE || if (RelocInfo::IsWasmPtrReference(src.rmode())) {
src.rmode() == RelocInfo::WASM_GLOBAL_REFERENCE) {
__ mov(dst, Operand(src.ToInt64(), src.rmode())); __ mov(dst, Operand(src.ToInt64(), src.rmode()));
} else { } else {
DCHECK(src.rmode() != RelocInfo::WASM_MEMORY_SIZE_REFERENCE); DCHECK(!RelocInfo::IsWasmSizeReference(src.rmode()));
#endif #endif
__ mov(dst, Operand(src.ToInt64())); __ mov(dst, Operand(src.ToInt64()));
#if V8_TARGET_ARCH_PPC64 #if V8_TARGET_ARCH_PPC64
......
...@@ -2365,11 +2365,9 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, ...@@ -2365,11 +2365,9 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
switch (src.type()) { switch (src.type()) {
case Constant::kInt32: case Constant::kInt32:
#if V8_TARGET_ARCH_S390X #if V8_TARGET_ARCH_S390X
if (src.rmode() == RelocInfo::WASM_MEMORY_SIZE_REFERENCE) { if (RelocInfo::IsWasmSizeReference(src.rmode())) {
#else #else
if (src.rmode() == RelocInfo::WASM_MEMORY_REFERENCE || if (RelocInfo::IsWasmReference(src.rmode())) {
src.rmode() == RelocInfo::WASM_GLOBAL_REFERENCE ||
src.rmode() == RelocInfo::WASM_MEMORY_SIZE_REFERENCE) {
#endif #endif
__ mov(dst, Operand(src.ToInt32(), src.rmode())); __ mov(dst, Operand(src.ToInt32(), src.rmode()));
} else { } else {
...@@ -2378,11 +2376,10 @@ void CodeGenerator::AssembleMove(InstructionOperand* source, ...@@ -2378,11 +2376,10 @@ void CodeGenerator::AssembleMove(InstructionOperand* source,
break; break;
case Constant::kInt64: case Constant::kInt64:
#if V8_TARGET_ARCH_S390X #if V8_TARGET_ARCH_S390X
if (src.rmode() == RelocInfo::WASM_MEMORY_REFERENCE || if (RelocInfo::IsWasmPtrReference(src.rmode())) {
src.rmode() == RelocInfo::WASM_GLOBAL_REFERENCE) {
__ mov(dst, Operand(src.ToInt64(), src.rmode())); __ mov(dst, Operand(src.ToInt64(), src.rmode()));
} else { } else {
DCHECK(src.rmode() != RelocInfo::WASM_MEMORY_SIZE_REFERENCE); DCHECK(!RelocInfo::IsWasmSizeReference(src.rmode()));
__ mov(dst, Operand(src.ToInt64())); __ mov(dst, Operand(src.ToInt64()));
} }
#else #else
......
...@@ -171,14 +171,19 @@ Address RelocInfo::wasm_global_reference() { ...@@ -171,14 +171,19 @@ Address RelocInfo::wasm_global_reference() {
return Assembler::target_address_at(pc_, host_); return Assembler::target_address_at(pc_, host_);
} }
uint32_t RelocInfo::wasm_function_table_size_reference() {
DCHECK(IsWasmFunctionTableSizeReference(rmode_));
return static_cast<uint32_t>(
reinterpret_cast<intptr_t>(Assembler::target_address_at(pc_, host_)));
}
void RelocInfo::unchecked_update_wasm_memory_reference( void RelocInfo::unchecked_update_wasm_memory_reference(
Address address, ICacheFlushMode flush_mode) { Address address, ICacheFlushMode flush_mode) {
Assembler::set_target_address_at(isolate_, pc_, host_, address, flush_mode); Assembler::set_target_address_at(isolate_, pc_, host_, address, flush_mode);
} }
void RelocInfo::unchecked_update_wasm_memory_size(uint32_t size, void RelocInfo::unchecked_update_wasm_size(uint32_t size,
ICacheFlushMode flush_mode) { ICacheFlushMode flush_mode) {
Assembler::set_target_address_at(isolate_, pc_, host_, Assembler::set_target_address_at(isolate_, pc_, host_,
reinterpret_cast<Address>(size), flush_mode); reinterpret_cast<Address>(size), flush_mode);
} }
......
...@@ -239,13 +239,19 @@ Address RelocInfo::wasm_global_reference() { ...@@ -239,13 +239,19 @@ Address RelocInfo::wasm_global_reference() {
return Assembler::target_address_at(pc_, host_); return Assembler::target_address_at(pc_, host_);
} }
uint32_t RelocInfo::wasm_function_table_size_reference() {
DCHECK(IsWasmFunctionTableSizeReference(rmode_));
return static_cast<uint32_t>(
reinterpret_cast<intptr_t>(Assembler::target_address_at(pc_, host_)));
}
void RelocInfo::unchecked_update_wasm_memory_reference( void RelocInfo::unchecked_update_wasm_memory_reference(
Address address, ICacheFlushMode flush_mode) { Address address, ICacheFlushMode flush_mode) {
Assembler::set_target_address_at(isolate_, pc_, host_, address, flush_mode); Assembler::set_target_address_at(isolate_, pc_, host_, address, flush_mode);
} }
void RelocInfo::unchecked_update_wasm_memory_size(uint32_t size, void RelocInfo::unchecked_update_wasm_size(uint32_t size,
ICacheFlushMode flush_mode) { ICacheFlushMode flush_mode) {
Assembler::set_target_address_at(isolate_, pc_, host_, Assembler::set_target_address_at(isolate_, pc_, host_,
reinterpret_cast<Address>(size), flush_mode); reinterpret_cast<Address>(size), flush_mode);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment