From cbecb769a04afc7c5430422a02a35aad047bed59 Mon Sep 17 00:00:00 2001 From: Mattias Hansson Date: Tue, 4 Nov 2025 17:56:06 +0100 Subject: [PATCH] Fix for longjumps. --- internal/commands/comparison.go | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/internal/commands/comparison.go b/internal/commands/comparison.go index c4833c1..d918718 100644 --- a/internal/commands/comparison.go +++ b/internal/commands/comparison.go @@ -393,11 +393,13 @@ func (cg *comparisonGenerator) genByteGreater() ([]string, error) { } success := cg.tempLabel() + fail := cg.tempLabel() return []string{ cg.loadOperand(cg.param1, 0), cg.cmpOperand(cg.param2, 0), - fmt.Sprintf("\tbeq %s", cg.skipLabel), + fmt.Sprintf("\tbeq %s", fail), fmt.Sprintf("\tbcs %s", success), + fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success, }, nil @@ -422,15 +424,17 @@ func (cg *comparisonGenerator) genWordGreater() ([]string, error) { }, nil } + fail := cg.tempLabel() return []string{ cg.loadOperand(cg.param1, 1), cg.cmpOperand(cg.param2, 1), - fmt.Sprintf("\tbcc %s", cg.skipLabel), + fmt.Sprintf("\tbcc %s", fail), fmt.Sprintf("\tbne %s", success), cg.loadOperand(cg.param1, 0), cg.cmpOperand(cg.param2, 0), - fmt.Sprintf("\tbeq %s", cg.skipLabel), + fmt.Sprintf("\tbeq %s", fail), fmt.Sprintf("\tbcs %s", success), + fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success, }, nil @@ -456,14 +460,16 @@ func (cg *comparisonGenerator) genMixedGreater() ([]string, error) { }, nil } + fail := cg.tempLabel() return []string{ cg.loadOperand(wordOp, 1), "\tcmp #0", - fmt.Sprintf("\tbne %s", cg.skipLabel), + fmt.Sprintf("\tbne %s", fail), cg.loadOperand(byteOp, 0), cg.cmpOperand(wordOp, 0), - fmt.Sprintf("\tbeq %s", cg.skipLabel), + fmt.Sprintf("\tbeq %s", fail), fmt.Sprintf("\tbcs %s", success), + fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success, }, nil @@ -484,14 +490,16 @@ func (cg *comparisonGenerator) genMixedGreater() ([]string, error) { }, nil } + fail := cg.tempLabel() return []string{ cg.loadOperand(wordOp, 1), "\tcmp #0", fmt.Sprintf("\tbne %s", success), cg.loadOperand(wordOp, 0), cg.cmpOperand(byteOp, 0), - fmt.Sprintf("\tbeq %s", cg.skipLabel), + fmt.Sprintf("\tbeq %s", fail), fmt.Sprintf("\tbcs %s", success), + fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success, }, nil @@ -554,14 +562,16 @@ func (cg *comparisonGenerator) genWordGreaterEqual() ([]string, error) { }, nil } + fail := cg.tempLabel() return []string{ cg.loadOperand(cg.param1, 1), cg.cmpOperand(cg.param2, 1), - fmt.Sprintf("\tbcc %s", cg.skipLabel), + fmt.Sprintf("\tbcc %s", fail), fmt.Sprintf("\tbne %s", success), cg.loadOperand(cg.param1, 0), cg.cmpOperand(cg.param2, 0), fmt.Sprintf("\tbcs %s", success), + fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success, }, nil @@ -584,13 +594,15 @@ func (cg *comparisonGenerator) genMixedGreaterEqual() ([]string, error) { }, nil } + fail := cg.tempLabel() return []string{ cg.loadOperand(wordOp, 1), "\tcmp #0", - fmt.Sprintf("\tbne %s", cg.skipLabel), + fmt.Sprintf("\tbne %s", fail), cg.loadOperand(byteOp, 0), cg.cmpOperand(wordOp, 0), fmt.Sprintf("\tbcs %s", success), + fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success, }, nil