@@ -408,8 +408,9 @@ let relop = oper (IntOp.relop, FloatOp.relop, SimdOp.relop)
408408let cvtop = oper (IntOp. cvtop, FloatOp. cvtop, SimdOp. cvtop)
409409let ternop = SimdOp. ternop
410410
411- let memop name {ty; align; offset; _} sz =
412- value_type ty ^ " ." ^ name ^
411+ (* Temporary wart here while we finalize the names of SIMD loads and extends. *)
412+ let memop ?(type_in_name =true ) name {ty; align; offset; _} sz =
413+ (if type_in_name then value_type ty ^ " ." else " " ) ^ name ^
413414 (if offset = 0l then " " else " offset=" ^ nat32 offset) ^
414415 (if 1 lsl align = sz then " " else " align=" ^ nat (1 lsl align))
415416
@@ -419,11 +420,33 @@ let loadop op =
419420 | Some (sz , ext ) ->
420421 memop (" load" ^ pack_size sz ^ extension ext) op (packed_size sz)
421422
423+ let simd_loadop (op : simd_loadop ) =
424+ match op.sz with
425+ | None -> memop " load" op (size op.ty)
426+ | Some (sz , pack_simd ) ->
427+ let prefix, suffix, ext =
428+ (match sz, pack_simd with
429+ | Pack64 , Pack8x8 ext -> " i16x8" , " 8x8" , extension ext
430+ | Pack64 , Pack16x4 ext -> " i32x4" , " 16x4" , extension ext
431+ | Pack64 , Pack32x2 ext -> " i64x2" , " 32x2" , extension ext
432+ | Pack8 , PackSplat -> " v8x16" , " _splat" , " "
433+ | Pack16 , PackSplat -> " v16x8" , " _splat" , " "
434+ | Pack32 , PackSplat -> " v32x4" , " _splat" , " "
435+ | Pack64 , PackSplat -> " v64x2" , " _splat" , " "
436+ | _ -> assert false
437+ ) in
438+ memop ~type_in_name: false (prefix ^ " .load" ^ suffix ^ ext) op (packed_size sz)
439+
422440let storeop op =
423441 match op.sz with
424442 | None -> memop " store" op (size op.ty)
425443 | Some sz -> memop (" store" ^ pack_size sz) op (packed_size sz)
426444
445+ let simd_storeop op =
446+ match op.sz with
447+ | None -> memop " store" op (size op.ty)
448+ | Some _ -> assert false
449+
427450
428451(* Expressions *)
429452
@@ -464,8 +487,8 @@ let rec instr e =
464487 | GlobalGet x -> " global.get " ^ var x, []
465488 | GlobalSet x -> " global.set " ^ var x, []
466489 | Load op -> loadop op, []
467- | SimdLoad op -> failwith " unimplemented SimdLoad arrange "
468- | SimdStore op -> failwith " unimplemented SimdStore arrange "
490+ | SimdLoad op -> simd_loadop op, []
491+ | SimdStore op -> simd_storeop op, []
469492 | Store op -> storeop op, []
470493 | MemorySize -> " memory.size" , []
471494 | MemoryGrow -> " memory.grow" , []
0 commit comments