check_opcodes func implemented

This commit is contained in:
fro
2017-09-20 12:52:33 +03:00
parent 31673aa31d
commit 768d4633a1
2 changed files with 79 additions and 78 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
[package]
name = "wasm-pack"
name = "non_determinism_checker"
version = "0.1.0"
authors = ["NikVolf <nikvolf@gmail.com>"]
+78 -77
View File
@@ -1,11 +1,78 @@
use parity_wasm::{elements};
use parity_wasm::elements::Section;
use parity_wasm::elements::{ Section, Opcodes };
use parity_wasm::elements::Opcode::*;
// TODO:
// fn check_code (FuncBodybody) -> bool {
// }
fn check_opcodes (opcodes: &Opcodes) -> bool {
for opcode in opcodes.elements() {
match *opcode {
F32Abs |
F32Neg |
F32Ceil |
F32Floor |
F32Trunc |
F32Nearest |
F32Sqrt |
F32Add |
F32Sub |
F32Mul |
F32Div |
F32Min |
F32Max |
F32Copysign |
F64Abs |
F64Neg |
F64Ceil |
F64Floor |
F64Trunc |
F64Nearest |
F64Sqrt |
F64Add |
F64Sub |
F64Mul |
F64Div |
F64Min |
F64Max |
F64Copysign |
I32TruncSF32 |
I32TruncUF32 |
I32TruncSF64 |
I32TruncUF64 |
I64TruncSF32 |
I64TruncUF32 |
I64TruncSF64 |
I64TruncUF64 |
F32ConvertSI32 |
F32ConvertUI32 |
F32ConvertSI64 |
F32ConvertUI64 |
F32DemoteF64 |
F64ConvertSI32 |
F64ConvertUI32 |
F64ConvertSI64 |
F64ConvertUI64 |
F64PromoteF32 |
I32ReinterpretF32 |
I64ReinterpretF64 |
F32ReinterpretI32 |
F64ReinterpretI64 |
F32Eq |
F32Ne |
F32Lt |
F32Gt |
F32Le |
F32Ge |
F64Eq |
F64Ne |
F64Lt |
F64Gt |
F64Le |
F64Ge
=> return true,
_ => continue
}
}
false
}
pub fn have_non_determinism(module: elements::Module) -> bool {
@@ -14,82 +81,16 @@ pub fn have_non_determinism(module: elements::Module) -> bool {
match *section {
Section::Code(ref cs) => {
for body in cs.bodies() {
for opcode in body.code().elements() {
match *opcode {
F32Abs |
F32Neg |
F32Ceil |
F32Floor |
F32Trunc |
F32Nearest |
F32Sqrt |
F32Add |
F32Sub |
F32Mul |
F32Div |
F32Min |
F32Max |
F32Copysign |
F64Abs |
F64Neg |
F64Ceil |
F64Floor |
F64Trunc |
F64Nearest |
F64Sqrt |
F64Add |
F64Sub |
F64Mul |
F64Div |
F64Min |
F64Max |
F64Copysign |
I32TruncSF32 |
I32TruncUF32 |
I32TruncSF64 |
I32TruncUF64 |
I64TruncSF32 |
I64TruncUF32 |
I64TruncSF64 |
I64TruncUF64 |
F32ConvertSI32 |
F32ConvertUI32 |
F32ConvertSI64 |
F32ConvertUI64 |
F32DemoteF64 |
F64ConvertSI32 |
F64ConvertUI32 |
F64ConvertSI64 |
F64ConvertUI64 |
F64PromoteF32 |
I32ReinterpretF32 |
I64ReinterpretF64 |
F32ReinterpretI32 |
F64ReinterpretI64 |
F32Eq |
F32Ne |
F32Lt |
F32Gt |
F32Le |
F32Ge |
F64Eq |
F64Ne |
F64Lt |
F64Gt |
F64Le |
F64Ge
=> {
return true
},
_ => continue
if check_opcodes(body.code()) {
return true;
} else {
continue
}
}
};
return false;
},
},
_ => continue
}
}
}
false
}