< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page
rev 53735 : AArch64 support for ValueTypes

*** 1953,1962 **** --- 1953,1986 ---- // BoxLockNode is not a MachNode, so we can't just call MachNode::size(ra_). return 4; } //============================================================================= + #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 { st->print_cr("# MachUEPNode");
*** 2365,2375 **** static void getCallInfo(const TypeFunc *tf, int &gpcnt, int &fpcnt, int &rtype) { int gps = 0; int fps = 0; ! const TypeTuple *domain = tf->domain(); int max = domain->cnt(); for (int i = TypeFunc::Parms; i < max; i++) { const Type *t = domain->field_at(i); switch(t->basic_type()) { case T_FLOAT: --- 2389,2399 ---- static void getCallInfo(const TypeFunc *tf, int &gpcnt, int &fpcnt, int &rtype) { int gps = 0; int fps = 0; ! 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); switch(t->basic_type()) { case T_FLOAT:
*** 7883,7892 **** --- 7907,7931 ---- %} 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)); ins_cost(INSN_COST); format %{ "mov $dst, $src\t# ptr -> long" %}
*** 13396,13408 **** %} // ============================================================================ // clearing of an array ! instruct clearArray_reg_reg(iRegL_R11 cnt, iRegP_R10 base, Universe dummy, rFlagsReg cr) %{ ! match(Set dummy (ClearArray cnt base)); effect(USE_KILL cnt, USE_KILL base); ins_cost(4 * INSN_COST); format %{ "ClearArray $cnt, $base" %} --- 13435,13447 ---- %} // ============================================================================ // clearing of an array ! instruct clearArray_reg_reg(iRegL_R11 cnt, iRegP_R10 base, iRegL val, Universe dummy, rFlagsReg cr) %{ ! match(Set dummy (ClearArray (Binary cnt base) val)); effect(USE_KILL cnt, USE_KILL base); ins_cost(4 * INSN_COST); format %{ "ClearArray $cnt, $base" %}
*** 13411,13425 **** %} ins_pipe(pipe_class_memory); %} ! instruct clearArray_imm_reg(immL cnt, iRegP_R10 base, Universe dummy, rFlagsReg cr) %{ ! predicate((u_int64_t)n->in(2)->get_long() < (u_int64_t)(BlockZeroingLowLimit >> LogBytesPerWord)); ! match(Set dummy (ClearArray cnt base)); effect(USE_KILL base); ins_cost(4 * INSN_COST); format %{ "ClearArray $cnt, $base" %} --- 13450,13465 ---- %} ins_pipe(pipe_class_memory); %} ! instruct clearArray_imm_reg(immL cnt, iRegP_R10 base, iRegL val, Universe dummy, rFlagsReg cr) %{ ! predicate((u_int64_t)n->in(3)->get_long() < (u_int64_t)(BlockZeroingLowLimit >> LogBytesPerWord)); ! ! match(Set dummy (ClearArray (Binary cnt base) val)); effect(USE_KILL base); ins_cost(4 * INSN_COST); format %{ "ClearArray $cnt, $base" %}
< prev index next >