mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-23 16:00:48 +02:00
Hotfix: Disable ConstProp/RemoveUselessMasking, add a test for it
This commit is contained in:
1 parent
ef75b8e4ec
commit
2fbf22a9de
2 files changed
+45
-17
No files matched your search
+21
-17
@@ -115,26 +115,30 @@ std::tuple<MemOffsetType, uint8_t, OrderedNode*, OrderedNode*> MemExtendedAddres
|
||||
}
|
||||
|
||||
OrderedNodeWrapper RemoveUselessMasking(IREmitter *IREmit, OrderedNodeWrapper src, uint64_t mask) {
|
||||
auto IROp = IREmit->GetOpHeader(src);
|
||||
if (IROp->Op == OP_AND) {
|
||||
auto Op = IROp->C<IR::IROp_And>();
|
||||
uint64_t imm;
|
||||
if (IREmit->IsValueConstant(IROp->Args[1], &imm) && ((imm & mask) == mask)) {
|
||||
return RemoveUselessMasking(IREmit, IROp->Args[0], mask);
|
||||
}
|
||||
} else if (IROp->Op == OP_BFE) {
|
||||
auto Op = IROp->C<IR::IROp_Bfe>();
|
||||
if (Op->lsb == 0) {
|
||||
uint64_t imm = 1ULL << (Op->Width-1);
|
||||
imm = (imm-1) *2 + 1;
|
||||
|
||||
if ((imm & mask) == mask) {
|
||||
#if 1 // HOTFIX: We need to clear up the meaning of opsize and dest size. See #594
|
||||
return src;
|
||||
#else
|
||||
auto IROp = IREmit->GetOpHeader(src);
|
||||
if (IROp->Op == OP_AND) {
|
||||
auto Op = IROp->C<IR::IROp_And>();
|
||||
uint64_t imm;
|
||||
if (IREmit->IsValueConstant(IROp->Args[1], &imm) && ((imm & mask) == mask)) {
|
||||
return RemoveUselessMasking(IREmit, IROp->Args[0], mask);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (IROp->Op == OP_BFE) {
|
||||
auto Op = IROp->C<IR::IROp_Bfe>();
|
||||
if (Op->lsb == 0) {
|
||||
uint64_t imm = 1ULL << (Op->Width-1);
|
||||
imm = (imm-1) *2 + 1;
|
||||
|
||||
return src;
|
||||
if ((imm & mask) == mask) {
|
||||
return RemoveUselessMasking(IREmit, IROp->Args[0], mask);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return src;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool IsBfeAlreadyDone(IREmitter *IREmit, OrderedNodeWrapper src, uint64_t Width) {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
%ifdef CONFIG
|
||||
{
|
||||
"RegData": {
|
||||
"RAX": "0x0"
|
||||
},
|
||||
"MemoryRegions": {
|
||||
"0x100000000": "4096"
|
||||
}
|
||||
}
|
||||
%endif
|
||||
|
||||
mov rdx, 0xe0000000
|
||||
mov dword [rdx], 0xFFFFFF00
|
||||
|
||||
mov r11d, dword[rdx]
|
||||
test r11b, r11b
|
||||
jnz notzero
|
||||
|
||||
mov rax, 0x0
|
||||
hlt
|
||||
|
||||
notzero:
|
||||
mov rax, 0x1
|
||||
hlt
|
||||
Reference in new issue
Block a user