2014-07-11 Edward Smith-Rowland <3dw4rd@verizon.net>
[official-gcc.git] / libgo / runtime / mgc0.h
blobf8abe6c9c1c235ff71952c8c56ab330f11329617
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.
5 // Garbage collector (GC)
7 // GC instruction opcodes.
8 //
9 // The opcode of an instruction is followed by zero or more
10 // arguments to the instruction.
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)
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_CHAN_PTR, // Go channel. Args: (off, ChanType*)
30 GC_STRING, // Go string. Args: (off)
31 GC_EFACE, // interface{}. Args: (off)
32 GC_IFACE, // interface{...}. Args: (off)
33 GC_SLICE, // Go slice. Args: (off, objgc)
34 GC_REGION, // A region/part of the current object. Args: (off, size, objgc)
36 GC_NUM_INSTR, // Number of instruction opcodes
39 enum {
40 // Size of GC's fixed stack.
42 // The current GC implementation permits:
43 // - at most 1 stack allocation because of GC_CALL
44 // - at most GC_STACK_CAPACITY allocations because of GC_ARRAY_START
45 GC_STACK_CAPACITY = 8,