278 case Op_NegVF:
279 case Op_NegVD:
280 case Op_SqrtVF:
281 case Op_SqrtVD:
282 case Op_NotV:
283 case Op_LShiftVB:
284 case Op_LShiftVS:
285 case Op_LShiftVI:
286 case Op_LShiftVL:
287 case Op_RShiftVB:
288 case Op_RShiftVS:
289 case Op_RShiftVI:
290 case Op_RShiftVL:
291 case Op_URShiftVB:
292 case Op_URShiftVS:
293 case Op_URShiftVI:
294 case Op_URShiftVL:
295 case Op_AndV:
296 case Op_OrV:
297 case Op_XorV:
298 // When op is already vectorized, return that directly.
299 return sopc;
300
301 default:
302 return 0; // Unimplemented
303 }
304 }
305
306 int VectorNode::replicate_opcode(BasicType bt) {
307 switch(bt) {
308 case T_BOOLEAN:
309 case T_BYTE:
310 return Op_ReplicateB;
311 case T_SHORT:
312 case T_CHAR:
313 return Op_ReplicateS;
314 case T_INT:
315 return Op_ReplicateI;
316 case T_LONG:
317 return Op_ReplicateL;
467
468 case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
469 case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
470 case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
471 case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
472
473 case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
474 case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
475 case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
476 case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
477
478 case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
479 case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
480 case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
481 case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
482
483 case Op_AndV: return new AndVNode(n1, n2, vt);
484 case Op_OrV: return new OrVNode (n1, n2, vt);
485 case Op_XorV: return new XorVNode(n1, n2, vt);
486
487 case Op_ConvertVF2VD:
488 if (bt == T_DOUBLE) {
489 return new ConvertVF2VDNode(n1, vt);
490 }
491 default:
492 fatal("Missed vector creation for '%s'", NodeClassNames[vopc]);
493 return NULL;
494 }
495 }
496
497 VectorNode* VectorNode::make(int opc, Node* n1, Node* n2, Node* n3, uint vlen, BasicType bt) {
498 const TypeVect* vt = TypeVect::make(bt, vlen);
499 int vopc = VectorNode::opcode(opc, bt);
500 // This method should not be called for unimplemented vectors.
501 guarantee(vopc > 0, "Vector for '%s' is not implemented", NodeClassNames[opc]);
502 switch (vopc) {
503 case Op_FmaVD: return new FmaVDNode(n1, n2, n3, vt);
504 case Op_FmaVF: return new FmaVFNode(n1, n2, n3, vt);
505 default:
506 fatal("Missed vector creation for '%s'", NodeClassNames[vopc]);
507 return NULL;
508 }
509 }
510
|
278 case Op_NegVF:
279 case Op_NegVD:
280 case Op_SqrtVF:
281 case Op_SqrtVD:
282 case Op_NotV:
283 case Op_LShiftVB:
284 case Op_LShiftVS:
285 case Op_LShiftVI:
286 case Op_LShiftVL:
287 case Op_RShiftVB:
288 case Op_RShiftVS:
289 case Op_RShiftVI:
290 case Op_RShiftVL:
291 case Op_URShiftVB:
292 case Op_URShiftVS:
293 case Op_URShiftVI:
294 case Op_URShiftVL:
295 case Op_AndV:
296 case Op_OrV:
297 case Op_XorV:
298 case Op_VectorBlend:
299 case Op_VectorReinterpret:
300 case Op_VectorTest:
301 case Op_VectorMaskCmp:
302 case Op_VectorCastB2X:
303 case Op_VectorCastS2X:
304 case Op_VectorCastI2X:
305 case Op_VectorCastL2X:
306 case Op_VectorCastF2X:
307 case Op_VectorCastD2X:
308 // When op is already vectorized, return that directly.
309 return sopc;
310
311 default:
312 return 0; // Unimplemented
313 }
314 }
315
316 int VectorNode::replicate_opcode(BasicType bt) {
317 switch(bt) {
318 case T_BOOLEAN:
319 case T_BYTE:
320 return Op_ReplicateB;
321 case T_SHORT:
322 case T_CHAR:
323 return Op_ReplicateS;
324 case T_INT:
325 return Op_ReplicateI;
326 case T_LONG:
327 return Op_ReplicateL;
477
478 case Op_LShiftVB: return new LShiftVBNode(n1, n2, vt);
479 case Op_LShiftVS: return new LShiftVSNode(n1, n2, vt);
480 case Op_LShiftVI: return new LShiftVINode(n1, n2, vt);
481 case Op_LShiftVL: return new LShiftVLNode(n1, n2, vt);
482
483 case Op_RShiftVB: return new RShiftVBNode(n1, n2, vt);
484 case Op_RShiftVS: return new RShiftVSNode(n1, n2, vt);
485 case Op_RShiftVI: return new RShiftVINode(n1, n2, vt);
486 case Op_RShiftVL: return new RShiftVLNode(n1, n2, vt);
487
488 case Op_URShiftVB: return new URShiftVBNode(n1, n2, vt);
489 case Op_URShiftVS: return new URShiftVSNode(n1, n2, vt);
490 case Op_URShiftVI: return new URShiftVINode(n1, n2, vt);
491 case Op_URShiftVL: return new URShiftVLNode(n1, n2, vt);
492
493 case Op_AndV: return new AndVNode(n1, n2, vt);
494 case Op_OrV: return new OrVNode (n1, n2, vt);
495 case Op_XorV: return new XorVNode(n1, n2, vt);
496
497 case Op_VectorCastB2X: return new VectorCastB2XNode(n1, vt);
498 case Op_VectorCastS2X: return new VectorCastS2XNode(n1, vt);
499 case Op_VectorCastI2X: return new VectorCastI2XNode(n1, vt);
500 case Op_VectorCastL2X: return new VectorCastL2XNode(n1, vt);
501 case Op_VectorCastF2X: return new VectorCastF2XNode(n1, vt);
502 case Op_VectorCastD2X: return new VectorCastD2XNode(n1, vt);
503
504 default:
505 fatal("Missed vector creation for '%s'", NodeClassNames[vopc]);
506 return NULL;
507 }
508 }
509
510 VectorNode* VectorNode::make(int opc, Node* n1, Node* n2, Node* n3, uint vlen, BasicType bt) {
511 const TypeVect* vt = TypeVect::make(bt, vlen);
512 int vopc = VectorNode::opcode(opc, bt);
513 // This method should not be called for unimplemented vectors.
514 guarantee(vopc > 0, "Vector for '%s' is not implemented", NodeClassNames[opc]);
515 switch (vopc) {
516 case Op_FmaVD: return new FmaVDNode(n1, n2, n3, vt);
517 case Op_FmaVF: return new FmaVFNode(n1, n2, n3, vt);
518 default:
519 fatal("Missed vector creation for '%s'", NodeClassNames[vopc]);
520 return NULL;
521 }
522 }
523
|