From a67bc440fc2299f654c1389d8168900515e99977 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Fri, 27 Jun 2025 15:43:17 +0200 Subject: [PATCH] Improved assembler performance --- src/asm/Assembler.go | 9 ++++++--- src/linker/WriteFile.go | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/asm/Assembler.go b/src/asm/Assembler.go index db9d7b6..eb4d53e 100644 --- a/src/asm/Assembler.go +++ b/src/asm/Assembler.go @@ -73,11 +73,14 @@ func (a *Assembler) Compile(b *build.Build) (code []byte, data []byte) { // Merge combines the contents of this assembler with another one. func (a *Assembler) Merge(b *Assembler) { - maps.Copy(a.Data, b.Data) + skip := 0 - for _, instr := range b.Instructions { - a.Append(instr) + for a.Skip(b.Instructions[skip]) { + skip++ } + + a.Instructions = append(a.Instructions, b.Instructions[skip:]...) + maps.Copy(a.Data, b.Data) } // SetData sets the data for the given label. diff --git a/src/linker/WriteFile.go b/src/linker/WriteFile.go index 0cf74b4..68f8de3 100644 --- a/src/linker/WriteFile.go +++ b/src/linker/WriteFile.go @@ -22,7 +22,7 @@ func WriteFile(executable string, b *build.Build, env *core.Environment) error { traversed := make(map[*core.Function]bool, len(env.Functions)) final := asm.Assembler{ - Instructions: make([]asm.Instruction, 0, 8), + Instructions: make([]asm.Instruction, 0, 32), Data: make(data.Data, 32), }