< prev index next > src/hotspot/cpu/ppc/ppc.ad
Print this page
}
C->output()->set_frame_complete(__ offset());
}
- uint MachPrologNode::size(PhaseRegAlloc *ra_) const {
- // Variable size. determine dynamically.
- return MachNode::size(ra_);
- }
-
int MachPrologNode::reloc() const {
// Return number of relocatable values contained in this instruction.
return 1; // 1 reloc entry for load_const(toc).
}
}
__ safepoint_poll(*code_stub, temp, true /* at_return */, true /* in_nmethod */);
}
}
- uint MachEpilogNode::size(PhaseRegAlloc *ra_) const {
- // Variable size. Determine dynamically.
- return MachNode::size(ra_);
- }
-
int MachEpilogNode::reloc() const {
// Return number of relocatable values contained in this instruction.
return 1; // 1 for load_from_polling_page.
}
uint BoxLockNode::size(PhaseRegAlloc *ra_) const {
// BoxLockNode is not a MachNode, so we can't just call MachNode::size(ra_).
return 4;
}
+ #ifndef PRODUCT
+ void MachVEPNode::format(PhaseRegAlloc* ra_, outputStream* st) const
+ {
+ Unimplemented();
+ }
+ #endif
+
+ void MachVEPNode::emit(C2_MacroAssembler *masm, PhaseRegAlloc* ra_) const
+ {
+ Unimplemented();
+ }
+
#ifndef PRODUCT
void MachUEPNode::format(PhaseRegAlloc *ra_, outputStream *st) const {
st->print_cr("---- MachUEPNode ----");
st->print_cr("...");
}
// This is the unverified entry point.
__ ic_check(CodeEntryAlignment);
// Argument is valid and klass is as expected, continue.
}
- uint MachUEPNode::size(PhaseRegAlloc *ra_) const {
- // Variable size. Determine dynamically.
- return MachNode::size(ra_);
- }
-
//=============================================================================
%} // interrupt source
source_hpp %{ // Header information of the source block.
__ mr_if_needed($dst$$Register, $src$$Register);
%}
ins_pipe(pipe_class_default);
%}
+ instruct castN2X(iRegLdst dst, iRegNsrc src) %{
+ match(Set dst (CastP2X src));
+
+ format %{ "MR $dst, $src \t// Ptr->Long" %}
+ // variable size, 0 or 4.
+ ins_encode %{
+ __ mr_if_needed($dst$$Register, $src$$Register);
+ %}
+ ins_pipe(pipe_class_default);
+ %}
+
instruct castPP(iRegPdst dst) %{
match(Set dst (CastPP dst));
format %{ " -- \t// castPP of $dst" %}
size(0);
ins_encode( /*empty*/ );
%}
ins_pipe(pipe_class_default);
%}
// Clear-array with constant short array length. The versions below can use dcbz with cnt > 30.
! instruct inlineCallClearArrayShort(immLmax30 cnt, rarg2RegP base, Universe dummy, regCTR ctr) %{
! match(Set dummy (ClearArray cnt base));
effect(USE_KILL base, KILL ctr);
ins_cost(2 * MEMORY_REF_COST);
format %{ "ClearArray $cnt, $base" %}
ins_encode %{
%}
ins_pipe(pipe_class_default);
%}
// Clear-array with constant short array length. The versions below can use dcbz with cnt > 30.
! instruct inlineCallClearArrayShort(immLmax30 cnt, rarg2RegP base, immL_0 zero, Universe dummy, regCTR ctr) %{
! match(Set dummy (ClearArray (Binary cnt base) zero));
effect(USE_KILL base, KILL ctr);
ins_cost(2 * MEMORY_REF_COST);
format %{ "ClearArray $cnt, $base" %}
ins_encode %{
%}
ins_pipe(pipe_class_default);
%}
// Clear-array with constant large array length.
! instruct inlineCallClearArrayLarge(immL cnt, rarg2RegP base, Universe dummy, iRegLdst tmp, regCTR ctr) %{
! match(Set dummy (ClearArray cnt base));
effect(USE_KILL base, TEMP tmp, KILL ctr);
ins_cost(3 * MEMORY_REF_COST);
format %{ "ClearArray $cnt, $base \t// KILL $tmp" %}
ins_encode %{
%}
ins_pipe(pipe_class_default);
%}
// Clear-array with constant large array length.
! instruct inlineCallClearArrayLarge(immL cnt, rarg2RegP base, immL_0 zero, Universe dummy, iRegLdst tmp, regCTR ctr) %{
! match(Set dummy (ClearArray (Binary cnt base) zero));
effect(USE_KILL base, TEMP tmp, KILL ctr);
ins_cost(3 * MEMORY_REF_COST);
format %{ "ClearArray $cnt, $base \t// KILL $tmp" %}
ins_encode %{
%}
ins_pipe(pipe_class_default);
%}
// Clear-array with dynamic array length.
! instruct inlineCallClearArray(rarg1RegL cnt, rarg2RegP base, Universe dummy, regCTR ctr) %{
! match(Set dummy (ClearArray cnt base));
effect(USE_KILL cnt, USE_KILL base, KILL ctr);
ins_cost(4 * MEMORY_REF_COST);
format %{ "ClearArray $cnt, $base" %}
ins_encode %{
__ clear_memory_doubleword($base$$Register, $cnt$$Register, R0); // kills cnt, base, R0
%}
ins_pipe(pipe_class_default);
%}
instruct string_compareL(rarg1RegP str1, rarg2RegP str2, rarg3RegI cnt1, rarg4RegI cnt2, iRegIdst result,
iRegIdst tmp, regCTR ctr, flagsRegCR0 cr0) %{
predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL);
match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2)));
effect(TEMP_DEF result, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL ctr, KILL cr0, TEMP tmp);
%}
ins_pipe(pipe_class_default);
%}
// Clear-array with dynamic array length.
! instruct inlineCallClearArray(rarg1RegL cnt, rarg2RegP base, immL_0 zero, Universe dummy, regCTR ctr) %{
! match(Set dummy (ClearArray (Binary cnt base) zero));
effect(USE_KILL cnt, USE_KILL base, KILL ctr);
ins_cost(4 * MEMORY_REF_COST);
format %{ "ClearArray $cnt, $base" %}
ins_encode %{
__ clear_memory_doubleword($base$$Register, $cnt$$Register, R0); // kills cnt, base, R0
%}
ins_pipe(pipe_class_default);
%}
+ // Clear-array with dynamic array length and non-zero value.
+ instruct inlineCallClearArrayWordCopy(rarg1RegL cnt, rarg2RegP base, iRegLdst val, Universe dummy, regCTR ctr) %{
+ predicate(((ClearArrayNode*)n)->word_copy_only());
+ match(Set dummy (ClearArray (Binary cnt base) val));
+ effect(USE_KILL base, KILL ctr);
+ ins_cost(8 * MEMORY_REF_COST);
+
+ format %{ "ClearArray $cnt, $base, $val" %}
+ ins_encode %{
+ __ fill_words($base$$Register, $cnt$$Register, $val$$Register);
+ %}
+ ins_pipe(pipe_class_default);
+ %}
+
instruct string_compareL(rarg1RegP str1, rarg2RegP str2, rarg3RegI cnt1, rarg4RegI cnt2, iRegIdst result,
iRegIdst tmp, regCTR ctr, flagsRegCR0 cr0) %{
predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL);
match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2)));
effect(TEMP_DEF result, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL ctr, KILL cr0, TEMP tmp);
< prev index next >