Importing Upstream version 4.8.2
[platform/upstream/gcc48.git] / libgo / runtime / mgc0.h
1 // Copyright 2012 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 // Garbage collector (GC)
6
7 // GC instruction opcodes.
8 //
9 // The opcode of an instruction is followed by zero or more
10 // arguments to the instruction.
11 //
12 // Meaning of arguments:
13 //   off      Offset (in bytes) from the start of the current object
14 //   objgc    Pointer to GC info of an object
15 //   objgcrel Offset to GC info of an object
16 //   len      Length of an array
17 //   elemsize Size (in bytes) of an element
18 //   size     Size (in bytes)
19 //
20 // NOTE: There is a copy of these in ../reflect/type.go.
21 // They must be kept in sync.
22 enum {
23         GC_END,         // End of object, loop or subroutine. Args: none
24         GC_PTR,         // A typed pointer. Args: (off, objgc)
25         GC_APTR,        // Pointer to an arbitrary object. Args: (off)
26         GC_ARRAY_START, // Start an array with a fixed length. Args: (off, len, elemsize)
27         GC_ARRAY_NEXT,  // The next element of an array. Args: none
28         GC_CALL,        // Call a subroutine. Args: (off, objgcrel)
29         GC_MAP_PTR,     // Go map. Args: (off, MapType*)
30         GC_CHAN_PTR,    // Go channel. Args: (off, ChanType*)
31         GC_STRING,      // Go string. Args: (off)
32         GC_EFACE,       // interface{}. Args: (off)
33         GC_IFACE,       // interface{...}. Args: (off)
34         GC_SLICE,       // Go slice. Args: (off, objgc)
35         GC_REGION,      // A region/part of the current object. Args: (off, size, objgc)
36
37         GC_NUM_INSTR,   // Number of instruction opcodes
38 };
39
40 enum {
41         // Size of GC's fixed stack.
42         //
43         // The current GC implementation permits:
44         //  - at most 1 stack allocation because of GC_CALL
45         //  - at most GC_STACK_CAPACITY allocations because of GC_ARRAY_START
46         GC_STACK_CAPACITY = 8,  
47 };