@@ -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
0 commit comments