xref: /freebsd/contrib/llvm-project/llvm/lib/Target/WebAssembly/Utils/WasmAddressSpaces.h (revision 5b56413d04e608379c9a306373554a8e4d321bc0)
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