wasm_interp: last few instructions!

This commit is contained in:
Brian Carroll 2022-11-29 08:59:37 +00:00
parent 17810d5134
commit d29ea7fedf
No known key found for this signature in database
GPG key ID: 5C7B2EC4101703C0
3 changed files with 91 additions and 7 deletions

View file

@ -1107,9 +1107,28 @@ impl<'a> Instance<'a> {
let arg1 = self.value_stack.pop_f32();
self.value_stack.push(Value::F32(arg1 / arg2));
}
F32MIN => todo!("{:?} @ {:#x}", op_code, file_offset),
F32MAX => todo!("{:?} @ {:#x}", op_code, file_offset),
F32COPYSIGN => todo!("{:?} @ {:#x}", op_code, file_offset),
F32MIN => {
let arg2 = self.value_stack.pop_f32();
let arg1 = self.value_stack.pop_f32();
let result = if arg1 < arg2 { arg1 } else { arg2 };
self.value_stack.push(Value::F32(result));
}
F32MAX => {
let arg2 = self.value_stack.pop_f32();
let arg1 = self.value_stack.pop_f32();
let result = if arg1 > arg2 { arg1 } else { arg2 };
self.value_stack.push(Value::F32(result));
}
F32COPYSIGN => {
let arg2 = self.value_stack.pop_f32();
let arg1 = self.value_stack.pop_f32();
let result = if arg1.is_sign_negative() == arg2.is_sign_negative() {
arg1
} else {
arg2
};
self.value_stack.push(Value::F32(result));
}
F64ABS => {
let arg = self.value_stack.pop_f64();
@ -1175,9 +1194,28 @@ impl<'a> Instance<'a> {
let arg1 = self.value_stack.pop_f64();
self.value_stack.push(Value::F64(arg1 / arg2));
}
F64MIN => todo!("{:?} @ {:#x}", op_code, file_offset),
F64MAX => todo!("{:?} @ {:#x}", op_code, file_offset),
F64COPYSIGN => todo!("{:?} @ {:#x}", op_code, file_offset),
F64MIN => {
let arg2 = self.value_stack.pop_f64();
let arg1 = self.value_stack.pop_f64();
let result = if arg1 < arg2 { arg1 } else { arg2 };
self.value_stack.push(Value::F64(result));
}
F64MAX => {
let arg2 = self.value_stack.pop_f64();
let arg1 = self.value_stack.pop_f64();
let result = if arg1 > arg2 { arg1 } else { arg2 };
self.value_stack.push(Value::F64(result));
}
F64COPYSIGN => {
let arg2 = self.value_stack.pop_f64();
let arg1 = self.value_stack.pop_f64();
let result = if arg1.is_sign_negative() == arg2.is_sign_negative() {
arg1
} else {
arg2
};
self.value_stack.push(Value::F64(result));
}
I32WRAPI64 => {
let arg = self.value_stack.pop_u64();