use super::{AlgebraicLaw, BoundaryValue, EquivalenceClass};
use crate::OpSpec;
fn read_u32_le(input: &[u8], offset: usize) -> Option<u32> {
let bytes = input.get(offset..offset + 4)?;
Some(u32::from_le_bytes([bytes[0], bytes[1], bytes[2], bytes[3]]))
}
fn cpu(input: &[u8]) -> Vec<u8> {
if input.len() < 8 {
return vec![0; 4];
}
let left = read_u32_le(input, 0).expect("length checked above");
let right = read_u32_le(input, 4).expect("length checked above");
let result = {
TODO_REPLACE_WITH_OPERATION_RESULT(left, right)
};
result.to_le_bytes().to_vec()
}
fn wgsl() -> String {
r"
fn vyre_op(index: u32, input_len: u32) -> u32 {
let left = input.data[0u];
let right = input.data[1u];
return TODO_REPLACE_WITH_OPERATION_RESULT(left, right);
}
"
.to_string()
}
pub fn spec() -> OpSpec {
let mut spec = super::make_spec(
"TODO: primitive.category.name",
super::binary_u32_sig(),
cpu,
wgsl,
);
spec.laws = vec![
];
spec.equivalence_classes = vec![EquivalenceClass::universal("TODO: all valid inputs")];
spec.boundary_values = super::binary_common_boundaries();
spec
}