|
29 | 29 | (global $empty_array (ref eq) |
30 | 30 | (array.new_fixed $block 1 (ref.i31 (i32.const 0)))) |
31 | 31 |
|
32 | | - (func $caml_make_vect (export "caml_make_vect") |
| 32 | + (func $caml_make_vect (export "caml_make_vect") (export "caml_array_make") |
33 | 33 | (param $n (ref eq)) (param $v (ref eq)) (result (ref eq)) |
34 | 34 | (local $sz i32) (local $b (ref $block)) (local $f f64) |
35 | 35 | (local.set $sz (i31.get_s (ref.cast (ref i31) (local.get $n)))) |
|
51 | 51 | (array.set $block (local.get $b) (i32.const 0) (ref.i31 (i32.const 0))) |
52 | 52 | (local.get $b)) |
53 | 53 |
|
54 | | - (export "caml_make_float_vect" (func $caml_floatarray_create)) |
55 | | - (func $caml_floatarray_create (export "caml_floatarray_create") |
| 54 | + (func (export "caml_floatarray_make") |
| 55 | + (param $n (ref eq)) (param $v (ref eq)) (result (ref eq)) |
| 56 | + (local $sz i32) (local $f f64) |
| 57 | + (local.set $sz (i31.get_s (ref.cast (ref i31) (local.get $n)))) |
| 58 | + (if (i32.lt_s (local.get $sz) (i32.const 0)) |
| 59 | + (then |
| 60 | + (call $caml_invalid_argument |
| 61 | + (array.new_data $string $Array_make |
| 62 | + (i32.const 0) (i32.const 10))))) |
| 63 | + (if (i32.eqz (local.get $sz)) (then (return (global.get $empty_array)))) |
| 64 | + (local.set $f |
| 65 | + (struct.get $float 0 |
| 66 | + (ref.cast (ref $float) (local.get $v)))) |
| 67 | + (array.new $float_array (local.get $f) (local.get $sz))) |
| 68 | + |
| 69 | + (func $caml_floatarray_create |
| 70 | + (export "caml_make_float_vect") (export "caml_floatarray_create") |
| 71 | + (export "caml_array_create_float") |
56 | 72 | (param $n (ref eq)) (result (ref eq)) |
57 | 73 | (local $sz i32) |
58 | 74 | (local.set $sz (i31.get_s (ref.cast (ref i31) (local.get $n)))) |
|
64 | 80 | (if (i32.eqz (local.get $sz)) (then (return (global.get $empty_array)))) |
65 | 81 | (array.new $float_array (f64.const 0) (local.get $sz))) |
66 | 82 |
|
67 | | - (func (export "caml_make_array") (param $vinit (ref eq)) (result (ref eq)) |
| 83 | + (func (export "caml_array_of_uniform_array") |
| 84 | + (param $vinit (ref eq)) (result (ref eq)) |
68 | 85 | (local $init (ref $block)) (local $res (ref $float_array)) |
69 | 86 | (local $size i32) (local $i i32) |
70 | 87 | (local.set $init (ref.cast (ref $block) (local.get $vinit))) |
|
130 | 147 | (local.get $len)) |
131 | 148 | (local.get $fa2)) |
132 | 149 |
|
| 150 | + (func (export "caml_floatarray_sub") |
| 151 | + (param $a (ref eq)) (param $i (ref eq)) (param $vlen (ref eq)) |
| 152 | + (result (ref eq)) |
| 153 | + (local $len i32) |
| 154 | + (local $fa1 (ref $float_array)) (local $fa2 (ref $float_array)) |
| 155 | + (local.set $len (i31.get_u (ref.cast (ref i31) (local.get $vlen)))) |
| 156 | + (if (i32.eqz (local.get $len)) (then (return (global.get $empty_array)))) |
| 157 | + (local.set $fa1 (ref.cast (ref $float_array) (local.get $a))) |
| 158 | + (local.set $fa2 (array.new $float_array (f64.const 0) (local.get $len))) |
| 159 | + (array.copy $float_array $float_array |
| 160 | + (local.get $fa2) (i32.const 0) (local.get $fa1) |
| 161 | + (i31.get_u (ref.cast (ref i31) (local.get $i))) |
| 162 | + (local.get $len)) |
| 163 | + (local.get $fa2)) |
| 164 | + |
133 | 165 | (func $caml_floatarray_dup (param $a (ref $float_array)) (result (ref eq)) |
134 | 166 | (local $a' (ref $float_array)) |
135 | 167 | (local $len i32) |
|
188 | 220 | (return (local.get $fa)))) |
189 | 221 | (return_call $caml_floatarray_dup (local.get $fa1))) |
190 | 222 |
|
| 223 | + (func (export "caml_floatarray_append") |
| 224 | + (param $va1 (ref eq)) (param $va2 (ref eq)) (result (ref eq)) |
| 225 | + (local $fa1 (ref $float_array)) (local $fa2 (ref $float_array)) |
| 226 | + (local $fa (ref $float_array)) |
| 227 | + (local $l1 i32) (local $l2 i32) |
| 228 | + (local.set $fa1 (ref.cast (ref $float_array) (local.get $va1))) |
| 229 | + (drop (block $a2_not_float_array (result (ref eq)) |
| 230 | + (local.set $fa2 |
| 231 | + (br_on_cast_fail $a2_not_float_array (ref eq) (ref $float_array) |
| 232 | + (local.get $va2))) |
| 233 | + (local.set $l1 (array.len (local.get $fa1))) |
| 234 | + (local.set $l2 (array.len (local.get $fa2))) |
| 235 | + (local.set $fa |
| 236 | + (array.new $float_array (f64.const 0) |
| 237 | + (i32.add (local.get $l1) (local.get $l2)))) |
| 238 | + (array.copy $float_array $float_array |
| 239 | + (local.get $fa) (i32.const 0) (local.get $fa1) (i32.const 0) |
| 240 | + (local.get $l1)) |
| 241 | + (array.copy $float_array $float_array |
| 242 | + (local.get $fa) (local.get $l1) (local.get $fa2) (i32.const 0) |
| 243 | + (local.get $l2)) |
| 244 | + (return (local.get $fa)))) |
| 245 | + (return_call $caml_floatarray_dup (local.get $fa1))) |
| 246 | + |
191 | 247 | (func (export "caml_array_concat") (param (ref eq)) (result (ref eq)) |
192 | 248 | (local $i i32) (local $len i32) |
193 | 249 | (local $l (ref eq)) (local $v (ref eq)) |
|
334 | 390 | (struct.get $float 0 (ref.cast (ref $float) (local.get $v))) |
335 | 391 | (local.get $len)))) |
336 | 392 | (ref.i31 (i32.const 0))) |
| 393 | + |
| 394 | + (func (export "caml_floatarray_fill") |
| 395 | + (param $a (ref eq)) (param $i (ref eq)) (param $vlen (ref eq)) |
| 396 | + (param $v (ref eq)) (result (ref eq)) |
| 397 | + (local $len i32) |
| 398 | + (local.set $len (i31.get_u (ref.cast (ref i31) (local.get $vlen)))) |
| 399 | + (if (local.get $len) |
| 400 | + (then |
| 401 | + (array.fill $float_array |
| 402 | + (ref.cast (ref $float_array) (local.get $a)) |
| 403 | + (i31.get_u (ref.cast (ref i31) (local.get $i))) |
| 404 | + (struct.get $float 0 (ref.cast (ref $float) (local.get $v))) |
| 405 | + (local.get $len)))) |
| 406 | + (ref.i31 (i32.const 0))) |
337 | 407 | ) |
0 commit comments