}
func xor64(a, b uint64, ensureBothBranchesCouldHappen bool) int {
- a &= 0xff
- b &= 0xfff
+ a = min(a, 0xff)
+ b = min(b, 0xfff)
z := a ^ b
}
func or64(a, b uint64, ensureBothBranchesCouldHappen bool) int {
- a &= 0xff
- b &= 0xfff
+ a = min(a, 0xff)
+ b = min(b, 0xfff)
z := a | b
}
func mod64uWithSmallerDividendMax(a, b uint64, ensureBothBranchesCouldHappen bool) int {
- a &= 0xff
- b &= 0xfff
+ a = min(a, 0xff)
+ b = min(b, 0xfff)
z := bits.Len64(a % b) // see go.dev/issue/68857 for bits.Len64
return z
}
func mod64uWithSmallerDivisorMax(a, b uint64, ensureBothBranchesCouldHappen bool) int {
- a &= 0xfff
- b &= 0x10 // we need bits.Len64(b.umax) != bits.Len64(b.umax-1)
+ a = min(a, 0xfff)
+ b = min(b, 0x10) // we need bits.Len64(b.umax) != bits.Len64(b.umax-1)
z := bits.Len64(a % b) // see go.dev/issue/68857 for bits.Len64
return z
}
func mod64uWithIdenticalMax(a, b uint64, ensureBothBranchesCouldHappen bool) int {
- a &= 0x10
- b &= 0x10 // we need bits.Len64(b.umax) != bits.Len64(b.umax-1)
+ a = min(a, 0x10)
+ b = min(b, 0x10) // we need bits.Len64(b.umax) != bits.Len64(b.umax-1)
z := bits.Len64(a % b) // see go.dev/issue/68857 for bits.Len64
if a < 0 || b < 0 {
return 42
}
- a &= 0xff
- b &= 0xfff
+ a = min(a, 0xff)
+ b = min(b, 0xfff)
z := a % b // ERROR "Proved Mod64 does not need fix-up$"
if a < 0 || b < 0 {
return 42
}
- a &= 0xfff
- b &= 0xff
+ a = min(a, 0xfff)
+ b = min(b, 0xff)
z := a % b // ERROR "Proved Mod64 does not need fix-up$"
if a < 0 || b < 0 {
return 42
}
- a &= 0xfff
- b &= 0xfff
+ a = min(a, 0xfff)
+ b = min(b, 0xfff)
z := a % b // ERROR "Proved Mod64 does not need fix-up$"
}
func div64u(a, b uint64, ensureAllBranchesCouldHappen func() bool) uint64 {
- a &= 0xffff
- a |= 0xfff
- b &= 0xff
- b |= 0xf
+ a = min(a, 0xffff)
+ a = max(a, 0xfff)
+ b = min(b, 0xff)
+ b = max(b, 0xf)
z := a / b // ERROR "Proved Neq64$"
if a < 0 || b < 0 {
return 42
}
- a &= 0xffff
- a |= 0xfff
- b &= 0xff
- b |= 0xf
+ a = min(a, 0xffff)
+ a = max(a, 0xfff)
+ b = min(b, 0xff)
+ b = max(b, 0xf)
z := a / b // ERROR "(Proved Div64 does not need fix-up|Proved Neq64)$"
}
func trunc64to16(a uint64, ensureAllBranchesCouldHappen func() bool) uint16 {
- a &= 0xfff
- a |= 0xff
+ a = min(a, 0xfff)
+ a = max(a, 0xff)
z := uint16(a)
if ensureAllBranchesCouldHappen() && z > 0xfff { // ERROR "Disproved Less16U$"
}
func com64(a uint64, ensureAllBranchesCouldHappen func() bool) uint64 {
- a &= 0xffff
- a |= 0xff
+ a = min(a, 0xffff)
+ a = max(a, 0xff)
z := ^a
func neg64(a uint64, ensureAllBranchesCouldHappen func() bool) uint64 {
var lo, hi uint64 = 0xff, 0xfff
- a &= hi
- a |= lo
+ a = min(a, hi)
+ a = max(a, lo)
z := -a
}
func neg64mightOverflowDuringNeg(a uint64, ensureAllBranchesCouldHappen func() bool) uint64 {
var lo, hi uint64 = 0, 0xfff
- a &= hi
- a |= lo
+ a = min(a, hi)
+ a = max(a, lo)
z := -a