Skip to content

Commit 0849117

Browse files
Corey AshfordTheRealMDoerr
Corey Ashford
authored andcommittedDec 22, 2020
8256431: [PPC64] Implement Base64 encodeBlock() for Power64-LE
Reviewed-by: mdoerr
1 parent 172af15 commit 0849117

File tree

3 files changed

+431
-0
lines changed

3 files changed

+431
-0
lines changed
 

‎src/hotspot/cpu/ppc/assembler_ppc.hpp

+9
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ class Assembler : public AbstractAssembler {
264264
SUBFME_OPCODE = (31u << OPCODE_SHIFT | 232u << 1),
265265
SUBFZE_OPCODE = (31u << OPCODE_SHIFT | 200u << 1),
266266
DIVW_OPCODE = (31u << OPCODE_SHIFT | 491u << 1),
267+
DIVWU_OPCODE = (31u << OPCODE_SHIFT | 459u << 1),
267268
MULLW_OPCODE = (31u << OPCODE_SHIFT | 235u << 1),
268269
MULHW_OPCODE = (31u << OPCODE_SHIFT | 75u << 1),
269270
MULHWU_OPCODE = (31u << OPCODE_SHIFT | 11u << 1),
@@ -524,10 +525,13 @@ class Assembler : public AbstractAssembler {
524525

525526
// Vector-Scalar (VSX) instruction support.
526527
LXV_OPCODE = (61u << OPCODE_SHIFT | 1u ),
528+
LXVL_OPCODE = (31u << OPCODE_SHIFT | 269u << 1),
527529
STXV_OPCODE = (61u << OPCODE_SHIFT | 5u ),
530+
STXVL_OPCODE = (31u << OPCODE_SHIFT | 397u << 1),
528531
LXVD2X_OPCODE = (31u << OPCODE_SHIFT | 844u << 1),
529532
STXVD2X_OPCODE = (31u << OPCODE_SHIFT | 972u << 1),
530533
MTVSRD_OPCODE = (31u << OPCODE_SHIFT | 179u << 1),
534+
MTVSRDD_OPCODE = (31u << OPCODE_SHIFT | 435u << 1),
531535
MTVSRWZ_OPCODE = (31u << OPCODE_SHIFT | 243u << 1),
532536
MFVSRD_OPCODE = (31u << OPCODE_SHIFT | 51u << 1),
533537
MTVSRWA_OPCODE = (31u << OPCODE_SHIFT | 211u << 1),
@@ -1343,6 +1347,8 @@ class Assembler : public AbstractAssembler {
13431347
inline void divd_( Register d, Register a, Register b);
13441348
inline void divw( Register d, Register a, Register b);
13451349
inline void divw_( Register d, Register a, Register b);
1350+
inline void divwu( Register d, Register a, Register b);
1351+
inline void divwu_( Register d, Register a, Register b);
13461352

13471353
// Fixed-Point Arithmetic Instructions with Overflow detection
13481354
inline void addo( Register d, Register a, Register b);
@@ -2263,6 +2269,8 @@ class Assembler : public AbstractAssembler {
22632269
// Vector-Scalar (VSX) instructions.
22642270
inline void lxv( VectorSRegister d, int si16, Register a);
22652271
inline void stxv( VectorSRegister d, int si16, Register a);
2272+
inline void lxvl( VectorSRegister d, Register a, Register b);
2273+
inline void stxvl( VectorSRegister d, Register a, Register b);
22662274
inline void lxvd2x( VectorSRegister d, Register a);
22672275
inline void lxvd2x( VectorSRegister d, Register a, Register b);
22682276
inline void stxvd2x( VectorSRegister d, Register a);
@@ -2277,6 +2285,7 @@ class Assembler : public AbstractAssembler {
22772285
inline void xxmrglw( VectorSRegister d, VectorSRegister a, VectorSRegister b);
22782286
inline void mtvsrd( VectorSRegister d, Register a);
22792287
inline void mfvsrd( Register d, VectorSRegister a);
2288+
inline void mtvsrdd( VectorSRegister d, Register a, Register b);
22802289
inline void mtvsrwz( VectorSRegister d, Register a);
22812290
inline void mfvsrwz( Register d, VectorSRegister a);
22822291
inline void xxspltw( VectorSRegister d, VectorSRegister b, int ui2);

‎src/hotspot/cpu/ppc/assembler_ppc.inline.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@ inline void Assembler::divd( Register d, Register a, Register b) { emit_int32(
127127
inline void Assembler::divd_( Register d, Register a, Register b) { emit_int32(DIVD_OPCODE | rt(d) | ra(a) | rb(b) | oe(0) | rc(1)); }
128128
inline void Assembler::divw( Register d, Register a, Register b) { emit_int32(DIVW_OPCODE | rt(d) | ra(a) | rb(b) | oe(0) | rc(0)); }
129129
inline void Assembler::divw_( Register d, Register a, Register b) { emit_int32(DIVW_OPCODE | rt(d) | ra(a) | rb(b) | oe(0) | rc(1)); }
130+
inline void Assembler::divwu( Register d, Register a, Register b) { emit_int32(DIVWU_OPCODE | rt(d) | ra(a) | rb(b) | oe(0) | rc(0)); }
131+
inline void Assembler::divwu_( Register d, Register a, Register b) { emit_int32(DIVWU_OPCODE | rt(d) | ra(a) | rb(b) | oe(0) | rc(1)); }
130132

131133
// Fixed-Point Arithmetic Instructions with Overflow detection
132134
inline void Assembler::addo( Register d, Register a, Register b) { emit_int32(ADD_OPCODE | rt(d) | ra(a) | rb(b) | oe(1) | rc(0)); }
@@ -792,11 +794,14 @@ inline void Assembler::lvsr( VectorRegister d, Register s1, Register s2) { emit
792794
// Vector-Scalar (VSX) instructions.
793795
inline void Assembler::lxv( VectorSRegister d, int ui16, Register a) { assert(is_aligned(ui16, 16), "displacement must be a multiple of 16"); emit_int32( LXV_OPCODE | vsrt_dq(d) | ra0mem(a) | uimm(ui16, 16)); }
794796
inline void Assembler::stxv( VectorSRegister d, int ui16, Register a) { assert(is_aligned(ui16, 16), "displacement must be a multiple of 16"); emit_int32( STXV_OPCODE | vsrs_dq(d) | ra0mem(a) | uimm(ui16, 16)); }
797+
inline void Assembler::lxvl( VectorSRegister d, Register s1, Register b) { emit_int32( LXVL_OPCODE | vsrt(d) | ra0mem(s1) | rb(b)); }
798+
inline void Assembler::stxvl( VectorSRegister d, Register s1, Register b) { emit_int32( STXVL_OPCODE | vsrt(d) | ra0mem(s1) | rb(b)); }
795799
inline void Assembler::lxvd2x( VectorSRegister d, Register s1) { emit_int32( LXVD2X_OPCODE | vsrt(d) | ra(0) | rb(s1)); }
796800
inline void Assembler::lxvd2x( VectorSRegister d, Register s1, Register s2) { emit_int32( LXVD2X_OPCODE | vsrt(d) | ra0mem(s1) | rb(s2)); }
797801
inline void Assembler::stxvd2x( VectorSRegister d, Register s1) { emit_int32( STXVD2X_OPCODE | vsrs(d) | ra(0) | rb(s1)); }
798802
inline void Assembler::stxvd2x( VectorSRegister d, Register s1, Register s2) { emit_int32( STXVD2X_OPCODE | vsrs(d) | ra0mem(s1) | rb(s2)); }
799803
inline void Assembler::mtvsrd( VectorSRegister d, Register a) { emit_int32( MTVSRD_OPCODE | vsrt(d) | ra(a)); }
804+
inline void Assembler::mtvsrdd( VectorSRegister d, Register a, Register b) { emit_int32( MTVSRDD_OPCODE | vsrt(d) | ra(a) | rb(b)); }
800805
inline void Assembler::mfvsrd( Register d, VectorSRegister a) { emit_int32( MFVSRD_OPCODE | vsrs(a) | ra(d)); }
801806
inline void Assembler::mtvsrwz( VectorSRegister d, Register a) { emit_int32( MTVSRWZ_OPCODE | vsrt(d) | ra(a)); }
802807
inline void Assembler::mfvsrwz( Register d, VectorSRegister a) { emit_int32( MFVSRWZ_OPCODE | vsrs(a) | ra(d)); }

0 commit comments

Comments
 (0)
Please sign in to comment.