mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-19 04:29:21 +00:00
This hunk accidentally got dropped. Patch by Jim Laskey
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22595 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
0561b3ff9f
commit
c0d590b6f2
@ -601,73 +601,6 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// ExactLog2 - This function solves for (Val == 1 << (N-1)) and returns N. It
|
|
||||||
/// returns zero when the input is not exactly a power of two.
|
|
||||||
static unsigned ExactLog2(unsigned Val) {
|
|
||||||
if (Val == 0 || (Val & (Val-1))) return 0;
|
|
||||||
unsigned Count = 0;
|
|
||||||
while (Val != 1) {
|
|
||||||
Val >>= 1;
|
|
||||||
++Count;
|
|
||||||
}
|
|
||||||
return Count;
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsRunOfOnes - returns true if Val consists of one contiguous run of 1's with
|
|
||||||
// any number of 0's on either side. the 1's are allowed to wrap from LSB to
|
|
||||||
// MSB. so 0x000FFF0, 0x0000FFFF, and 0xFF0000FF are all runs. 0x0F0F0000 is
|
|
||||||
// not, since all 1's are not contiguous.
|
|
||||||
static bool IsRunOfOnes(unsigned Val, unsigned &MB, unsigned &ME) {
|
|
||||||
bool isRun = true;
|
|
||||||
MB = 0;
|
|
||||||
ME = 0;
|
|
||||||
|
|
||||||
// look for first set bit
|
|
||||||
int i = 0;
|
|
||||||
for (; i < 32; i++) {
|
|
||||||
if ((Val & (1 << (31 - i))) != 0) {
|
|
||||||
MB = i;
|
|
||||||
ME = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// look for last set bit
|
|
||||||
for (; i < 32; i++) {
|
|
||||||
if ((Val & (1 << (31 - i))) == 0)
|
|
||||||
break;
|
|
||||||
ME = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// look for next set bit
|
|
||||||
for (; i < 32; i++) {
|
|
||||||
if ((Val & (1 << (31 - i))) != 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we exhausted all the bits, we found a match at this point for 0*1*0*
|
|
||||||
if (i == 32)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// since we just encountered more 1's, if it doesn't wrap around to the
|
|
||||||
// most significant bit of the word, then we did not find a match to 1*0*1* so
|
|
||||||
// exit.
|
|
||||||
if (MB != 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// look for last set bit
|
|
||||||
for (MB = i; i < 32; i++) {
|
|
||||||
if ((Val & (1 << (31 - i))) == 0)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we exhausted all the bits, then we found a match for 1*0*1*, otherwise,
|
|
||||||
// the value is not a run of ones.
|
|
||||||
if (i == 32)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// getImmediateForOpcode - This method returns a value indicating whether
|
/// getImmediateForOpcode - This method returns a value indicating whether
|
||||||
/// the ConstantSDNode N can be used as an immediate to Opcode. The return
|
/// the ConstantSDNode N can be used as an immediate to Opcode. The return
|
||||||
/// values are either 0, 1 or 2. 0 indicates that either N is not a
|
/// values are either 0, 1 or 2. 0 indicates that either N is not a
|
||||||
|
Loading…
Reference in New Issue
Block a user