github.com/megatontech/mynoteforgo@v0.0.0-20200507084910-5d0c6ea6e890/源码/cmd/compile/internal/ssa/gen/decArgs.rules (about) 1 // Copyright 2018 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Decompose compound argument values 6 // Do this early to simplify tracking names for debugging. 7 8 (Arg {n} [off]) && v.Type.IsString() -> 9 (StringMake 10 (Arg <typ.BytePtr> {n} [off]) 11 (Arg <typ.Int> {n} [off+config.PtrSize])) 12 13 (Arg {n} [off]) && v.Type.IsSlice() -> 14 (SliceMake 15 (Arg <v.Type.Elem().PtrTo()> {n} [off]) 16 (Arg <typ.Int> {n} [off+config.PtrSize]) 17 (Arg <typ.Int> {n} [off+2*config.PtrSize])) 18 19 (Arg {n} [off]) && v.Type.IsInterface() -> 20 (IMake 21 (Arg <typ.Uintptr> {n} [off]) 22 (Arg <typ.BytePtr> {n} [off+config.PtrSize])) 23 24 (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 16 -> 25 (ComplexMake 26 (Arg <typ.Float64> {n} [off]) 27 (Arg <typ.Float64> {n} [off+8])) 28 29 (Arg {n} [off]) && v.Type.IsComplex() && v.Type.Size() == 8 -> 30 (ComplexMake 31 (Arg <typ.Float32> {n} [off]) 32 (Arg <typ.Float32> {n} [off+4])) 33 34 (Arg <t>) && t.IsStruct() && t.NumFields() == 0 && fe.CanSSA(t) -> 35 (StructMake0) 36 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 1 && fe.CanSSA(t) -> 37 (StructMake1 38 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)])) 39 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 2 && fe.CanSSA(t) -> 40 (StructMake2 41 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)]) 42 (Arg <t.FieldType(1)> {n} [off+t.FieldOff(1)])) 43 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 3 && fe.CanSSA(t) -> 44 (StructMake3 45 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)]) 46 (Arg <t.FieldType(1)> {n} [off+t.FieldOff(1)]) 47 (Arg <t.FieldType(2)> {n} [off+t.FieldOff(2)])) 48 (Arg <t> {n} [off]) && t.IsStruct() && t.NumFields() == 4 && fe.CanSSA(t) -> 49 (StructMake4 50 (Arg <t.FieldType(0)> {n} [off+t.FieldOff(0)]) 51 (Arg <t.FieldType(1)> {n} [off+t.FieldOff(1)]) 52 (Arg <t.FieldType(2)> {n} [off+t.FieldOff(2)]) 53 (Arg <t.FieldType(3)> {n} [off+t.FieldOff(3)])) 54 55 (Arg <t>) && t.IsArray() && t.NumElem() == 0 -> 56 (ArrayMake0) 57 (Arg <t> {n} [off]) && t.IsArray() && t.NumElem() == 1 && fe.CanSSA(t) -> 58 (ArrayMake1 (Arg <t.Elem()> {n} [off]))