8199421: Add support for vector popcount

Reviewed-by: kvn
This commit is contained in:
Razvan Lupusoru 2018-03-13 10:22:15 -07:00
parent 147488cbce
commit 343cf9910d
13 changed files with 209 additions and 6 deletions

View file

@ -122,6 +122,13 @@ int VectorNode::opcode(int sopc, BasicType bt) {
case Op_SqrtD:
assert(bt == T_DOUBLE, "must be");
return Op_SqrtVD;
case Op_PopCountI:
if (bt == T_INT) {
return Op_PopCountVI;
}
// Unimplemented for subword types since bit count changes
// depending on size of lane (and sign bit).
return 0;
case Op_LShiftI:
switch (bt) {
case T_BOOLEAN:
@ -325,6 +332,8 @@ VectorNode* VectorNode::make(int opc, Node* n1, Node* n2, uint vlen, BasicType b
case Op_SqrtVF: return new SqrtVFNode(n1, vt);
case Op_SqrtVD: return new SqrtVDNode(n1, vt);
case Op_PopCountVI: return new PopCountVINode(n1, vt);
case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);