- /* SREG1 */
- if (spec [MONO_INST_SRC1] != ' ') {
- MonoInst *var = get_vreg_to_inst (cfg, ins->sreg1);
- if (var && !(var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT))) {
- int idx = var->inst_c0;
- if (stack [idx]) {
- if (var->opcode != OP_ARG)
- g_assert (stack [idx]);
- ins->sreg1 = stack [idx]->dreg;
- record_use (cfg, stack [idx], bb, ins);
- }
- else
- record_use (cfg, var, bb, ins);
- }
- else if (G_UNLIKELY (!var && lvreg_stack [ins->sreg1]))
- ins->sreg1 = lvreg_stack [ins->sreg1];
- }
-
- /* SREG2 */
- if (spec [MONO_INST_SRC2] != ' ') {
- MonoInst *var = get_vreg_to_inst (cfg, ins->sreg2);
- if (var && !(var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT))) {
- int idx = var->inst_c0;
- if (stack [idx]) {
- if (var->opcode != OP_ARG)
- g_assert (stack [idx]);
-
- ins->sreg2 = stack [idx]->dreg;
- record_use (cfg, stack [idx], bb, ins);
+ /* SREGs */
+ num_sregs = mono_inst_get_src_registers (ins, sregs);
+ for (i = 0; i < num_sregs; ++i) {
+ if (spec [MONO_INST_SRC1 + i] != ' ') {
+ MonoInst *var = get_vreg_to_inst (cfg, sregs [i]);
+ if (var && !(var->flags & (MONO_INST_VOLATILE|MONO_INST_INDIRECT))) {
+ int idx = var->inst_c0;
+ if (stack [idx]) {
+ if (var->opcode != OP_ARG)
+ g_assert (stack [idx]);
+ sregs [i] = stack [idx]->dreg;
+ record_use (cfg, stack [idx], bb, ins);
+ }
+ else
+ record_use (cfg, var, bb, ins);