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