pub unsafe trait SIMD128: InstructionSet {
type V128: Copy;
unsafe fn v128_load(self, addr: *const u8) -> Self::V128;
unsafe fn v128_loadu(self, addr: *const u8) -> Self::V128;
unsafe fn v128_storeu(self, addr: *mut u8, a: Self::V128);
fn v128_or(self, a: Self::V128, b: Self::V128) -> Self::V128;
fn v128_and(self, a: Self::V128, b: Self::V128) -> Self::V128;
fn v128_to_bytes(self, a: Self::V128) -> [u8; 16];
fn u8x16_splat(self, x: u8) -> Self::V128;
fn i8x16_shuffle(self, a: Self::V128, b: Self::V128) -> Self::V128;
fn i16x8_sll<const IMM8: i32>(self, a: Self::V128) -> Self::V128;
fn i16x8_srl<const IMM8: i32>(self, a: Self::V128) -> Self::V128;
fn i16x8_extract<const IMM3: i32>(self, a: Self::V128) -> i16;
fn i32x4_extract<const IMM2: i32>(self, a: Self::V128) -> i32;
}