< prev index next >

src/share/vm/opto/regmask.cpp

Print this page




 372   // True for both the empty mask and for a bit set
 373   return true;
 374 }
 375 
 376 //------------------------------is_UP------------------------------------------
 377 // UP means register only, Register plus stack, or stack only is DOWN
 378 bool RegMask::is_UP() const {
 379   // Quick common case check for DOWN (any stack slot is legal)
 380   if( is_AllStack() )
 381     return false;
 382   // Slower check for any stack bits set (also DOWN)
 383   if( overlap(Matcher::STACK_ONLY_mask) )
 384     return false;
 385   // Not DOWN, so must be UP
 386   return true;
 387 }
 388 
 389 //------------------------------Size-------------------------------------------
 390 // Compute size of register mask in bits
 391 uint RegMask::Size() const {
 392   extern uint8_t bitsInByte[512];
 393   uint sum = 0;
 394   for( int i = 0; i < RM_SIZE; i++ )
 395     sum +=
 396       bitsInByte[(_A[i]>>24) & 0xff] +
 397       bitsInByte[(_A[i]>>16) & 0xff] +
 398       bitsInByte[(_A[i]>> 8) & 0xff] +
 399       bitsInByte[ _A[i]      & 0xff];
 400   return sum;
 401 }
 402 
 403 #ifndef PRODUCT
 404 //------------------------------print------------------------------------------
 405 void RegMask::dump(outputStream *st) const {
 406   st->print("[");
 407   RegMask rm = *this;           // Structure copy into local temp
 408 
 409   OptoReg::Name start = rm.find_first_elem(); // Get a register
 410   if (OptoReg::is_valid(start)) { // Check for empty mask
 411     rm.Remove(start);           // Yank from mask
 412     OptoReg::dump(start, st);   // Print register




 372   // True for both the empty mask and for a bit set
 373   return true;
 374 }
 375 
 376 //------------------------------is_UP------------------------------------------
 377 // UP means register only, Register plus stack, or stack only is DOWN
 378 bool RegMask::is_UP() const {
 379   // Quick common case check for DOWN (any stack slot is legal)
 380   if( is_AllStack() )
 381     return false;
 382   // Slower check for any stack bits set (also DOWN)
 383   if( overlap(Matcher::STACK_ONLY_mask) )
 384     return false;
 385   // Not DOWN, so must be UP
 386   return true;
 387 }
 388 
 389 //------------------------------Size-------------------------------------------
 390 // Compute size of register mask in bits
 391 uint RegMask::Size() const {
 392   extern uint8_t bitsInByte[256];
 393   uint sum = 0;
 394   for( int i = 0; i < RM_SIZE; i++ )
 395     sum +=
 396       bitsInByte[(_A[i]>>24) & 0xff] +
 397       bitsInByte[(_A[i]>>16) & 0xff] +
 398       bitsInByte[(_A[i]>> 8) & 0xff] +
 399       bitsInByte[ _A[i]      & 0xff];
 400   return sum;
 401 }
 402 
 403 #ifndef PRODUCT
 404 //------------------------------print------------------------------------------
 405 void RegMask::dump(outputStream *st) const {
 406   st->print("[");
 407   RegMask rm = *this;           // Structure copy into local temp
 408 
 409   OptoReg::Name start = rm.find_first_elem(); // Get a register
 410   if (OptoReg::is_valid(start)) { // Check for empty mask
 411     rm.Remove(start);           // Yank from mask
 412     OptoReg::dump(start, st);   // Print register


< prev index next >