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.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package core
import ( "git.urbach.dev/cli/q/src/ssa" "git.urbach.dev/cli/q/src/types")
// inputRegisterCount returns how many registers an input occupies.func inputRegisterCount(input *ssa.Parameter) int { structType, isStructType := types.Unwrap(input.Typ).(*types.Struct)
if !isStructType { return 1 }
if structType.Size() > 16 { registers := 0
for _, field := range structType.Fields { nestedType, isNested := types.Unwrap(field.Type).(*types.Struct)
if isNested { registers += inputRegisterCount(&ssa.Parameter{Typ: nestedType}) continue }
registers++ }
return registers }
size := 0 registers := 1
for _, field := range structType.Fields { fieldSize := field.Type.Size()
if size+fieldSize > 8 { registers++ size = 0 }
size += fieldSize }
return registers}