8287738: [PPC64] jdk/incubator/vector/*VectorTests failing

Reviewed-by: kvn, goetz
This commit is contained in:
Martin Doerr 2022-06-09 10:14:45 +00:00
parent e5b56bafa9
commit 560e2927e3
3 changed files with 28 additions and 4 deletions

View File

@ -732,7 +732,10 @@ class Assembler : public AbstractAssembler {
VSRAB_OPCODE = (4u << OPCODE_SHIFT | 772u ),
VSRAW_OPCODE = (4u << OPCODE_SHIFT | 900u ),
VSRAH_OPCODE = (4u << OPCODE_SHIFT | 836u ),
VPOPCNTB_OPCODE= (4u << OPCODE_SHIFT | 1795u ),
VPOPCNTH_OPCODE= (4u << OPCODE_SHIFT | 1859u ),
VPOPCNTW_OPCODE= (4u << OPCODE_SHIFT | 1923u ),
VPOPCNTD_OPCODE= (4u << OPCODE_SHIFT | 1987u ),
// Vector Floating-Point
// not implemented yet
@ -2342,7 +2345,10 @@ class Assembler : public AbstractAssembler {
inline void vsrab( VectorRegister d, VectorRegister a, VectorRegister b);
inline void vsraw( VectorRegister d, VectorRegister a, VectorRegister b);
inline void vsrah( VectorRegister d, VectorRegister a, VectorRegister b);
inline void vpopcntb( VectorRegister d, VectorRegister b);
inline void vpopcnth( VectorRegister d, VectorRegister b);
inline void vpopcntw( VectorRegister d, VectorRegister b);
inline void vpopcntd( VectorRegister d, VectorRegister b);
// Vector Floating-Point not implemented yet
inline void mtvscr( VectorRegister b);
inline void mfvscr( VectorRegister d);

View File

@ -1020,7 +1020,10 @@ inline void Assembler::vsrh( VectorRegister d, VectorRegister a, VectorRegist
inline void Assembler::vsrab( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VSRAB_OPCODE | vrt(d) | vra(a) | vrb(b)); }
inline void Assembler::vsraw( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VSRAW_OPCODE | vrt(d) | vra(a) | vrb(b)); }
inline void Assembler::vsrah( VectorRegister d, VectorRegister a, VectorRegister b) { emit_int32( VSRAH_OPCODE | vrt(d) | vra(a) | vrb(b)); }
inline void Assembler::vpopcntb(VectorRegister d, VectorRegister b) { emit_int32( VPOPCNTB_OPCODE | vrt(d) | vrb(b)); }
inline void Assembler::vpopcnth(VectorRegister d, VectorRegister b) { emit_int32( VPOPCNTH_OPCODE | vrt(d) | vrb(b)); }
inline void Assembler::vpopcntw(VectorRegister d, VectorRegister b) { emit_int32( VPOPCNTW_OPCODE | vrt(d) | vrb(b)); }
inline void Assembler::vpopcntd(VectorRegister d, VectorRegister b) { emit_int32( VPOPCNTD_OPCODE | vrt(d) | vrb(b)); }
inline void Assembler::mtvscr( VectorRegister b) { emit_int32( MTVSCR_OPCODE | vrb(b)); }
inline void Assembler::mfvscr( VectorRegister d) { emit_int32( MFVSCR_OPCODE | vrt(d)); }

View File

@ -14098,13 +14098,28 @@ instruct vsqrt2D_reg(vecX dst, vecX src) %{
// Vector Population Count Instructions
instruct vpopcnt4I_reg(vecX dst, vecX src) %{
instruct vpopcnt_reg(vecX dst, vecX src) %{
match(Set dst (PopCountVI src));
predicate(n->as_Vector()->length() == 4);
format %{ "VPOPCNTW $dst,$src\t// pop count packed4I" %}
format %{ "VPOPCNT $dst,$src\t// pop count packed" %}
size(4);
ins_encode %{
__ vpopcntw($dst$$VectorSRegister->to_vr(), $src$$VectorSRegister->to_vr());
BasicType bt = Matcher::vector_element_basic_type(this);
switch (bt) {
case T_BYTE:
__ vpopcntb($dst$$VectorSRegister->to_vr(), $src$$VectorSRegister->to_vr());
break;
case T_SHORT:
__ vpopcnth($dst$$VectorSRegister->to_vr(), $src$$VectorSRegister->to_vr());
break;
case T_INT:
__ vpopcntw($dst$$VectorSRegister->to_vr(), $src$$VectorSRegister->to_vr());
break;
case T_LONG:
__ vpopcntd($dst$$VectorSRegister->to_vr(), $src$$VectorSRegister->to_vr());
break;
default:
ShouldNotReachHere();
}
%}
ins_pipe(pipe_class_default);
%}