- pfomask = 0;
-
- // to get nicer code, we try to delay test and cmp;
- // if we can't because of operand modification, or if we
- // have math op, or branch, make it calculate flags explicitly
- if (tmp_op->op == OP_TEST || tmp_op->op == OP_CMP) {
- if (branched || scan_for_mod(tmp_op, ret + 1, i) >= 0)
- pfomask = 1 << pfo;
- }
- else if (tmp_op->op == OP_CMPS) {
- pfomask = 1 << PFO_Z;
- }
- else {
- if ((pfo != PFO_Z && pfo != PFO_S && pfo != PFO_P)
- || scan_for_mod_opr0(tmp_op, ret + 1, i) >= 0)
- pfomask = 1 << pfo;
- }
- if (pfomask) {
- tmp_op->pfomask |= pfomask;
- cmp_result_vars |= pfomask;
- po->datap = tmp_op;
+ for (j = 0; j < cnt; j++)
+ {
+ tmp_op = &ops[setters[j]]; // flag setter
+ pfomask = 0;
+
+ // to get nicer code, we try to delay test and cmp;
+ // if we can't because of operand modification, or if we
+ // have math op, or branch, make it calculate flags explicitly
+ if (tmp_op->op == OP_TEST || tmp_op->op == OP_CMP) {
+ if (branched || scan_for_mod(tmp_op, setters[j] + 1, i) >= 0)
+ pfomask = 1 << pfo;
+ }
+ else if (tmp_op->op == OP_CMPS) {
+ pfomask = 1 << PFO_Z;
+ }
+ else {
+ if ((pfo != PFO_Z && pfo != PFO_S && pfo != PFO_P)
+ || scan_for_mod_opr0(tmp_op, setters[j] + 1, i) >= 0)
+ pfomask = 1 << pfo;
+ }
+ if (pfomask) {
+ tmp_op->pfomask |= pfomask;
+ cmp_result_vars |= pfomask;
+ // note: may overwrite, currently not a problem
+ po->datap = tmp_op;
+ }