Commit daea0e75 authored by joransiu's avatar joransiu Committed by Commit bot

S390: Platform specific includes in common files

Add S390 platform specific \#includes across various common files.
Add S390 CPU features to enum.
Add S390 implementation to extract sp/fp/pc from signal context.

R=danno@chromium.org,jkummerow@chromium.org,jochen@chromium.org,jyan@ca.ibm.com,michael_dawson@ca.ibm.com,mbrandy@us.ibm.com
BUG=

Review URL: https://codereview.chromium.org/1777593003

Cr-Commit-Position: refs/heads/master@{#34674}
parent 04a735c7
...@@ -77,6 +77,8 @@ ...@@ -77,6 +77,8 @@
#include "src/mips/assembler-mips-inl.h" // NOLINT #include "src/mips/assembler-mips-inl.h" // NOLINT
#elif V8_TARGET_ARCH_MIPS64 #elif V8_TARGET_ARCH_MIPS64
#include "src/mips64/assembler-mips64-inl.h" // NOLINT #include "src/mips64/assembler-mips64-inl.h" // NOLINT
#elif V8_TARGET_ARCH_S390
#include "src/s390/assembler-s390-inl.h" // NOLINT
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
#include "src/x87/assembler-x87-inl.h" // NOLINT #include "src/x87/assembler-x87-inl.h" // NOLINT
#else #else
...@@ -99,6 +101,8 @@ ...@@ -99,6 +101,8 @@
#include "src/regexp/mips/regexp-macro-assembler-mips.h" // NOLINT #include "src/regexp/mips/regexp-macro-assembler-mips.h" // NOLINT
#elif V8_TARGET_ARCH_MIPS64 #elif V8_TARGET_ARCH_MIPS64
#include "src/regexp/mips64/regexp-macro-assembler-mips64.h" // NOLINT #include "src/regexp/mips64/regexp-macro-assembler-mips64.h" // NOLINT
#elif V8_TARGET_ARCH_S390
#include "src/regexp/s390/regexp-macro-assembler-s390.h" // NOLINT
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
#include "src/regexp/x87/regexp-macro-assembler-x87.h" // NOLINT #include "src/regexp/x87/regexp-macro-assembler-x87.h" // NOLINT
#else // Unknown architecture. #else // Unknown architecture.
...@@ -1498,6 +1502,8 @@ ExternalReference ExternalReference::re_check_stack_guard_state( ...@@ -1498,6 +1502,8 @@ ExternalReference ExternalReference::re_check_stack_guard_state(
function = FUNCTION_ADDR(RegExpMacroAssemblerMIPS::CheckStackGuardState); function = FUNCTION_ADDR(RegExpMacroAssemblerMIPS::CheckStackGuardState);
#elif V8_TARGET_ARCH_MIPS64 #elif V8_TARGET_ARCH_MIPS64
function = FUNCTION_ADDR(RegExpMacroAssemblerMIPS::CheckStackGuardState); function = FUNCTION_ADDR(RegExpMacroAssemblerMIPS::CheckStackGuardState);
#elif V8_TARGET_ARCH_S390
function = FUNCTION_ADDR(RegExpMacroAssemblerS390::CheckStackGuardState);
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
function = FUNCTION_ADDR(RegExpMacroAssemblerX87::CheckStackGuardState); function = FUNCTION_ADDR(RegExpMacroAssemblerX87::CheckStackGuardState);
#else #else
......
...@@ -81,6 +81,8 @@ int OS::ActivationFrameAlignment() { ...@@ -81,6 +81,8 @@ int OS::ActivationFrameAlignment() {
return 8; return 8;
#elif V8_TARGET_ARCH_MIPS #elif V8_TARGET_ARCH_MIPS
return 8; return 8;
#elif V8_TARGET_ARCH_S390
return 8;
#else #else
// Otherwise we just assume 16 byte alignment, i.e.: // Otherwise we just assume 16 byte alignment, i.e.:
// - With gcc 4.4 the tree vectorization optimizer can generate code // - With gcc 4.4 the tree vectorization optimizer can generate code
...@@ -185,6 +187,15 @@ void* OS::GetRandomMmapAddr() { ...@@ -185,6 +187,15 @@ void* OS::GetRandomMmapAddr() {
// Little-endian Linux: 48 bits of virtual addressing. // Little-endian Linux: 48 bits of virtual addressing.
raw_addr &= V8_UINT64_C(0x3ffffffff000); raw_addr &= V8_UINT64_C(0x3ffffffff000);
#endif #endif
#elif V8_TARGET_ARCH_S390X
// Linux on Z uses bits 22-32 for Region Indexing, which translates to 42 bits
// of virtual addressing. Truncate to 40 bits to allow kernel chance to
// fulfill request.
raw_addr &= V8_UINT64_C(0xfffffff000);
#elif V8_TARGET_ARCH_S390
// 31 bits of virtual addressing. Truncate to 29 bits to allow kernel chance
// to fulfill request.
raw_addr &= 0x1ffff000;
#else #else
raw_addr &= 0x3ffff000; raw_addr &= 0x3ffff000;
...@@ -252,6 +263,9 @@ void OS::DebugBreak() { ...@@ -252,6 +263,9 @@ void OS::DebugBreak() {
#endif // V8_OS_NACL #endif // V8_OS_NACL
#elif V8_HOST_ARCH_X64 #elif V8_HOST_ARCH_X64
asm("int $3"); asm("int $3");
#elif V8_HOST_ARCH_S390
// Software breakpoint instruction is 0x0001
asm volatile(".word 0x0001");
#else #else
#error Unsupported host architecture. #error Unsupported host architecture.
#endif #endif
......
...@@ -167,13 +167,24 @@ namespace internal { ...@@ -167,13 +167,24 @@ namespace internal {
#define CODE_STUB_LIST_MIPS(V) #define CODE_STUB_LIST_MIPS(V)
#endif #endif
// List of code stubs only used on S390 platforms.
#ifdef V8_TARGET_ARCH_S390
#define CODE_STUB_LIST_S390(V) \
V(DirectCEntry) \
V(StoreRegistersState) \
V(RestoreRegistersState)
#else
#define CODE_STUB_LIST_S390(V)
#endif
// Combined list of code stubs. // Combined list of code stubs.
#define CODE_STUB_LIST(V) \ #define CODE_STUB_LIST(V) \
CODE_STUB_LIST_ALL_PLATFORMS(V) \ CODE_STUB_LIST_ALL_PLATFORMS(V) \
CODE_STUB_LIST_ARM(V) \ CODE_STUB_LIST_ARM(V) \
CODE_STUB_LIST_ARM64(V) \ CODE_STUB_LIST_ARM64(V) \
CODE_STUB_LIST_PPC(V) \ CODE_STUB_LIST_PPC(V) \
CODE_STUB_LIST_MIPS(V) CODE_STUB_LIST_MIPS(V) \
CODE_STUB_LIST_S390(V)
static const int kHasReturnedMinusZeroSentinel = 1; static const int kHasReturnedMinusZeroSentinel = 1;
...@@ -593,6 +604,8 @@ class RuntimeCallHelper { ...@@ -593,6 +604,8 @@ class RuntimeCallHelper {
#include "src/mips/code-stubs-mips.h" #include "src/mips/code-stubs-mips.h"
#elif V8_TARGET_ARCH_MIPS64 #elif V8_TARGET_ARCH_MIPS64
#include "src/mips64/code-stubs-mips64.h" #include "src/mips64/code-stubs-mips64.h"
#elif V8_TARGET_ARCH_S390
#include "src/s390/code-stubs-s390.h"
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
#include "src/x87/code-stubs-x87.h" #include "src/x87/code-stubs-x87.h"
#else #else
......
...@@ -56,6 +56,8 @@ ...@@ -56,6 +56,8 @@
#include "src/mips/codegen-mips.h" // NOLINT #include "src/mips/codegen-mips.h" // NOLINT
#elif V8_TARGET_ARCH_MIPS64 #elif V8_TARGET_ARCH_MIPS64
#include "src/mips64/codegen-mips64.h" // NOLINT #include "src/mips64/codegen-mips64.h" // NOLINT
#elif V8_TARGET_ARCH_S390
#include "src/s390/codegen-s390.h" // NOLINT
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
#include "src/x87/codegen-x87.h" // NOLINT #include "src/x87/codegen-x87.h" // NOLINT
#else #else
......
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
#include "src/mips/frames-mips.h" // NOLINT #include "src/mips/frames-mips.h" // NOLINT
#elif V8_TARGET_ARCH_MIPS64 #elif V8_TARGET_ARCH_MIPS64
#include "src/mips64/frames-mips64.h" // NOLINT #include "src/mips64/frames-mips64.h" // NOLINT
#elif V8_TARGET_ARCH_S390
#include "src/s390/frames-s390.h" // NOLINT
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
#include "src/x87/frames-x87.h" // NOLINT #include "src/x87/frames-x87.h" // NOLINT
#else #else
......
...@@ -59,6 +59,9 @@ namespace internal { ...@@ -59,6 +59,9 @@ namespace internal {
#if (V8_TARGET_ARCH_MIPS64 && !V8_HOST_ARCH_MIPS64) #if (V8_TARGET_ARCH_MIPS64 && !V8_HOST_ARCH_MIPS64)
#define USE_SIMULATOR 1 #define USE_SIMULATOR 1
#endif #endif
#if (V8_TARGET_ARCH_S390 && !V8_HOST_ARCH_S390)
#define USE_SIMULATOR 1
#endif
#endif #endif
// Determine whether the architecture uses an embedded constant pool // Determine whether the architecture uses an embedded constant pool
...@@ -673,10 +676,13 @@ enum CpuFeature { ...@@ -673,10 +676,13 @@ enum CpuFeature {
FPR_GPR_MOV, FPR_GPR_MOV,
LWSYNC, LWSYNC,
ISELECT, ISELECT,
// S390
DISTINCT_OPS,
GENERAL_INSTR_EXT,
FLOATING_POINT_EXT,
NUMBER_OF_CPU_FEATURES NUMBER_OF_CPU_FEATURES
}; };
// Defines hints about receiver values based on structural knowledge. // Defines hints about receiver values based on structural knowledge.
enum class ConvertReceiverMode : unsigned { enum class ConvertReceiverMode : unsigned {
kNullOrUndefined, // Guaranteed to be null or undefined. kNullOrUndefined, // Guaranteed to be null or undefined.
......
...@@ -531,7 +531,8 @@ bool InterpreterAssembler::TargetSupportsUnalignedAccess() { ...@@ -531,7 +531,8 @@ bool InterpreterAssembler::TargetSupportsUnalignedAccess() {
return false; return false;
#elif V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_PPC #elif V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_PPC
return CpuFeatures::IsSupported(UNALIGNED_ACCESSES); return CpuFeatures::IsSupported(UNALIGNED_ACCESSES);
#elif V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_X87 || \
V8_TARGET_ARCH_S390
return true; return true;
#else #else
#error "Unknown Architecture" #error "Unknown Architecture"
......
...@@ -2197,7 +2197,7 @@ bool Isolate::Init(Deserializer* des) { ...@@ -2197,7 +2197,7 @@ bool Isolate::Init(Deserializer* des) {
// Initialize other runtime facilities // Initialize other runtime facilities
#if defined(USE_SIMULATOR) #if defined(USE_SIMULATOR)
#if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \ #if V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_ARM64 || V8_TARGET_ARCH_MIPS || \
V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_PPC V8_TARGET_ARCH_MIPS64 || V8_TARGET_ARCH_PPC || V8_TARGET_ARCH_S390
Simulator::Initialize(this); Simulator::Initialize(this);
#endif #endif
#endif #endif
......
...@@ -396,6 +396,8 @@ void LowLevelLogger::LogCodeInfo() { ...@@ -396,6 +396,8 @@ void LowLevelLogger::LogCodeInfo() {
const char arch[] = "x87"; const char arch[] = "x87";
#elif V8_TARGET_ARCH_ARM64 #elif V8_TARGET_ARCH_ARM64
const char arch[] = "arm64"; const char arch[] = "arm64";
#elif V8_TARGET_ARCH_S390
const char arch[] = "s390";
#else #else
const char arch[] = "unknown"; const char arch[] = "unknown";
#endif #endif
......
...@@ -68,6 +68,11 @@ enum AllocationFlags { ...@@ -68,6 +68,11 @@ enum AllocationFlags {
#include "src/mips64/assembler-mips64-inl.h" #include "src/mips64/assembler-mips64-inl.h"
#include "src/mips64/constants-mips64.h" #include "src/mips64/constants-mips64.h"
#include "src/mips64/macro-assembler-mips64.h" #include "src/mips64/macro-assembler-mips64.h"
#elif V8_TARGET_ARCH_S390
#include "src/s390/assembler-s390.h"
#include "src/s390/assembler-s390-inl.h"
#include "src/s390/constants-s390.h"
#include "src/s390/macro-assembler-s390.h"
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
#include "src/x87/assembler-x87.h" #include "src/x87/assembler-x87.h"
#include "src/x87/assembler-x87-inl.h" #include "src/x87/assembler-x87-inl.h"
......
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
#include "src/mips64/constants-mips64.h" // NOLINT #include "src/mips64/constants-mips64.h" // NOLINT
#elif V8_TARGET_ARCH_PPC #elif V8_TARGET_ARCH_PPC
#include "src/ppc/constants-ppc.h" // NOLINT #include "src/ppc/constants-ppc.h" // NOLINT
#elif V8_TARGET_ARCH_S390
#include "src/s390/constants-s390.h" // NOLINT
#endif #endif
......
...@@ -336,6 +336,14 @@ class SimulatorHelper { ...@@ -336,6 +336,14 @@ class SimulatorHelper {
reinterpret_cast<Address>(simulator_->get_register(Simulator::sp)); reinterpret_cast<Address>(simulator_->get_register(Simulator::sp));
state->fp = state->fp =
reinterpret_cast<Address>(simulator_->get_register(Simulator::fp)); reinterpret_cast<Address>(simulator_->get_register(Simulator::fp));
#elif V8_TARGET_ARCH_S390
if (!simulator_->has_bad_pc()) {
state->pc = reinterpret_cast<Address>(simulator_->get_pc());
}
state->sp =
reinterpret_cast<Address>(simulator_->get_register(Simulator::sp));
state->fp =
reinterpret_cast<Address>(simulator_->get_register(Simulator::fp));
#endif #endif
} }
...@@ -441,7 +449,7 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info, ...@@ -441,7 +449,7 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info,
#else #else
// Extracting the sample from the context is extremely machine dependent. // Extracting the sample from the context is extremely machine dependent.
ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context); ucontext_t* ucontext = reinterpret_cast<ucontext_t*>(context);
#if !(V8_OS_OPENBSD || (V8_OS_LINUX && V8_HOST_ARCH_PPC)) #if !(V8_OS_OPENBSD || (V8_OS_LINUX && (V8_HOST_ARCH_PPC || V8_HOST_ARCH_S390)))
mcontext_t& mcontext = ucontext->uc_mcontext; mcontext_t& mcontext = ucontext->uc_mcontext;
#endif #endif
#if V8_OS_LINUX #if V8_OS_LINUX
...@@ -482,6 +490,17 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info, ...@@ -482,6 +490,17 @@ void SignalHandler::HandleProfilerSignal(int signal, siginfo_t* info,
state.pc = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->nip); state.pc = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->nip);
state.sp = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->gpr[PT_R1]); state.sp = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->gpr[PT_R1]);
state.fp = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->gpr[PT_R31]); state.fp = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->gpr[PT_R31]);
#elif V8_HOST_ARCH_S390
#if V8_TARGET_ARCH_32_BIT
// 31-bit target will have bit 0 (MSB) of the PSW set to denote addressing
// mode. This bit needs to be masked out to resolve actual address.
state.pc =
reinterpret_cast<Address>(ucontext->uc_mcontext.psw.addr & 0x7FFFFFFF);
#else
state.pc = reinterpret_cast<Address>(ucontext->uc_mcontext.psw.addr);
#endif // V8_TARGET_ARCH_32_BIT
state.sp = reinterpret_cast<Address>(ucontext->uc_mcontext.gregs[15]);
state.fp = reinterpret_cast<Address>(ucontext->uc_mcontext.gregs[11]);
#endif // V8_HOST_ARCH_* #endif // V8_HOST_ARCH_*
#elif V8_OS_MACOSX #elif V8_OS_MACOSX
#if V8_HOST_ARCH_X64 #if V8_HOST_ARCH_X64
......
...@@ -91,6 +91,10 @@ class ArchDefaultRegisterConfiguration : public RegisterConfiguration { ...@@ -91,6 +91,10 @@ class ArchDefaultRegisterConfiguration : public RegisterConfiguration {
kMaxAllocatableGeneralRegisterCount, kMaxAllocatableGeneralRegisterCount,
kMaxAllocatableDoubleRegisterCount, kMaxAllocatableDoubleRegisterCount,
kMaxAllocatableDoubleRegisterCount, kMaxAllocatableDoubleRegisterCount,
#elif V8_TARGET_ARCH_S390
kMaxAllocatableGeneralRegisterCount,
kMaxAllocatableDoubleRegisterCount,
kMaxAllocatableDoubleRegisterCount,
#else #else
#error Unsupported target architecture. #error Unsupported target architecture.
#endif #endif
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#include "src/mips/simulator-mips.h" #include "src/mips/simulator-mips.h"
#elif V8_TARGET_ARCH_MIPS64 #elif V8_TARGET_ARCH_MIPS64
#include "src/mips64/simulator-mips64.h" #include "src/mips64/simulator-mips64.h"
#elif V8_TARGET_ARCH_S390
#include "src/s390/simulator-s390.h"
#elif V8_TARGET_ARCH_X87 #elif V8_TARGET_ARCH_X87
#include "src/x87/simulator-x87.h" #include "src/x87/simulator-x87.h"
#else #else
......
...@@ -584,16 +584,16 @@ bool Deserializer::ReadData(Object** current, Object** limit, int source_space, ...@@ -584,16 +584,16 @@ bool Deserializer::ReadData(Object** current, Object** limit, int source_space,
// allocation point and write a pointer to it to the current object. // allocation point and write a pointer to it to the current object.
ALL_SPACES(kBackref, kPlain, kStartOfObject) ALL_SPACES(kBackref, kPlain, kStartOfObject)
ALL_SPACES(kBackrefWithSkip, kPlain, kStartOfObject) ALL_SPACES(kBackrefWithSkip, kPlain, kStartOfObject)
#if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64) || \ #if V8_CODE_EMBEDS_OBJECT_POINTER
defined(V8_TARGET_ARCH_PPC) || V8_EMBEDDED_CONSTANT_POOL
// Deserialize a new object from pointer found in code and write // Deserialize a new object from pointer found in code and write
// a pointer to it to the current object. Required only for MIPS, PPC or // a pointer to it to the current object. Required only for MIPS, PPC, ARM
// ARM with embedded constant pool, and omitted on the other architectures // or S390 with embedded constant pool, and omitted on the other
// because it is fully unrolled and would cause bloat. // architectures because it is fully unrolled and would cause bloat.
ALL_SPACES(kNewObject, kFromCode, kStartOfObject) ALL_SPACES(kNewObject, kFromCode, kStartOfObject)
// Find a recently deserialized code object using its offset from the // Find a recently deserialized code object using its offset from the
// current allocation point and write a pointer to it to the current // current allocation point and write a pointer to it to the current
// object. Required only for MIPS, PPC or ARM with embedded constant pool. // object. Required only for MIPS, PPC, ARM or S390 with embedded
// constant pool.
ALL_SPACES(kBackref, kFromCode, kStartOfObject) ALL_SPACES(kBackref, kFromCode, kStartOfObject)
ALL_SPACES(kBackrefWithSkip, kFromCode, kStartOfObject) ALL_SPACES(kBackrefWithSkip, kFromCode, kStartOfObject)
#endif #endif
...@@ -608,8 +608,7 @@ bool Deserializer::ReadData(Object** current, Object** limit, int source_space, ...@@ -608,8 +608,7 @@ bool Deserializer::ReadData(Object** current, Object** limit, int source_space,
// Find an object in the roots array and write a pointer to it to the // Find an object in the roots array and write a pointer to it to the
// current object. // current object.
SINGLE_CASE(kRootArray, kPlain, kStartOfObject, 0) SINGLE_CASE(kRootArray, kPlain, kStartOfObject, 0)
#if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64) || \ #if V8_CODE_EMBEDS_OBJECT_POINTER
defined(V8_TARGET_ARCH_PPC) || V8_EMBEDDED_CONSTANT_POOL
// Find an object in the roots array and write a pointer to it to in code. // Find an object in the roots array and write a pointer to it to in code.
SINGLE_CASE(kRootArray, kFromCode, kStartOfObject, 0) SINGLE_CASE(kRootArray, kFromCode, kStartOfObject, 0)
#endif #endif
......
...@@ -13,6 +13,16 @@ ...@@ -13,6 +13,16 @@
namespace v8 { namespace v8 {
namespace internal { namespace internal {
// Used for platforms with embedded constant pools to trigger deserialization
// of objects found in code.
#if defined(V8_TARGET_ARCH_MIPS) || defined(V8_TARGET_ARCH_MIPS64) || \
defined(V8_TARGET_ARCH_PPC) || defined(V8_TARGET_ARCH_S390) || \
V8_EMBEDDED_CONSTANT_POOL
#define V8_CODE_EMBEDS_OBJECT_POINTER 1
#else
#define V8_CODE_EMBEDS_OBJECT_POINTER 0
#endif
class Heap; class Heap;
// A Deserializer reads a snapshot and reconstructs the Object graph it defines. // A Deserializer reads a snapshot and reconstructs the Object graph it defines.
......
...@@ -1144,7 +1144,7 @@ INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, ...@@ -1144,7 +1144,7 @@ INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src,
INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars)); INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars));
INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src,
size_t chars)); size_t chars));
#elif defined(V8_HOST_ARCH_PPC) #elif defined(V8_HOST_ARCH_PPC) || defined(V8_HOST_ARCH_S390)
INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars)); INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars));
INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src,
size_t chars)); size_t chars));
...@@ -1307,7 +1307,7 @@ void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, size_t chars) { ...@@ -1307,7 +1307,7 @@ void CopyCharsUnsigned(uint16_t* dest, const uint16_t* src, size_t chars) {
MemCopy(dest, src, chars * sizeof(*dest)); MemCopy(dest, src, chars * sizeof(*dest));
} }
} }
#elif defined(V8_HOST_ARCH_PPC) #elif defined(V8_HOST_ARCH_PPC) || defined(V8_HOST_ARCH_S390)
#define CASE(n) \ #define CASE(n) \
case n: \ case n: \
memcpy(dest, src, n); \ memcpy(dest, src, n); \
......
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