Skip to content

Commit 25d9deb

Browse files
committed
8335367: [s390] Add support for load immediate on condition instructions.
Reviewed-by: lucy, amitkumar
1 parent a6277bb commit 25d9deb

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

src/hotspot/cpu/s390/assembler_s390.hpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,11 @@ class Assembler : public AbstractAssembler {
637637
#define LCDBR_ZOPC (unsigned int)(179 << 24 | 19 << 16)
638638
#define LCXBR_ZOPC (unsigned int)(179 << 24 | 67 << 16)
639639

640+
// Load Halfword Immediate on Condition
641+
#define LOCHI_ZOPC (unsigned long)(0xECL << 40 | 0x42L)
642+
#define LOCHHI_ZOPC (unsigned long)(0xECL << 40 | 0x4EL)
643+
#define LOCGHI_ZOPC (unsigned long)(0xECL << 40 | 0x46L)
644+
640645
// Add
641646
// RR, signed
642647
#define AR_ZOPC (unsigned int)(26 << 8)
@@ -987,8 +992,8 @@ class Assembler : public AbstractAssembler {
987992
#define BASR_ZOPC (unsigned int)(13 << 8)
988993
#define BCT_ZOPC (unsigned int)(70 << 24)
989994
#define BCTR_ZOPC (unsigned int)(6 << 8)
990-
#define BCTG_ZOPC (unsigned int)(227L << 40 | 70)
991-
#define BCTGR_ZOPC (unsigned long)(0xb946 << 16)
995+
#define BCTG_ZOPC (unsigned long)(227L << 40 | 70)
996+
#define BCTGR_ZOPC (unsigned int)(0xb946 << 16)
992997
// Absolute
993998
#define BC_ZOPC (unsigned int)(71 << 24)
994999
#define BAL_ZOPC (unsigned int)(69 << 24)
@@ -2075,6 +2080,11 @@ class Assembler : public AbstractAssembler {
20752080
inline void z_llilh(Register r1, int64_t i2); // r1 = i2_imm16 ; uint64 <- (uint16<<16)
20762081
inline void z_llill(Register r1, int64_t i2); // r1 = i2_imm16 ; uint64 <- uint16
20772082

2083+
// load halfword immediate on condition
2084+
inline void z_lochi( Register r1, int64_t i2, branch_condition m3); // load immediate r1[32-63] = i2_simm16 ; int32 <- int16
2085+
inline void z_lochhi(Register r1, int64_t i2, branch_condition m3); // load immediate r1[ 0-31] = i2_simm16 ; int32 <- int16
2086+
inline void z_locghi(Register r1, int64_t i2, branch_condition m3); // load immediate r1[ 0-63] = i2_simm16 ; int64 <- int16
2087+
20782088
// insert immediate
20792089
inline void z_ic( Register r1, int64_t d2, Register x2, Register b2); // insert character
20802090
inline void z_icy( Register r1, int64_t d2, Register x2, Register b2); // insert character

src/hotspot/cpu/s390/assembler_s390.inline.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,11 @@ inline void Assembler::z_stcm (Register r1, int64_t m3, int64_t d2, Register b2)
245245
inline void Assembler::z_stcmy(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( STCMY_ZOPC | regt(r1, 8, 48) | uimm4(m3, 12, 48) | rsymask_48(d2, b2)); }
246246
inline void Assembler::z_stcmh(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( STCMH_ZOPC | regt(r1, 8, 48) | uimm4(m3, 12, 48) | rsymask_48(d2, b2)); }
247247

248+
// load halfword immediate on condition
249+
inline void Assembler::z_lochi(Register r1, int64_t i2, branch_condition m3) { emit_48( LOCHI_ZOPC | reg(r1, 8, 48) | simm16(i2, 16, 48) | uimm4(m3, 12, 48)); }
250+
inline void Assembler::z_lochhi(Register r1, int64_t i2, branch_condition m3) { emit_48( LOCHHI_ZOPC | reg(r1, 8, 48) | simm16(i2, 16, 48) | uimm4(m3, 12, 48)); }
251+
inline void Assembler::z_locghi(Register r1, int64_t i2, branch_condition m3) { emit_48( LOCGHI_ZOPC | reg(r1, 8, 48) | simm16(i2, 16, 48) | uimm4(m3, 12, 48)); }
252+
248253
// memory-immediate instructions (8-bit immediate)
249254
inline void Assembler::z_cli( int64_t d1, Register b1, int64_t i2) { emit_32( CLI_ZOPC | rsmask_32( d1, b1) | uimm8(i2, 8, 32)); }
250255
inline void Assembler::z_mvi( int64_t d1, Register b1, int64_t i2) { emit_32( MVI_ZOPC | rsmask_32( d1, b1) | imm8(i2, 8, 32)); }

src/hotspot/cpu/s390/macroAssembler_s390.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3426,7 +3426,7 @@ void MacroAssembler::lookup_secondary_supers_table_const(Register r_sub_klass,
34263426
z_bru(L_done); // pass whatever result we got from a slow path
34273427

34283428
bind(L_failure);
3429-
// TODO: use load immediate on condition and z_bru above will not be required
3429+
34303430
z_lghi(r_result, 1);
34313431

34323432
bind(L_done);

0 commit comments

Comments
 (0)