mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
SystemZ: Rephrase this allOnes calculation to avoid UB
This allOnes function hits undefined behaviour if Count is greater than 64, but we can avoid that and simplify the calculation by just saturating if such a value is passed in. This comes up under ubsan becauseRxSBGOperands is sometimes created with values that are 128 bits wide. Somebody more familiar with this code should probably look into whether that's expected, as a 64 bit mask may or may not be appropriate for such types. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240520 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9073b8fb67
commit
cac03419a6
@ -96,7 +96,9 @@ struct SystemZAddressingMode {
|
||||
|
||||
// Return a mask with Count low bits set.
|
||||
static uint64_t allOnes(unsigned int Count) {
|
||||
return Count == 0 ? 0 : (uint64_t(1) << (Count - 1) << 1) - 1;
|
||||
if (Count > 63)
|
||||
return UINT64_MAX;
|
||||
return (uint64_t(1) << Count) - 1;
|
||||
}
|
||||
|
||||
// Represents operands 2 to 5 of the ROTATE AND ... SELECTED BITS operation
|
||||
|
Loading…
Reference in New Issue
Block a user