// Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Decompose compound argument values // Do this early to simplify tracking names for debugging. (Arg {n} [off]) && v.Type.IsString() => (StringMake (Arg {n} [off]) (Arg {n} [off+int32(config.PtrSize)])) (Arg {n} [off]) && v.Type.IsSlice() => (SliceMake (Arg {n} [off]) (Arg {n} [off+int32(config.PtrSize)]) (Arg {n} [off+2*int32(config.PtrSize)])) (Arg {n} [off]) && v.Type.IsInterface() => (IMake (Arg {n} [off]) (Arg {n} [off+int32(config.PtrSize)])) (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 16 => (ComplexMake (Arg {n} [off]) (Arg {n} [off+8])) (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 8 => (ComplexMake (Arg {n} [off]) (Arg {n} [off+4])) (Arg ) && t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t) => (StructMake0) (Arg {n} [off]) && t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t) => (StructMake1 (Arg {n} [off+int32(t.FieldOff(0))])) (Arg {n} [off]) && t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t) => (StructMake2 (Arg {n} [off+int32(t.FieldOff(0))]) (Arg {n} [off+int32(t.FieldOff(1))])) (Arg {n} [off]) && t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t) => (StructMake3 (Arg {n} [off+int32(t.FieldOff(0))]) (Arg {n} [off+int32(t.FieldOff(1))]) (Arg {n} [off+int32(t.FieldOff(2))])) (Arg {n} [off]) && t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t) => (StructMake4 (Arg {n} [off+int32(t.FieldOff(0))]) (Arg {n} [off+int32(t.FieldOff(1))]) (Arg {n} [off+int32(t.FieldOff(2))]) (Arg {n} [off+int32(t.FieldOff(3))])) (Arg ) && t.IsArray() && t.NumElem() == 0 => (ArrayMake0) (Arg {n} [off]) && t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t) => (ArrayMake1 (Arg {n} [off]))