package llvm
import (
"fmt"
"github.com/marzeq/qk/types"
)
type win64ABIGenerator struct{}
func (win64ABIGenerator) aggregateParamChunks(e *Emitter, aggregate types.Type) []abiChunk {
size, _ := e.typeSizeAlign(aggregate)
switch size {
case 1, 2, 4, 8:
return []abiChunk{{typeName: fmt.Sprintf("i%d", size*8), size: size}}
default:
return []abiChunk{{typeName: "ptr", offset: -1}}
}
}
func (g win64ABIGenerator) aggregateReturnChunks(e *Emitter, aggregate types.Type) []abiChunk {
return g.aggregateParamChunks(e, aggregate)
}
func (win64ABIGenerator) requiresSRet(e *Emitter, aggregate types.Type) bool {
size, _ := e.typeSizeAlign(aggregate)
return size != 1 && size != 2 && size != 4 && size != 8
}