Ejemplo n.º 1
0
static bool
RenderStore(WasmRenderContext& c, AstStore& store)
{
    uint32_t defaultAlignLog2;
    switch (store.expr()) {
      case Expr::I32Store8:
        if (!c.buffer.append("(i32.store8"))
            return false;
        defaultAlignLog2 = 0;
        break;
      case Expr::I64Store8:
        if (!c.buffer.append("(i64.store8"))
            return false;
        defaultAlignLog2 = 0;
        break;
      case Expr::I32Store16:
        if (!c.buffer.append("(i32.store16"))
            return false;
        defaultAlignLog2 = 1;
        break;
      case Expr::I64Store16:
        if (!c.buffer.append("(i64.store16"))
            return false;
        defaultAlignLog2 = 1;
        break;
      case Expr::I64Store32:
        if (!c.buffer.append("(i64.store32"))
            return false;
        defaultAlignLog2 = 2;
        break;
      case Expr::I32Store:
        if (!c.buffer.append("(i32.store"))
            return false;
        defaultAlignLog2 = 2;
        break;
      case Expr::I64Store:
        if (!c.buffer.append("(i64.store"))
            return false;
        defaultAlignLog2 = 3;
        break;
      case Expr::F32Store:
        if (!c.buffer.append("(f32.store"))
            return false;
        defaultAlignLog2 = 2;
        break;
      case Expr::F64Store:
        if (!c.buffer.append("(f64.store"))
            return false;
        defaultAlignLog2 = 3;
        break;
      default:
        return false;
    }

    if (!RenderLoadStoreAddress(c, store.address(), defaultAlignLog2))
        return false;

    if (!c.buffer.append(" "))
        return false;

    if (!RenderExpr(c, store.value()))
        return false;

    return c.buffer.append(")");
}
Ejemplo n.º 2
0
static bool
RenderStore(WasmRenderContext& c, AstStore& store)
{
    if (!RenderLoadStoreBase(c, store.address()))
        return false;

    if (!RenderExpr(c, store.value()))
        return false;

    if (!RenderIndent(c))
        return false;

    MAP_AST_EXPR(c, store);
    uint32_t defaultAlignLog2;
    switch (store.op()) {
      case Op::I32Store8:
        if (!c.buffer.append("i32.store8"))
            return false;
        defaultAlignLog2 = 0;
        break;
      case Op::I64Store8:
        if (!c.buffer.append("i64.store8"))
            return false;
        defaultAlignLog2 = 0;
        break;
      case Op::I32Store16:
        if (!c.buffer.append("i32.store16"))
            return false;
        defaultAlignLog2 = 1;
        break;
      case Op::I64Store16:
        if (!c.buffer.append("i64.store16"))
            return false;
        defaultAlignLog2 = 1;
        break;
      case Op::I64Store32:
        if (!c.buffer.append("i64.store32"))
            return false;
        defaultAlignLog2 = 2;
        break;
      case Op::I32Store:
        if (!c.buffer.append("i32.store"))
            return false;
        defaultAlignLog2 = 2;
        break;
      case Op::I64Store:
        if (!c.buffer.append("i64.store"))
            return false;
        defaultAlignLog2 = 3;
        break;
      case Op::F32Store:
        if (!c.buffer.append("f32.store"))
            return false;
        defaultAlignLog2 = 2;
        break;
      case Op::F64Store:
        if (!c.buffer.append("f64.store"))
            return false;
        defaultAlignLog2 = 3;
        break;
      default:
        return Fail(c, "unexpected store operator");
    }

    return RenderLoadStoreAddress(c, store.address(), defaultAlignLog2);
}