max :: proc { wasm.max_f32, wasm.max_f64, max_poly }
max_poly :: (a: $T, b: T) -> T {
if a >= b do return a;
- return b;
+ else do return b;
}
min :: proc { wasm.min_f32, wasm.min_f64, min_poly }
min_poly :: (a: $T, b: T) -> T {
if a <= b do return a;
- return b;
+ else do return b;
}
clamp :: (v: $T, lo: T, hi: T) -> T {
abs :: proc { wasm.abs_f32, wasm.abs_f64, abs_poly }
abs_poly :: (x: $T) -> T {
if x >= 0 do return x;
- return -x;
+ else do return -x;
}
sign :: (x: $T) -> T {
}
}
+ {
+ WasmFuncType* ft = mod->types[type_idx];
+ switch (ft->return_type) {
+ case WASM_TYPE_INT32: bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_I32_CONST, 0x00 })); break;
+ case WASM_TYPE_INT64: bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_I64_CONST, 0x00 })); break;
+ case WASM_TYPE_FLOAT32: bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_F32_CONST, 0x00 })); break;
+ case WASM_TYPE_FLOAT64: bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_F64_CONST, 0x00 })); break;
+ case WASM_TYPE_VAR128: {
+ static u8 zero_v128[] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
+ bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_V128_CONST, { .p = &zero_v128 } }));
+ break;
+ }
+ }
+ }
+
bh_arr_push(wasm_func.code, ((WasmInstruction){ WI_BLOCK_END, 0x00 }));
// HACK: This is gross