Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637package x86
import ( "encoding/binary"
"git.urbach.dev/cli/q/src/cpu")
// memAccessFixedOffset encodes a memory access.func memAccessFixedOffset(code []byte, register cpu.Register, base cpu.Register, offset int32, length byte, opCode8 uint32, opCode32 uint32) []byte { opCode := opCode32
if length == 1 { opCode = opCode8 }
mod := AddressMemory
if offset != 0 || base == R5 || base == R13 { mod = AddressMemoryOffset8
if cpu.SizeInt(int64(offset)) > 1 { mod = AddressMemoryOffset32 } }
code = encode(code, mod, register, base, length, opCode)
switch mod { case AddressMemoryOffset8: return append(code, byte(offset)) case AddressMemoryOffset32: return binary.LittleEndian.AppendUint32(code, uint32(offset)) default: return code }}