/*
 * Copyright (C) 2020 Collabora, Ltd.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

/* Autogenerated file, do not edit */

#include <stdio.h>
#include "compiler.h"

static const char *
bi_swizzle_as_str(enum bi_swizzle swz)
{
        switch (swz) {
        case BI_SWIZZLE_H00: return ".h00";
        case BI_SWIZZLE_H01: return "";
        case BI_SWIZZLE_H10: return ".h10";
        case BI_SWIZZLE_H11: return ".h11";
        case BI_SWIZZLE_B0000: return ".b0";
        case BI_SWIZZLE_B1111: return ".b1";
        case BI_SWIZZLE_B2222: return ".b2";
        case BI_SWIZZLE_B3333: return ".b3";
        case BI_SWIZZLE_B0011: return ".b0011";
        case BI_SWIZZLE_B2233: return ".b2233";
        case BI_SWIZZLE_B1032: return ".b1032";
        case BI_SWIZZLE_B3210: return ".b3210";
        case BI_SWIZZLE_B0022: return ".b0022";
        }

        unreachable("Invalid swizzle");
}

static const char *
bir_fau_name(unsigned fau_idx)
{
    const char *names[] = {
            "zero", "lane-id", "wrap-id", "core-id", "fb-extent",
            "atest-param", "sample-pos", "reserved",
            "blend_descriptor_0", "blend_descriptor_1",
            "blend_descriptor_2", "blend_descriptor_3",
            "blend_descriptor_4", "blend_descriptor_5",
            "blend_descriptor_6", "blend_descriptor_7",
    };

    assert(fau_idx < ARRAY_SIZE(names));
    return names[fau_idx];
}

static const char *
bir_passthrough_name(unsigned idx)
{
    const char *names[] = {
            "s0", "s1", "s2", "t", "fau.x", "fau.y", "t0", "t1"
    };

    assert(idx < ARRAY_SIZE(names));
    return names[idx];
}

static void
bi_print_index(FILE *fp, bi_index index)
{
    if (index.discard)
        fputs("`", fp);

    if (bi_is_null(index))
        fprintf(fp, "_");
    else if (index.type == BI_INDEX_CONSTANT)
        fprintf(fp, "#0x%x", index.value);
    else if (index.type == BI_INDEX_FAU && index.value >= BIR_FAU_UNIFORM)
        fprintf(fp, "u%u", index.value & ~BIR_FAU_UNIFORM);
    else if (index.type == BI_INDEX_FAU)
        fprintf(fp, "%s", bir_fau_name(index.value));
    else if (index.type == BI_INDEX_PASS)
        fprintf(fp, "%s", bir_passthrough_name(index.value));
    else if (index.type == BI_INDEX_REGISTER)
        fprintf(fp, "br%u", index.value);
    else if (index.type == BI_INDEX_NORMAL && index.reg)
        fprintf(fp, "r%u", index.value);
    else if (index.type == BI_INDEX_NORMAL)
        fprintf(fp, "%u", index.value);
    else
        unreachable("Invalid index");

    if (index.offset)
        fprintf(fp, "[%u]", index.offset);

    if (index.abs)
        fputs(".abs", fp);

    if (index.neg)
        fputs(".neg", fp);

    fputs(bi_swizzle_as_str(index.swizzle), fp);
}


UNUSED static inline const char *
bi_adj_as_str(enum bi_adj adj)
{
    switch (adj) {
    case BI_ADJ_LOW: return ".low";
    case BI_ADJ_NONE: return "";
    case BI_ADJ_SMALL: return ".small";
    }

    unreachable("Invalid adj");
};

UNUSED static inline const char *
bi_atom_opc_as_str(enum bi_atom_opc atom_opc)
{
    switch (atom_opc) {
    case BI_ATOM_OPC_AADD: return ".aadd";
    case BI_ATOM_OPC_AADDS: return ".aadds";
    case BI_ATOM_OPC_AADDU: return ".aaddu";
    case BI_ATOM_OPC_AAND: return ".aand";
    case BI_ATOM_OPC_ADEC: return ".adec";
    case BI_ATOM_OPC_AINC: return ".ainc";
    case BI_ATOM_OPC_AOR: return ".aor";
    case BI_ATOM_OPC_AOR1: return ".aor1";
    case BI_ATOM_OPC_ASMAX: return ".asmax";
    case BI_ATOM_OPC_ASMAX1: return ".asmax1";
    case BI_ATOM_OPC_ASMIN: return ".asmin";
    case BI_ATOM_OPC_AUMAX: return ".aumax";
    case BI_ATOM_OPC_AUMAX1: return ".aumax1";
    case BI_ATOM_OPC_AUMIN: return ".aumin";
    case BI_ATOM_OPC_AXOR: return ".axor";
    }

    unreachable("Invalid atom_opc");
};

UNUSED static inline const char *
bi_clamp_as_str(enum bi_clamp clamp)
{
    switch (clamp) {
    case BI_CLAMP_CLAMP_0_1: return ".clamp_0_1";
    case BI_CLAMP_CLAMP_0_INF: return ".clamp_0_inf";
    case BI_CLAMP_CLAMP_M1_1: return ".clamp_m1_1";
    case BI_CLAMP_NONE: return "";
    }

    unreachable("Invalid clamp");
};

UNUSED static inline const char *
bi_cmpf_as_str(enum bi_cmpf cmpf)
{
    switch (cmpf) {
    case BI_CMPF_EQ: return ".eq";
    case BI_CMPF_GE: return ".ge";
    case BI_CMPF_GT: return ".gt";
    case BI_CMPF_GTLT: return ".gtlt";
    case BI_CMPF_LE: return ".le";
    case BI_CMPF_LT: return ".lt";
    case BI_CMPF_NE: return ".ne";
    case BI_CMPF_TOTAL: return ".total";
    }

    unreachable("Invalid cmpf");
};

UNUSED static inline const char *
bi_extend_as_str(enum bi_extend extend)
{
    switch (extend) {
    case BI_EXTEND_NONE: return "";
    case BI_EXTEND_SEXT: return ".sext";
    case BI_EXTEND_ZEXT: return ".zext";
    }

    unreachable("Invalid extend");
};

UNUSED static inline const char *
bi_func_as_str(enum bi_func func)
{
    switch (func) {
    case BI_FUNC_POW: return ".pow";
    case BI_FUNC_POWN: return ".pown";
    case BI_FUNC_POWR: return ".powr";
    case BI_FUNC_ROOTN: return ".rootn";
    }

    unreachable("Invalid func");
};

UNUSED static inline const char *
bi_function_as_str(enum bi_function function)
{
    switch (function) {
    case BI_FUNCTION_AND: return ".and";
    case BI_FUNCTION_NONE: return "";
    case BI_FUNCTION_OR: return ".or";
    }

    unreachable("Invalid function");
};

UNUSED static inline const char *
bi_inactive_result_as_str(enum bi_inactive_result inactive_result)
{
    switch (inactive_result) {
    case BI_INACTIVE_RESULT_F1: return ".f1";
    case BI_INACTIVE_RESULT_I1: return ".i1";
    case BI_INACTIVE_RESULT_INF: return ".inf";
    case BI_INACTIVE_RESULT_INFN: return ".infn";
    case BI_INACTIVE_RESULT_SMAX: return ".smax";
    case BI_INACTIVE_RESULT_SMIN: return ".smin";
    case BI_INACTIVE_RESULT_UMAX: return ".umax";
    case BI_INACTIVE_RESULT_V2F1: return ".v2f1";
    case BI_INACTIVE_RESULT_V2I1: return ".v2i1";
    case BI_INACTIVE_RESULT_V2INF: return ".v2inf";
    case BI_INACTIVE_RESULT_V2INFN: return ".v2infn";
    case BI_INACTIVE_RESULT_V2SMAX: return ".v2smax";
    case BI_INACTIVE_RESULT_V2SMIN: return ".v2smin";
    case BI_INACTIVE_RESULT_V4SMAX: return ".v4smax";
    case BI_INACTIVE_RESULT_V4SMIN: return ".v4smin";
    case BI_INACTIVE_RESULT_ZERO: return ".zero";
    }

    unreachable("Invalid inactive_result");
};

UNUSED static inline const char *
bi_lane_as_str(enum bi_lane lane)
{
    switch (lane) {
    case BI_LANE_B0: return ".b0";
    case BI_LANE_B1: return ".b1";
    case BI_LANE_B2: return ".b2";
    case BI_LANE_B3: return ".b3";
    case BI_LANE_H0: return ".h0";
    case BI_LANE_H1: return ".h1";
    case BI_LANE_NONE: return "";
    }

    unreachable("Invalid lane");
};

UNUSED static inline const char *
bi_lane_dest_as_str(enum bi_lane_dest lane_dest)
{
    switch (lane_dest) {
    case BI_LANE_DEST_B0: return ".b0";
    case BI_LANE_DEST_B1: return ".b1";
    case BI_LANE_DEST_B2: return ".b2";
    case BI_LANE_DEST_B3: return ".b3";
    case BI_LANE_DEST_D0: return ".d0";
    case BI_LANE_DEST_H0: return ".h0";
    case BI_LANE_DEST_H1: return ".h1";
    case BI_LANE_DEST_NONE: return "";
    case BI_LANE_DEST_W0: return ".w0";
    }

    unreachable("Invalid lane_dest");
};

UNUSED static inline const char *
bi_lane_op_as_str(enum bi_lane_op lane_op)
{
    switch (lane_op) {
    case BI_LANE_OP_ACCUMULATE: return ".accumulate";
    case BI_LANE_OP_NONE: return "";
    case BI_LANE_OP_SHIFT: return ".shift";
    case BI_LANE_OP_XOR: return ".xor";
    }

    unreachable("Invalid lane_op");
};

UNUSED static inline const char *
bi_lanes_as_str(enum bi_lanes lanes)
{
    switch (lanes) {
    case BI_LANES_B0: return ".b0";
    case BI_LANES_B00: return ".b00";
    case BI_LANES_B0000: return ".b0000";
    case BI_LANES_B01: return ".b01";
    case BI_LANES_B0101: return ".b0101";
    case BI_LANES_B0123: return ".b0123";
    case BI_LANES_B02: return ".b02";
    case BI_LANES_B1: return ".b1";
    case BI_LANES_B11: return ".b11";
    case BI_LANES_B1111: return ".b1111";
    case BI_LANES_B2: return ".b2";
    case BI_LANES_B22: return ".b22";
    case BI_LANES_B2222: return ".b2222";
    case BI_LANES_B23: return ".b23";
    case BI_LANES_B2323: return ".b2323";
    case BI_LANES_B3: return ".b3";
    case BI_LANES_B33: return ".b33";
    case BI_LANES_B3333: return ".b3333";
    case BI_LANES_H0: return ".h0";
    case BI_LANES_H00: return ".h00";
    case BI_LANES_H01: return ".h01";
    case BI_LANES_H1: return ".h1";
    case BI_LANES_H10: return ".h10";
    case BI_LANES_H11: return ".h11";
    case BI_LANES_NONE: return "";
    }

    unreachable("Invalid lanes");
};

UNUSED static inline const char *
bi_mode_as_str(enum bi_mode mode)
{
    switch (mode) {
    case BI_MODE_BASE2: return ".base2";
    case BI_MODE_NATURAL: return ".natural";
    case BI_MODE_RED: return ".red";
    }

    unreachable("Invalid mode");
};

UNUSED static inline const char *
bi_mux_as_str(enum bi_mux mux)
{
    switch (mux) {
    case BI_MUX_BIT: return ".bit";
    case BI_MUX_FP_ZERO: return ".fp_zero";
    case BI_MUX_INT_ZERO: return ".int_zero";
    case BI_MUX_NEG: return ".neg";
    }

    unreachable("Invalid mux");
};

UNUSED static inline const char *
bi_precision_as_str(enum bi_precision precision)
{
    switch (precision) {
    case BI_PRECISION_HIGH: return ".high";
    case BI_PRECISION_LOW: return ".low";
    case BI_PRECISION_NONE: return "";
    }

    unreachable("Invalid precision");
};

UNUSED static inline const char *
bi_register_format_as_str(enum bi_register_format register_format)
{
    switch (register_format) {
    case BI_REGISTER_FORMAT_AUTO: return ".auto";
    case BI_REGISTER_FORMAT_F16: return ".f16";
    case BI_REGISTER_FORMAT_F32: return ".f32";
    case BI_REGISTER_FORMAT_F64: return ".f64";
    case BI_REGISTER_FORMAT_I64: return ".i64";
    case BI_REGISTER_FORMAT_S16: return ".s16";
    case BI_REGISTER_FORMAT_S32: return ".s32";
    case BI_REGISTER_FORMAT_U16: return ".u16";
    case BI_REGISTER_FORMAT_U32: return ".u32";
    }

    unreachable("Invalid register_format");
};

UNUSED static inline const char *
bi_replicate_as_str(enum bi_replicate replicate)
{
    switch (replicate) {
    case BI_REPLICATE_B0000: return ".b0000";
    case BI_REPLICATE_B0123: return ".b0123";
    case BI_REPLICATE_B1111: return ".b1111";
    case BI_REPLICATE_B2222: return ".b2222";
    case BI_REPLICATE_B3333: return ".b3333";
    }

    unreachable("Invalid replicate");
};

UNUSED static inline const char *
bi_result_type_as_str(enum bi_result_type result_type)
{
    switch (result_type) {
    case BI_RESULT_TYPE_F1: return ".f1";
    case BI_RESULT_TYPE_I1: return ".i1";
    case BI_RESULT_TYPE_M1: return ".m1";
    }

    unreachable("Invalid result_type");
};

UNUSED static inline const char *
bi_round_as_str(enum bi_round round)
{
    switch (round) {
    case BI_ROUND_INF: return ".inf";
    case BI_ROUND_INF0: return ".inf0";
    case BI_ROUND_NONE: return "";
    case BI_ROUND_RTN: return ".rtn";
    case BI_ROUND_RTNA: return ".rtna";
    case BI_ROUND_RTO: return ".rto";
    case BI_ROUND_RTP: return ".rtp";
    case BI_ROUND_RTZ: return ".rtz";
    }

    unreachable("Invalid round");
};

UNUSED static inline const char *
bi_sample_as_str(enum bi_sample sample)
{
    switch (sample) {
    case BI_SAMPLE_CENTER: return ".center";
    case BI_SAMPLE_CENTROID: return ".centroid";
    case BI_SAMPLE_EXPLICIT: return ".explicit";
    case BI_SAMPLE_NONE: return "";
    case BI_SAMPLE_SAMPLE: return ".sample";
    }

    unreachable("Invalid sample");
};

UNUSED static inline const char *
bi_seg_as_str(enum bi_seg seg)
{
    switch (seg) {
    case BI_SEG_NONE: return "";
    case BI_SEG_STREAM: return ".stream";
    case BI_SEG_TL: return ".tl";
    case BI_SEG_UBO: return ".ubo";
    case BI_SEG_WLS: return ".wls";
    }

    unreachable("Invalid seg");
};

UNUSED static inline const char *
bi_sem_as_str(enum bi_sem sem)
{
    switch (sem) {
    case BI_SEM_C: return ".c";
    case BI_SEM_INVERSE_C: return ".inverse_c";
    case BI_SEM_NAN_PROPAGATE: return ".nan_propagate";
    case BI_SEM_NAN_SUPPRESS: return ".nan_suppress";
    }

    unreachable("Invalid sem");
};

UNUSED static inline const char *
bi_source_as_str(enum bi_source source)
{
    switch (source) {
    case BI_SOURCE_CYCLE_COUNTER: return ".cycle_counter";
    case BI_SOURCE_SYSTEM_TIMESTAMP: return ".system_timestamp";
    }

    unreachable("Invalid source");
};

UNUSED static inline const char *
bi_special_as_str(enum bi_special special)
{
    switch (special) {
    case BI_SPECIAL_LEFT: return ".left";
    case BI_SPECIAL_N: return ".n";
    case BI_SPECIAL_NONE: return "";
    case BI_SPECIAL_SCALE16: return ".scale16";
    }

    unreachable("Invalid special");
};

UNUSED static inline const char *
bi_stack_mode_as_str(enum bi_stack_mode stack_mode)
{
    switch (stack_mode) {
    case BI_STACK_MODE_CALL: return ".call";
    case BI_STACK_MODE_NONE: return "";
    case BI_STACK_MODE_REPLACE: return ".replace";
    case BI_STACK_MODE_RETURN: return ".return";
    }

    unreachable("Invalid stack_mode");
};

UNUSED static inline const char *
bi_subgroup_as_str(enum bi_subgroup subgroup)
{
    switch (subgroup) {
    case BI_SUBGROUP_SUBGROUP2: return ".subgroup2";
    case BI_SUBGROUP_SUBGROUP4: return ".subgroup4";
    case BI_SUBGROUP_SUBGROUP8: return ".subgroup8";
    }

    unreachable("Invalid subgroup");
};

UNUSED static inline const char *
bi_swz_as_str(enum bi_swz swz)
{
    switch (swz) {
    case BI_SWZ_B00: return ".b00";
    case BI_SWZ_B0000: return ".b0000";
    case BI_SWZ_B0011: return ".b0011";
    case BI_SWZ_B01: return ".b01";
    case BI_SWZ_B02: return ".b02";
    case BI_SWZ_B03: return ".b03";
    case BI_SWZ_B10: return ".b10";
    case BI_SWZ_B1032: return ".b1032";
    case BI_SWZ_B11: return ".b11";
    case BI_SWZ_B1111: return ".b1111";
    case BI_SWZ_B12: return ".b12";
    case BI_SWZ_B13: return ".b13";
    case BI_SWZ_B20: return ".b20";
    case BI_SWZ_B21: return ".b21";
    case BI_SWZ_B22: return ".b22";
    case BI_SWZ_B2222: return ".b2222";
    case BI_SWZ_B2233: return ".b2233";
    case BI_SWZ_B23: return ".b23";
    case BI_SWZ_B30: return ".b30";
    case BI_SWZ_B31: return ".b31";
    case BI_SWZ_B32: return ".b32";
    case BI_SWZ_B3210: return ".b3210";
    case BI_SWZ_B33: return ".b33";
    case BI_SWZ_B3333: return ".b3333";
    case BI_SWZ_H00: return ".h00";
    case BI_SWZ_H01: return ".h01";
    case BI_SWZ_H10: return ".h10";
    case BI_SWZ_H11: return ".h11";
    }

    unreachable("Invalid swz");
};

UNUSED static inline const char *
bi_table_as_str(enum bi_table table)
{
    switch (table) {
    case BI_TABLE_ATTRIBUTE_1: return ".attribute_1";
    case BI_TABLE_ATTRIBUTE_2: return ".attribute_2";
    case BI_TABLE_FLAT: return ".flat";
    case BI_TABLE_NONE: return "";
    }

    unreachable("Invalid table");
};

UNUSED static inline const char *
bi_update_as_str(enum bi_update update)
{
    switch (update) {
    case BI_UPDATE_CLOBBER: return ".clobber";
    case BI_UPDATE_CONDITIONAL: return ".conditional";
    case BI_UPDATE_RETRIEVE: return ".retrieve";
    case BI_UPDATE_STORE: return ".store";
    }

    unreachable("Invalid update");
};

UNUSED static inline const char *
bi_varying_name_as_str(enum bi_varying_name varying_name)
{
    switch (varying_name) {
    case BI_VARYING_NAME_FRAG_W: return ".frag_w";
    case BI_VARYING_NAME_FRAG_Z: return ".frag_z";
    case BI_VARYING_NAME_POINT: return ".point";
    }

    unreachable("Invalid varying_name");
};

UNUSED static inline const char *
bi_vecsize_as_str(enum bi_vecsize vecsize)
{
    switch (vecsize) {
    case BI_VECSIZE_NONE: return "";
    case BI_VECSIZE_V2: return ".v2";
    case BI_VECSIZE_V3: return ".v3";
    case BI_VECSIZE_V4: return ".v4";
    }

    unreachable("Invalid vecsize");
};

UNUSED static inline const char *
bi_widen_as_str(enum bi_widen widen)
{
    switch (widen) {
    case BI_WIDEN_B0: return ".b0";
    case BI_WIDEN_B1: return ".b1";
    case BI_WIDEN_B2: return ".b2";
    case BI_WIDEN_B3: return ".b3";
    case BI_WIDEN_H0: return ".h0";
    case BI_WIDEN_H1: return ".h1";
    case BI_WIDEN_NONE: return "";
    }

    unreachable("Invalid widen");
};





void
bi_print_instr(const bi_instr *I, FILE *fp)
{
    bi_foreach_dest(I, d) {
        if (bi_is_null(I->dest[d])) break;
        if (d > 0) fprintf(fp, ", ");

        bi_print_index(fp, I->dest[d]);
    }

    fprintf(fp, " = %s", bi_opcode_props[I->op].name);

    if (I->table)
        fprintf(fp, ".%s", bi_table_as_str(I->table));

    switch (I->op) {

    case BI_OPCODE_ACMPSTORE_I32:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ACMPSTORE_I64:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ACMPXCHG_I32:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ACMPXCHG_I64:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ARSHIFT_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ARSHIFT_V2I16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ARSHIFT_V4I8:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ARSHIFT_DOUBLE_I32:
        
        if (I->result_word) fputs(".result_word", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        
        if (I->bytes2) fputs(".bytes", fp);

        break;

    case BI_OPCODE_ATEST:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ATOM_C_I32:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ATOM_C_I64:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ATOM_C1_I32:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ATOM_C1_I64:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ATOM_C1_RETURN_I32:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ATOM_C1_RETURN_I64:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ATOM_CX:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        fprintf(fp, ", sr_count:%u", I->sr_count);
        break;

    case BI_OPCODE_ATOM_C_RETURN_I32:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ATOM_C_RETURN_I64:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ATOM_POST_I32:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ATOM_POST_I64:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ATOM_PRE_I64:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_AXCHG_I32:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_AXCHG_I64:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BARRIER:
        

        fputs(" ", fp);
        break;

    case BI_OPCODE_BITREV_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_BLEND:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        fprintf(fp, ", sr_count:%u", I->sr_count);
        break;

    case BI_OPCODE_BRANCH_F16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCH_F32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCH_I16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCH_I32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCH_S16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCH_S32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCH_U16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCH_U32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_BRANCHC_I16:
        
        if (I->combine) fputs(".combine", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHC_I32:
        
        if (I->combine) fputs(".combine", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_F16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_F32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_I16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_I32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_S16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_S32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_U16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCHZ_U32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCH_DIVERG:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_BRANCH_LOWBITS_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_BRANCH_NO_DIVERG:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_CLPER_I32:
        
        fputs(bi_lane_op_as_str(I->lane_op), fp);
        fputs(bi_subgroup_as_str(I->subgroup), fp);
        fputs(bi_inactive_result_as_str(I->inactive_result), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_CLPER_V6_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_CLZ_U32:
        
        if (I->mask) fputs(".mask", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_CLZ_V2U16:
        
        if (I->mask) fputs(".mask", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_CLZ_V4U8:
        
        if (I->mask) fputs(".mask", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_CSEL_F32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CSEL_I32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CSEL_S32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CSEL_U32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CSEL_V2F16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CSEL_V2I16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CSEL_V2S16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CSEL_V2U16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_CUBEFACE:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_CUBEFACE1:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_CUBEFACE2:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_CUBE_SSEL:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_CUBE_TSEL:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_DISCARD_B32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_DISCARD_F32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_DTSEL_IMM:
        
        fputs(bi_table_as_str(I->table), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_F16_TO_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_F16_TO_S32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_F16_TO_U32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_F32_TO_S32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_F32_TO_U32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FABSNEG_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FABSNEG_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FADD_F32:
        
        fputs(bi_round_as_str(I->round), fp);
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FADD_V2F16:
        
        fputs(bi_round_as_str(I->round), fp);
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FADD_IMM_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fprintf(fp, ", index:%u", I->index);
        break;

    case BI_OPCODE_FADD_IMM_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fprintf(fp, ", index:%u", I->index);
        break;

    case BI_OPCODE_FADD_LSCALE_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FADD_RSCALE_F32:
        
        fputs(bi_clamp_as_str(I->clamp), fp);
        fputs(bi_special_as_str(I->special), fp);
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_FCLAMP_F32:
        
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FCLAMP_V2F16:
        
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FCMP_F32:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);
        fputs(bi_result_type_as_str(I->result_type), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FCMP_V2F16:
        
        fputs(bi_cmpf_as_str(I->cmpf), fp);
        fputs(bi_result_type_as_str(I->result_type), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FCOS_TABLE_U6:
        
        if (I->offset) fputs(".offset", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FEXP_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FEXP_TABLE_U4:
        
        fputs(bi_adj_as_str(I->adj), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FLOGD_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FLOG_TABLE_F32:
        
        fputs(bi_mode_as_str(I->mode), fp);
        fputs(bi_precision_as_str(I->precision), fp);
        if (I->divzero) fputs(".divzero", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FLSHIFT_DOUBLE_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        
        if (I->bytes2) fputs(".bytes", fp);

        break;

    case BI_OPCODE_FMA_F32:
        
        fputs(bi_round_as_str(I->round), fp);
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_FMA_V2F16:
        
        fputs(bi_round_as_str(I->round), fp);
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_FMAX_F32:
        
        fputs(bi_clamp_as_str(I->clamp), fp);
        fputs(bi_sem_as_str(I->sem), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FMAX_V2F16:
        
        fputs(bi_sem_as_str(I->sem), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FMA_RSCALE_F32:
        
        fputs(bi_round_as_str(I->round), fp);
        fputs(bi_clamp_as_str(I->clamp), fp);
        fputs(bi_special_as_str(I->special), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_FMA_RSCALE_V2F16:
        
        fputs(bi_round_as_str(I->round), fp);
        fputs(bi_clamp_as_str(I->clamp), fp);
        fputs(bi_special_as_str(I->special), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_FMIN_F32:
        
        fputs(bi_clamp_as_str(I->clamp), fp);
        fputs(bi_sem_as_str(I->sem), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FMIN_V2F16:
        
        fputs(bi_sem_as_str(I->sem), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FMUL_CSLICE:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FMUL_SLICE_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FPCLASS_F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FPCLASS_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FPOW_SC_APPLY:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FPOW_SC_DET_F16:
        
        fputs(bi_func_as_str(I->func), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FPOW_SC_DET_F32:
        
        fputs(bi_func_as_str(I->func), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FRCP_F16:
        
        if (I->divzero) fputs(".divzero", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FRCP_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FRCP_APPROX_F32:
        
        if (I->divzero) fputs(".divzero", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FREXPE_F32:
        
        if (I->sqrt) fputs(".sqrt", fp);
        if (I->log) fputs(".log", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FREXPE_V2F16:
        
        if (I->sqrt) fputs(".sqrt", fp);
        if (I->log) fputs(".log", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FREXPM_F32:
        
        if (I->sqrt) fputs(".sqrt", fp);
        if (I->log) fputs(".log", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FREXPM_V2F16:
        
        if (I->sqrt) fputs(".sqrt", fp);
        if (I->log) fputs(".log", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FROUND_F32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FROUND_V2F16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FRSCALE_F32:
        
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FRSCALE_V2F16:
        
        fputs(bi_clamp_as_str(I->clamp), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_FRSHIFT_DOUBLE_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        
        if (I->bytes2) fputs(".bytes", fp);

        break;

    case BI_OPCODE_FRSQ_F16:
        
        if (I->divzero) fputs(".divzero", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FRSQ_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FRSQ_APPROX_F32:
        
        if (I->divzero) fputs(".divzero", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FSINCOS_OFFSET_U6:
        
        if (I->scale) fputs(".scale", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_FSIN_TABLE_U6:
        
        if (I->offset) fputs(".offset", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_HADD_S32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_HADD_U32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_HADD_V2S16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_HADD_V2U16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_HADD_V4S8:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_HADD_V4U8:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IABS_S32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_IABS_V2S16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_IABS_V4S8:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_IADD_S32:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IADD_U32:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IADD_V2S16:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IADD_V2U16:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IADD_V4S8:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IADD_V4U8:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IADDC_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_IADD_IMM_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fprintf(fp, ", index:%u", I->index);
        break;

    case BI_OPCODE_IADD_IMM_V2I16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fprintf(fp, ", index:%u", I->index);
        break;

    case BI_OPCODE_IADD_IMM_V4I8:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fprintf(fp, ", index:%u", I->index);
        break;

    case BI_OPCODE_ICMP_I32:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_S32:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_U32:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_V2I16:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_V2S16:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_V2U16:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_V4I8:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_V4S8:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMP_V4U8:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMPF_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ICMPI_I32:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMPI_S32:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMPI_U32:
        
        fputs(bi_result_type_as_str(I->result_type), fp);
        fputs(bi_cmpf_as_str(I->cmpf), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ICMPM_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_IDP_V4I8:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ILOGB_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_ILOGB_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_IMOV_FMA:
        
        if (I->threads) fputs(".threads", fp);

        fputs(" ", fp);
        break;

    case BI_OPCODE_IMUL_I32:
        
        fputs(bi_extend_as_str(I->extend), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IMUL_V2I16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IMUL_V4I8:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_IMULD:
        
        if (I->threads) fputs(".threads", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ISUB_S32:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ISUB_U32:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ISUB_V2S16:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ISUB_V2U16:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ISUB_V4S8:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ISUB_V4U8:
        
        if (I->saturate) fputs(".saturate", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_ISUBB_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_JUMP:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_JUMP_EX:
        
        if (I->test_mode) fputs(".test_mode", fp);
        fputs(bi_stack_mode_as_str(I->stack_mode), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LDEXP_F32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LDEXP_V2F16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LD_ATTR:
        
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_vecsize_as_str(I->vecsize), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LD_ATTR_IMM:
        
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_vecsize_as_str(I->vecsize), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", attribute_index:%u", I->attribute_index);
        break;

    case BI_OPCODE_LD_ATTR_TEX:
        
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_vecsize_as_str(I->vecsize), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LD_CVT:
        
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_vecsize_as_str(I->vecsize), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LD_GCLK_U64:
        
        fputs(bi_source_as_str(I->source), fp);

        fputs(" ", fp);
        break;

    case BI_OPCODE_LD_TILE:
        
        fputs(bi_vecsize_as_str(I->vecsize), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LD_VAR:
        
        fputs(bi_vecsize_as_str(I->vecsize), fp);
        fputs(bi_update_as_str(I->update), fp);
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_sample_as_str(I->sample), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LD_VAR_FLAT:
        
        fputs(bi_vecsize_as_str(I->vecsize), fp);
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_function_as_str(I->function), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_LD_VAR_FLAT_IMM:
        
        fputs(bi_vecsize_as_str(I->vecsize), fp);
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_function_as_str(I->function), fp);

        fputs(" ", fp);
        fprintf(fp, ", index:%u", I->index);
        break;

    case BI_OPCODE_LD_VAR_IMM:
        
        fputs(bi_vecsize_as_str(I->vecsize), fp);
        fputs(bi_update_as_str(I->update), fp);
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_sample_as_str(I->sample), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fprintf(fp, ", index:%u", I->index);
        break;

    case BI_OPCODE_LD_VAR_SPECIAL:
        
        fputs(bi_varying_name_as_str(I->varying_name), fp);
        fputs(bi_vecsize_as_str(I->vecsize), fp);
        fputs(bi_update_as_str(I->update), fp);
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_sample_as_str(I->sample), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_LEA_ATTR:
        
        fputs(bi_register_format_as_str(I->register_format), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LEA_ATTR_IMM:
        
        fputs(bi_register_format_as_str(I->register_format), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", attribute_index:%u", I->attribute_index);
        break;

    case BI_OPCODE_LEA_ATTR_TEX:
        
        fputs(bi_register_format_as_str(I->register_format), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LEA_TEX:
        
        if (I->format) fputs(".format", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LEA_TEX_IMM:
        
        if (I->format) fputs(".format", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", texture_index:%u", I->texture_index);
        break;

    case BI_OPCODE_LOAD_I128:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOAD_I16:
        
        fputs(bi_seg_as_str(I->seg), fp);
        fputs(bi_extend_as_str(I->extend), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOAD_I24:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOAD_I32:
        
        fputs(bi_seg_as_str(I->seg), fp);
        fputs(bi_extend_as_str(I->extend), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOAD_I48:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOAD_I64:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOAD_I8:
        
        fputs(bi_seg_as_str(I->seg), fp);
        fputs(bi_extend_as_str(I->extend), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOAD_I96:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_LOGB_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_LOGB_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_LROT_DOUBLE_I32:
        
        if (I->result_word) fputs(".result_word", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        
        if (I->bytes2) fputs(".bytes", fp);

        break;

    case BI_OPCODE_LSHIFT_AND_I32:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_AND_V2I16:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_AND_V4I8:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_DOUBLE_I32:
        
        if (I->result_word) fputs(".result_word", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        
        if (I->bytes2) fputs(".bytes", fp);

        break;

    case BI_OPCODE_LSHIFT_OR_I32:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_OR_V2I16:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_OR_V4I8:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_XOR_I32:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_XOR_V2I16:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_LSHIFT_XOR_V4I8:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_MKVEC_V2I16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_MKVEC_V4I8:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_MOV_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_MUX_I32:
        
        fputs(bi_mux_as_str(I->mux), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_MUX_V2I16:
        
        fputs(bi_mux_as_str(I->mux), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_MUX_V4I8:
        
        fputs(bi_mux_as_str(I->mux), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_NOP:
        

        fputs(" ", fp);
        break;

    case BI_OPCODE_PATOM_C_I32:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fprintf(fp, ", sr_count:%u", I->sr_count);
        break;

    case BI_OPCODE_PATOM_C1_I32:
        
        fputs(bi_atom_opc_as_str(I->atom_opc), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", sr_count:%u", I->sr_count);
        break;

    case BI_OPCODE_POPCOUNT_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_QUIET_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_QUIET_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_RROT_DOUBLE_I32:
        
        if (I->result_word) fputs(".result_word", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        
        if (I->bytes2) fputs(".bytes", fp);

        break;

    case BI_OPCODE_RSHIFT_AND_I32:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_AND_V2I16:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_AND_V4I8:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_DOUBLE_I32:
        
        if (I->result_word) fputs(".result_word", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        
        if (I->bytes2) fputs(".bytes", fp);

        break;

    case BI_OPCODE_RSHIFT_OR_I32:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_OR_V2I16:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_OR_V4I8:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_XOR_I32:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_XOR_V2I16:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_RSHIFT_XOR_V4I8:
        
        if (I->not_result) fputs(".not_result", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_S16_TO_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_S16_TO_S32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_S32_TO_F32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_S8_TO_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_S8_TO_S32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_SEG_ADD:
        
        fputs(bi_seg_as_str(I->seg), fp);
        if (I->preserve_null) fputs(".preserve_null", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_SEG_ADD_I64:
        
        fputs(bi_seg_as_str(I->seg), fp);
        if (I->preserve_null) fputs(".preserve_null", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_SHADDXH_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_SHADDXL_I64:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", shift:%u", I->shift);
        break;

    case BI_OPCODE_SHADDXL_S32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", shift:%u", I->shift);
        break;

    case BI_OPCODE_SHADDXL_U32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", shift:%u", I->shift);
        break;

    case BI_OPCODE_SHIFT_DOUBLE_I32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I128:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I16:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I24:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I32:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I48:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I64:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I8:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_STORE_I96:
        
        fputs(bi_seg_as_str(I->seg), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_ST_CVT:
        
        fputs(bi_register_format_as_str(I->register_format), fp);
        fputs(bi_vecsize_as_str(I->vecsize), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_ST_TILE:
        
        fputs(bi_vecsize_as_str(I->vecsize), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_SWZ_V2I16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_SWZ_V4I8:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_TEXC:
        
        if (I->skip) fputs(".skip", fp);
        if (I->lod_mode) fputs(".lod_mode", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        fprintf(fp, ", sr_count:%u", I->sr_count);
        break;

    case BI_OPCODE_TEXS_2D_F16:
        
        if (I->skip) fputs(".skip", fp);
        if (I->lod_mode) fputs(".lod_mode", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", sampler_index:%u", I->sampler_index);
        fprintf(fp, ", texture_index:%u", I->texture_index);
        break;

    case BI_OPCODE_TEXS_2D_F32:
        
        if (I->skip) fputs(".skip", fp);
        if (I->lod_mode) fputs(".lod_mode", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fprintf(fp, ", sampler_index:%u", I->sampler_index);
        fprintf(fp, ", texture_index:%u", I->texture_index);
        break;

    case BI_OPCODE_TEXS_CUBE_F16:
        
        if (I->skip) fputs(".skip", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fprintf(fp, ", sampler_index:%u", I->sampler_index);
        fprintf(fp, ", texture_index:%u", I->texture_index);
        break;

    case BI_OPCODE_TEXS_CUBE_F32:
        
        if (I->skip) fputs(".skip", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fprintf(fp, ", sampler_index:%u", I->sampler_index);
        fprintf(fp, ", texture_index:%u", I->texture_index);
        break;

    case BI_OPCODE_U16_TO_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_U16_TO_U32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_U32_TO_F32:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_U8_TO_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_U8_TO_U32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2F16_TO_V2S16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2F16_TO_V2U16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2F32_TO_V2F16:
        
        fputs(bi_clamp_as_str(I->clamp), fp);
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        break;

    case BI_OPCODE_V2S16_TO_V2F16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2S8_TO_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2S8_TO_V2S16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2U16_TO_V2F16:
        
        fputs(bi_round_as_str(I->round), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2U8_TO_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_V2U8_TO_V2U16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_VAR_TEX_F16:
        
        fputs(bi_update_as_str(I->update), fp);
        if (I->skip) fputs(".skip", fp);
        if (I->lod_mode) fputs(".lod_mode", fp);
        fputs(bi_sample_as_str(I->sample), fp);

        fputs(" ", fp);
        fprintf(fp, ", texture_index:%u", I->texture_index);
        fprintf(fp, ", varying_index:%u", I->varying_index);
        break;

    case BI_OPCODE_VAR_TEX_F32:
        
        fputs(bi_update_as_str(I->update), fp);
        if (I->skip) fputs(".skip", fp);
        if (I->lod_mode) fputs(".lod_mode", fp);
        fputs(bi_sample_as_str(I->sample), fp);

        fputs(" ", fp);
        fprintf(fp, ", texture_index:%u", I->texture_index);
        fprintf(fp, ", varying_index:%u", I->varying_index);
        break;

    case BI_OPCODE_VN_ASST1_F16:
        
        if (I->h) fputs(".h", fp);
        if (I->l) fputs(".l", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;

    case BI_OPCODE_VN_ASST1_F32:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[3]);
        

        break;

    case BI_OPCODE_VN_ASST2_F32:
        
        if (I->scale) fputs(".scale", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_VN_ASST2_V2F16:
        

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        break;

    case BI_OPCODE_WMASK:
        
        fputs(bi_subgroup_as_str(I->subgroup), fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fprintf(fp, ", fill:%u", I->fill);
        break;

    case BI_OPCODE_ZS_EMIT:
        
        if (I->stencil) fputs(".stencil", fp);
        if (I->z) fputs(".z", fp);

        fputs(" ", fp);
        bi_print_index(fp, I->src[0]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[1]);
        

        fputs(", ", fp);
        bi_print_index(fp, I->src[2]);
        

        break;
    default:
        unreachable("Invalid opcode");
    }

    if (I->branch_target)
            fprintf(fp, " -> block%u", I->branch_target->name);

    fputs("\n", fp);

}
