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
|