blob: 027ee2615e4b936e9de25a99c04bcc2e207664de (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// SPDX-License-Identifier: GPL-3.0-or-later
#include "rcc/CodeGen/RegisterMask.h"
namespace rcc {
bool RegisterMask::preserves(PhysicalRegister PhysReg) const noexcept {
if (!PhysReg.isValid())
return false;
constexpr std::uint32_t BitsPerWord = 64;
const std::uint32_t RegisterNumber = PhysReg.number();
const std::size_t WordIndex = RegisterNumber / BitsPerWord;
if (WordIndex >= PreservedWords.size())
return false;
const std::uint32_t BitIndex = RegisterNumber % BitsPerWord;
return (PreservedWords[WordIndex] & (std::uint64_t{1} << BitIndex)) != 0;
}
} // namespace rcc
|