1313 #ifndef PRODUCT
1314 void MachConstantBaseNode::format(PhaseRegAlloc* ra_, outputStream* st) const {
1315 st->print("-- \t// MachConstantBaseNode (empty encoding)");
1316 }
1317 #endif
1318
1319 //=============================================================================
1320
1321 #ifndef PRODUCT
1322 void MachPrologNode::format(PhaseRegAlloc *ra_, outputStream *st) const {
1323 Compile* C = ra_->C;
1324 const long framesize = C->frame_slots() << LogBytesPerInt;
1325
1326 st->print("PROLOG\n\t");
1327 if (C->need_stack_bang(framesize)) {
1328 st->print("stack_overflow_check\n\t");
1329 }
1330
1331 if (!false /* TODO: PPC port C->is_frameless_method()*/) {
1332 st->print("save return pc\n\t");
1333 st->print("push frame %d\n\t", -framesize);
1334 }
1335 }
1336 #endif
1337
1338 // Macro used instead of the common __ to emulate the pipes of PPC.
1339 // Instead of e.g. __ ld(...) one hase to write ___(ld) ld(...) This enables the
1340 // micro scheduler to cope with "hand written" assembler like in the prolog. Though
1341 // still no scheduling of this code is possible, the micro scheduler is aware of the
1342 // code and can update its internal data. The following mechanism is used to achieve this:
1343 // The micro scheduler calls size() of each compound node during scheduling. size() does a
1344 // dummy emit and only during this dummy emit C->hb_scheduling() is not NULL.
1345 #if 0 // TODO: PPC port
1346 #define ___(op) if (UsePower6SchedulerPPC64 && C->hb_scheduling()) \
1347 C->hb_scheduling()->_pdScheduling->PdEmulatePipe(ppc64Opcode_##op); \
1348 _masm.
1349 #define ___stop if (UsePower6SchedulerPPC64 && C->hb_scheduling()) \
1350 C->hb_scheduling()->_pdScheduling->PdEmulatePipe(archOpcode_none)
1351 #define ___advance if (UsePower6SchedulerPPC64 && C->hb_scheduling()) \
1352 C->hb_scheduling()->_pdScheduling->advance_offset
1353 #else
|
1313 #ifndef PRODUCT
1314 void MachConstantBaseNode::format(PhaseRegAlloc* ra_, outputStream* st) const {
1315 st->print("-- \t// MachConstantBaseNode (empty encoding)");
1316 }
1317 #endif
1318
1319 //=============================================================================
1320
1321 #ifndef PRODUCT
1322 void MachPrologNode::format(PhaseRegAlloc *ra_, outputStream *st) const {
1323 Compile* C = ra_->C;
1324 const long framesize = C->frame_slots() << LogBytesPerInt;
1325
1326 st->print("PROLOG\n\t");
1327 if (C->need_stack_bang(framesize)) {
1328 st->print("stack_overflow_check\n\t");
1329 }
1330
1331 if (!false /* TODO: PPC port C->is_frameless_method()*/) {
1332 st->print("save return pc\n\t");
1333 st->print("push frame %ld\n\t", -framesize);
1334 }
1335 }
1336 #endif
1337
1338 // Macro used instead of the common __ to emulate the pipes of PPC.
1339 // Instead of e.g. __ ld(...) one hase to write ___(ld) ld(...) This enables the
1340 // micro scheduler to cope with "hand written" assembler like in the prolog. Though
1341 // still no scheduling of this code is possible, the micro scheduler is aware of the
1342 // code and can update its internal data. The following mechanism is used to achieve this:
1343 // The micro scheduler calls size() of each compound node during scheduling. size() does a
1344 // dummy emit and only during this dummy emit C->hb_scheduling() is not NULL.
1345 #if 0 // TODO: PPC port
1346 #define ___(op) if (UsePower6SchedulerPPC64 && C->hb_scheduling()) \
1347 C->hb_scheduling()->_pdScheduling->PdEmulatePipe(ppc64Opcode_##op); \
1348 _masm.
1349 #define ___stop if (UsePower6SchedulerPPC64 && C->hb_scheduling()) \
1350 C->hb_scheduling()->_pdScheduling->PdEmulatePipe(archOpcode_none)
1351 #define ___advance if (UsePower6SchedulerPPC64 && C->hb_scheduling()) \
1352 C->hb_scheduling()->_pdScheduling->advance_offset
1353 #else
|