#![allow(clippy::too_many_arguments)]
use crate::{cast::CastSign, DecodeNode, LabelRef};
pub use crate::{f32_to_imm, f64_to_imm};
use crate::{
CallingConvention, Instr, Item, LoadOperand, MysteryString, StoreOperand, Utf32String, ZeroItem,
};
use bytes::Bytes;
pub fn fnhead_local<L>(nlocals: u32) -> Item<L> {
Item::FnHeader(CallingConvention::ArgsInLocals, nlocals)
}
pub fn fnhead_stack<L>(nlocals: u32) -> Item<L> {
Item::FnHeader(CallingConvention::ArgsOnStack, nlocals)
}
pub fn pop<L>() -> LoadOperand<L> {
LoadOperand::Pop
}
pub fn imm<L>(x: i32) -> LoadOperand<L> {
LoadOperand::Imm(x)
}
pub fn uimm<L>(x: u32) -> LoadOperand<L> {
LoadOperand::Imm(x.cast_sign())
}
pub fn imml<L>(x: L) -> LoadOperand<L> {
LoadOperand::ImmLabel(LabelRef(x, 0), 0)
}
pub fn imml_off<L>(x: L, offset: i32) -> LoadOperand<L> {
LoadOperand::ImmLabel(LabelRef(x, offset), 0)
}
pub fn imml_uoff<L>(x: L, offset: u32) -> LoadOperand<L> {
LoadOperand::ImmLabel(LabelRef(x, offset.cast_sign()), 0)
}
pub fn imml_off_shift<L>(x: L, offset: i32, shift: u8) -> LoadOperand<L> {
LoadOperand::ImmLabel(LabelRef(x, offset), shift)
}
pub fn imml_uoff_shift<L>(x: L, offset: u32, shift: u8) -> LoadOperand<L> {
LoadOperand::ImmLabel(LabelRef(x, offset.cast_sign()), shift)
}
pub fn derefl<L>(x: L) -> LoadOperand<L> {
LoadOperand::DerefLabel(LabelRef(x, 0))
}
pub fn derefl_off<L>(x: L, offset: i32) -> LoadOperand<L> {
LoadOperand::DerefLabel(LabelRef(x, offset))
}
pub fn derefl_uoff<L>(x: L, offset: u32) -> LoadOperand<L> {
LoadOperand::DerefLabel(LabelRef(x, offset.cast_sign()))
}
pub fn push<L>() -> StoreOperand<L> {
StoreOperand::Push
}
pub fn discard<L>() -> StoreOperand<L> {
StoreOperand::Discard
}
pub fn storel<L>(l: L) -> StoreOperand<L> {
StoreOperand::DerefLabel(LabelRef(l, 0))
}
pub fn storel_off<L>(l: L, offset: i32) -> StoreOperand<L> {
StoreOperand::DerefLabel(LabelRef(l, offset))
}
pub fn storel_uoff<L>(l: L, offset: u32) -> StoreOperand<L> {
StoreOperand::DerefLabel(LabelRef(l, offset.cast_sign()))
}
pub fn lloc<L>(n: u32) -> LoadOperand<L> {
LoadOperand::FrameAddr(4 * n)
}
pub fn sloc<L>(n: u32) -> StoreOperand<L> {
StoreOperand::FrameAddr(4 * n)
}
pub fn mystery_string<L, S>(s: &S) -> Item<L>
where
S: AsRef<str>,
{
Item::MysteryString(MysteryString::from_chars_lossy(s.as_ref().chars()))
}
pub fn utf32_string<L, S>(s: &S) -> Item<L>
where
S: AsRef<str>,
{
Item::Utf32String(Utf32String::from_chars_lossy(s.as_ref().chars()))
}
pub fn compressed_string<L, B>(b: B) -> Item<L>
where
B: Into<Bytes>,
{
Item::CompressedString(b.into())
}
pub fn blob<L, B>(b: B) -> Item<L>
where
B: Into<Bytes>,
{
Item::Blob(b.into())
}
pub fn align<L>(alignment: u32) -> Item<L> {
Item::Align(alignment.try_into().unwrap())
}
pub fn decoding_table<L>(root: DecodeNode<L>) -> Item<L> {
Item::DecodingTable(root)
}
pub fn label<L>(label: L) -> Item<L> {
Item::Label(label)
}
pub fn labelref<L>(label: L) -> Item<L> {
Item::LabelRef(LabelRef(label, 0), 0)
}
pub fn labelref_off<L>(label: L, offset: i32) -> Item<L> {
Item::LabelRef(LabelRef(label, offset), 0)
}
pub fn labelref_uoff<L>(label: L, offset: u32) -> Item<L> {
Item::LabelRef(LabelRef(label, offset.cast_sign()), 0)
}
pub fn labelref_off_shift<L>(label: L, offset: i32, shift: u8) -> Item<L> {
Item::LabelRef(LabelRef(label, offset), shift)
}
pub fn labelref_uoff_shift<L>(label: L, offset: u32, shift: u8) -> Item<L> {
Item::LabelRef(LabelRef(label, offset.cast_sign()), shift)
}
pub fn zlabel<L>(label: L) -> ZeroItem<L> {
ZeroItem::Label(label)
}
pub fn zalign<L>(alignment: u32) -> ZeroItem<L> {
ZeroItem::Align(alignment.try_into().unwrap())
}
pub fn zspace<L>(space: u32) -> ZeroItem<L> {
ZeroItem::Space(space)
}
pub fn nop<L>() -> Item<L> {
Item::Instr(Instr::Nop)
}
pub fn add<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Add(l1, l2, s1))
}
pub fn sub<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Sub(l1, l2, s1))
}
pub fn mul<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Mul(l1, l2, s1))
}
pub fn div<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Div(l1, l2, s1))
}
pub fn modulo<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Mod(l1, l2, s1))
}
pub fn neg<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Neg(l1, s1))
}
pub fn bitand<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Bitand(l1, l2, s1))
}
pub fn bitor<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Bitor(l1, l2, s1))
}
pub fn bitxor<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Bitxor(l1, l2, s1))
}
pub fn bitnot<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Bitnot(l1, s1))
}
pub fn shiftl<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Shiftl(l1, l2, s1))
}
pub fn ushiftr<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Ushiftr(l1, l2, s1))
}
pub fn sshiftr<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Sshiftr(l1, l2, s1))
}
pub fn jump<L>(bt: L) -> Item<L> {
Item::Instr(Instr::Jump(LoadOperand::Branch(bt)))
}
pub fn jump_ret<L>(bt: bool) -> Item<L> {
Item::Instr(Instr::Jump(LoadOperand::Imm(bt.into())))
}
pub fn jz<L>(l1: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jz(l1, LoadOperand::Branch(bt)))
}
pub fn jz_ret<L>(l1: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jz(l1, LoadOperand::Imm(bt.into())))
}
pub fn jnz<L>(l1: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jnz(l1, LoadOperand::Branch(bt)))
}
pub fn jnz_ret<L>(l1: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jnz(l1, LoadOperand::Imm(bt.into())))
}
pub fn jeq<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jeq(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jeq_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jeq(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jne<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jne(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jne_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jne(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jlt<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jlt(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jlt_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jlt(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jle<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jle(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jle_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jle(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jgt<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jgt(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jgt_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jgt(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jge<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jge(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jge_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jge(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jltu<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jltu(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jltu_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jltu(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jleu<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jleu(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jleu_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jleu(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jgtu<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jgtu(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jgtu_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jgtu(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jgeu<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jgeu(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jgeu_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jgeu(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jumpabs<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Jumpabs(l1))
}
pub fn copy<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Copy(l1, s1))
}
pub fn copys<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Copys(l1, s1))
}
pub fn copyb<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Copyb(l1, s1))
}
pub fn sexs<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Sexs(l1, s1))
}
pub fn sexb<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Sexb(l1, s1))
}
pub fn astore<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, l3: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Astore(l1, l2, l3))
}
pub fn aload<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Aload(l1, l2, s1))
}
pub fn astores<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, l3: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Astores(l1, l2, l3))
}
pub fn aloads<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Aloads(l1, l2, s1))
}
pub fn astoreb<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, l3: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Astoreb(l1, l2, l3))
}
pub fn aloadb<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Aloadb(l1, l2, s1))
}
pub fn astorebit<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, l3: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Astorebit(l1, l2, l3))
}
pub fn aloadbit<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Aloadbit(l1, l2, s1))
}
pub fn stkcount<L>(s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Stkcount(s1))
}
pub fn stkpeek<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Stkpeek(l1, s1))
}
pub fn stkswap<L>() -> Item<L> {
Item::Instr(Instr::Stkswap)
}
pub fn stkcopy<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Stkcopy(l1))
}
pub fn stkroll<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Stkroll(l1, l2))
}
pub fn call<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Call(l1, l2, s1))
}
pub fn callf<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Callf(l1, s1))
}
pub fn callfi<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Callfi(l1, l2, s1))
}
pub fn callfii<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
s1: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Callfii(l1, l2, l3, s1))
}
pub fn callfiii<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Callfiii(l1, l2, l3, l4, s1))
}
pub fn ret<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Return(l1))
}
pub fn tailcall<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Tailcall(l1, l2))
}
pub fn catch<L>(s1: StoreOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Catch(s1, LoadOperand::Branch(bt)))
}
pub fn catch_ret<L>(s1: StoreOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Catch(s1, LoadOperand::Imm(bt.into())))
}
pub fn throw<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Throw(l1, l2))
}
pub fn getmemsize<L>(s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Getmemsize(s1))
}
pub fn setmemsize<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Setmemsize(l1, s1))
}
pub fn malloc<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Malloc(l1, s1))
}
pub fn mfree<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Mfree(l1))
}
pub fn quit<L>() -> Item<L> {
Item::Instr(Instr::Quit)
}
pub fn restart<L>() -> Item<L> {
Item::Instr(Instr::Restart)
}
pub fn save<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Save(l1, s1))
}
pub fn restore<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Restore(l1, s1))
}
pub fn saveundo<L>(s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Saveundo(s1))
}
pub fn restoreundo<L>(s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Restoreundo(s1))
}
pub fn hasundo<L>(s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Hasundo(s1))
}
pub fn discardundo<L>() -> Item<L> {
Item::Instr(Instr::Discardundo)
}
pub fn protect<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Protect(l1, l2))
}
pub fn verify<L>(s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Verify(s1))
}
pub fn getiosys<L>(s1: StoreOperand<L>, s2: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Getiosys(s1, s2))
}
pub fn setiosys<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Setiosys(l1, l2))
}
pub fn streamchar<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Streamchar(l1))
}
pub fn streamunichar<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Streamunichar(l1))
}
pub fn streamnum<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Streamnum(l1))
}
pub fn streamstr<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Streamstr(l1))
}
pub fn getstringtbl<L>(s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Getstringtbl(s1))
}
pub fn setstringtbl<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Setstringtbl(l1))
}
pub fn numtof<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Numtof(l1, s1))
}
pub fn ftonumz<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Ftonumz(l1, s1))
}
pub fn ftonumn<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Ftonumn(l1, s1))
}
pub fn fadd<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Fadd(l1, l2, s1))
}
pub fn fsub<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Fsub(l1, l2, s1))
}
pub fn fmul<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Fmul(l1, l2, s1))
}
pub fn fdiv<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Fdiv(l1, l2, s1))
}
pub fn fmod<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Fmod(l1, l2, s1, s2))
}
pub fn ceil<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Ceil(l1, s1))
}
pub fn floor<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Floor(l1, s1))
}
pub fn sqrt<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Sqrt(l1, s1))
}
pub fn exp<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Exp(l1, s1))
}
pub fn log<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Log(l1, s1))
}
pub fn pow<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Pow(l1, l2, s1))
}
pub fn sin<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Sin(l1, s1))
}
pub fn cos<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Cos(l1, s1))
}
pub fn tan<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Tan(l1, s1))
}
pub fn asin<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Asin(l1, s1))
}
pub fn acos<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Acos(l1, s1))
}
pub fn atan<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Atan(l1, s1))
}
pub fn atan2<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Atan2(l1, s1))
}
pub fn numtod<L>(l1: LoadOperand<L>, s1: StoreOperand<L>, s2: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Numtod(l1, s1, s2))
}
pub fn dtonumz<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Dtonumz(l1, l2, s1))
}
pub fn dtonumn<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Dtonumn(l1, l2, s1))
}
pub fn ftod<L>(l1: LoadOperand<L>, s1: StoreOperand<L>, s2: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Ftod(l1, s1, s2))
}
pub fn dtof<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Dtof(l1, l2, s1))
}
pub fn dadd<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dadd(l1, l2, l3, l4, s1, s2))
}
pub fn dsub<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dsub(l1, l2, l3, l4, s1, s2))
}
pub fn dmul<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dmul(l1, l2, l3, l4, s1, s2))
}
pub fn ddiv<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Ddiv(l1, l2, l3, l4, s1, s2))
}
pub fn dmodr<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dmodr(l1, l2, l3, l4, s1, s2))
}
pub fn dmodq<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dmodq(l1, l2, l3, l4, s1, s2))
}
pub fn dceil<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dceil(l1, l2, s1, s2))
}
pub fn dfloor<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dfloor(l1, l2, s1, s2))
}
pub fn dsqrt<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dsqrt(l1, l2, s1, s2))
}
pub fn dexp<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dexp(l1, l2, s1, s2))
}
pub fn dlog<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dlog(l1, l2, s1, s2))
}
pub fn dpow<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dpow(l1, l2, l3, l4, s1, s2))
}
pub fn dsin<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dsin(l1, l2, s1, s2))
}
pub fn dcos<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dcos(l1, l2, s1, s2))
}
pub fn dtan<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dtan(l1, l2, s1, s2))
}
pub fn dasin<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dasin(l1, l2, s1, s2))
}
pub fn dacos<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Dacos(l1, l2, s1, s2))
}
pub fn datan<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Datan(l1, l2, s1, s2))
}
pub fn datan2<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
s1: StoreOperand<L>,
s2: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Datan2(l1, l2, l3, l4, s1, s2))
}
pub fn jisnan<L>(l1: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jisnan(l1, LoadOperand::Branch(bt)))
}
pub fn jisnan_ret<L>(l1: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jisnan(l1, LoadOperand::Imm(bt.into())))
}
pub fn jisinf<L>(l1: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jisinf(l1, LoadOperand::Branch(bt)))
}
pub fn jisinf_ret<L>(l1: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jisinf(l1, LoadOperand::Imm(bt.into())))
}
pub fn jfeq<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, l3: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jfeq(l1, l2, l3, LoadOperand::Branch(bt)))
}
pub fn jfeq_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jfeq(l1, l2, l3, LoadOperand::Imm(bt.into())))
}
pub fn jfne<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, l3: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jfne(l1, l2, l3, LoadOperand::Branch(bt)))
}
pub fn jfne_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jfne(l1, l2, l3, LoadOperand::Imm(bt.into())))
}
pub fn jflt<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jflt(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jflt_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jflt(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jfle<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jfle(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jfle_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jfle(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jfgt<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jfgt(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jfgt_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jfgt(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jfge<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jfge(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jfge_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jfge(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jdisnan<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jdisnan(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jdisnan_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jdisnan(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jdisinf<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: L) -> Item<L> {
Item::Instr(Instr::Jdisinf(l1, l2, LoadOperand::Branch(bt)))
}
pub fn jdisinf_ret<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, bt: bool) -> Item<L> {
Item::Instr(Instr::Jdisinf(l1, l2, LoadOperand::Imm(bt.into())))
}
pub fn jdeq<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
l5: LoadOperand<L>,
l6: LoadOperand<L>,
bt: L,
) -> Item<L> {
Item::Instr(Instr::Jdeq(l1, l2, l3, l4, l5, l6, LoadOperand::Branch(bt)))
}
pub fn jdeq_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
l5: LoadOperand<L>,
l6: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jdeq(
l1,
l2,
l3,
l4,
l5,
l6,
LoadOperand::Imm(bt.into()),
))
}
pub fn jdne<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
l5: LoadOperand<L>,
l6: LoadOperand<L>,
bt: L,
) -> Item<L> {
Item::Instr(Instr::Jdne(l1, l2, l3, l4, l5, l6, LoadOperand::Branch(bt)))
}
pub fn jdne_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
l5: LoadOperand<L>,
l6: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jdne(
l1,
l2,
l3,
l4,
l5,
l6,
LoadOperand::Imm(bt.into()),
))
}
pub fn jdlt<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: L,
) -> Item<L> {
Item::Instr(Instr::Jdlt(l1, l2, l3, l4, LoadOperand::Branch(bt)))
}
pub fn jdlt_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jdlt(l1, l2, l3, l4, LoadOperand::Imm(bt.into())))
}
pub fn jdle<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: L,
) -> Item<L> {
Item::Instr(Instr::Jdle(l1, l2, l3, l4, LoadOperand::Branch(bt)))
}
pub fn jdle_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jdle(l1, l2, l3, l4, LoadOperand::Imm(bt.into())))
}
pub fn jdgt<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: L,
) -> Item<L> {
Item::Instr(Instr::Jdgt(l1, l2, l3, l4, LoadOperand::Branch(bt)))
}
pub fn jdgt_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jdgt(l1, l2, l3, l4, LoadOperand::Imm(bt.into())))
}
pub fn jdge<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: L,
) -> Item<L> {
Item::Instr(Instr::Jdge(l1, l2, l3, l4, LoadOperand::Branch(bt)))
}
pub fn jdge_ret<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
bt: bool,
) -> Item<L> {
Item::Instr(Instr::Jdge(l1, l2, l3, l4, LoadOperand::Imm(bt.into())))
}
pub fn random<L>(l1: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Random(l1, s1))
}
pub fn setrandom<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Setrandom(l1))
}
pub fn mzero<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Mzero(l1, l2))
}
pub fn mcopy<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, l3: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Mcopy(l1, l2, l3))
}
pub fn linearsearch<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
l5: LoadOperand<L>,
l6: LoadOperand<L>,
l7: LoadOperand<L>,
s1: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Linearsearch(l1, l2, l3, l4, l5, l6, l7, s1))
}
pub fn binarysearch<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
l5: LoadOperand<L>,
l6: LoadOperand<L>,
l7: LoadOperand<L>,
s1: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Binarysearch(l1, l2, l3, l4, l5, l6, l7, s1))
}
pub fn linkedsearch<L>(
l1: LoadOperand<L>,
l2: LoadOperand<L>,
l3: LoadOperand<L>,
l4: LoadOperand<L>,
l5: LoadOperand<L>,
l6: LoadOperand<L>,
s1: StoreOperand<L>,
) -> Item<L> {
Item::Instr(Instr::Linkedsearch(l1, l2, l3, l4, l5, l6, s1))
}
pub fn accelfunc<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Accelfunc(l1, l2))
}
pub fn accelparam<L>(l1: LoadOperand<L>, l2: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Accelparam(l1, l2))
}
pub fn gestalt<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Gestalt(l1, l2, s1))
}
pub fn debugtrap<L>(l1: LoadOperand<L>) -> Item<L> {
Item::Instr(Instr::Debugtrap(l1))
}
pub fn glk<L>(l1: LoadOperand<L>, l2: LoadOperand<L>, s1: StoreOperand<L>) -> Item<L> {
Item::Instr(Instr::Glk(l1, l2, s1))
}