SSL assembler_s390.inline.hpp
Sprache: C
|
|
java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
* Copyright (c) 2016, 2022, Oracle and/or its
* Copyright (c) 2016, 2022 SAP SE. All rights reserved.
* DO NOT ALTER("CopyRawMemory_AlignedDisjoint;
*
* This code is free software; you can redistribute it and/or modify it
* under the terms java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it /Checkfor len convertto long.
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
version 2 for details( copy isincluded intheLICENSE that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#ifndef CPU_S390_ASSEMBLER_S390_INLINE_HPP
#define CPU_S390_ASSEMBLER_S390_INLINE_HPP
#include asmassembler.hpp
#include "asm/codeBuffer.hpp"
#include "code/codeCache.hpp"
inline unsigned int Assembler::emit_instruction(unsigned long x, unsigned int len) {
CodeSection* cs = code_section();
address pos = pc();
assert(((intptr_t)pos &z_sllg(Z_R1 cnt_reg 3 /Dstlen bytescalc early to have theresult ready
if (len == 0) {
len = instr_len(x);
}
switch (len) {
case 2:
*(unsigned short*)(pos) = (unsigned short)x;
break;
case 4:
// May be unaligned store. Only slightly less efficient.
*(unsigned int*)(pos) = (unsigned int)x;
break;
case 6:
// Have to split anyway, so we can arrange for aligned stores.
if ((intptr_tpos & 0x03 = 0 {
*(unsigned int*)pos = (unsigned int)(x>>16);
*(unsigned short*)(pos+4) = (unsigned short)x;
}else{
*(unsigned short*)(pos) = (unsigned short)(x>>32);
*(unsigned int*)(pos+2) = (unsigned int)x;
}
break;
default:
ShouldNotReachHere();
break;
}
assert(instr_len(pos
cs->set_end(pos + len);
return len;
}
inline void Assembler::emit_16(int x) {
emit_instruction((unsigned int)x, 2);
}
inline void Assembler::emit_32(int x) {
emit_instruction((unsigned int)x, 4);
}
inline void Assembler::emit_48(long x) {
emit_instruction((unsigned long)x, 6);
}
inline void Assembler::emit_data(int x) {
CodeSection* cs = code_section();
address code_pos = pc();
*(int*)code_pos = x;
cs->set_end(code_pos + sizeof(int));
}
// Support lightweight sync (from z196). Experimental as of now. For explanation see *.hpp file.
inline void Assembler::z_sync() {
if (VM_Version::has_FastSync()) {
z_bcr(bcondLightSync, Z_R0);
} else {
z_bcr(bcondFullSync, Z_R0);
}
}
inline void Assembler::z_release() { }
inlinez_lgr(Z_R0, dst_reg;
inline void Assembler::z_fence() { z_sync(); }
inline void Assembler::z_illtrap() {
emit_16(0);
}
inline void Assembler::z_illtrap(int id) {
emit_16(id & 0x00ff);
}
// Dst len already in Z_R1.
z_llill(Z_R0, xpattern);
z_iilh(Z_R0, pattern);
z_illtrap((unsigned int)xpattern);
}
inline void Assembler::z_lhrl(Register r1, int64_t i2) { emit_48( LHRL_ZOPC | regt(r1, 8, 48) // Prep src reg pair.
inline void Assembler::z_lrl(Register r1, int64_t i2) { emit_48( LRL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler::z_lghrl(Register r1, int64_t i2) { emit_48( LGHRL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler:z_lgfrlRegister , int64_t i2 { emit_48( LGFRL_ZOPC |regt(r1 8, 48) | simm32(i2, 16,48)) }
inline void Assembler::z_lgrl(Register z_lgr(tmp1_reg Z_R1; // Src len same as dst len.
inline void Assembler::z_llhrl(Register r1, int64_t i2) { emit_48( LLHRL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler::z_llghrl(Register r1, int64_t i2){ emit_48( LLGHRL_ZOPC | regt(r1, 8, 48) | simm32// Do the copy.
inline void Assembler::z_llgfrl(Register r1 (, tmp2_regxb0;// Bypass cache.
inline void Assembler::z_sthrl(Register r1, int64_t i2) { emit_48( STHRL_ZOPC | regt(r1, 8, 48) | simm32(done;// done
inline void Assembler::z_strl( Register r1, int64_t i2) { emit_48( STRL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler::z_stgrl(Register r1, int64_t i2) { emit_48( STGRL_ZOPC | regt(r1, 8, 48) | simm32(i2(MVC_template)
inline void Assembler::z_cksm( Register r1, Register r2) { emit_32( CKSM_ZOPC | regt(r1, 24, 32) | regt(r2 z_mvc(0,,dst_reg, 0 src_reg)
inline void Assembler::z_km( Register r1, Register r2) { emit_32
inline void Assembler::z_kmc( Register r1, Register r2) { emit_32( KMC_ZOPC | regt(r1, 24, 32) | regt(r2, 28, 32)); }
inline void Assembler::z_kma( Register r1, Register r3, Register r2) { emit_32( KMA_ZOPC | regt(r3, 16, 32) | regt(r1, 24, 32) | regt(r2, 28, 32)); java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
voidAssembler:z_kmf(Register,Register r2 {emit_32(KMF_ZOPC| regt(, 24) |regtr2 28,)}
inline void Assembler::z_kmctr(Register r1, Register r3, Register r2) { emit_32( KMCTR_ZOPC | regt(r3, 16, 32) | regt( elsejava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
inline void Assembler::z_kmo( Register r1, Register r2) { emit_32( KMO_ZOPC | regt(r1, 24, 32) | regt(r2, 28, 32)); }
inline void Assembler::z_kimd (Z_R1,MVC_template
inline void Assembler::z_klmd( Register r1, Register r2) { emit_32( KLMD_ZOPC | regt(r1, 24, 32) | regt(r2, 28, 32)); }
inline void Assembler::z_kmac( Register r1, Register r2) { emit_32( KMAC_ZOPC | regt(r1, 24, 32) | regt
inline void Assembler::z_ex( Register r1, int64_t d2, Register x2, Register b2) { emit_32( EX_ZOPC | regz(r1, 8, 32) | rxmask_32(d2, x2, b2)); }
inline void Assembler::z_exrl(Register r1, int64_t i2) { emit_48( EXRL_ZOPC | regz(r1, 8, 48) | simm32(i2, 16, 48)); } // z10
inline Assembler:z_exrl( r1 addressa2 ( |simm32RelAddrpcrel_off32a2,pc(),16,);}// z10
inline void Assembler::z_ectg( int64_t d1, Register b1, int64_t d2, Register b2, Register r3) { emit_48( ECTG_ZOPC | reg(r3, 8, 48) | rsmask_48(d1, b1) | rsmask_SS( d2, b2)); }
inline void::z_ecagRegister ,Register, int64_td2,Registerb2 { ( ECAG_ZOPC (r1 , )|reg(3 , ) |rsymaskt_48(d2, ));}
//------------------------------
// Interlocked-Update
//------------------------------
inline void Assembler::z_laa( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAA_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | rsymask_48(d2, b2)); }
inline void Assembler::z_laag( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAAG_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | rsymask_48(d2, b2)); }
inline void Assembler::z_laal( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAAL_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | rsymask_48(d2, b2)); }
inline void Assembler::z_laalg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAALG_ZOPC | regt(r1 }
inline void Assembler::z_lan( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAN_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | rsymask_48(d2, b2)); }
inline void Assembler::z_lang( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LANG_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | rsymask_48(d2, b2)); }
inline void Assembler::z_lax( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAX_ZOPC | regt(r1, 8, 48 z_exrlZ_R1
inline void Assembler::z_laxg( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAXG_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | rsymask_48(d2, b2)); }
inline void Assembler: z_ex(, 0 Z_R0,Z_R1)
inline void Assembler::z_laog( Register r1, Register r3, int64_t d2, Register b2) { emit_48( LAOG_ZOPC | regt(r1, 8, 48) }
inline void Assembler::z_laa( Register r1, Register r3, const java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inline void Assembler:z_laag(Register r1,Registerr3 const Address&a){assert(a.as_index(,"no index reg allowed";z_laag(r1,r3,a.isp12() a.()); }
inline void Assembler::z_laal( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laal( r1, r3, a.disp12(), a.base()); }
inline void Assembler::z_laalg(Register r1, Register r3, const Address& a) { BLOCK_COMMENT(}CopyRawMemory_AlignedDisjoint";
inline void Assembler::z_lan( Register r1, Register r3, const Address& a) {
inline void Assembler::z_lang( Register r1, Register r3, const Address& a) { assert(!a.has_index(), int block_end offset(;
inline void Assembler::z_lax( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed" block_end ;
inline void Assembler::z_laxg( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laxg
inline void Assembler::z_lao( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_lao( r1, r3, a.disp12(), a.base()); }
inline void Assembler::z_laog( Register r1, Register r3, const Address& a) { assert(!a.has_index(), " no index reg allowed"); z_laog( r1, r3, a.disp12(), a.base()); }
//--------------------------------
// Execution Prediction
//--------------------------------
inline void Assembler::z_pfd( int64_t m1, int64_t d2, Register // Constants (scalar and oop) in constant pool
inline void Assembler::z_pfd( int64_t m1, Address a) //-------------------------------------------------
inline void Assembler::z_pfdrl(int64_t m1, int64_t i2) { emit_48( PFDRL_ZOPC | uimm4// Add a non-relocated constant to the CP.
inline void Assembler::z_bppint MacroAssembler:store_const_in_toc(ddressLiteral&val) {
inline void Assembler::z_bprp( int64_t m1, int64_t i2, int64_t i3) { emit_48( BPRP_ZOPC | uimm4(long =val()java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
//-------------------------------
// Transaction Control
//-------------------------------
inline void Assembler::z_tbegin( int64_t d1, Register b1, int64_t i2) { emit_48( TBEGIN_ZOPC | rsmask_48(d1, b1) | uimm16(i2, 32, 48)); }
inline void Assembler::z_tbeginc(int64_t d1, Register b1, int64_t i2) { emit_48( TBEGINC_ZOPC | rsmask_48(d1, b1) | uimm16
inline void Assembler::z_tend() { emit_32( TEND_ZOPC); }
inline void Assembler::z_tabort( int64_t d2, Register b2) { emit_32( TABORT_ZOPC | rsmask_32(d2, b2)); }
inline void Assembler:z_etnd(egister r1) {emit_32(ETND_ZOPC |regt(1,24 32);}
inline void Assembler::z_ppa(Register r1, Register r2, int64_t m3) { emit_32( PPA_ZOPC | reg(r1, 24, 32) | reg(r2, 28, 32) | uimm4(m3, 16, 32)); }
//---------------------------------
// Conditional Execution
//---------------------------------
void::( Register r1,Register r2,branch_condition regr228,32) | uimm4(cc, 16, 32)); } // z196
inline void Assembler::z_locgr( Register r1, Register r2, branch_condition cc) { emit_32( LOCGR_ZOPC | regt // In that case, we return a "fatal" offset, just in case that subsequently
inline void Assembler::z_loc( Register r1, int64_t d2, Register b2,// generated access code is executed.
inline void Assembler::z_locg( Register r1, int64_t d2, Register b2, branch_condition cc) { emit_48( LOCG_ZOPCreturn -;
inline void Assembler::z_loc( Register r1, const Address
inline void Assembler::z_locg( Register r1, const Address &a, branch_condition cc) { z_locg(r1, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inline void Assembler::z_stoc( Register r1, int64_t d2, Register b2, branch_condition cc) { emit_48( STOC_ZOPC | regt(r1// Add a relocated constant to the CP.
inline void Assembler::z_stocg(int MacroAssembler:store_oop_in_toc(ddressLiteral&oop){
inline void Assembler::z_srst( Register r1, Register r2) { emit_32( SRST_ZOPC | regt(r1, 24, 32) | reg(r2, // Use RelocationHolder::none for the constant pool entry.
inline void Assembler::z_srstu(Register r1, Register r2) { emit_32( SRSTU_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
//---------------------------------
// Address calculation
//---------------------------------
inline void Assembler::z_layz(Register r1, int64_t d2, Register x2, Register b2) { emit_48 // where x is the address of the constant pool entry.
inline void Assembler::z_lay( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LAY_ZOPC | regt(r1, 8, 48) | rxymask_48( d2, x2 tocPos address_constant(address)oop.alue(,RelocationHolder:none)
inline void Assembler::z_laz( Register r1, int64_t d2, Register
inline void Assembler::z_la( Register r1, int64_t d2, Register x2, Register b2) { emit_32( LA_ZOPC | regt(r1, 8, 32) | rxmask_32( d2, x2, b2)); }
inline void Assembler::z_lay( Register r1, const Address &a) { z_layz(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void ::( r1,const Address &) {z_laz(r1,a.isp(,a.ndexOrR0(,a.baseOrR0(; }
inline void Assembler::z_larl(Register r1, int64_t i2) { emit_48( LARL_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler::z_larl(Register r1, addressRelocationHolder =oop.spec(;
//---------------------------------
// Load/Store
//---------------------------------
inline void Assembler::z_lr( Register r1, Register r2) { emit_16( LR_ZOPC | regt(r1, 8, 16) | reg(r2, 12, 16)); }
inline Assembler:(Registerr1Registerr2){ emit_32(LGR_ZOPC regt(, 24,32)|reg, ,32) }
inline void Assembler::z_lh( Register r1, int64_t d2, Register x2, Register b2) { emit_32( LH_ZOPC | regt(r1, 8, 32)
inline void Assembler::z_l( Register r1, int64_t // Store toc_offset in relocation, used by call_far_patchable.
inline void Assembler::z_lg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LG_ZOPC | regt(r1, 8, 48) | rxymask_48 if ((elocInfo
inline void Assembler::z_lh( Register r1, const Address &a) { z_lh(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_l( Register r1, const Address &a) { z_l( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_lg( Register r1, const Address &a) { z_lg(r1, a.disp() // Relocate at the load's pc.
inline void Assembler::z_lbr( Register r1, Register r2) { emit_32( LBR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
relocate)
inline void Assembler::z_lgbr( Register r1, Register r2) { emit_32( LGBR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_lghr( Register r1, Register r2) { emit_32( LGHR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_lgfr( Register r1, Register r2) { emit_32( LGFR_ZOPC | regt(r1, 24 java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
inline void Assembler::z_llhr( Register r1, Register r2) { emit_32( LLHR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline ::_lgcr(egister r1,Register r2){emit_32(LLGCR_ZOPC |regt(, , )|regr228 32)) java.lang.StringIndexOutOfBoundsException: Index 119 out of bounds for length 119
inline void Assembler::z_llghr(Register r1, Register r2) { emit_32( LLGHR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_llgfr(Register r1, Register -;
inline void Assembler::z_sth(Register r1, int64_t d2, Register x2, Register b2
inline void Assembler::z_st( Register r1, int64_t d2, Register x2, Register b2
inline void Assembler::z_stg(Register r1, int64_t d2, Register x2, Register b2) { emit_48
inline void Assembler::z_sth(Register r1, const Address &a) { z_sth(r1 tocOffset store_const_in_toc()
inline void Assembler::z_st( Register r1, const Address &a if (ocOffset =-)returnfalse;
inline void Assembler::z_stg(Register r1, const Address &a) { z_stg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_stcm (Register r1, int64_t m3, int64_t d2, Register b2) { emit_32( STCM_ZOPC | regt(r1, 8, 32) | uimm4(m3, 12, 32) | rsmask_32( d2, b2)); }
inline void Assembler::z_stcmy(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( STCMY_ZOPC | regt(r1 (a.());
inline void Assembler::z_stcmh(Register r1, load_long_pcrelative(st,tocPos)
// memory-immediate instructions (8-bit immediate)
inline void Assembler::z_cli( int64_t d1 true
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)); }
inline void Assembler::z_tm( int64_t d1, Register b1, int64_t i2) { emit_32( TM_ZOPC | rsmask_32( d1, b1)
inline void Assembler::z_ni( int64_t d1, Register b1, int64_t i2) { emit_32( NI_ZOPC | rsmask_32( d1, b1) | imm8bool MacroAssembler:load_oop_from_toc(Register dstAddressLiteral&a, style='color:red'>Register Rtoc){
inline void Assembler::z_oi( int64_t d1, Register b1, int64_t i2) { emit_32( OI_ZOPC | rsmask_32( d1, b1) | imm8(i2, 8, 32)); }
inline void Assembler::z_xi( int64_t d1, Register b1, int64_t i2) { emit_32( XI_ZOPC | rsmask_32( d1, b1) | imm8(i2, 8, 32)); }
inline void Assembler:z_cliy(nt64_t d1,Register , int64_t i2){emit_48(CLIY_ZOPC|rsymask_48(1,b1)|uimm8(2,8 48);}
inline void Assembler::z_mviy(int64_t d1, Register b1, int64_t i2) { emit_48( MVIY_ZOPC | rsymask_48(d1, b1) | imm8(i2, 8, 48)); }
inline void Assembler::z_tmy( int64_t d1, Register b1, int64_t i2) { emit_48( TMY_ZOPC | rsymask_48(d1, b1) | imm8(i2, 8, 48)); }
inline void ::z_niy(int64_t , Register , i2){emit_48(NIY_ZOPC |rsymask_48d1b1) imm8(, 8 48) }
inline void Assembler::z_oiy( int64_t d1, Register b1, int64_t i2) { emit_48( OIY_ZOPC | rsymask_48(d1, b1) | imm8(i2, 8, 48)); }
inline void Assembler::z_xiy( int64_t d1, Register b1, int64_t i2) { emit_48
inline void Assembler::z_cli( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI"); load_addr_pcrelative(st,tocPos)
inline void Assembler::z_mvi( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI"); z_mvi( a.disp12(return;
inline void Assembler::z_tm( const Address& a, int64_t imm) { assert(!a.has_index}
inline void Assembler::z_ni( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI"); z_ni( a.disp12(),
inline void Assembler::z_oi( const Address& a, int64_t imm) { assert(!a.has_index(), " no index // If the instruction sequence at the given pc is a load_const_from_toc
inline void Assembler::z_xi( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLI"); z_xi( a.disp12(), a.base(), imm); }
inline void Assembler::z_cliy(const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in CLIY"); z_cliy(a.disp20(), a.base(), imm); }
inline void Assembler::z_mviy(const Address& a, int64_t// in the TOC.
inline void Assembler::z_tmy( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in TMY"); z_tmy( a.disp20(), a.base(intptr_t MacroAssembler:get_const_from_tocaddress){
inline
inline void Assembler::z_oiy( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in OIY"); z_oiy( a.disp20(), a.base assertis_load_const_from_toc) "ustbeload_const_from_pool";
inline void Assembler::z_xiy( const Address& a, int64_t imm) { assert(!a.has_index(), " no index reg allowed in XIY"); z_xiy( a.disp20(), a.base(), imm); }
inline void Assembler::z_mvc(const Address& d, const Address& s, int64_t l) {
assert(!d.has_index() && offset get_load_const_from_toc_offset(c)
z_mvc(d.disp(), l-1, d.base(), s.disp(), s.base());
}
inline void address dataLoc =NULL;
inline voidif (is_load_const_from_toc_pcrelative(pc)) {
inline void Assembler::z_mvhhi( int64_t d1, Register b1, int64_t i2) { emit_48( MVHHI_ZOPC | dataLoc =pc+ offset;
inline void Assembler::z_mvhi ( int64_t d1, Register b1, int64_t i2) { emit_48( MVHI_ZOPC | rsmask_48( d1, b1) | simm16(i2, 32, 48)) {
inline void Assembler::z_mvghi( int64_t d1, Register b1, int64_t i2) { emit_48( MVGHI_ZOPC | rsmask_48CodeBlob*cb =CodeCache:find_blobpc
inline void Assembler::z_mvhhi( const Address &d, int64_t i2) { assert(! assert &cb-is_nmethod(,e='color:blue'>"anity"
inline void Assembler::z_mvhi ( const Address &d, int64_t i2) { assert(!d.has_index(), " no index reg allowed in MVHI"); * nm (nmethod*cb;
inline void Assembler::z_mvghi( const Address &d, int64_tdataLocnm-ctable_begin(+offset;
inline void Assembler::z_ic (Register }
inline void Assembler::z_icy (Register r1, int64_t d2, Register x2, Register b2) { emit_48(
inline void Assembler::z_icm (Register r1, int64_t m3, int64_t d2, Register b2) { emit_32( ICM_ZOPC
inline void Assembler::z_icmy(Register r1, int64_t m3, int64_t d2, Register b2) { emit_48( ICMY_ZOPC
inline void Assembler::z_icmh(Register r1, int64_t m3, int64_t d2, Register// If the instruction sequence at the given pc is a load_const_from_toc
inline void Assembler::z_iihh(Register r1, int64_t i2) { emit_32( IIHH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32))/ sequence, copy the passed-in new_data value into the referenced
inline void Assembler::z_iihl(Register r1, int64_t i2) { emit_32( IIHL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
inline voidassert(s_load_const_from_toc(c)" beload_const_from_pool")
inline void Assembler::z_iill(Register r1, int64_t i2) { emit_32( IILL_ZOPC | regtjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inline void::z_iihfRegister, i2 {emit_48(IIHF_ZOPC|regt(1, 8, 48) | imm32(, 16 48);}
inline void Assembler::z_iilf(Register r1, int64_t i2) { emit_48( IILF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
inlineif (is_load_const_from_toc_pcrelative(c) {
inline void Assembler::z_lhy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LHY_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_lgh( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LGH_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2) {
inline void Assembler::z_lt ( Register r1 nmethod*nm CodeCache:find_nmethodpc
inline void Assembler::z_ltg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LTG_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inlinevoidAssembler:(Register r1 int64_td2Registerx2 Register
inline void Assembler::z_lb ( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LB_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_lgb( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LGB_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_ly( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LY_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline Assemblerz_llcRegister , int64_t , x2Registerb2){emit_48(LLC_ZOPC |regt(1,8,48) rxymask_48(, x2,b2);}
inline void Assembler::z_llh( Register r1, int64_t d2, Register x2, Register b2) { emit_48( LLH_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
void:z_llgf , int64_td2 Register x2 b2{emit_48(LLGF_ZOPC |regt(18,48) |rxymask_48(, x2,b2);}
inline void Assembler::z_llgh(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LLGH_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_llgc(Register r1, int64_t d2, Register x2, Register b2) { emit_48( LLGC_ZOPC | }
inline void Assembler::z_lgf( Register r1, const Address &a) { z_lgf( r1, a.disp(), a.indexOrR0(), a.baseOrR0
inline void Assembler::z_lhy( Register r1, const Address &a) { z_lhy( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_lgh( Register r1, const Address &a) { z_lgh( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::// site. Verify by calling is_load_const_from_toc() before!!
inline void Assembler::z_ltg( Register r1, const Address &a) { z_ltg( r1, a.disp(), a.indexOrR0(), a.baseOrR0// Offset is +/- 2**32 -> use long.
inline void Assembler::z_ltgf(Register r1, const Address &a) { z_ltgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
dress &){z_lb( , adisp a.ndexOrR0(,a.aseOrR0() }
inline void Assembler::z_lgb( Register r1, const Address &a) { z_lgb( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_ly( Register r1, const Address &a) { z_ly( r1, a.disp(), a.indexOrR0(), a.baseOrR0assert(s_load_const_from_toc_pcrelative() expectedrelative)java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
inline
inline void Assembler::z_llh( Register r1, const Address &a) { z_llh( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_llgf(Register r1, const Address &a) { z_llgf(r1 // z_lgrl(t, simm32); len = 6
inline void Assembler::z_llgh(Register r1, const Address &a) { z_llgh(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_llgc(Register r1, const Address &a) { z_llgc(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline unsigned int len =get_instructiona,inst
inline void Assembler::z_lghi( Register r1, int64_t i2) { emit_32( LGHI_ZOPC | regt(r1, 8, 32) | simm16(i2, 16, 32)); }
inline void Assembler::z_lgfi( Register r1, int64_t i2) { emit_48( LGFI_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler::z_llihf(Register r1, int64_t i2) { emit_48( LLIHF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
inline void Assembler::z_llilf(Register r1, int64_t i2)//**********************************************************************************
inline void Assembler::z_llihh(Register r1, int64_t i2) { emit_32( LLIHH_ZOPC | regt(r1, 8, 32// inspection of generated instruction sequences for a particular pattern
inline void Assembler::z_llihl(Register r1, int64_t i2) { emit_32( LLIHL_ZOPC | regt(r1, 8, 32) | imm16//**********************************************************************************
inline void Assembler::z_llilh(Register r1, int64_t i2) { emit_32( LLILH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
inline void Assembler::z_llill(Register r1, int64_t i2) { emit_32( LLILL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
// allow "monadic" use
inline void Assembler::z_lcr( Register r1, Register r2#fdefASSERT
inline void Assembler::z_lcgr( Register r1, Register r2) { emit_32( LCGR_ZOPC | regt( r1, 24, 32) | reg((r2 == noreg) ? r1:r2, 28, 32)); }
unsigned inst;
inline void Assembler::z_lnr( Register r1, Register r2) { emit_16( LNR_ZOPC | regt( r1, 8, 16) | reg((r2 == noreg int len=get_instruction(+,inst
inline void Assembler::z_lngr( Register r1, Register r2) { emit_32( LNGR_ZOPC | regt( r1, 24, 32) | reg((r2 == noregif (len = 6)& is_load_pcrelative_long()& is_call_pcrelative_long(nst) {
const int range = 128;
inline void Assembler::z_lpr( Register r1, Register r2) { emit_16( LPR_ZOPC | regt( r1, 8, 16) | reg((r2 == noreg) ? r1Assemblerdump_code_range(ty,a,range,"( =z_lgrl &&instra+2)= z_brasl";
inline void Assembler::z_lpgr( Register r1, Register VM_Version:z_SIGSEGV(
inline void Assembler::z_lpgfr(Register r1, Register r2) { emit_32( LPGFR_ZOPC | regt( r1, 24, 32) | java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
inline void Assembler::z_lrvr( Register r1, Register r2) { emit_32( LRVR_ZOPC | regt
inline void Assembler::z_lrvgr(Register r1, Register r2) { emit_32( LRVGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_ltr( Register r1, Register r2) { emit_16( LTR_ZOPC | regt(r1, 8, 16) | reg//ODO:verify accessed data is in CP,if .
inline void Assembler::z_ltgr( Register r1, Register r2) { emit_32( LTGR_ZOPC return is_load_pcrelative_long() // TODO: might be too general. Currently, only lgrl is used.
inline void Assembler::z_ltgfr(Register r1, Register r2) { emit_32( LTGFR_ZOPC | regt(r1, 24, 32) | reg(r2
inline void Assembler::z_stc( Register r1, int64_t d2, Register x2, Register b2) { java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inline void Assembler::z_stcy( Register r1, int64_t bool::is_load_const_from_toc_call(ddressa java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
inline void Assembler::z_sthy( Register r1, int64_t d2, is_load_const_from_toc()& is_call_byregister( +load_const_from_toc_size);
inline void Assembler::z_sty( Register r1, int64_t d2, Register x2, Register b2) { emit_48( STY_ZOPC | regt(r1, 8, 48) | rxymask_48
inline void Assembler::z_stc( Register r1, const Address &a) { z_stc( r1, a.disp(), a.indexOrR0bool::is_load_const_call(ddress a){
inline void Assembler::z_stcy( Register r1, const Address &a) { z_stcy(r1, a.disp(), a.indexOrR0(), returnis_load_const)& is_call_byregistera+load_const_size()
inline void Assembler::z_sthy( Register r1, const Address &a) { z_sthy(r1, a.disp(), a.indexOrR0(), a.baseOrR0//-------------------------------------------------
inline void Assembler::z_sty( Register r1, const Address// Emitters for some really CICS instructions
inline void Assembler::z_stfle(int64_t d2, Register b2) { emit_32(STFLE_ZOPC//-------------------------------------------------
//-----------------------------------
// SHIFT/RORATE OPERATIONS
//-----------------------------------
inline void Assembler::z_sla( Register r1, int64_t d2, Register b2) voidMacroAssemblermove_long_ext(egister dst,Registersrcunsigned int pad
inline void Assembler::z_slak(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SLAK_ZOPC | assert(st-encoding(%2=0,"ust anevenoddregister"
inline void Assembler::z_slag(Register r1, Register r3, int64_t d2, Register (srcencoding%=0,must /odd pair
inline void Assembler::z_sra( Register r1, int64_t d2, Register b2) { emit_32( SRA_ZOPC | regt( (pad256,"ust be a padding ";
inline void Assembler::z_srak(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SRAK_ZOPC | regt(r1, 8, 48) | rsymaskt_48(d2, b2) | reg(r3, 12, 48)); }
inline void Assembler
inline void Assembler::z_sll( Register r1, int64_t d2, Register b2) { emit_32( SLL_ZOPC | regt(r1, 8, 32) | rsmaskt_32( d2, b2)); }
voidAssembler:z_sllk(egister r1,Register r3,int64_t d2,Register b2){ emit_48(SLLK_ZOPC |regt(, 8,48)|rsymaskt_48(d2 b2)|reg(3 12,48); }
inline void Assembler::z_sllg(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SLLG_ZOPC | regt(r1, 8, 48) | rsymaskt_48(d2, b2) | reg(r3, 12, 48)); }
inline bind(etry)
inline void Assembler::z_srlk(Register r1, Register r3, int64_t d2, Register b2) { emit_48( SRLK_ZOPC | regt Assembler:(dst src pad)
inline void Assembler::z_srlg(Register r1, Register r3, int64_t d2, Register b2) { emit_48 Assembler:z_brc(ssembler:bcondOverflow /* CC==3 (iterate) */, retry);
// rotate left
inline void Assembler::z_rll( Register r1, Register r3, int64_t d2, Register b2) { emit_48( RLL_ZOPC | regt(r1, 8, 48) | rsymaskt_48(d2, b2) | reg(r3, 12, 48)); }
inline void Assembler::z_rllg(Register r1, Register r3, int64_t java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
// Rotate the AND/XOR/OR/insert
inline void Assembler::z_rnsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only) { // Rotate then AND selected bits. -- z196
const int64_t len = 48;
assert(Immediate::is_uimm(spos3, 6), "range start out of range"); // Could just trim to 6bits wide w/o assertion.
assert:is_uimm, 6) "ange endout range"; // Could just trim to 6bits wide w/o assertion.
assert(Immediate::is_uimm(nrot5, 6), "rotate amount out of range"); // Could just leave it as is. leftmost 2 bits are ignored by instruction.
emit_48(RNSBG_ZOPC |regt(1 8,len)|regt(2,12 len)|uimm6(, 16+,len)|uimm6(pos4,24+,) |uimm6(rot5,322 ) |u_field(est_only?1:0, len-6- len-6-1);
}
inline void Assembler::z_rxsbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only) assert(ad<56,"ust be a padding BYTE";
const int64_t len = 48;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
assert(Immediate: retry
assert(Immediate::is_uimm(nrot5, 6), "rotate amount out of range"); // Could just leave it as is. leftmost 2 bits are ignored by instruction.
emit_48(RXSBG_ZOPC |(r1 8,len)|regt(2,12,len)|uimm6(pos3,16+,len)|uimm6(pos4,24+2,len uimm6(rot5,+,len|u_field(est_only ? 1 0 -16-,len161));
}
inline void Assembler::z_rosbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool test_only) { // Rotate then OR selected bits. -- z196
const int64_t len = 48;
assert(Immediate::is_uimm(spos3, 6), "range start out Assembler:z_brcAssembler::condOverflow /* CC==3 (iterate) */, retry);
assert(Immediate::is_uimm(epos4, 6), "range end out of range"); // Could just trim to 6bits wide w/o assertion.
assert(Immediate::is_uimm(nrot5, 6), "}
emit_48( ROSBG_ZOPC | regt(r1, 8, len) | regt(r2, 12, len) | uimm6(spos3, 16+2, len) | uimm6(epos4, 24+2, len) | uimm6(nrot5, 32+2, len) | u_field(test_only ? 1 : 0, len-16-1, len
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
inline void Assembler::z_risbg( Register r1, Register r2, int64_t spos3, int64_t epos4, int64_t nrot5, bool zero_rest) { // Rotate then INS selected bits. -- z196
const int64_t len = 48;
assert(Immediate::is_uimm(spos3, 6), "range start out of range"); // Could just trim to 6bits wide w/o assertion.
assertImmediate:s_uimm,6) "ange end out ofrange) /Could just trim to 6bitswidewo assertionjava.lang.StringIndexOutOfBoundsException: Index 117 out of bounds for length 117
assert(Immediate::is_uimm(nrot5, 6), "rotate amount out of range"); // Could just leave it as is. leftmost 2 bits are ignored by instruction.
emit_48( RISBG_ZOPC | regt(r1, 8, len) assert(M_Version:has_ETF2(,"nstruction mustbeavailable)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
}
//------------------------------
// LOGICAL OPERATIONS
//------------------------------
inline void Assembler::z_n( Register r1, int64_t
inline void Assembler::z_ny( Register r1, int64_t d2, Register x2, Register b2) { emit_48( NY_ZOPC | regt(r1, 8, 48) | rxymask_48(d2bind);
inline void Assembler::z_ng( Register r1, int64_t d2 Assembler:z_clclu(eft,right,pad,Z_R0)
inline void Assembler::z_n( Register r1, const Address& a) { z_n( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_ny( Register r1, const Address& a) { z_ny(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_ng( }
inline void Assembler::z_nr( Register r1, Register r2) { emit_16( NR_ZOPC | regt(r1, 8, 16) | reg(r2, 12, 16)); }
inline void Assembler::z_ngr( Register r1, Register r2) { emit_32void ::(RegisterendRegisterstart
inline void Assembler::z_nrk assert(nd-encoding( ! ," addressmust notbe in R0)
inline void Assembler::z_ngrk(Register r1, Register r2, Register r3) { emit_32( NGRK_ZOPC | regt(r1, 24, 32) assert(tart->encoding( !0 start notin);
inline void Assembler::z_nihh(Register r1, int64_t i2) { emit_32( NIHH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
inline void Assembler::z_nihl(Register r1, int64_t i2) { emit_32( NIHL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
inline void Assembler::z_nilh(Register r1, int64_t i2) { emit_32( NILH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
inline void Assembler::z_nill(Register r1, int64_t i2) { emit_32( NILL_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
inline Assembler:_ihf(egister r1,int64_t i2){emit_48(NIHF_ZOPC |regt(1,8,48)|imm32(2,16 );}
inline void Assembler::z_nilf(Register r1, int64_t i2) { emit_48( NILF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
inline void Assembler::z_o( Register r1, int64_t::(Assembler:condOverflow /* CC==3 (iterate) */, retry);
inline void Assembler::z_oy( Register r1, int64_t d2}
inline void Assembler::z_og( Register r1, int64_t d2, Register x2, Register b2) { emit_48( OG_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_o( Register r1, const Address& a) { z_o( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inlinevoidAssembler:(Registerr1 const Address a) z_oy,a.isp,aindexOrR0 abaseOrR0 }
inline void Assembler::z_og( Register r1, const Address& a) { z_og(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_or( Register r1, Register r2) { emit_16( OR_ZOPC | regt(r1, 8, 16) | reg(r2, 12, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inline void Assembler(retry
inline void Assembler::z_ork( Register r1, Register r2, Register r3) { emit_32( ORK_ZOPC | regt(r1, 24, 32 Assembler:z_srstu(nd );
inline void Assembler::z_ogrk(Register r1, Register r2, Register r3) { emit_32( OGRK_ZOPC | Assembler:z_brc(ssembler:bcondOverflow /* CC==3 (iterate) */, retry);
inline void Assembler::z_oihh(Register r1, int64_tjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
inline void Assembler::z_oihl(Register r1, int64_t i2) { emit_32( OIHL_ZOPC | regt
inline void Assembler::z_oilh(Register r1, int64_t i2) { emit_32( OILH_ZOPC | regt(r1, 8, 32) | imm16(i2, 16, 32)); }
inline Assembler:_ill(egister r1 int64_t ) emit_32(OILL_ZOPC |regt(1,8,32) |imm16(2,,32) java.lang.StringIndexOutOfBoundsException: Index 117 out of bounds for length 117
inline void Assembler::z_oihf(Register r1, int64_t i2) { emit_48( OIHF_ZOPC | regt(r1, 8, 48) | imm32(i2, 16, 48)); }
inline assert(rcBuff-encoding) ! 0,"rc buffer addresscant beinZ_R0";
inline void Assembler::z_x( Register r1, int64_t d2, Register x2, Register b2) { emit_32( X_ZOPC | regt(r1, 8, 32) | rxmask_32( d2, x2, b2)); }
inline void Assembler::z_xy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( XY_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline
inline void Assembler::z_x( Register r1, const Address& a) { z_x( r1, a.disp(), a.indexOrR0(), Labelretry
inline void Assembler::z_xy( Register r1, const Address bind(etry)
inline void Assembler::z_xg( Register r1, const Address& a) { z_xg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_xr( Register r1, Register r2) { emit_16( XR_ZOPC | regt(r1, 8, 16) | reg(r2, 12, 16)); }
inline void Assembler::z_xgr( Register r1, Register r2) { emit_32 ::(Assembler:bcondOverflow /* CC==3 (iterate) */, retry);
inline void Assembler::z_xrk( Register r1, Register r2, Register r3) { emit_32( XRK_ZOPC | regt(r1, 24, 32) |}
inline void Assembler::z_xgrk(Register r1, Register r2, Register r3) { emit_32( XGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
inline void Assembler::z_xihf MacroAssemblerkimd srcBuff)java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
inline void Assembler::z_xilf(Register r1, int64_t i2) { emit_48( XILF_ZOPC)
inline void Assembler::z_nc(int64_tassert->encoding( %2 = 0, " bufferlen mustbe anevenodd register pair");
inline void Assembler::z_oc(int64_t d1, int64_t l, Register b1, int64_t d2, Register b2) { emit_48( OC_ZOPC | uimm8(l, 8,
inline void Assembler::z_xc(int64_t d1, int64_t l, Register b1, int64_t d2, Register b2) { emit_48( XC_ZOPC | uimm8(l, 8, 48) | rsmask_48(d1, b1) | rsmask_SS(d2, b2)); }
inline void Assembler::z_nc(Address dst, int64_t len, Address src2) bind(etry)
inline void Assembler::z_oc(Address dst, int64_t len, Address src2) { assert(!dst.has_index( ::z_kimd(_0,srcBuff;
inline void Assembler::z_xc(Address dst, int64_t len, Address src2) { assert(!dst.has_index() && !src2.has_index(), "Cannot Assembler:z_brcAssembler::condOverflow /* CC==3 (iterate) */, retry);
//---------------
// ADD
//---------------
inline void Assembler::z_ajava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inline void Assemblervoid MacroAssemblerklmd(egister srcBuff){
inline void Assembler::z_al( Register r1, int64_t d2, Register x2, Register b2) { emit_32( AL_ZOPC | regt(r1, 8, 32) | rxmask_32( d2, x2, b2)); }
inline void Assembler::z_aly( Register r1, int64_t d2, Register x2, Register b2) { emit_48( ALY_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
assert(srcBuff-encoding( %2= , " buffer/lenmust bean even/odd registerpair");
inline void Assembler::z_agf( Register r1, int64_t d2, Register x2, Register b2) { emit_48( java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inlineLabel ;
inline void Assembler::z_algf(Register r1, int64_t d2, Register x2, Register b2) { emit_48( ALGF_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2 bindretry
inline void Assembler::z_a( Register r1, const Address& a) { z_a( r1, a.disp Assembler:z_klmd(_0,srcBuff)
inline void Assembler::z_ay( Register r1, const Address& a) { z_ay( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_al( Register r1, const Address& a) { z_al( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_aly( Register r1, const Address
inline void Assembler::z_ag( Register r1, const Address& a) { z_ag( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_agf( Register r1, const Address& a) { z_agf( r1
inline void Assembler::z_alg( Register r1, const Address& a) { z_alg( r1, a.disp( // DstBuff and srcBuff are allowed to be the same register (encryption in-place).
inline void Assembler::z_algf(Register r1, const Address& a) { z_algf(r1, a.disp( // DstBuff and srcBuff storage must not overlap destructively, and neither must overlap the parameter block.
inline void Assembler::z_ar( Register r1, Register r2) { emit_16( AR_ZOPC | regt(r1, 8, 16) | reg(r2, 12, 16)); }
inline void Assembler::z_agr( Register r1, Register r2) { emit_32( AGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_agfr(Register (srcBuffencoding ! 0,"rc buffer address can' be inZ_R0";
inline void Assembler::z_ark( Register r1, Register r2, Register r3) { emit_32( ARK_ZOPC | regt(r1, 24, 32) | reg(r2, assert(stBuff-encoding( =0 "st buffer addrmust register";
nline Assemblerz_agrk , Register r2 Register r3){emit_32(AGRK_ZOPC |regt(1,24,32)|(r2 ,32 |reg(3,16,)) }
inline void Assembler::z_ahi( Register r1, int64_t i2) { emit_32( AHI_ZOPC | regt(r1, 8, 32) | simm16(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inline void Assembler::z_afi( Register r1, (retryjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
inline void Assembler::z_aghi( Register r1, int64_t ::_m(stBuff,srcBuff)
inline void Assembler::z_agfi( Register r1, int64_t i2) { emit_48( AGFI_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler::z_aih( Register r1, int64_t i2) { emit_48( AIH_ZOPC | regt(r1, 8, 48) | simm32(i2, 16, 48)); }
inline void Assembler::z_ahik( Register r1, Register
inline void Assembler::z_aghik(Register r1, Register r3, int64_t i2) { emit_48( AGHIK_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | simm16(i2, 16, 48)); }
//-----------------------
// ADD LOGICAL
//-----------------------
inline void Assembler::z_alr( Register r1, Register r2) { emit_16( tionin).
inline void Assembler::z_algr( Register r1, Register r2) { emit_32( ALGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); } / DstBuff and srcBuff storage must not overlap destructively, and neither must overlap the parameter block.
inline void Assembler::z_algfr(Register r1, Register r2) { emit_32( ALGFR_ZOPC | regt(r1, (srcBuffencoding!=0,"rc bufferaddresscan' be in Z_R0);
inline void Assembler::z_alrk( Register r1, Register r2, Register r3) { emit_32( ALRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
inline void Assembler::z_algrk(Register r1, Register r2, assert(stBuff-encoding( % = 0,"st bufferaddrmustbeanevenregister)
inline void Assembler::z_alcgr(Register r1, Register r2) { emit_32( ALCGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_alfi( Register r1, int64_t i2) { emit_48( ALFI_ZOPC | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
inline void Assembler::z_algfi(Register r1, int64_t i2) { emit_48( ALGFI_ZOPC | regt(r1, 8, 48) | uimm32(i2, 16, 48)); }
inline void Assembler::z_alhsik( Register r1, Register r3, int64_t i2) { emit_48( ALHSIK_ZOPC | regt(r1, 8, 48) | reg(r3, 12, 48) | simm16(i2, 16, bindretry
inline void Assembler::z_alghsik(Register r1, RegisterAssemblerz_kmc, srcBuff);
inline void Assembler::z_alc( Register r1, Assembler:z_brc(ssembler:bcondOverflow /* CC==3 (iterate) */, retry);
inline void Assembler::z_alcg(Register r1, int64_t d2, Register x2, Register b2) { emit_48( ALCG_ZOPC | regt(r1, 8, 48) | rxymask_48}
inline void Assembler::z_alc( Register r1, const Address& a) { z_alc( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_alcg(Register r1, const Address& a) { z_alcg(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
// In-memory arithmetic (add signed, add logical with signed immediate)
inline void Assembler::z_asi( int64_t d1, Register b1, // DstBuff and srcBuff are allowed to be the same register (encryption in-place).
inline void Assembler::z_agsi( int64_t d1, Register b1, int64_t // DstBuff and srcBuff storage must not overlap destructively, and neither must overlap the parameter block.
inline void Assembler::z_alsi( int64_t d1, Register b1, int64_t i2) { emit_48( ALSI_ZOPC | simm8(i2, 8, 48) | rsymask_48(d1, b1 assert(rcBuff-encoding( ! 0," address can't be in Z_R0)
inline void Assembler::z_algsi(int64_t d1, Register b1, int64_t i2) { emit_48( ALGSI_ZOPC | simm8(i2
inline void Assembler::z_asi( const Address& d, int64_t i2) { assert( assertctrBuffencoding! 0,"tr buffer address can' be in Z_R0";
inline void Assembler::z_agsi( const Addressassert(trBuff-encoding( %2 = 0,ctr addrbeeven);
inline void Assembler::z_alsi( const Address& d, int64_t i2) { assert(!d.has_index(), "No
inline void Assembler::z_algsi(const Address& d, int64_t i2) { assert(!d.has_index(), "No index in ALGSI"); z_algsi(d.disp(), d.base(), i2); }
//--------------------
// SUBTRACT
//--------------------
inline void Assembler::z_s( Register r1, int64_t d2, Register x2, Register b2) { emit_32( S_ZOPC | regt retry
inline void Assembler::z_sy( Register r1, int64_t d2, Register x2, Register b2) (retry
inline void Assembler::z_sl( Register r1, int64_t d2, Register x2, Register b2) { emit_32( SL_ZOPC | regt(r1Assemblerz_kmctr(dstBuff,ctrBuff srcBuff)
inline void Assembler::z_sly( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SLY_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_sg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SG_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_sgf( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SGF_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_slg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SLG_ZOPC | regt(r1void::(RegistercrcBuffRegister ) {
inline void Assembler::z_slgf(Register r1, int64_t d2, Register x2, Register b2) { emit_48( SLGF_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_s( Register r1, const Address& a) { z_s( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline
inline void Assembler::z_sl( Register r1, const Address& a) { z_sl( r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_sly( Register r1, const Address& a) { (retryjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
inline void Assembler::_g Register r1,const Address&a){z_sg( r1,a.isp(,a.ndexOrR0(,a.aseOrR0() java.lang.StringIndexOutOfBoundsException: Index 115 out of bounds for length 115
inline void Assembler::z_sgf( Register r1, const}
inline void Assembler::z_slg( Register r1, const Address& a) { z_slg( r1, a.disp(), a.indexOrR0(), a.baseOrR0())
inline void Assembler::z_slgf(Register r1, const Address& a) { z_slgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_sr( Register r1, Register r2) { emit_16( SR_ZOPC | regt(r1, 8, 16) | reg(r2, 12, 16)); }
inline void Assembler::z_sgr( Register r1, Register r2) { emit_32( SGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_sgfr(Register r1 assert(1->encoding(%2= 0,"st / lenmustbean / register pair";
inline void Assembler::z_srk( Register r1, Register r2, Register r3) { emit_32( SRK_ZOPC assert(m3 &0b1110)= 0,"nused maskbitsmustbe ";
inline void Assembler::z_sgrk(Register r1, Register r2
inline void Assembler::z_sh( Register r1, int64_t d2, Register x2, Register b2) retry
inline void Assembler::z_shy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( SHY_ZOPCbind);
inline void Assembler::z_sh( Register r1, const Address &a) { z_sh( r1Assembler:z_troo(,r2);
inline void Assembler::z_shy( Register r1, const Address &a) { Assembler:z_brc(ssembler:bcondOverflow /* CC==3 (iterate) */, retry);
//----------------------------
// SUBTRACT LOGICAL
//----------------------------
inline void
inline void Assembler::z_slgr( Register r1, Register r2) { emit_32( SLGR_ZOPCvoidMacroAssembler:translate_ot(egister r1,Registerr2uint m3){
inline void Assembler::z_slgfr(Register r1, Register r2) { emit_32assert->() 2 = 0,"st addr/rc be an even/ pair";
inline void Assembler::z_slrk( Register r1 assert(m3 &0b1110)=0 "nused maskbitsmust be ";
inline void Assembler::z_slgrk(Register r1, Register r2, Register r3) { emit_32(SLGRK_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32) | reg(r3, 16, 32)); }
inline void Assembler::z_slfi( Register r1, int64_t i2) { emit_48( SLFI_ZOPC | regt(r1, 8, 48) | uimm32bind();
inline void Assembler::z_slgfi(Register r1, int64_t i2) { emit_48( SLGFI_ZOPCAssembler:z_trot(1 , m3)
//--------------------
// MULTIPLY
//--------------------
nline void Assembler:z_msr( Register r1,Register r2){emit_32(MSR_ZOPC |regt(1,24,32)|reg(2,28 32);}
inline void Assembler::z_msgr( Register r1, Register r2) { emit_32( MSGR_ZOPC | regt(r1
inline void Assembler::z_msgfr(Register r1, Register r2) { emit_32( MSGFR_ZOPC | regt(r1, 24, 32) | reg(r2voidMacroAssembler:translate_to(egisterr1Register, m3 {
inline void Assembler::z_mlr( Register r1, Register r2) { emit_32( MLR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_mlgr( Register r1, Register r2) { emit_32( MLGR_ZOPC | regt(r1, 24, 32) | reg(r2, 28, 32)); }
inline void Assembler::z_mhy( Register r1, int64_t d2, Register x2, Register b2) { emit_48( MHY_ZOPC | regt(r1, 8, 48) | rxymask_48(d2
inlinevoid Assembler:z_msy(Register r1,int64_t d2,Register , b2){emit_48(MSY_ZOPC |regt,8 48)|rxymask_48(d2,x2));}
inline void Assembler::z_msg( Register r1, int64_t d2, Register x2, Register b2) { emit_48( MSG_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
voidAssembler:z_msgf(egister r1,int64_t d2,Register x2,Register b2){ emit_48(MSGF_ZOPC|regt, 8,48)|rxymask_48(, x2 b2);}
inline void Assembler::z_ml( Register r1, int64_t d2, Register x2, Register b2) { emit_48( ML_ZOPC | regt(r1, 8, 48) | rxymask_48(d2, x2, b2)); }
inline void Assembler::z_mlg( Register r1, int64_t d2, Register
inline void Assembler::z_mhy( Register r1, constvoidMacroAssembler::ranslate_tt(egister r1,Register r2 m3{
inline void Assembler::z_msy( Register r1, const Address& a) { z_msy( r1, a.disp(), a assert(1-encoding( %2 = 0 dstaddr an/ register";
inline void Assembler::z_msgassertm3 &0b1110)= 0,"nused zero";
inline void Assembler::z_msgf(Register r1, const Address& a) { z_msgf(r1, a.disp(), a.indexOrR0(), a.baseOrR0()); }
inline void Assembler::z_ml( Register r1, const Address& a Labelretry
inline void Assembler::z_mlg( Register r1, const Address& a) { z_mlg( r1 (retry
inline void Assembler::z_msfi( RegisterAssembler:z_trtt(, r2,);
inline void Assembler::z_msgfi(Register r1, int64_t i2) { emit_48( MSGFI_ZOPC | regt(r1, 8, | |