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.
12345678910111213141516171819202122232425262728293031323334353637383940414243package x86
import ( "encoding/binary"
"git.urbach.dev/cli/q/src/cpu")
// memLoadExtend encodes a memory load with sign or zero extension.func memLoadExtend(code []byte, register cpu.Register, base cpu.Register, offset int32, length byte, opCode8 uint32, opCode16 uint32, opCode32 uint32) []byte { var ( opCode uint32 mod = AddressMemory )
switch length { case 1: opCode = opCode8 case 2: opCode = opCode16 case 4: opCode = opCode32 }
if offset != 0 || base == R5 || base == R13 { mod = AddressMemoryOffset8
if cpu.SizeInt(int64(offset)) > 1 { mod = AddressMemoryOffset32 } }
code = encode(code, mod, register, base, 8, opCode)
switch mod { case AddressMemoryOffset8: return append(code, byte(offset)) case AddressMemoryOffset32: return binary.LittleEndian.AppendUint32(code, uint32(offset)) default: return code }}