def invert_double_cell(expr): """forth wants low | hi, but wasm is little endian (i.e. the reverse). Cells are already stored in little-endian, so we can get a proper 64 bit number by rotating by 32 bits. """ return lib.BinaryenBinary(module, lib.BinaryenRotRInt64(), expr, lib.BinaryenConst(module, lib.BinaryenLiteralInt64(32)))
def div_64_32_32(expr1, expr2): return s_64_to_32( lib.BinaryenBinary(module, lib.BinaryenDivSInt64(), expr1, s_32_to_64(expr2)))
def rem(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenRemSInt32(), expr1, expr2)
def div(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenDivSInt32(), expr1, expr2)
def umul_32_32_64(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenMulInt64(), u_32_to_64(expr1), u_32_to_64(expr2))
def eq(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenEqInt32(), expr1, expr2)
def bit_and(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenAndInt32(), expr1, expr2)
def urem_64_32_32(expr1, expr2): return u_64_to_32( lib.BinaryenBinary(module, lib.BinaryenRemUInt64(), expr1, u_32_to_64(expr2)))
def add_64(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenAddInt64(), expr1, expr2)
def add(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenAddInt32(), expr1, expr2)
def l_s(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenLtSInt32(), expr1, expr2)
def le_u(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenLeUInt32(), expr1, expr2)
def ge_s(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenGeSInt32(), expr1, expr2)
def ne(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenNeInt32(), expr1, expr2)
def udiv_64_32_64(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenDivUInt64(), expr1, u_32_to_64(expr2))
def rem_64_32_32(expr1, expr2): return s_64_to_32( lib.BinaryenBinary(module, lib.BinaryenRemSInt64(), expr1, s_32_to_64(expr2)))
def sub(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenSubInt32(), expr1, expr2)
def l_rs(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenShrUInt32(), expr1, expr2)
def mul(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenMulInt32(), expr1, expr2)
def bit_xor(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenXorInt32(), expr1, expr2)
def mul_64(expr1, expr2): return lib.BinaryenBinary(module, lib.BinaryenMulInt64(), expr1, expr2)