WasmMemoryInformation.h [plain text]
#pragma once
#if ENABLE(WEBASSEMBLY)
#include "GPRInfo.h"
#include "RegisterSet.h"
#include "WasmMemory.h"
#include "WasmPageCount.h"
#include <wtf/Forward.h>
#include <wtf/Ref.h>
#include <wtf/Vector.h>
namespace JSC { namespace Wasm {
struct PinnedSizeRegisterInfo {
GPRReg sizeRegister;
unsigned sizeOffset;
};
class PinnedRegisterInfo {
public:
PinnedRegisterInfo(Vector<PinnedSizeRegisterInfo>&&, GPRReg, GPRReg, GPRReg);
static const PinnedRegisterInfo& get();
RegisterSet toSave(MemoryMode mode) const
{
RegisterSet result;
result.set(baseMemoryPointer);
if (wasmContextInstancePointer != InvalidGPRReg)
result.set(wasmContextInstancePointer);
if (mode != MemoryMode::Signaling) {
result.set(indexingMask);
for (const auto& info : sizeRegisters)
result.set(info.sizeRegister);
}
return result;
}
Vector<PinnedSizeRegisterInfo> sizeRegisters;
GPRReg baseMemoryPointer;
GPRReg indexingMask;
GPRReg wasmContextInstancePointer;
};
class MemoryInformation {
public:
MemoryInformation()
{
ASSERT(!*this);
}
MemoryInformation(PageCount initial, PageCount maximum, bool isImport);
PageCount initial() const { return m_initial; }
PageCount maximum() const { return m_maximum; }
bool isImport() const { return m_isImport; }
explicit operator bool() const { return !!m_initial; }
private:
PageCount m_initial { };
PageCount m_maximum { };
bool m_isImport { false };
};
} }
#endif // ENABLE(WASM)