15 lines
537 B
Go
15 lines
537 B
Go
package arm
|
|
|
|
import "encoding/binary"
|
|
|
|
// Call branches to a PC-relative offset, setting the register X30 to PC+4.
|
|
// The offset starts from the address of this instruction and is encoded as "imm26" times 4.
|
|
// This instruction is also known as BL (branch with link).
|
|
func Call(code []byte, offset uint32) []byte {
|
|
return binary.LittleEndian.AppendUint32(code, EncodeCall(offset))
|
|
}
|
|
|
|
// EncodeCall returns the raw encoding of a call with the given offset.
|
|
func EncodeCall(offset uint32) uint32 {
|
|
return uint32(0b100101<<26) | offset
|
|
}
|