in libredex/DexOpcode.cpp [177:291]
bit_width_t src_bit_width(DexOpcode op, uint16_t i) {
switch (dex_opcode::format(op)) {
case FMT_f00x:
not_reached();
case FMT_f10x:
not_reached();
case FMT_f12x:
redex_assert(i == 0);
return 4;
case FMT_f12x_2:
redex_assert(i <= 1);
return 4;
case FMT_f11n:
not_reached();
case FMT_f11x_d:
not_reached();
case FMT_f11x_s:
redex_assert(i == 0);
return 8;
case FMT_f10t:
not_reached();
case FMT_f20t:
not_reached();
case FMT_f20bc:
not_reached();
case FMT_f22x:
redex_assert(i == 0);
return 16;
case FMT_f21t:
redex_assert(i == 0);
return 8;
case FMT_f21s:
not_reached();
case FMT_f21h:
not_reached();
case FMT_f21c_d:
not_reached();
case FMT_f21c_s:
redex_assert(i == 0);
return 8;
case FMT_f23x_d:
redex_assert(i <= 1);
return 8;
case FMT_f23x_s:
redex_assert(i <= 2);
return 8;
case FMT_f22b:
redex_assert(i == 0);
return 8;
case FMT_f22t:
redex_assert(i <= 1);
return 4;
case FMT_f22s:
redex_assert(i == 0);
return 4;
case FMT_f22c_d:
redex_assert(i == 0);
return 4;
case FMT_f22c_s:
redex_assert(i <= 1);
return 4;
case FMT_f22cs:
not_reached();
case FMT_f30t:
not_reached();
case FMT_f32x:
redex_assert(i == 0);
return 16;
case FMT_f31i:
not_reached();
case FMT_f31t:
redex_assert(i == 0);
return 8;
case FMT_f31c:
not_reached();
case FMT_f35c:
redex_assert(i <= 4);
return 4;
case FMT_f3rc:
redex_assert(i == 0);
return 16;
case FMT_f41c_d:
not_reached();
case FMT_f41c_s:
redex_assert(i == 0);
return 16;
case FMT_f45cc:
redex_assert(i <= 4);
return 4;
case FMT_f4rcc:
redex_assert(i == 0);
return 16;
case FMT_f52c_d:
redex_assert(i == 0);
return 16;
case FMT_f52c_s:
redex_assert(i <= 1);
return 16;
case FMT_f5rc:
redex_assert(i == 0);
return 16;
case FMT_f57c:
redex_assert(i <= 6);
return 4;
case FMT_f35ms:
case FMT_f35mi:
case FMT_f3rms:
case FMT_f3rmi:
case FMT_f51l:
case FMT_fopcode:
case FMT_iopcode:
not_reached();
}
not_reached();
}