fix broken uword comparison and asm peephole optimization

This commit is contained in:
Irmen de Jong
2025-09-23 23:17:25 +02:00
parent f3b060df51
commit 4fe8b72d42
3 changed files with 8 additions and 14 deletions
@@ -434,7 +434,7 @@ class ExpressionSimplifier(private val program: Program, private val errors: IEr
fun isFactorOf256(number: Double): Boolean {
val intValue = number.toInt()
return intValue > 0 && (intValue and (intValue shl 8)) == 0
return intValue >= 256 && (intValue and 0xFF) == 0
}
if (leftDt.isUnsignedWord && rightVal!=null) {
@@ -465,7 +465,6 @@ class ExpressionSimplifier(private val program: Program, private val errors: IEr
else if(expr.operator == "<" && rightVal.number == 256.0 || expr.operator == "<=" && rightVal.number == 255.0) {
// uword < 256 --> msb(value)==0
// uword <= 255 --> msb(value)==0
// OK!
expr.operator = "=="
expr.left = FunctionCallExpression(IdentifierReference(listOf("msb"), expr.left.position), mutableListOf(expr.left), expr.left.position)
expr.right = NumericLiteral(BaseDataType.UBYTE, 0.0, expr.right.position)