c65gm/internal/optimizer/pass_jmp.go

34 lines
734 B
Go

package optimizer
import "strings"
// passJmpNext removes unconditional jumps to the immediately following label.
// Pattern: jmp L; L: → (remove jmp)
func passJmpNext(lines []asmLine) []asmLine {
var result []asmLine
skipNext := false
for i := 0; i < len(lines); i++ {
if skipNext {
skipNext = false
continue
}
line := lines[i]
// Check for jmp L followed by label L:
if line.isCode && line.opcode == "jmp" && i+1 < len(lines) {
next := lines[i+1]
if next.isLabel && strings.TrimSpace(next.text) == strings.TrimSpace(line.operand) {
// Remove the jmp, keep the label
result = append(result, next)
skipNext = true
continue
}
}
result = append(result, line)
}
return result
}