From 0a696419010cc5aa4089569d46ac1fc98329969a Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 10 Sep 2020 13:50:46 -0500 Subject: [PATCH] added simd example; simd bugfixes --- onyx | Bin 694136 -> 694824 bytes progs/particle_sym.onyx | 75 ++++++++++++++++++++++++++++++++++++++++ src/onyxwasm.c | 44 +++++++++++++++-------- 3 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 progs/particle_sym.onyx diff --git a/onyx b/onyx index efe0a3be8e7ef743d2aaa53610409a154925250c..699262fdd4567660c9ca64759bef91c7d2ba2382 100755 GIT binary patch delta 52267 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�ox~oGz+d(wc?PxI?Lq1)|Jml<- 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 Fe*k^2X$t@V diff --git a/progs/particle_sym.onyx b/progs/particle_sym.onyx new file mode 100644 index 00000000..c694db38 --- /dev/null +++ b/progs/particle_sym.onyx @@ -0,0 +1,75 @@ +package main + +#include_file "core/std/wasi" +#include_file "core/simd_intrinsics" + +use package core +use package simd + +main :: proc (args: [] cstring) { + init_positions(); + init_velocities(); + + print("Beginning simulation.\n"); + + for i: 0 .. 20 { + update(); + print(cast(i64) (avg_motion() * 100000000000000000.0f)); + print("\n"); + } +} + +OBJECT_COUNT :: 10000 + +positions : [OBJECT_COUNT] f32x4 +velocities : [OBJECT_COUNT] f32x4 + +init_positions :: proc () { + for ^p: positions { + *p = f32x4_replace_lane(*p, 0, random_float(-127.0f, 127.0f)); + *p = f32x4_replace_lane(*p, 1, random_float(-127.0f, 127.0f)); + *p = f32x4_replace_lane(*p, 2, random_float(-127.0f, 127.0f)); + *p = f32x4_replace_lane(*p, 3, random_float(-127.0f, 127.0f)); + } +} + +init_velocities :: proc () { + for ^v: velocities do *v = f32x4_const(0.0f, 0.0f, 0.0f, 0.0f); +} + +horizontal_add :: proc (f: f32x4) -> f32 { + return f32x4_extract_lane(f, 0) + + f32x4_extract_lane(f, 1) + + f32x4_extract_lane(f, 2) + + f32x4_extract_lane(f, 3); +} + +distance :: proc (x: f32x4, y: f32x4) -> f32 { + d := f32x4_sub(x, y); + return horizontal_add(f32x4_mul(d, d)); +} + +update :: proc () { + for i: 0 .. OBJECT_COUNT { + for j: 0 .. OBJECT_COUNT { + dist := distance(positions[i], positions[j]); + if dist == 0.0f do continue; + + velocities[i] = f32x4_add(velocities[i], f32x4_div(f32x4_sub(positions[j], positions[i]), f32x4_splat(dist))); + } + } + + for i: 0 .. OBJECT_COUNT { + positions[i] = f32x4_add(positions[i], velocities[i]); + } +} + +avg_motion :: proc () -> f32 { + avg_motion := f32x4_splat(0.0f); + obj_vec := f32x4_splat(cast(f32) OBJECT_COUNT); + for v: velocities { + avg_motion = f32x4_add(avg_motion, f32x4_div(v, obj_vec)); + } + + return distance(f32x4_splat(0.0f), avg_motion); +} diff --git a/src/onyxwasm.c b/src/onyxwasm.c index b9312e9e..f5286ec6 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -1387,7 +1387,7 @@ EMIT_FUNC(call, AstCall* call) { WIP(WI_V128_CONST, byte_buffer); \ } -#define SIMD_LANE_INSTR(instr, arg) \ +#define SIMD_EXTRACT_LANE_INSTR(instr, arg) \ emit_expression(mod, &code, arg->value);\ arg = (AstArgument *) arg->next; \ if (arg->value->kind != Ast_Kind_NumLit) { \ @@ -1397,6 +1397,20 @@ EMIT_FUNC(call, AstCall* call) { } \ WID(instr, (u8) ((AstNumLit *) arg->value)->value.i); +#define SIMD_REPLACE_LANE_INSTR(instr, arg) { \ + emit_expression(mod, &code, arg->value);\ + arg = (AstArgument *) arg->next; \ + if (arg->value->kind != Ast_Kind_NumLit) { \ + onyx_report_error(arg->token->pos, "SIMD lane instructions expect a compile time lane number."); \ + *pcode = code; \ + return; \ + } \ + u8 lane = (u8) ((AstNumLit *) arg->value)->value.i; \ + arg = (AstArgument *) arg->next; \ + emit_expression(mod, &code, arg->value); \ + WID(instr, lane); \ + } + EMIT_FUNC(intrinsic_call, AstIntrinsicCall* call) { bh_arr(WasmInstruction) code = *pcode; @@ -1544,20 +1558,20 @@ EMIT_FUNC(intrinsic_call, AstIntrinsicCall* call) { break; } - case ONYX_INTRINSIC_I8X16_EXTRACT_LANE_S: SIMD_LANE_INSTR(WI_I8X16_EXTRACT_LANE_S, call->arguments); break; - case ONYX_INTRINSIC_I8X16_EXTRACT_LANE_U: SIMD_LANE_INSTR(WI_I8X16_EXTRACT_LANE_U, call->arguments); break; - case ONYX_INTRINSIC_I8X16_REPLACE_LANE: SIMD_LANE_INSTR(WI_I8X16_REPLACE_LANE, call->arguments); break; - case ONYX_INTRINSIC_I16X8_EXTRACT_LANE_S: SIMD_LANE_INSTR(WI_I16X8_EXTRACT_LANE_S, call->arguments); break; - case ONYX_INTRINSIC_I16X8_EXTRACT_LANE_U: SIMD_LANE_INSTR(WI_I16X8_EXTRACT_LANE_U, call->arguments); break; - case ONYX_INTRINSIC_I16X8_REPLACE_LANE: SIMD_LANE_INSTR(WI_I16X8_REPLACE_LANE, call->arguments); break; - case ONYX_INTRINSIC_I32X4_EXTRACT_LANE: SIMD_LANE_INSTR(WI_I32X4_EXTRACT_LANE, call->arguments); break; - case ONYX_INTRINSIC_I32X4_REPLACE_LANE: SIMD_LANE_INSTR(WI_I32X4_REPLACE_LANE, call->arguments); break; - case ONYX_INTRINSIC_I64X2_EXTRACT_LANE: SIMD_LANE_INSTR(WI_I64X2_EXTRACT_LANE, call->arguments); break; - case ONYX_INTRINSIC_I64X2_REPLACE_LANE: SIMD_LANE_INSTR(WI_I64X2_REPLACE_LANE, call->arguments); break; - case ONYX_INTRINSIC_F32X4_EXTRACT_LANE: SIMD_LANE_INSTR(WI_F32X4_EXTRACT_LANE, call->arguments); break; - case ONYX_INTRINSIC_F32X4_REPLACE_LANE: SIMD_LANE_INSTR(WI_F32X4_REPLACE_LANE, call->arguments); break; - case ONYX_INTRINSIC_F64X2_EXTRACT_LANE: SIMD_LANE_INSTR(WI_F64X2_EXTRACT_LANE, call->arguments); break; - case ONYX_INTRINSIC_F64X2_REPLACE_LANE: SIMD_LANE_INSTR(WI_F64X2_REPLACE_LANE, call->arguments); break; + case ONYX_INTRINSIC_I8X16_EXTRACT_LANE_S: SIMD_EXTRACT_LANE_INSTR(WI_I8X16_EXTRACT_LANE_S, call->arguments); break; + case ONYX_INTRINSIC_I8X16_EXTRACT_LANE_U: SIMD_EXTRACT_LANE_INSTR(WI_I8X16_EXTRACT_LANE_U, call->arguments); break; + case ONYX_INTRINSIC_I8X16_REPLACE_LANE: SIMD_REPLACE_LANE_INSTR(WI_I8X16_REPLACE_LANE, call->arguments); break; + case ONYX_INTRINSIC_I16X8_EXTRACT_LANE_S: SIMD_EXTRACT_LANE_INSTR(WI_I16X8_EXTRACT_LANE_S, call->arguments); break; + case ONYX_INTRINSIC_I16X8_EXTRACT_LANE_U: SIMD_EXTRACT_LANE_INSTR(WI_I16X8_EXTRACT_LANE_U, call->arguments); break; + case ONYX_INTRINSIC_I16X8_REPLACE_LANE: SIMD_REPLACE_LANE_INSTR(WI_I16X8_REPLACE_LANE, call->arguments); break; + case ONYX_INTRINSIC_I32X4_EXTRACT_LANE: SIMD_EXTRACT_LANE_INSTR(WI_I32X4_EXTRACT_LANE, call->arguments); break; + case ONYX_INTRINSIC_I32X4_REPLACE_LANE: SIMD_REPLACE_LANE_INSTR(WI_I32X4_REPLACE_LANE, call->arguments); break; + case ONYX_INTRINSIC_I64X2_EXTRACT_LANE: SIMD_EXTRACT_LANE_INSTR(WI_I64X2_EXTRACT_LANE, call->arguments); break; + case ONYX_INTRINSIC_I64X2_REPLACE_LANE: SIMD_REPLACE_LANE_INSTR(WI_I64X2_REPLACE_LANE, call->arguments); break; + case ONYX_INTRINSIC_F32X4_EXTRACT_LANE: SIMD_EXTRACT_LANE_INSTR(WI_F32X4_EXTRACT_LANE, call->arguments); break; + case ONYX_INTRINSIC_F32X4_REPLACE_LANE: SIMD_REPLACE_LANE_INSTR(WI_F32X4_REPLACE_LANE, call->arguments); break; + case ONYX_INTRINSIC_F64X2_EXTRACT_LANE: SIMD_EXTRACT_LANE_INSTR(WI_F64X2_EXTRACT_LANE, call->arguments); break; + case ONYX_INTRINSIC_F64X2_REPLACE_LANE: SIMD_REPLACE_LANE_INSTR(WI_F64X2_REPLACE_LANE, call->arguments); break; case ONYX_INTRINSIC_I8X16_SWIZZLE: WI(WI_I8X16_SWIZZLE); break; case ONYX_INTRINSIC_I8X16_SPLAT: WI(WI_I8X16_SPLAT); break; -- 2.25.1