fix folding of unsigned operations
This fixes similar bugs than the ones fixed in the previous commit. In the folding code the invariant is that when a result is 32 bits wide, the low 32 bits of 'x' are correct. The high bits can be anything.
This commit is contained in:
parent
0384d73e8d
commit
660a8d9dfa
2 changed files with 27 additions and 5 deletions
|
@ -19,7 +19,29 @@ function w $f3() {
|
|||
ret %x
|
||||
}
|
||||
|
||||
export
|
||||
function w $f4() {
|
||||
@start
|
||||
%x =w shr 4294967296, 1 # 2^32 >> 1
|
||||
ret %x
|
||||
}
|
||||
|
||||
export
|
||||
function w $f5() {
|
||||
@start
|
||||
%x =w udiv 1, 4294967297 # 1 / (2^32 + 1)
|
||||
ret %x
|
||||
}
|
||||
|
||||
export
|
||||
function w $f6() {
|
||||
@start
|
||||
%x =w urem 4294967296, 7 # 2^32 % 7
|
||||
ret %x
|
||||
}
|
||||
|
||||
# >>> driver
|
||||
# extern int f1(), f2(), f3();
|
||||
# int main() { return !(f1() == -1 && f2() == -32 && f3() == -5); }
|
||||
# extern int f1(), f2(), f3(), f4(), f5(), f6();
|
||||
# int main() { return !(f1() == -1 && f2() == -32 && f3() == -5 &&
|
||||
# f4() == 0 && f5() == 1 && f6() == 0); }
|
||||
# <<<
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue