Fix for longjumps.

This commit is contained in:
Mattias Hansson 2025-11-04 17:56:06 +01:00
parent bea0640f0b
commit cbecb769a0

View file

@ -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