package x86 import "git.akyoto.dev/cli/q/src/cpu" // memoryAccess encodes a memory access. func memoryAccess(code []byte, opCode8 byte, opCode32 byte, register cpu.Register, offset int8, numBytes byte, source cpu.Register) []byte { opCode := opCode32 if numBytes == 1 { opCode = opCode8 } mod := AddressMemory if offset != 0 || register == RBP || register == R13 { mod = AddressMemoryOffset8 } if numBytes == 2 { code = append(code, 0x66) } code = encode(code, mod, source, register, numBytes, opCode) if register == RSP || register == R12 { code = append(code, SIB(Scale1, 0b100, 0b100)) } if mod == AddressMemoryOffset8 { code = append(code, byte(offset)) } return code }