diff --git a/src/main/scala/millfork/env/Constant.scala b/src/main/scala/millfork/env/Constant.scala
index 7776c572..97ca1510 100644
--- a/src/main/scala/millfork/env/Constant.scala
+++ b/src/main/scala/millfork/env/Constant.scala
@@ -522,7 +522,10 @@ case class CompoundConstant(operator: MathOperator.Value, lhs: Constant, rhs: Co
           case MathOperator.Plus9 => c
           case MathOperator.DecimalPlus => c
           case MathOperator.DecimalPlus9 => c
-          case MathOperator.Minus => CompoundConstant(operator, l, r)
+          case MathOperator.Minus => c match {
+            case NumericConstant(rv, rs) => NumericConstant(-rv, rs)
+            case _ => CompoundConstant(operator, l, r)
+          }
           case MathOperator.Times => Constant.Zero
           case MathOperator.Shl => Constant.Zero
           case MathOperator.Shr => Constant.Zero
diff --git a/src/test/scala/millfork/test/ConstantSuite.scala b/src/test/scala/millfork/test/ConstantSuite.scala
index e94a7678..4d404647 100644
--- a/src/test/scala/millfork/test/ConstantSuite.scala
+++ b/src/test/scala/millfork/test/ConstantSuite.scala
@@ -178,4 +178,15 @@ class ConstantSuite extends FunSuite with Matchers {
       m.readMedium(0xc003) should equal(200/8)
     }
   }
+
+  test("Negative constant evaluation") {
+    EmuUnoptimizedCrossPlatformRun(Cpu.Mos, Cpu.Z80, Cpu.Intel8080, Cpu.Sharp, Cpu.Intel8086, Cpu.Motorola6809)("""
+        | word output @$c000
+        | void main () {
+        |   output = -1 * -1
+        | }
+      """.stripMargin){m =>
+      m.readWord(0xc000) should equal(1)
+    }
+  }
 }