1*5f757f3fSDimitry Andric //===--- llvm/CodeGen/WasmAddressSpaces.h -----------------------*- C++ -*-===// 2*5f757f3fSDimitry Andric // 3*5f757f3fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*5f757f3fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*5f757f3fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*5f757f3fSDimitry Andric // 7*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 8*5f757f3fSDimitry Andric // 9*5f757f3fSDimitry Andric // Address Spaces for WebAssembly Type Handling 10*5f757f3fSDimitry Andric // 11*5f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 12*5f757f3fSDimitry Andric 13*5f757f3fSDimitry Andric #ifndef LLVM_LIB_TARGET_WEBASSEMBLY_UTILS_WASMADDRESSSPACES_H 14*5f757f3fSDimitry Andric #define LLVM_LIB_TARGET_WEBASSEMBLY_UTILS_WASMADDRESSSPACES_H 15*5f757f3fSDimitry Andric 16*5f757f3fSDimitry Andric namespace llvm { 17*5f757f3fSDimitry Andric 18*5f757f3fSDimitry Andric namespace WebAssembly { 19*5f757f3fSDimitry Andric 20*5f757f3fSDimitry Andric enum WasmAddressSpace : unsigned { 21*5f757f3fSDimitry Andric // Default address space, for pointers to linear memory (stack, heap, data). 22*5f757f3fSDimitry Andric WASM_ADDRESS_SPACE_DEFAULT = 0, 23*5f757f3fSDimitry Andric // A non-integral address space for pointers to named objects outside of 24*5f757f3fSDimitry Andric // linear memory: WebAssembly globals or WebAssembly locals. Loads and stores 25*5f757f3fSDimitry Andric // to these pointers are lowered to global.get / global.set or local.get / 26*5f757f3fSDimitry Andric // local.set, as appropriate. 27*5f757f3fSDimitry Andric WASM_ADDRESS_SPACE_VAR = 1, 28*5f757f3fSDimitry Andric // A non-integral address space for externref values 29*5f757f3fSDimitry Andric WASM_ADDRESS_SPACE_EXTERNREF = 10, 30*5f757f3fSDimitry Andric // A non-integral address space for funcref values 31*5f757f3fSDimitry Andric WASM_ADDRESS_SPACE_FUNCREF = 20, 32*5f757f3fSDimitry Andric }; 33*5f757f3fSDimitry Andric isDefaultAddressSpace(unsigned AS)34*5f757f3fSDimitry Andricinline bool isDefaultAddressSpace(unsigned AS) { 35*5f757f3fSDimitry Andric return AS == WASM_ADDRESS_SPACE_DEFAULT; 36*5f757f3fSDimitry Andric } isWasmVarAddressSpace(unsigned AS)37*5f757f3fSDimitry Andricinline bool isWasmVarAddressSpace(unsigned AS) { 38*5f757f3fSDimitry Andric return AS == WASM_ADDRESS_SPACE_VAR; 39*5f757f3fSDimitry Andric } isValidAddressSpace(unsigned AS)40*5f757f3fSDimitry Andricinline bool isValidAddressSpace(unsigned AS) { 41*5f757f3fSDimitry Andric return isDefaultAddressSpace(AS) || isWasmVarAddressSpace(AS); 42*5f757f3fSDimitry Andric } 43*5f757f3fSDimitry Andric 44*5f757f3fSDimitry Andric } // namespace WebAssembly 45*5f757f3fSDimitry Andric 46*5f757f3fSDimitry Andric } // namespace llvm 47*5f757f3fSDimitry Andric 48*5f757f3fSDimitry Andric #endif // LLVM_LIB_TARGET_WEBASSEMBLY_UTILS_WASMADDRESSSPACES_H 49