1661 }
1662 push(out1); // recover...
1663 } else {
1664 push(vcts); // preserve reference.
1665 }
1666 // Otherwise it is a conflict, but one that verification would
1667 // have caught if illegal. In particular, it can't be a topCTS
1668 // resulting from mergeing two difference pcCTS's since the verifier
1669 // would have rejected any use of such a merge.
1670 } else {
1671 push(out1); // handle val/init conflict
1672 }
1673 loc_no++;
1674 }
1675 }
1676
1677 void GenerateOopMap::ppdupswap(int poplen, const char *out) {
1678 CellTypeState actual[5];
1679 assert(poplen < 5, "this must be less than length of actual vector");
1680
1681 // pop all arguments
1682 for(int i = 0; i < poplen; i++) actual[i] = pop();
1683
1684 // put them back
1685 char push_ch = *out++;
1686 while (push_ch != '\0') {
1687 int idx = push_ch - '1';
1688 assert(idx >= 0 && idx < poplen, "wrong arguments");
1689 push(actual[idx]);
1690 push_ch = *out++;
1691 }
1692 }
1693
1694 void GenerateOopMap::ppop1(CellTypeState out) {
1695 CellTypeState actual = pop();
1696 check_type(out, actual);
1697 }
1698
1699 void GenerateOopMap::ppop(CellTypeState *out) {
1700 while (!(*out).is_bottom()) {
1701 ppop1(*out++);
1702 }
|
1661 }
1662 push(out1); // recover...
1663 } else {
1664 push(vcts); // preserve reference.
1665 }
1666 // Otherwise it is a conflict, but one that verification would
1667 // have caught if illegal. In particular, it can't be a topCTS
1668 // resulting from mergeing two difference pcCTS's since the verifier
1669 // would have rejected any use of such a merge.
1670 } else {
1671 push(out1); // handle val/init conflict
1672 }
1673 loc_no++;
1674 }
1675 }
1676
1677 void GenerateOopMap::ppdupswap(int poplen, const char *out) {
1678 CellTypeState actual[5];
1679 assert(poplen < 5, "this must be less than length of actual vector");
1680
1681 // Pop all arguments.
1682 for (int i = 0; i < poplen; i++) {
1683 actual[i] = pop();
1684 }
1685 // Field _state is uninitialized when calling push.
1686 for (int i = poplen; i < 5; i++) {
1687 actual[i] = CellTypeState::uninit;
1688 }
1689
1690 // put them back
1691 char push_ch = *out++;
1692 while (push_ch != '\0') {
1693 int idx = push_ch - '1';
1694 assert(idx >= 0 && idx < poplen, "wrong arguments");
1695 push(actual[idx]);
1696 push_ch = *out++;
1697 }
1698 }
1699
1700 void GenerateOopMap::ppop1(CellTypeState out) {
1701 CellTypeState actual = pop();
1702 check_type(out, actual);
1703 }
1704
1705 void GenerateOopMap::ppop(CellTypeState *out) {
1706 while (!(*out).is_bottom()) {
1707 ppop1(*out++);
1708 }
|