Fixed move with negative numbers on arm64

This commit is contained in:
Eduard Urbach 2025-03-14 11:58:36 +01:00
parent f2f38f2ee9
commit 500a7201d4
Signed by: eduard
GPG key ID: 49226B848C78F6C8
3 changed files with 45 additions and 5 deletions

View file

@ -15,9 +15,18 @@ func MoveRegisterRegister(destination cpu.Register, source cpu.Register) uint32
// MoveRegisterNumber moves an integer into the given register.
func MoveRegisterNumber(destination cpu.Register, number int) uint32 {
if number < 0 {
return MoveInvertedWideImmediate(destination, ^number)
}
return MoveZero(destination, 0, uint16(number))
}
// MoveInvertedWideImmediate moves an inverted 16-bit immediate value to a register.
func MoveInvertedWideImmediate(destination cpu.Register, number int) uint32 {
return 0b100100101<<23 | regImm(destination, number)
}
// MoveKeep moves a 16-bit integer into the given register and keeps all other bits.
func MoveKeep(destination cpu.Register, halfword int, number uint16) uint32 {
return mov(0b11, halfword, number, destination)