ITSTate: Correct ITState::Advance
This commit is contained in:
parent
1c5f6882f0
commit
946dbb5818
1 changed files with 6 additions and 18 deletions
|
@ -24,32 +24,20 @@ public:
|
||||||
IR::Cond Cond() const {
|
IR::Cond Cond() const {
|
||||||
return static_cast<IR::Cond>(Common::Bits<4, 7>(value));
|
return static_cast<IR::Cond>(Common::Bits<4, 7>(value));
|
||||||
}
|
}
|
||||||
void Cond(IR::Cond cond) {
|
|
||||||
value = Common::ModifyBits<4, 7>(value, static_cast<u8>(cond));
|
|
||||||
}
|
|
||||||
|
|
||||||
u8 Mask() const {
|
|
||||||
return Common::Bits<0, 3>(value);
|
|
||||||
}
|
|
||||||
void Mask(u8 mask) {
|
|
||||||
value = Common::ModifyBits<0, 3>(value, mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsInITBlock() const {
|
bool IsInITBlock() const {
|
||||||
return Mask() != 0b0000;
|
return Common::Bits<0, 3>(value) != 0b0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IsLastInITBlock() const {
|
bool IsLastInITBlock() const {
|
||||||
return Mask() == 0b1000;
|
return Common::Bits<0, 3>(value) == 0b1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
ITState Advance() const {
|
ITState Advance() const {
|
||||||
ITState result{*this};
|
if (Common::Bits<0, 2>(value) == 0b000) {
|
||||||
result.Mask(result.Mask() << 1);
|
return ITState{0b00000000};
|
||||||
if (result.Mask() == 0) {
|
|
||||||
return ITState{0};
|
|
||||||
}
|
}
|
||||||
return result;
|
return ITState{Common::ModifyBits<0, 4>(value, static_cast<u8>(Common::Bits<0, 4>(value) << 1))};
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 Value() const {
|
u8 Value() const {
|
||||||
|
@ -57,7 +45,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u8 value;
|
u8 value = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline bool operator==(ITState lhs, ITState rhs) {
|
inline bool operator==(ITState lhs, ITState rhs) {
|
||||||
|
|
Loading…
Reference in a new issue