]> gitweb.factorcode.org Git - factor.git/blob - basis/vm/vm.factor
Reformat
[factor.git] / basis / vm / vm.factor
1 ! Copyright (C) 2009, 2010 Phil Dawes, Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: classes.struct alien.c-types alien.syntax kernel.private ;
4 IN: vm
5
6 TYPEDEF: uintptr_t cell_t
7
8 STRUCT: segment
9     { start cell_t }
10     { size cell_t }
11     { end cell_t } ;
12
13 STRUCT: context
14     { callstack-top cell_t }
15     { callstack-bottom cell_t }
16     { datastack cell_t }
17     { retainstack cell_t }
18     { callstack-save cell_t }
19     { datastack-seg segment* }
20     { retainstack-seg segment* }
21     { callstack-seg segment* }
22     { context-objects cell_t[context-object-count] } ;
23
24 STRUCT: zone
25     { here cell_t }
26     { start cell_t }
27     { end cell_t }
28     { size cell_t } ;
29
30 ! dispatch-statistics should be kept in sync with:
31 !   vm/dispatch.hpp
32 STRUCT: dispatch-statistics
33     { megamorphic-cache-hits cell_t }
34     { megamorphic-cache-misses cell_t }
35
36     { cold-call-to-ic-transitions cell_t }
37     { ic-to-pic-transitions cell_t }
38     { pic-to-mega-transitions cell_t }
39
40     { pic-tag-count cell_t }
41     { pic-tuple-count cell_t } ;
42
43 STRUCT: vm
44     { ctx context* }
45     { spare-ctx context* }
46     { nursery zone }
47     { cards-offset cell_t }
48     { decks-offset cell_t }
49     { signal-handler-addr cell_t }
50     { faulting? cell_t }
51     { special-objects cell_t[special-object-count] }
52     { thread void* }
53     { datastack-size cell_t }
54     { retainstack-size cell_t }
55     { callstack-size cell_t } ;
56
57 CONSTANT: COLLECT-NURSERY-OP 0
58 CONSTANT: COLLECT-AGING-OP 1
59 CONSTANT: COLLECT-TO-TENURED-OP 2
60 CONSTANT: COLLECT-FULL-OP 3
61 CONSTANT: COLLECT-COMPACT-OP 4
62 CONSTANT: COLLECT-GROWING-DATA-HEAP-OP 5
63
64 STRUCT: copying-sizes
65 { size cell_t }
66 { occupied cell_t }
67 { free cell_t } ;
68
69 STRUCT: mark-sweep-sizes
70 { size cell_t }
71 { occupied cell_t }
72 { total-free cell_t }
73 { contiguous-free cell_t }
74 { free-block-count cell_t } ;
75
76 STRUCT: data-heap-room
77 { nursery copying-sizes }
78 { aging copying-sizes }
79 { tenured mark-sweep-sizes }
80 { cards cell_t }
81 { decks cell_t }
82 { mark-stack cell_t } ;
83
84 CONSTANT: PHASE-CARD-SCAN 0
85 CONSTANT: PHASE-CODE-SCAN 1
86 CONSTANT: PHASE-DATA-SWEEP 2
87 CONSTANT: PHASE-CODE-SWEEP 3
88 CONSTANT: PHASE-DATA-COMPACTION 4
89 CONSTANT: PHASE-MARKING 5
90
91 ! gc-event should be kept in sync with:
92 !   vm/gc.hpp
93 STRUCT: gc-event
94     { op uint }
95     { data-heap-before data-heap-room }
96     { code-heap-before mark-sweep-sizes }
97     { data-heap-after data-heap-room }
98     { code-heap-after mark-sweep-sizes }
99     { cards-scanned cell_t }
100     { decks-scanned cell_t }
101     { code-blocks-scanned cell_t }
102     { start-time ulonglong }
103     { total-time cell_t }
104     { times cell_t[6] }
105     { temp-time ulonglong } ;
106
107 ! gc-info should be kept in sync with:
108 !   vm/gc_info.hpp
109 STRUCT: gc-info
110     { gc-root-count uint read-only }
111     { derived-root-count uint read-only }
112     { return-address-count uint read-only } ;
113
114 CONSTANT: CODE-BLOCK-UNOPTIMIZED 0
115 CONSTANT: CODE-BLOCK-OPTIMIZED 1
116 CONSTANT: CODE-BLOCK-PIC 2