moved intrinsics files to own folder;
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 16 Dec 2020 02:27:59 +0000 (20:27 -0600)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Wed, 16 Dec 2020 02:27:59 +0000 (20:27 -0600)
12 files changed:
core/alloc.onyx
core/intrinsics.onyx [deleted file]
core/intrinsics/simd_intrinsics.onyx [new file with mode: 0644]
core/intrinsics/wasm.onyx [new file with mode: 0644]
core/math.onyx
core/simd_intrinsics.onyx [deleted file]
core/std/js.onyx
core/std/wasi.onyx
core/stdio.onyx
onyx
progs/simd_test.onyx
src/onyxwasm.c

index c8574c23c4efc7e554aaafbda4faf2b7d7fd62b6..53321a3475dfcfa98b3c7678d0339b9ec5649bf8 100644 (file)
@@ -1,9 +1,9 @@
 package core.allocator
 
 #include_file "core/memory"
-#include_file "core/intrinsics"
+#include_file "core/intrinsics/wasm"
 
-use package core { memory_size, memory_grow }
+use package core.intrinsics.wasm { memory_size, memory_grow }
 use package core.memory as memory
 
 heap_allocator : Allocator;
diff --git a/core/intrinsics.onyx b/core/intrinsics.onyx
deleted file mode 100644 (file)
index 6aee93e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-package core
-
-memory_size  :: proc () -> i32 #intrinsic ---
-memory_grow  :: proc (val: i32) -> i32 #intrinsic ---
-
-clz_i32      :: proc (val: i32) -> i32 #intrinsic ---
-ctz_i32      :: proc (val: i32) -> i32 #intrinsic ---
-popcnt_i32   :: proc (val: i32) -> i32 #intrinsic ---
-and_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-or_i32       :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-xor_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-shl_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-slr_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-sar_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-rotl_i32     :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-rotr_i32     :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
-
-clz_i64      :: proc (val: i64) -> i64 #intrinsic ---
-ctz_i64      :: proc (val: i64) -> i64 #intrinsic ---
-popcnt_i64   :: proc (val: i64) -> i64 #intrinsic ---
-and_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-or_i64       :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-xor_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-shl_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-slr_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-sar_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-rotl_i64     :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-rotr_i64     :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
-
-abs_f32      :: proc (val: f32) -> f32 #intrinsic ---
-ceil_f32     :: proc (val: f32) -> f32 #intrinsic ---
-floor_f32    :: proc (val: f32) -> f32 #intrinsic ---
-trunc_f32    :: proc (val: f32) -> f32 #intrinsic ---
-nearest_f32  :: proc (val: f32) -> f32 #intrinsic ---
-sqrt_f32     :: proc (val: f32) -> f32 #intrinsic ---
-min_f32      :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---
-max_f32      :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---
-copysign_f32 :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---
-
-abs_f64      :: proc (val: f64) -> f64 #intrinsic ---
-ceil_f64     :: proc (val: f64) -> f64 #intrinsic ---
-floor_f64    :: proc (val: f64) -> f64 #intrinsic ---
-trunc_f64    :: proc (val: f64) -> f64 #intrinsic ---
-nearest_f64  :: proc (val: f64) -> f64 #intrinsic ---
-sqrt_f64     :: proc (val: f64) -> f64 #intrinsic ---
-min_f64      :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---
-max_f64      :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---
-copysign_f64 :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---
diff --git a/core/intrinsics/simd_intrinsics.onyx b/core/intrinsics/simd_intrinsics.onyx
new file mode 100644 (file)
index 0000000..1e5033b
--- /dev/null
@@ -0,0 +1,205 @@
+package core.intrinsics.simd
+
+// NOTE: These u8 values must be compile time known values.
+v128_const :: proc (b1: u8,  b2: u8,  b3: u8,  b4: u8,
+                    b5: u8,  b6: u8,  b7: u8,  b8: u8,
+                    b9: u8,  b10: u8, b11: u8, b12: u8,
+                    b13: u8, b14: u8, b15: u8, b16: u8) -> v128 #intrinsic ---
+
+i8x16_const :: proc (b1: i8,  b2: i8,  b3: i8,  b4: i8,
+                     b5: i8,  b6: i8,  b7: i8,  b8: i8,
+                     b9: i8,  b10: i8, b11: i8, b12: i8,
+                     b13: i8, b14: i8, b15: i8, b16: i8) -> i8x16 #intrinsic ---
+i16x8_const :: proc (b1: i16,  b2: i16,  b3: i16,  b4: i16,
+                     b5: i16,  b6: i16,  b7: i16,  b8: i16) -> i16x8 #intrinsic ---
+i32x4_const :: proc (b1: i32,  b2: i32,  b3: i32,  b4: i32) -> i32x4 #intrinsic ---
+i64x2_const :: proc (b1: i64,  b2: i64)                     -> i64x2 #intrinsic ---
+f32x4_const :: proc (b1: f32,  b2: f32,  b3: f32,  b4: f32) -> f32x4 #intrinsic ---
+f64x2_const :: proc (b1: f64,  b2: f64)                     -> f64x2 #intrinsic ---
+
+// NOTE: These u8 values must be compile time known values.
+i8x16_shuffle :: proc (a: v128, b: v128,
+                       b1: u8,  b2: u8,  b3: u8,  b4: u8,
+                       b5: u8,  b6: u8,  b7: u8,  b8: u8,
+                       b9: u8,  b10: u8, b11: u8, b12: u8,
+                       b13: u8, b14: u8, b15: u8, b16: u8) -> v128 #intrinsic ---
+
+i8x16_extract_lane_s :: proc (v: i8x16, l: u32)           -> i8    #intrinsic ---
+i8x16_extract_lane_u :: proc (v: i8x16, l: u32)           -> u8    #intrinsic ---
+i8x16_replace_lane   :: proc (v: i8x16, l: u32, val: i8)  -> i8x16 #intrinsic ---
+i16x8_extract_lane_s :: proc (v: i16x8, l: u32)           -> i16   #intrinsic ---
+i16x8_extract_lane_u :: proc (v: i16x8, l: u32)           -> u16   #intrinsic ---
+i16x8_replace_lane   :: proc (v: i16x8, l: u32, val: i16) -> i16x8 #intrinsic ---
+i32x4_extract_lane   :: proc (v: i32x4, l: u32)           -> i32   #intrinsic ---
+i32x4_replace_lane   :: proc (v: i32x4, l: u32, val: i32) -> i32x4 #intrinsic ---
+i64x2_extract_lane   :: proc (v: i64x2, l: u32)           -> i64   #intrinsic ---
+i64x2_replace_lane   :: proc (v: i64x2, l: u32, val: i64) -> i64x2 #intrinsic ---
+f32x4_extract_lane   :: proc (v: f32x4, l: u32)           -> f32   #intrinsic ---
+f32x4_replace_lane   :: proc (v: f32x4, l: u32, val: f32) -> f32x4 #intrinsic ---
+f64x2_extract_lane   :: proc (v: f64x2, l: u32)           -> f64   #intrinsic ---
+f64x2_replace_lane   :: proc (v: f64x2, l: u32, val: f64) -> f64x2 #intrinsic ---
+
+i8x16_swizzle :: proc (v: v128, s: v128)  -> v128  #intrinsic ---
+i8x16_splat   :: proc (val: i8)  -> i8x16 #intrinsic ---
+i16x8_splat   :: proc (val: i16) -> i16x8 #intrinsic ---
+i32x4_splat   :: proc (val: i32) -> i32x4 #intrinsic ---
+i64x2_splat   :: proc (val: i64) -> i64x2 #intrinsic ---
+f32x4_splat   :: proc (val: f32) -> f32x4 #intrinsic ---
+f64x2_splat   :: proc (val: f64) -> f64x2 #intrinsic ---
+
+i8x16_eq   :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_neq  :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_lt_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_lt_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_gt_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_gt_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_le_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_le_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_ge_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_ge_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+
+i16x8_eq   :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_neq  :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_lt_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_lt_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_gt_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_gt_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_le_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_le_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_ge_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_ge_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+
+i32x4_eq   :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_neq  :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_lt_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_lt_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_gt_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_gt_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_le_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_le_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_ge_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_ge_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+
+f32x4_eq  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
+f32x4_neq :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
+f32x4_lt  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
+f32x4_gt  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
+f32x4_le  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
+f32x4_ge  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
+
+f64x2_eq  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_neq :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_lt  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_gt  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_le  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_ge  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+
+v128_not    :: proc (v: v128) -> v128 #intrinsic ---
+v128_and    :: proc (a: v128, b: v128) -> v128 #intrinsic ---
+v128_andnot :: proc (a: v128, b: v128) -> v128 #intrinsic ---
+v128_or     :: proc (a: v128, b: v128) -> v128 #intrinsic ---
+v128_xor    :: proc (a: v128, b: v128) -> v128 #intrinsic ---
+v128_bitselect :: proc (a: v128, b: v128, c: v128) -> v128 #intrinsic ---
+
+i8x16_abs            :: proc (a: i8x16) -> i8x16 #intrinsic ---
+i8x16_neg            :: proc (a: i8x16) -> i8x16 #intrinsic ---
+i8x16_any_true       :: proc (a: i8x16) -> bool #intrinsic ---
+i8x16_all_true       :: proc (a: i8x16) -> bool #intrinsic ---
+i8x16_bitmask        :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_narrow_i16x8_s :: proc (a: i16x8) -> i8x16 #intrinsic ---
+i8x16_narrow_i16x8_u :: proc (a: i16x8) -> i8x16 #intrinsic ---
+i8x16_shl            :: proc (a: i8x16, s: i32) -> i8x16 #intrinsic ---
+i8x16_shr_s          :: proc (a: i8x16, s: i32) -> i8x16 #intrinsic ---
+i8x16_shr_u          :: proc (a: i8x16, s: i32) -> i8x16 #intrinsic ---
+i8x16_add            :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_add_sat_s      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_add_sat_u      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_sub            :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_sub_sat_s      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_sub_sat_u      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_min_s          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_min_u          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_max_s          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_max_u          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
+i8x16_avgr_u         :: proc (a: i8x16) -> i8x16 #intrinsic ---
+
+i16x8_abs                :: proc (a: i16x8) -> i16x8 #intrinsic ---
+i16x8_neg                :: proc (a: i16x8) -> i16x8 #intrinsic ---
+i16x8_any_true           :: proc (a: i16x8) -> bool #intrinsic ---
+i16x8_all_true           :: proc (a: i16x8) -> bool #intrinsic ---
+i16x8_bitmask            :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_narrow_i32x4_s     :: proc (a: i32x4) -> i16x8 #intrinsic ---
+i16x8_narrow_i32x4_u     :: proc (a: i32x4) -> i16x8 #intrinsic ---
+i16x8_widen_low_i8x16_s  :: proc (a: i8x16) -> i16x8 #intrinsic ---
+i16x8_widen_high_i8x16_s :: proc (a: i8x16) -> i16x8 #intrinsic ---
+i16x8_widen_low_i8x16_u  :: proc (a: i8x16) -> i16x8 #intrinsic ---
+i16x8_widen_high_i8x16_u :: proc (a: i8x16) -> i16x8 #intrinsic ---
+i16x8_shl                :: proc (a: i16x8, s: i32) -> i16x8 #intrinsic ---
+i16x8_shr_s              :: proc (a: i16x8, s: i32) -> i16x8 #intrinsic ---
+i16x8_shr_u              :: proc (a: i16x8, s: i32) -> i16x8 #intrinsic ---
+i16x8_add                :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_add_sat_s          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_add_sat_u          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_sub                :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_sub_sat_s          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_sub_sat_u          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_mul                :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_min_s              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_min_u              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_max_s              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_max_u              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
+i16x8_avgr_u             :: proc (a: i16x8) -> i16x8 #intrinsic ---
+
+i32x4_abs                :: proc (a: i32x4) -> i32x4 #intrinsic ---
+i32x4_neg                :: proc (a: i32x4) -> i32x4 #intrinsic ---
+i32x4_any_true           :: proc (a: i32x4) -> bool #intrinsic ---
+i32x4_all_true           :: proc (a: i32x4) -> bool #intrinsic ---
+i32x4_bitmask            :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_widen_low_i16x8_s  :: proc (a: i16x8) -> i32x4 #intrinsic ---
+i32x4_widen_high_i16x8_s :: proc (a: i16x8) -> i32x4 #intrinsic ---
+i32x4_widen_low_i16x8_u  :: proc (a: i16x8) -> i32x4 #intrinsic ---
+i32x4_widen_high_i16x8_u :: proc (a: i16x8) -> i32x4 #intrinsic ---
+i32x4_shl                :: proc (a: i32x4, s: i32) -> i32x4 #intrinsic ---
+i32x4_shr_s              :: proc (a: i32x4, s: i32) -> i32x4 #intrinsic ---
+i32x4_shl_u              :: proc (a: i32x4, s: i32) -> i32x4 #intrinsic ---
+i32x4_add                :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_sub                :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_mul                :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_min_s              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_min_u              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_max_s              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+i32x4_max_u              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
+
+i64x2_neg   :: proc (a: i64x2) -> i64x2 #intrinsic ---
+i64x2_shl   :: proc (a: i64x2, s: i32) -> i64x2 #intrinsic ---
+i64x2_shr_s :: proc (a: i64x2, s: i32) -> i64x2 #intrinsic ---
+i64x2_shr_u :: proc (a: i64x2, s: i32) -> i64x2 #intrinsic ---
+i64x2_add   :: proc (a: i64x2, b: i64x2) -> i64x2 #intrinsic ---
+i64x2_sub   :: proc (a: i64x2, b: i64x2) -> i64x2 #intrinsic ---
+i64x2_mul   :: proc (a: i64x2, b: i64x2) -> i64x2 #intrinsic ---
+
+f32x4_abs  :: proc (a: f32x4) -> f32x4 #intrinsic ---
+f32x4_neg  :: proc (a: f32x4) -> f32x4 #intrinsic ---
+f32x4_sqrt :: proc (a: f32x4) -> f32x4 #intrinsic ---
+f32x4_add  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
+f32x4_sub  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
+f32x4_mul  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
+f32x4_div  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
+f32x4_min  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
+f32x4_max  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
+
+f64x2_abs  :: proc (a: f64x2) -> f64x2 #intrinsic ---
+f64x2_neg  :: proc (a: f64x2) -> f64x2 #intrinsic ---
+f64x2_sqrt :: proc (a: f64x2) -> f64x2 #intrinsic ---
+f64x2_add  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_sub  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_mul  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_div  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_min  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+f64x2_max  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
+
+// NOTE: These may be backwards
+i32x4_trunc_sat_f32x4_s :: proc (v: f32x4) -> i32x4 #intrinsic ---
+i32x4_trunc_sat_f32x4_u :: proc (v: f32x4) -> i32x4 #intrinsic ---
+f32x4_convert_i32x4_s   :: proc (v: i32x4) -> f32x4 #intrinsic ---
+f32x4_convert_i32x4_u   :: proc (v: i32x4) -> f32x4 #intrinsic ---
diff --git a/core/intrinsics/wasm.onyx b/core/intrinsics/wasm.onyx
new file mode 100644 (file)
index 0000000..9aafb61
--- /dev/null
@@ -0,0 +1,48 @@
+package core.intrinsics.wasm
+
+memory_size  :: proc () -> i32 #intrinsic ---
+memory_grow  :: proc (val: i32) -> i32 #intrinsic ---
+
+clz_i32      :: proc (val: i32) -> i32 #intrinsic ---
+ctz_i32      :: proc (val: i32) -> i32 #intrinsic ---
+popcnt_i32   :: proc (val: i32) -> i32 #intrinsic ---
+and_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+or_i32       :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+xor_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+shl_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+slr_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+sar_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+rotl_i32     :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+rotr_i32     :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---
+
+clz_i64      :: proc (val: i64) -> i64 #intrinsic ---
+ctz_i64      :: proc (val: i64) -> i64 #intrinsic ---
+popcnt_i64   :: proc (val: i64) -> i64 #intrinsic ---
+and_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+or_i64       :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+xor_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+shl_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+slr_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+sar_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+rotl_i64     :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+rotr_i64     :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---
+
+abs_f32      :: proc (val: f32) -> f32 #intrinsic ---
+ceil_f32     :: proc (val: f32) -> f32 #intrinsic ---
+floor_f32    :: proc (val: f32) -> f32 #intrinsic ---
+trunc_f32    :: proc (val: f32) -> f32 #intrinsic ---
+nearest_f32  :: proc (val: f32) -> f32 #intrinsic ---
+sqrt_f32     :: proc (val: f32) -> f32 #intrinsic ---
+min_f32      :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---
+max_f32      :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---
+copysign_f32 :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---
+
+abs_f64      :: proc (val: f64) -> f64 #intrinsic ---
+ceil_f64     :: proc (val: f64) -> f64 #intrinsic ---
+floor_f64    :: proc (val: f64) -> f64 #intrinsic ---
+trunc_f64    :: proc (val: f64) -> f64 #intrinsic ---
+nearest_f64  :: proc (val: f64) -> f64 #intrinsic ---
+sqrt_f64     :: proc (val: f64) -> f64 #intrinsic ---
+min_f64      :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---
+max_f64      :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---
+copysign_f64 :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---
index b0bf248b8450364c3258eda864946722232039ba..f2999bc31d832a3cda1f959ce45ac50b036ab584 100644 (file)
@@ -1,6 +1,6 @@
 package core.math
 
-use package core {
+use package core.intrinsics.wasm {
     sqrt_f32, sqrt_f64,
     abs_f32,  abs_f64
 }
diff --git a/core/simd_intrinsics.onyx b/core/simd_intrinsics.onyx
deleted file mode 100644 (file)
index bbd88a7..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-package simd
-
-// NOTE: These u8 values must be compile time known values.
-v128_const :: proc (b1: u8,  b2: u8,  b3: u8,  b4: u8,
-                    b5: u8,  b6: u8,  b7: u8,  b8: u8,
-                    b9: u8,  b10: u8, b11: u8, b12: u8,
-                    b13: u8, b14: u8, b15: u8, b16: u8) -> v128 #intrinsic ---
-
-i8x16_const :: proc (b1: i8,  b2: i8,  b3: i8,  b4: i8,
-                     b5: i8,  b6: i8,  b7: i8,  b8: i8,
-                     b9: i8,  b10: i8, b11: i8, b12: i8,
-                     b13: i8, b14: i8, b15: i8, b16: i8) -> i8x16 #intrinsic ---
-i16x8_const :: proc (b1: i16,  b2: i16,  b3: i16,  b4: i16,
-                     b5: i16,  b6: i16,  b7: i16,  b8: i16) -> i16x8 #intrinsic ---
-i32x4_const :: proc (b1: i32,  b2: i32,  b3: i32,  b4: i32) -> i32x4 #intrinsic ---
-i64x2_const :: proc (b1: i64,  b2: i64)                     -> i64x2 #intrinsic ---
-f32x4_const :: proc (b1: f32,  b2: f32,  b3: f32,  b4: f32) -> f32x4 #intrinsic ---
-f64x2_const :: proc (b1: f64,  b2: f64)                     -> f64x2 #intrinsic ---
-
-// NOTE: These u8 values must be compile time known values.
-i8x16_shuffle :: proc (a: v128, b: v128,
-                       b1: u8,  b2: u8,  b3: u8,  b4: u8,
-                       b5: u8,  b6: u8,  b7: u8,  b8: u8,
-                       b9: u8,  b10: u8, b11: u8, b12: u8,
-                       b13: u8, b14: u8, b15: u8, b16: u8) -> v128 #intrinsic ---
-
-i8x16_extract_lane_s :: proc (v: i8x16, l: u32)           -> i8    #intrinsic ---
-i8x16_extract_lane_u :: proc (v: i8x16, l: u32)           -> u8    #intrinsic ---
-i8x16_replace_lane   :: proc (v: i8x16, l: u32, val: i8)  -> i8x16 #intrinsic ---
-i16x8_extract_lane_s :: proc (v: i16x8, l: u32)           -> i16   #intrinsic ---
-i16x8_extract_lane_u :: proc (v: i16x8, l: u32)           -> u16   #intrinsic ---
-i16x8_replace_lane   :: proc (v: i16x8, l: u32, val: i16) -> i16x8 #intrinsic ---
-i32x4_extract_lane   :: proc (v: i32x4, l: u32)           -> i32   #intrinsic ---
-i32x4_replace_lane   :: proc (v: i32x4, l: u32, val: i32) -> i32x4 #intrinsic ---
-i64x2_extract_lane   :: proc (v: i64x2, l: u32)           -> i64   #intrinsic ---
-i64x2_replace_lane   :: proc (v: i64x2, l: u32, val: i64) -> i64x2 #intrinsic ---
-f32x4_extract_lane   :: proc (v: f32x4, l: u32)           -> f32   #intrinsic ---
-f32x4_replace_lane   :: proc (v: f32x4, l: u32, val: f32) -> f32x4 #intrinsic ---
-f64x2_extract_lane   :: proc (v: f64x2, l: u32)           -> f64   #intrinsic ---
-f64x2_replace_lane   :: proc (v: f64x2, l: u32, val: f64) -> f64x2 #intrinsic ---
-
-i8x16_swizzle :: proc (v: v128, s: v128)  -> v128  #intrinsic ---
-i8x16_splat   :: proc (val: i8)  -> i8x16 #intrinsic ---
-i16x8_splat   :: proc (val: i16) -> i16x8 #intrinsic ---
-i32x4_splat   :: proc (val: i32) -> i32x4 #intrinsic ---
-i64x2_splat   :: proc (val: i64) -> i64x2 #intrinsic ---
-f32x4_splat   :: proc (val: f32) -> f32x4 #intrinsic ---
-f64x2_splat   :: proc (val: f64) -> f64x2 #intrinsic ---
-
-i8x16_eq   :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_neq  :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_lt_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_lt_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_gt_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_gt_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_le_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_le_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_ge_s :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_ge_u :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-
-i16x8_eq   :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_neq  :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_lt_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_lt_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_gt_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_gt_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_le_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_le_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_ge_s :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_ge_u :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-
-i32x4_eq   :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_neq  :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_lt_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_lt_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_gt_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_gt_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_le_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_le_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_ge_s :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_ge_u :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-
-f32x4_eq  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
-f32x4_neq :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
-f32x4_lt  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
-f32x4_gt  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
-f32x4_le  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
-f32x4_ge  :: proc (a: f32x4, b: f32x4) -> i32x4 #intrinsic ---
-
-f64x2_eq  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_neq :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_lt  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_gt  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_le  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_ge  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-
-v128_not    :: proc (v: v128) -> v128 #intrinsic ---
-v128_and    :: proc (a: v128, b: v128) -> v128 #intrinsic ---
-v128_andnot :: proc (a: v128, b: v128) -> v128 #intrinsic ---
-v128_or     :: proc (a: v128, b: v128) -> v128 #intrinsic ---
-v128_xor    :: proc (a: v128, b: v128) -> v128 #intrinsic ---
-v128_bitselect :: proc (a: v128, b: v128, c: v128) -> v128 #intrinsic ---
-
-i8x16_abs            :: proc (a: i8x16) -> i8x16 #intrinsic ---
-i8x16_neg            :: proc (a: i8x16) -> i8x16 #intrinsic ---
-i8x16_any_true       :: proc (a: i8x16) -> bool #intrinsic ---
-i8x16_all_true       :: proc (a: i8x16) -> bool #intrinsic ---
-i8x16_bitmask        :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_narrow_i16x8_s :: proc (a: i16x8) -> i8x16 #intrinsic ---
-i8x16_narrow_i16x8_u :: proc (a: i16x8) -> i8x16 #intrinsic ---
-i8x16_shl            :: proc (a: i8x16, s: i32) -> i8x16 #intrinsic ---
-i8x16_shr_s          :: proc (a: i8x16, s: i32) -> i8x16 #intrinsic ---
-i8x16_shr_u          :: proc (a: i8x16, s: i32) -> i8x16 #intrinsic ---
-i8x16_add            :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_add_sat_s      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_add_sat_u      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_sub            :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_sub_sat_s      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_sub_sat_u      :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_min_s          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_min_u          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_max_s          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_max_u          :: proc (a: i8x16, b: i8x16) -> i8x16 #intrinsic ---
-i8x16_avgr_u         :: proc (a: i8x16) -> i8x16 #intrinsic ---
-
-i16x8_abs                :: proc (a: i16x8) -> i16x8 #intrinsic ---
-i16x8_neg                :: proc (a: i16x8) -> i16x8 #intrinsic ---
-i16x8_any_true           :: proc (a: i16x8) -> bool #intrinsic ---
-i16x8_all_true           :: proc (a: i16x8) -> bool #intrinsic ---
-i16x8_bitmask            :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_narrow_i32x4_s     :: proc (a: i32x4) -> i16x8 #intrinsic ---
-i16x8_narrow_i32x4_u     :: proc (a: i32x4) -> i16x8 #intrinsic ---
-i16x8_widen_low_i8x16_s  :: proc (a: i8x16) -> i16x8 #intrinsic ---
-i16x8_widen_high_i8x16_s :: proc (a: i8x16) -> i16x8 #intrinsic ---
-i16x8_widen_low_i8x16_u  :: proc (a: i8x16) -> i16x8 #intrinsic ---
-i16x8_widen_high_i8x16_u :: proc (a: i8x16) -> i16x8 #intrinsic ---
-i16x8_shl                :: proc (a: i16x8, s: i32) -> i16x8 #intrinsic ---
-i16x8_shr_s              :: proc (a: i16x8, s: i32) -> i16x8 #intrinsic ---
-i16x8_shr_u              :: proc (a: i16x8, s: i32) -> i16x8 #intrinsic ---
-i16x8_add                :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_add_sat_s          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_add_sat_u          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_sub                :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_sub_sat_s          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_sub_sat_u          :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_mul                :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_min_s              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_min_u              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_max_s              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_max_u              :: proc (a: i16x8, b: i16x8) -> i16x8 #intrinsic ---
-i16x8_avgr_u             :: proc (a: i16x8) -> i16x8 #intrinsic ---
-
-i32x4_abs                :: proc (a: i32x4) -> i32x4 #intrinsic ---
-i32x4_neg                :: proc (a: i32x4) -> i32x4 #intrinsic ---
-i32x4_any_true           :: proc (a: i32x4) -> bool #intrinsic ---
-i32x4_all_true           :: proc (a: i32x4) -> bool #intrinsic ---
-i32x4_bitmask            :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_widen_low_i16x8_s  :: proc (a: i16x8) -> i32x4 #intrinsic ---
-i32x4_widen_high_i16x8_s :: proc (a: i16x8) -> i32x4 #intrinsic ---
-i32x4_widen_low_i16x8_u  :: proc (a: i16x8) -> i32x4 #intrinsic ---
-i32x4_widen_high_i16x8_u :: proc (a: i16x8) -> i32x4 #intrinsic ---
-i32x4_shl                :: proc (a: i32x4, s: i32) -> i32x4 #intrinsic ---
-i32x4_shr_s              :: proc (a: i32x4, s: i32) -> i32x4 #intrinsic ---
-i32x4_shl_u              :: proc (a: i32x4, s: i32) -> i32x4 #intrinsic ---
-i32x4_add                :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_sub                :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_mul                :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_min_s              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_min_u              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_max_s              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-i32x4_max_u              :: proc (a: i32x4, b: i32x4) -> i32x4 #intrinsic ---
-
-i64x2_neg   :: proc (a: i64x2) -> i64x2 #intrinsic ---
-i64x2_shl   :: proc (a: i64x2, s: i32) -> i64x2 #intrinsic ---
-i64x2_shr_s :: proc (a: i64x2, s: i32) -> i64x2 #intrinsic ---
-i64x2_shr_u :: proc (a: i64x2, s: i32) -> i64x2 #intrinsic ---
-i64x2_add   :: proc (a: i64x2, b: i64x2) -> i64x2 #intrinsic ---
-i64x2_sub   :: proc (a: i64x2, b: i64x2) -> i64x2 #intrinsic ---
-i64x2_mul   :: proc (a: i64x2, b: i64x2) -> i64x2 #intrinsic ---
-
-f32x4_abs  :: proc (a: f32x4) -> f32x4 #intrinsic ---
-f32x4_neg  :: proc (a: f32x4) -> f32x4 #intrinsic ---
-f32x4_sqrt :: proc (a: f32x4) -> f32x4 #intrinsic ---
-f32x4_add  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
-f32x4_sub  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
-f32x4_mul  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
-f32x4_div  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
-f32x4_min  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
-f32x4_max  :: proc (a: f32x4, b: f32x4) -> f32x4 #intrinsic ---
-
-f64x2_abs  :: proc (a: f64x2) -> f64x2 #intrinsic ---
-f64x2_neg  :: proc (a: f64x2) -> f64x2 #intrinsic ---
-f64x2_sqrt :: proc (a: f64x2) -> f64x2 #intrinsic ---
-f64x2_add  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_sub  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_mul  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_div  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_min  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-f64x2_max  :: proc (a: f64x2, b: f64x2) -> f64x2 #intrinsic ---
-
-// NOTE: These may be backwards
-i32x4_trunc_sat_f32x4_s :: proc (v: f32x4) -> i32x4 #intrinsic ---
-i32x4_trunc_sat_f32x4_u :: proc (v: f32x4) -> i32x4 #intrinsic ---
-f32x4_convert_i32x4_s   :: proc (v: i32x4) -> f32x4 #intrinsic ---
-f32x4_convert_i32x4_u   :: proc (v: i32x4) -> f32x4 #intrinsic ---
index 459ea86b03bc87ab25573718bd3db165c08b3ea7..dfde761516840e4594c9d17aee2c1de4b025953b 100644 (file)
@@ -5,7 +5,7 @@ package core
 #include_file "core/alloc"
 #include_file "core/array"
 #include_file "core/conv"
-#include_file "core/intrinsics"
+#include_file "core/intrinsics/wasm"
 #include_file "core/map"
 #include_file "core/math"
 #include_file "core/memory"
index 2a19f1d9af4149a02b2c4d251542a1b3a4543084..7d8e73a9e12b2900cc5998475cd0802085829176 100644 (file)
@@ -6,7 +6,7 @@ package core
 #include_file "core/array"
 #include_file "core/conv"
 #include_file "core/file"
-#include_file "core/intrinsics"
+#include_file "core/intrinsics/wasm"
 #include_file "core/map"
 #include_file "core/math"
 #include_file "core/memory"
index c48ffb2fb26eb8b31d5c2d092fc4e53cd2c7f679..8ebd94ca30000c5a13c8889d6fbd1e7b41039563 100644 (file)
@@ -1,4 +1,11 @@
 package core
+// Currently, these symbols are dumped in the 'core' namespace, which means
+// most programs that just 'use package core' can access all of them, which
+// is convenient; However, it doesn't hurt to wonder if they should be the
+// 'core.io' package so these would become like 'io.printf(...)'. Of course,
+// you could always still do 'use package core.io', which would bring these
+// in anyway.
+
 
 // It is expected that a file will be included that will be part
 // of the system package
diff --git a/onyx b/onyx
index 07ed65ddc6f1a3166f84c6f9a20047835878d6c0..51cdf8eabc92d9d7b774e792c1a5c4ca754ed783 100755 (executable)
Binary files a/onyx and b/onyx differ
index 02f59567fb18cb7eefa4ae1103a82ac422ddebdb..e4d316048908d9a752aec088955c423ccebfb24f 100644 (file)
@@ -1,10 +1,10 @@
 package main
 
 #include_file "core/std/wasi"
-#include_file "core/simd_intrinsics"
+#include_file "core/intrinsics/simd"
 
 use package core
-use package simd
+use package core.intrinsics.simd
 
 main :: proc (args: [] cstr) {
     x := f32x4_const(10.0f, 20.0f, 30.0f, 40.0f);
index 26f14bd57e60a73ae3b7b927ac3a606236aa209c..9b9b35c5aaa715e3335a5689b46ef3ed80c8b068 100644 (file)
@@ -2920,13 +2920,26 @@ static void emit_raw_data(OnyxWasmModule* mod, ptr data, AstTyped* node) {
         sdata[1] = sl->length;
         break;
     }
+
     case Ast_Kind_NumLit: {
+        // NOTE: This makes a big assumption that we are running on a
+        // little endian machine, since WebAssembly is little endian
+        // by specification. This is probably a safe assumption, but
+        // should probably be fixed at some point.
+        //                                - brendanfh  2020/12/15
+        
         switch (node->type->Basic.kind) {
         case Basic_Kind_Bool:
         case Basic_Kind_I8:
         case Basic_Kind_U8:
+            *((i8 *) data) = (i8) ((AstNumLit *) node)->value.i;
+            return;
+
         case Basic_Kind_I16:
         case Basic_Kind_U16:
+            *((i16 *) data) = (i16) ((AstNumLit *) node)->value.i;
+            return;
+
         case Basic_Kind_I32:
         case Basic_Kind_U32:
         case Basic_Kind_Rawptr: