1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
//
// ----------------------------------------------------------------------------
// This file is to be imported in Swift code to mix C and Swift code and
// optimize them together. "static inline" functions in this file are are
// included in the Swift compilation unit via ClangImporter.
// ----------------------------------------------------------------------------
//
#ifndef WASMKIT_INLINE_CODE_H
#define WASMKIT_INLINE_CODE_H
#include <stdbool.h>
#include "_CWasmKit.h"
#if WASMKIT_USE_DIRECT_THREADED_CODE
// Inline instruction implementation written in Swift side into C handler
// function. Used in DirectThreadedCode.inc.
// TODO: Clang in Swift 5.10 Windows toolchain seems not to have `[[clang::always_inline]]`?
# if defined(__clang__) && (__clang_major__ >= 16) && __has_attribute(always_inline) && !defined(_WIN32)
// `always_inline` at statement level is available since Clang 16.
# define INLINE_CALL [[clang::always_inline]]
# else
// Fallback to regular call without inlining.
# define INLINE_CALL
# endif
/// Set the error result in the execution state. Used in DirectThreadedCode.inc.
//
/// NOTE: We use error storage in the execution state rather than `swift_error_result`
/// because it's not permitted with `swiftasynccc`.
SWIFT_CC(swift) void wasmkit_execution_state_set_error(void *trap, Sp sp, SWIFT_CONTEXT void *state);
// Define instruction handler functions generated by
// Utilities/Sources/VMGen.swift
# include "DirectThreadedCode.inc"
// Undefine macros only used in DirectThreadedCode.inc
# undef INLINE_CALL
#else
/// The fallback table of instruction handlers when direct-threaded code is not
/// supported. Never used when running on token-threading model.
static const uintptr_t wasmkit_tc_exec_handlers[] = {};
#endif // WASMKIT_USE_DIRECT_THREADED_CODE
#endif // WASMKIT_INLINE_CODE_H
|