Improved branch compilation

This commit is contained in:
Eduard Urbach 2024-07-07 21:55:32 +02:00
parent 871749101e
commit 13161f5021
Signed by: eduard
GPG key ID: 49226B848C78F6C8
9 changed files with 160 additions and 113 deletions

View file

@ -57,7 +57,12 @@ func (a Assembler) Finalize() ([]byte, []byte) {
Position: Address(len(code) - size),
Size: uint8(size),
Resolve: func() Address {
destination := labels[label.Name]
destination, exists := labels[label.Name]
if !exists {
panic("unknown call label")
}
distance := destination - nextInstructionAddress
return Address(distance)
},
@ -100,7 +105,12 @@ func (a Assembler) Finalize() ([]byte, []byte) {
Position: Address(len(code) - size),
Size: uint8(size),
Resolve: func() Address {
destination := labels[label.Name]
destination, exists := labels[label.Name]
if !exists {
panic("unknown jump label")
}
distance := destination - nextInstructionAddress
return Address(distance)
},

View file

@ -42,17 +42,17 @@ func (m Mnemonic) String() string {
case JUMP:
return "jump"
case JE:
return "jump =="
return "jump if =="
case JNE:
return "jump !="
return "jump if !="
case JL:
return "jump <"
return "jump if <"
case JG:
return "jump >"
return "jump if >"
case JLE:
return "jump <="
return "jump if <="
case JGE:
return "jump >="
return "jump if >="
case LABEL:
return "label"
case MOVE: