--- old/src/hotspot/cpu/aarch64/aarch64.ad 2019-01-24 17:46:29.754480850 +0000 +++ new/src/hotspot/cpu/aarch64/aarch64.ad 2019-01-24 17:46:29.042449204 +0000 @@ -1955,6 +1955,30 @@ } //============================================================================= +#ifndef PRODUCT +void MachVVEPNode::format(PhaseRegAlloc* ra_, outputStream* st) const +{ + st->print_cr("MachVVEPNode"); +} +#endif + +void MachVVEPNode::emit(CodeBuffer& cbuf, PhaseRegAlloc* ra_) const +{ + // Unpack all value type args passed as oop and then jump to + // the verified entry point (skipping the unverified entry). + MacroAssembler _masm(&cbuf); + + __ unpack_value_args(ra_->C); + __ b(*_verified_entry); +} + +uint MachVVEPNode::size(PhaseRegAlloc* ra_) const +{ + return MachNode::size(ra_); // too many variables; just compute it the hard way +} + + +//============================================================================= #ifndef PRODUCT void MachUEPNode::format(PhaseRegAlloc* ra_, outputStream* st) const @@ -2367,7 +2391,7 @@ { int gps = 0; int fps = 0; - const TypeTuple *domain = tf->domain(); + const TypeTuple *domain = tf->domain_cc(); int max = domain->cnt(); for (int i = TypeFunc::Parms; i < max; i++) { const Type *t = domain->field_at(i); @@ -7885,6 +7909,21 @@ ins_pipe(ialu_reg); %} +instruct castN2X(iRegLNoSp dst, iRegN src) %{ + match(Set dst (CastP2X src)); + + ins_cost(INSN_COST); + format %{ "mov $dst, $src\t# ptr -> long" %} + + ins_encode %{ + if ($dst$$reg != $src$$reg) { + __ mov(as_Register($dst$$reg), as_Register($src$$reg)); + } + %} + + ins_pipe(ialu_reg); +%} + instruct castP2X(iRegLNoSp dst, iRegP src) %{ match(Set dst (CastP2X src)); @@ -13398,9 +13437,9 @@ // ============================================================================ // clearing of an array -instruct clearArray_reg_reg(iRegL_R11 cnt, iRegP_R10 base, Universe dummy, rFlagsReg cr) +instruct clearArray_reg_reg(iRegL_R11 cnt, iRegP_R10 base, iRegL val, Universe dummy, rFlagsReg cr) %{ - match(Set dummy (ClearArray cnt base)); + match(Set dummy (ClearArray (Binary cnt base) val)); effect(USE_KILL cnt, USE_KILL base); ins_cost(4 * INSN_COST); @@ -13413,11 +13452,12 @@ ins_pipe(pipe_class_memory); %} -instruct clearArray_imm_reg(immL cnt, iRegP_R10 base, Universe dummy, rFlagsReg cr) +instruct clearArray_imm_reg(immL cnt, iRegP_R10 base, iRegL val, Universe dummy, rFlagsReg cr) %{ - predicate((u_int64_t)n->in(2)->get_long() + predicate((u_int64_t)n->in(3)->get_long() < (u_int64_t)(BlockZeroingLowLimit >> LogBytesPerWord)); - match(Set dummy (ClearArray cnt base)); + + match(Set dummy (ClearArray (Binary cnt base) val)); effect(USE_KILL base); ins_cost(4 * INSN_COST);