mirror of
https://github.com/fluencelabs/wasmer
synced 2024-12-13 06:15:33 +00:00
Add V128 to wasmer runtime. Unimplemented in clif-backend. Other backends don't build.
This commit is contained in:
parent
0a1bdd449e
commit
df5c12cbe1
@ -107,6 +107,7 @@ impl From<Converter<ir::Type>> for Type {
|
||||
ir::types::I64 => Type::I64,
|
||||
ir::types::F32 => Type::F32,
|
||||
ir::types::F64 => Type::F64,
|
||||
ir::types::I32X4 => Type::V128,
|
||||
_ => panic!("unsupported wasm type"),
|
||||
}
|
||||
}
|
||||
@ -119,6 +120,7 @@ impl From<Converter<Type>> for ir::Type {
|
||||
Type::I64 => ir::types::I64,
|
||||
Type::F32 => ir::types::F32,
|
||||
Type::F64 => ir::types::F64,
|
||||
Type::V128 => ir::types::I32X4,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -130,6 +132,7 @@ impl From<Converter<Type>> for ir::AbiParam {
|
||||
Type::I64 => ir::AbiParam::new(ir::types::I64),
|
||||
Type::F32 => ir::AbiParam::new(ir::types::F32),
|
||||
Type::F64 => ir::AbiParam::new(ir::types::F64),
|
||||
Type::V128 => ir::AbiParam::new(ir::types::I32X4),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -204,6 +204,7 @@ fn wasm_ty_to_clif(ty: Type) -> ir::types::Type {
|
||||
Type::I64 => ir::types::I64,
|
||||
Type::F32 => ir::types::F32,
|
||||
Type::F64 => ir::types::F64,
|
||||
Type::V128 => ir::types::I32X4,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -50,6 +50,7 @@ impl Global {
|
||||
Value::I64(x) => x as u64,
|
||||
Value::F32(x) => x.to_bits() as u64,
|
||||
Value::F64(x) => x.to_bits(),
|
||||
Value::V128(_) => unimplemented!(),
|
||||
},
|
||||
};
|
||||
|
||||
@ -79,6 +80,7 @@ impl Global {
|
||||
Value::I64(x) => x as u64,
|
||||
Value::F32(x) => x.to_bits() as u64,
|
||||
Value::F64(x) => x.to_bits(),
|
||||
Value::V128(_) => unimplemented!(),
|
||||
},
|
||||
};
|
||||
*self.storage.borrow_mut() = local_global;
|
||||
@ -99,6 +101,7 @@ impl Global {
|
||||
Type::I64 => Value::I64(data as i64),
|
||||
Type::F32 => Value::F32(f32::from_bits(data as u32)),
|
||||
Type::F64 => Value::F64(f64::from_bits(data)),
|
||||
Type::V128 => unimplemented!(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -551,6 +551,7 @@ fn call_func_with_index(
|
||||
Value::I64(i) => *i as u64,
|
||||
Value::F32(f) => f.to_bits() as u64,
|
||||
Value::F64(f) => f.to_bits(),
|
||||
Value::V128(_) => unimplemented!(),
|
||||
})
|
||||
.collect();
|
||||
|
||||
@ -595,6 +596,7 @@ fn call_func_with_index(
|
||||
Type::I64 => Value::I64(raw as i64),
|
||||
Type::F32 => Value::F32(f32::from_bits(raw as u32)),
|
||||
Type::F64 => Value::F64(f64::from_bits(raw)),
|
||||
Type::V128 => unimplemented!(),
|
||||
};
|
||||
|
||||
match signature.returns() {
|
||||
|
@ -380,12 +380,7 @@ pub fn wp_type_to_type(ty: WpType) -> Result<Type, BinaryReaderError> {
|
||||
WpType::I64 => Type::I64,
|
||||
WpType::F32 => Type::F32,
|
||||
WpType::F64 => Type::F64,
|
||||
WpType::V128 => {
|
||||
return Err(BinaryReaderError {
|
||||
message: "the wasmer llvm backend does not yet support the simd extension",
|
||||
offset: -1isize as usize,
|
||||
});
|
||||
}
|
||||
WpType::V128 => Type::V128,
|
||||
_ => panic!("broken invariant, invalid type"),
|
||||
})
|
||||
}
|
||||
@ -396,6 +391,7 @@ pub fn type_to_wp_type(ty: Type) -> WpType {
|
||||
Type::I64 => WpType::I64,
|
||||
Type::F32 => WpType::F32,
|
||||
Type::F64 => WpType::F64,
|
||||
Type::V128 => WpType::V128,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,8 @@ pub enum Type {
|
||||
F32,
|
||||
/// The `f64` type.
|
||||
F64,
|
||||
/// The `v128` type.
|
||||
V128,
|
||||
}
|
||||
|
||||
impl std::fmt::Display for Type {
|
||||
@ -34,6 +36,8 @@ pub enum Value {
|
||||
F32(f32),
|
||||
/// The `f64` type.
|
||||
F64(f64),
|
||||
/// The `v128` type.
|
||||
V128(u128),
|
||||
}
|
||||
|
||||
impl Value {
|
||||
@ -43,6 +47,7 @@ impl Value {
|
||||
Value::I64(_) => Type::I64,
|
||||
Value::F32(_) => Type::F32,
|
||||
Value::F64(_) => Type::F64,
|
||||
Value::V128(_) => Type::V128,
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,6 +57,7 @@ impl Value {
|
||||
Value::I64(x) => x as u64,
|
||||
Value::F32(x) => f32::to_bits(x) as u64,
|
||||
Value::F64(x) => f64::to_bits(x),
|
||||
Value::V128(_) => unimplemented!(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -80,6 +86,12 @@ impl From<f64> for Value {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u128> for Value {
|
||||
fn from(v: u128) -> Self {
|
||||
Value::V128(v)
|
||||
}
|
||||
}
|
||||
|
||||
pub unsafe trait NativeWasmType: Copy + Into<Value>
|
||||
where
|
||||
Self: Sized,
|
||||
|
Loading…
Reference in New Issue
Block a user