use peepmatic_macro::PeepmaticOperator;
use serde::{Deserialize, Serialize};
#[derive(PeepmaticOperator, Clone, Copy, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)]
#[repr(u32)]
pub enum Operator {
#[peepmatic(params(iNN), result(void))]
AdjustSpDown = 1,
#[peepmatic(immediates(iNN), result(void))]
AdjustSpDownImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Band,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
BandImm,
#[peepmatic(immediates(b1), result(bNN))]
Bconst,
#[peepmatic(params(bNN), result(iNN))]
Bint,
#[peepmatic(params(iNN, iNN), result(iNN))]
Bor,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
BorImm,
#[peepmatic(params(bool_or_int), result(void))]
Brnz,
#[peepmatic(params(bool_or_int), result(void))]
Brz,
#[peepmatic(params(iNN, iNN), result(iNN))]
Bxor,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
BxorImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Iadd,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
IaddImm,
#[peepmatic(immediates(cc), params(iNN, iNN), result(b1))]
Icmp,
#[peepmatic(immediates(cc, iNN), params(iNN), result(b1))]
IcmpImm,
#[peepmatic(immediates(iNN), result(iNN))]
Iconst,
#[peepmatic(params(iNN, iNN), result(cpu_flags))]
Ifcmp,
#[peepmatic(immediates(iNN), params(iNN), result(cpu_flags))]
IfcmpImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Imul,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
ImulImm,
#[peepmatic(params(iNN), result(iMM))]
Ireduce,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
IrsubImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Ishl,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
IshlImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Isub,
#[peepmatic(params(iNN, iNN), result(iNN))]
Rotl,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
RotlImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Rotr,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
RotrImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Sdiv,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
SdivImm,
#[peepmatic(params(bool_or_int, any_t, any_t), result(any_t))]
Select,
#[peepmatic(params(iNN), result(iMM))]
Sextend,
#[peepmatic(params(iNN, iNN), result(iNN))]
Srem,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
SremImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Sshr,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
SshrImm,
#[peepmatic(params(bool_or_int), result(void))]
Trapnz,
#[peepmatic(params(bool_or_int), result(void))]
Trapz,
#[peepmatic(params(iNN, iNN), result(iNN))]
Udiv,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
UdivImm,
#[peepmatic(params(iNN), result(iMM))]
Uextend,
#[peepmatic(params(iNN, iNN), result(iNN))]
Urem,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
UremImm,
#[peepmatic(params(iNN, iNN), result(iNN))]
Ushr,
#[peepmatic(immediates(iNN), params(iNN), result(iNN))]
UshrImm,
}
#[derive(PeepmaticOperator, Clone, Copy, PartialEq, Eq, Hash, Debug, Serialize, Deserialize)]
#[repr(u32)]
pub enum UnquoteOperator {
#[peepmatic(params(iNN, iNN), result(iNN))]
Band,
#[peepmatic(params(iNN, iNN), result(iNN))]
Bor,
#[peepmatic(params(iNN, iNN), result(iNN))]
Bxor,
#[peepmatic(params(iNN, iNN), result(iNN))]
Iadd,
#[peepmatic(params(iNN, iNN), result(iNN))]
Imul,
#[peepmatic(params(iNN), result(iNN))]
Log2,
#[peepmatic(params(iNN), result(iNN))]
Neg,
}
#[cfg(feature = "construct")]
pub trait TypingContext<'a> {
type TypeVariable;
fn cc(&mut self, span: wast::Span) -> Self::TypeVariable;
#[allow(non_snake_case)]
fn bNN(&mut self, span: wast::Span) -> Self::TypeVariable;
#[allow(non_snake_case)]
fn iNN(&mut self, span: wast::Span) -> Self::TypeVariable;
#[allow(non_snake_case)]
fn iMM(&mut self, span: wast::Span) -> Self::TypeVariable;
fn cpu_flags(&mut self, span: wast::Span) -> Self::TypeVariable;
fn b1(&mut self, span: wast::Span) -> Self::TypeVariable;
fn void(&mut self, span: wast::Span) -> Self::TypeVariable;
fn bool_or_int(&mut self, span: wast::Span) -> Self::TypeVariable;
fn any_t(&mut self, span: wast::Span) -> Self::TypeVariable;
}