WasmMemoryInformation.h [plain text]
#pragma once
#if ENABLE(WEBASSEMBLY)
#include "GPRInfo.h"
#include "RegisterSet.h"
#include "WasmMemory.h"
#include "WasmPageCount.h"
#include <wtf/Ref.h>
#include <wtf/Vector.h>
namespace JSC { namespace Wasm {
struct PinnedSizeRegisterInfo {
GPRReg sizeRegister;
unsigned sizeOffset;
};
struct PinnedRegisterInfo {
Vector<PinnedSizeRegisterInfo> sizeRegisters;
GPRReg baseMemoryPointer;
GPRReg wasmContextPointer;
static const PinnedRegisterInfo& get();
PinnedRegisterInfo(Vector<PinnedSizeRegisterInfo>&&, GPRReg, GPRReg);
RegisterSet toSave(MemoryMode mode) const
{
RegisterSet result;
result.set(baseMemoryPointer);
if (wasmContextPointer != InvalidGPRReg)
result.set(wasmContextPointer);
if (mode != MemoryMode::Signaling) {
for (const auto& info : sizeRegisters)
result.set(info.sizeRegister);
}
return result;
}
};
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)