summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/compilation/simd/simd_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/compilation/simd/simd_common.c')
-rw-r--r--fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/compilation/simd/simd_common.c157
1 files changed, 157 insertions, 0 deletions
diff --git a/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/compilation/simd/simd_common.c b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/compilation/simd/simd_common.c
new file mode 100644
index 000000000..95bcdfdb0
--- /dev/null
+++ b/fluent-bit/lib/wasm-micro-runtime-WAMR-1.2.2/core/iwasm/compilation/simd/simd_common.c
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2019 Intel Corporation. All rights reserved.
+ * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+ */
+
+#include "simd_common.h"
+
+LLVMValueRef
+simd_pop_v128_and_bitcast(const AOTCompContext *comp_ctx,
+ const AOTFuncContext *func_ctx, LLVMTypeRef vec_type,
+ const char *name)
+{
+ LLVMValueRef number;
+
+ POP_V128(number);
+
+ if (!(number =
+ LLVMBuildBitCast(comp_ctx->builder, number, vec_type, name))) {
+ HANDLE_FAILURE("LLVMBuildBitCast");
+ goto fail;
+ }
+
+ return number;
+fail:
+ return NULL;
+}
+
+bool
+simd_bitcast_and_push_v128(const AOTCompContext *comp_ctx,
+ const AOTFuncContext *func_ctx, LLVMValueRef vector,
+ const char *name)
+{
+ if (!(vector = LLVMBuildBitCast(comp_ctx->builder, vector, V128_i64x2_TYPE,
+ name))) {
+ HANDLE_FAILURE("LLVMBuildBitCast");
+ goto fail;
+ }
+
+ /* push result into the stack */
+ PUSH_V128(vector);
+
+ return true;
+fail:
+ return false;
+}
+
+LLVMValueRef
+simd_lane_id_to_llvm_value(AOTCompContext *comp_ctx, uint8 lane_id)
+{
+ LLVMValueRef lane_indexes[] = {
+ LLVM_CONST(i32_zero), LLVM_CONST(i32_one),
+ LLVM_CONST(i32_two), LLVM_CONST(i32_three),
+ LLVM_CONST(i32_four), LLVM_CONST(i32_five),
+ LLVM_CONST(i32_six), LLVM_CONST(i32_seven),
+ LLVM_CONST(i32_eight), LLVM_CONST(i32_nine),
+ LLVM_CONST(i32_ten), LLVM_CONST(i32_eleven),
+ LLVM_CONST(i32_twelve), LLVM_CONST(i32_thirteen),
+ LLVM_CONST(i32_fourteen), LLVM_CONST(i32_fifteen),
+ };
+
+ return lane_id < 16 ? lane_indexes[lane_id] : NULL;
+}
+
+LLVMValueRef
+simd_build_const_integer_vector(const AOTCompContext *comp_ctx,
+ const LLVMTypeRef element_type,
+ const int *element_value, uint32 length)
+{
+ LLVMValueRef vector = NULL;
+ LLVMValueRef *elements;
+ unsigned i;
+
+ if (!(elements = wasm_runtime_malloc(sizeof(LLVMValueRef) * length))) {
+ return NULL;
+ }
+
+ for (i = 0; i < length; i++) {
+ if (!(elements[i] =
+ LLVMConstInt(element_type, element_value[i], true))) {
+ HANDLE_FAILURE("LLVMConstInst");
+ goto fail;
+ }
+ }
+
+ if (!(vector = LLVMConstVector(elements, length))) {
+ HANDLE_FAILURE("LLVMConstVector");
+ goto fail;
+ }
+
+fail:
+ wasm_runtime_free(elements);
+ return vector;
+}
+
+LLVMValueRef
+simd_build_splat_const_integer_vector(const AOTCompContext *comp_ctx,
+ const LLVMTypeRef element_type,
+ const int64 element_value, uint32 length)
+{
+ LLVMValueRef vector = NULL, element;
+ LLVMValueRef *elements;
+ unsigned i;
+
+ if (!(elements = wasm_runtime_malloc(sizeof(LLVMValueRef) * length))) {
+ return NULL;
+ }
+
+ if (!(element = LLVMConstInt(element_type, element_value, true))) {
+ HANDLE_FAILURE("LLVMConstInt");
+ goto fail;
+ }
+
+ for (i = 0; i < length; i++) {
+ elements[i] = element;
+ }
+
+ if (!(vector = LLVMConstVector(elements, length))) {
+ HANDLE_FAILURE("LLVMConstVector");
+ goto fail;
+ }
+
+fail:
+ wasm_runtime_free(elements);
+ return vector;
+}
+
+LLVMValueRef
+simd_build_splat_const_float_vector(const AOTCompContext *comp_ctx,
+ const LLVMTypeRef element_type,
+ const float element_value, uint32 length)
+{
+ LLVMValueRef vector = NULL, element;
+ LLVMValueRef *elements;
+ unsigned i;
+
+ if (!(elements = wasm_runtime_malloc(sizeof(LLVMValueRef) * length))) {
+ return NULL;
+ }
+
+ if (!(element = LLVMConstReal(element_type, element_value))) {
+ HANDLE_FAILURE("LLVMConstReal");
+ goto fail;
+ }
+
+ for (i = 0; i < length; i++) {
+ elements[i] = element;
+ }
+
+ if (!(vector = LLVMConstVector(elements, length))) {
+ HANDLE_FAILURE("LLVMConstVector");
+ goto fail;
+ }
+
+fail:
+ wasm_runtime_free(elements);
+ return vector;
+}