< prev index next >

src/share/vm/oops/generateOopMap.cpp

Print this page
rev 10979 : 8140594: Various minor code improvements (compiler)


1669         push(out1); // recover...
1670       } else {
1671         push(vcts); // preserve reference.
1672       }
1673       // Otherwise it is a conflict, but one that verification would
1674       // have caught if illegal. In particular, it can't be a topCTS
1675       // resulting from mergeing two difference pcCTS's since the verifier
1676       // would have rejected any use of such a merge.
1677     } else {
1678       push(out1); // handle val/init conflict
1679     }
1680     loc_no++;
1681   }
1682 }
1683 
1684 void GenerateOopMap::ppdupswap(int poplen, const char *out) {
1685   CellTypeState actual[5];
1686   assert(poplen < 5, "this must be less than length of actual vector");
1687 
1688   // pop all arguments
1689   for(int i = 0; i < poplen; i++) actual[i] = pop();


1690 
1691   // put them back
1692   char push_ch = *out++;
1693   while (push_ch != '\0') {
1694     int idx = push_ch - '1';
1695     assert(idx >= 0 && idx < poplen, "wrong arguments");
1696     push(actual[idx]);
1697     push_ch = *out++;
1698   }
1699 }
1700 
1701 void GenerateOopMap::ppop1(CellTypeState out) {
1702   CellTypeState actual = pop();
1703   check_type(out, actual);
1704 }
1705 
1706 void GenerateOopMap::ppop(CellTypeState *out) {
1707   while (!(*out).is_bottom()) {
1708     ppop1(*out++);
1709   }




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


< prev index next >