diff --git a/internal/commands/comparison.go b/internal/commands/comparison.go index 3ece2a3..874b428 100644 --- a/internal/commands/comparison.go +++ b/internal/commands/comparison.go @@ -381,20 +381,18 @@ func (cg *comparisonGenerator) genByteGreater() ([]string, error) { // CMP sets C=1 if A >= operand if !cg.useLongJump { return []string{ - cg.loadOperand(cg.param1, 0), - cg.cmpOperand(cg.param2, 0), - fmt.Sprintf("\tbeq %s", cg.skipLabel), // equal means not greater - fmt.Sprintf("\tbcc %s", cg.skipLabel), // carry clear means less + cg.loadOperand(cg.param2, 0), + cg.cmpOperand(cg.param1, 0), + fmt.Sprintf("\tbcs %s", cg.skipLabel), // skip if p2 >= p1 (i.e., p1 <= p2) }, nil } success := cg.tempLabel() fail := cg.tempLabel() return []string{ - cg.loadOperand(cg.param1, 0), - cg.cmpOperand(cg.param2, 0), - fmt.Sprintf("\tbeq %s", fail), - fmt.Sprintf("\tbcs %s", success), + cg.loadOperand(cg.param2, 0), + cg.cmpOperand(cg.param1, 0), + fmt.Sprintf("\tbcc %s", success), // if p2 < p1, success (p1 > p2) fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success, @@ -411,11 +409,10 @@ func (cg *comparisonGenerator) genWordGreater() ([]string, error) { cg.cmpOperand(cg.param2, 1), fmt.Sprintf("\tbcc %s", cg.skipLabel), // p1_hi < p2_hi fmt.Sprintf("\tbne %s", success), // p1_hi > p2_hi - // High bytes equal, check low - cg.loadOperand(cg.param1, 0), - cg.cmpOperand(cg.param2, 0), - fmt.Sprintf("\tbeq %s", cg.skipLabel), // equal not greater - fmt.Sprintf("\tbcc %s", cg.skipLabel), // p1_lo < p2_lo + // High bytes equal, check low - swap operands for single branch + cg.loadOperand(cg.param2, 0), + cg.cmpOperand(cg.param1, 0), + fmt.Sprintf("\tbcs %s", cg.skipLabel), // skip if p2 >= p1 (i.e., p1 <= p2) success, }, nil } @@ -426,10 +423,10 @@ func (cg *comparisonGenerator) genWordGreater() ([]string, error) { cg.cmpOperand(cg.param2, 1), fmt.Sprintf("\tbcc %s", fail), fmt.Sprintf("\tbne %s", success), - cg.loadOperand(cg.param1, 0), - cg.cmpOperand(cg.param2, 0), - fmt.Sprintf("\tbeq %s", fail), - fmt.Sprintf("\tbcs %s", success), + // High bytes equal, check low - swap operands for single branch + cg.loadOperand(cg.param2, 0), + cg.cmpOperand(cg.param1, 0), + fmt.Sprintf("\tbcc %s", success), // if p2 < p1, success (p1 > p2) fail, fmt.Sprintf("\tjmp %s", cg.skipLabel), success,