Mercurial > repos > rhope
annotate runtime/func.h @ 105:43cc42df26cc
Various compiler improvements
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Tue, 24 Aug 2010 23:22:17 -0400 |
parents | f4fc0a98088a |
children | e5627038b7e7 60906f8803ef |
rev | line source |
---|---|
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #ifndef _FUNC_H_ |
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #define _FUNC_H_ |
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
4 typedef struct object object; |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
5 typedef struct calldata calldata; |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
6 |
8
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
7 typedef enum { |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
8 NORMAL_RETURN=0, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
9 EXCEPTION_RETURN, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
10 TAIL_RETURN, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
11 NO_CONVERSION, |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
12 STACK_UNWIND |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
13 } returntype; |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
14 |
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
15 |
53
70af7fa155d0
Cleaned up some C warnings and added a simple compile script
Mike Pavone <pavone@retrodev.com>
parents:
48
diff
changeset
|
16 typedef returntype (*rhope_func)(calldata *); |
100
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
17 typedef void (*special_func) (object *); |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
18 |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
19 #ifdef MULTI_SWITCH |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
20 #define DispatchEntry(name) case FUNC_##name: goto f_##name; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
21 #define ResumeEntry(num,name) case RES_##num##_##name: goto r##num##_##name; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
22 #define DispatchVar |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
23 #define DISPATCH switch(func) { DispatchEntries } |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
24 #define EndEntry case END: goto DO_END; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
25 #else |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
26 #define DispatchEntry(name) &&f_##name, |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
27 #define ResumeEntry(num,name) &&r##num##_##name, |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
28 #define DispatchVar void * funcs[] = { DispatchEntries }; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
29 #define DISPATCH goto *funcs[func]; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
30 #define EndEntry &&DO_END |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
31 #endif |
85
6d10b5b9ebc3
Make dispatch type selectable between replicated switch and computed goto
Mike Pavone <pavone@retrodev.com>
parents:
75
diff
changeset
|
32 |
8
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
33 |
48
a24eb366195c
Fixed some bugs introduced in previous commit and moved definition of integer methods out of runtime and into the compiler
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
34 #define MethodName(name,type) f_ ## name ## AT_ ## type |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
36 #ifdef ENABLE_PROFILING |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
37 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
38 #define START_PROFILE \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
39 gettimeofday(&time, NULL);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
40 cdata->accum = cdata->self_accum = 0;\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
41 cdata->self_start = cdata->start = ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec); |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
42 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
43 #define PAUSE_SELF \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
44 gettimeofday(&time, NULL);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
45 my_cdata->self_accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->self_start; |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
46 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
47 #define AND_TOTAL \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
48 my_cdata->accum += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - my_cdata->start; |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
49 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
50 #define RESUME_SELF \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
51 gettimeofday(&time, NULL);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
52 my_cdata->self_start = ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec); |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
53 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
54 #define AND_RESUME_TOTAL my_cdata->start = my_cdata->self_start; |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
55 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
56 #define EndFunc(name) \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
57 free_stack(ct, lv_ ## name);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
58 func = cdata->func;\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
59 gettimeofday(&time, NULL);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
60 profile_counts[FUNC_ ## name]++;\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
61 profile_totals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->start + cdata->accum;\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
62 profile_selftotals[FUNC_ ## name] += ((uint64_t)time.tv_sec) * 1000000ULL + ((uint64_t)time.tv_usec) - cdata->self_start + cdata->self_accum; |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
63 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
64 #else |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
65 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
66 #define START_PROFILE |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
67 #define PAUSE_SELF |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
68 #define RESUME_SELF |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
69 #define AND_TOTAL |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
70 #define AND_RESUME_TOTAL |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
71 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
72 #define EndFunc(name) \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
73 free_stack(ct, lv_ ## name);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
74 func = cdata->func; |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
75 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
76 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
77 #endif |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
78 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
79 #define EndFuncNoLocals \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
80 func = cdata->func; |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
81 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
82 #define Func(name,numparams) \ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
83 f_ ## name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
84 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
85 release_ref(cdata->params[idx]); cdata->num_params = numparams;\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
86 sf_ ## name:\ |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
87 START_PROFILE\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
88 lv_ ## name = alloc_stack(ct, sizeof(lt_ ## name));\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
89 my_cdata = cdata; |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
90 |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
91 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
92 #define FuncNoLocals(name,numparams) \ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
93 f_ ## name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
94 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
95 release_ref(cdata->params[idx]); cdata->num_params = numparams;\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
96 sf_ ## name:\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
97 my_cdata = cdata; |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
98 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
99 #define MethodImpl(name,type_name,mytype_id,numparams) \ |
65
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
100 f_ ## name ## AT_ ## type_name:\ |
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
101 sf_ ## name ## AT_ ## type_name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
102 if (cdata->num_params < 1)\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
103 {\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
104 cdata = alloc_cdata(ct, cdata, 0);\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
105 cdata->func = FUNC_ ## name ## AT_ ## type_name;\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
106 goto _exception;\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
107 }\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
108 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
109 {\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
110 puts("uh oh, need conversion and that's not implemented yet!");\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
111 exit(1);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
112 }\ |
65
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
113 m_ ## name ## AT_ ## type_name:\ |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
114 START_PROFILE\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
115 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
116 release_ref(cdata->params[idx]); cdata->num_params = numparams;\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
117 lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
118 my_cdata = cdata; |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
119 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
120 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
121 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \ |
65
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
122 f_ ## name ## AT_ ## type_name:\ |
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
123 sf_ ## name ## AT_ ## type_name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
124 if (cdata->num_params < 1)\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
125 cdata = alloc_cdata(ct, cdata, 0);\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
126 cdata->func = FUNC_ ## name ## AT_ ## type_name;\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
127 goto _exception;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
128 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
129 {\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
130 puts("uh oh, need conversion and that's not implemented yet!");\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
131 exit(1);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
132 }\ |
65
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
133 m_ ## name ## AT_ ## type_name:\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
134 for(idx = numparams; idx < cdata->num_params; ++idx)\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
135 release_ref(cdata->params[idx]); cdata->num_params = numparams;\ |
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
136 my_cdata = cdata; |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
137 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
138 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
139 #define Method(name) \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
140 f_ ## name:\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
141 sf_ ## name:\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
142 switch(get_blueprint(cdata->params[0])->type_id)\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
143 { |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
144 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
145 #define EndMethod(name) \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
146 default:\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
147 printf("Type %d does not implement method %s\n", get_blueprint(cdata->params[0])->type_id, #name);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
148 cdata = alloc_cdata(ct, cdata, 0);\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
149 cdata->func = FUNC_ ## name;\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
150 goto _exception;\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
151 } |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
152 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
153 |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
154 #define MethodDispatch(type_id,name,type_name) \ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
155 case type_id:\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
156 goto m_ ## name ## AT_ ## type_name; |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
157 |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
158 #define NumParams |
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
159 #define CallSpace |
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
160 |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
161 #define Param(num,convtypeid) \ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
162 if(get_blueprint(cdata->params[num])->type_id != convtypeid)\ |
11
3021dac0d8f5
Stack unwind is so close I can almost taste it
Mike Pavone <pavone@retrodev.com>
parents:
9
diff
changeset
|
163 {\ |
75
0083b2f7b3c7
Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
Mike Pavone <pavone@retrodev.com>
parents:
74
diff
changeset
|
164 printf("uh oh, need conversion from type %d to type %d for param %d and that's not implemented yet!", get_blueprint(cdata->params[num])->type_id, convtypeid, num);\ |
0083b2f7b3c7
Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
Mike Pavone <pavone@retrodev.com>
parents:
74
diff
changeset
|
165 goto _exception;\ |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
166 } |
8
8d74ef7fa357
Improved helper macros and added separate Rhope stack in runtime
Mike Pavone <pavone@retrodev.com>
parents:
7
diff
changeset
|
167 |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
168 #define CopiedParam(num,convtypeid) Param(num,convtypeid) cdata->params[num] = copy_object(cdata->params[num]); |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
169 #define Ret(num,val) cdata->params[num] = (object *)(val); |
101
f4fc0a98088a
Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
170 #define NumRet(num) cdata->num_params = num;\ |
f4fc0a98088a
Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
171 if (num == 1 && !cdata->params[0])\ |
f4fc0a98088a
Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
172 {\ |
f4fc0a98088a
Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
173 puts("Worker with only one output failed to produce data for that output!");\ |
f4fc0a98088a
Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
174 goto _exception;\ |
f4fc0a98088a
Fixed some bugs that were preventing compiled compiler from working correctly. Need to address memory usage
Mike Pavone <pavone@retrodev.com>
parents:
100
diff
changeset
|
175 } |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 #define Exception |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
177 #define FuncDef(name) lt_ ## name * lv_ ## name; |
65
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
178 #define MethodDef(name) lt_ ## name ## AT_ ## type_name * lv_ ## name ## AT_ ## type_name; |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
179 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
180 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
181 #define PrepCall(callspace) cdata = alloc_cdata(ct, cdata, callspace); |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 |
100
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
183 #define SetParam(num,value) cdata->params[num] = value; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
184 |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
185 |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
186 #define VCRePrepCall(func,numparams,lastnumparams) \ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
187 if(numparams + ((t_Worker *)func)->payload.Count > lastnumparams)\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
188 {\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
189 temp_cdata = cdata->lastframe;\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
190 free_stack(ct, cdata);\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
191 cdata = alloc_cdata(ct, temp_cdata, numparams + ((t_Worker *)func)->payload.Count);\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
192 }\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
193 vcparam_offset = 0; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
194 |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
195 #define VCPrepCall(func,numparams) \ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
196 cdata = alloc_cdata(ct, cdata, numparams + ((t_Worker *)func)->payload.Count);\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
197 vcparam_offset = 0; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
198 |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
199 #define VCSetParam(func,num,value) \ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
200 while((num+vcparam_offset) < ((t_Worker *)func)->payload.Size && ((object **)(((t_Worker *)func)+1))[num+vcparam_offset])\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
201 {\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
202 cdata->params[num+vcparam_offset] = add_ref(((object **)(((t_Worker *)func)+1))[num+vcparam_offset]);\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
203 ++vcparam_offset;\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
204 }\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
205 cdata->params[num+vcparam_offset] = value;\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
206 last_vcparam = num+vcparam_offset; |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
207 |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
208 #define ValCall(tocall,numparams,resumeto,myname)\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
209 last_vcparam++;\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
210 while(last_vcparam < ((t_Worker *)tocall)->payload.Size)\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
211 {\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
212 if (((object **)(((t_Worker *)tocall)+1))[last_vcparam]) \ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
213 cdata->params[last_vcparam] = add_ref(((object **)(((t_Worker *)tocall)+1))[last_vcparam]);\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
214 ++last_vcparam;\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
215 }\ |
74
a844c623c7df
Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
216 cdata->func = RES_ ## resumeto ## _ ## myname;\ |
100
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
217 cdata->num_params = numparams + ((t_Worker *)tocall)->payload.Count;\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
218 cdata->vars = lv_ ## myname;\ |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
219 func = ((t_Worker *)tocall)->payload.Index;\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
220 PAUSE_SELF |
100
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
221 |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
222 #define ValCallPostlude(resumeto,myname)\ |
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
223 r ## resumeto ## _ ## myname:\ |
74
a844c623c7df
Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
224 my_cdata = cdata->lastframe;\ |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
225 RESUME_SELF\ |
100
f51c4c17457c
Broken port of parser to compiler
Mike Pavone <pavone@retrodev.com>
parents:
85
diff
changeset
|
226 lv_ ## myname = cdata->vars; |
74
a844c623c7df
Add support for Worker type
Mike Pavone <pavone@retrodev.com>
parents:
71
diff
changeset
|
227 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
228 |
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
229 #define Call(tocall, numparams, resumeto, myname)\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
230 cdata->func = RES_ ## resumeto ## _ ## myname;\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
231 cdata->num_params = numparams;\ |
71
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
66
diff
changeset
|
232 cdata->vars = lv_ ## myname;\ |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
233 if(FUNC_ ## tocall == FUNC_ ## myname) {\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
234 PAUSE_SELF\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
235 AND_TOTAL\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
236 } else if (FUNC_ ## tocall != FUNC_PL_ && FUNC_ ## tocall != FUNC_MN_ && FUNC_ ## tocall != FUNC_TM_ && FUNC_ ## tocall != FUNC_DV_ && FUNC_ ## tocall != FUNC_If) {\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
237 PAUSE_SELF\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
238 }\ |
59
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
239 goto sf_ ## tocall;\ |
4f1ae6eb71d8
Use replicated switch statement for returns and late-bound calls
Mike Pavone <pavone@retrodev.com>
parents:
58
diff
changeset
|
240 r ## resumeto ## _ ## myname:\ |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
241 my_cdata = cdata->lastframe;\ |
105
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
242 if(FUNC_ ## tocall == FUNC_ ## myname) {\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
243 RESUME_SELF\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
244 AND_RESUME_TOTAL\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
245 } else if (FUNC_ ## tocall != FUNC_PL_ && FUNC_ ## tocall != FUNC_MN_ && FUNC_ ## tocall != FUNC_TM_ && FUNC_ ## tocall != FUNC_DV_ && FUNC_ ## tocall != FUNC_If) {\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
246 RESUME_SELF\ |
43cc42df26cc
Various compiler improvements
Mike Pavone <pavone@retrodev.com>
parents:
101
diff
changeset
|
247 }\ |
71
c40c3d399133
Add Int32@String and Get Char. Fix stack bug
Mike Pavone <pavone@retrodev.com>
parents:
66
diff
changeset
|
248 lv_ ## myname = cdata->vars; |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
249 |
35
3498713c3dc9
C backend portion of supporting user defined types is done, but untested. Parser/NWorker still need a fair bit of work
Mike Pavone <pavone@retrodev.com>
parents:
12
diff
changeset
|
250 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
251 #define FreeCall\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
252 temp_cdata = cdata->lastframe;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
253 free_stack(ct, cdata);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
254 cdata = temp_cdata; |
7
d61550e2c001
Added current work on new runtime
Mike Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
255 |
56
d2f9b0a9403d
Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
35
diff
changeset
|
256 #define FreeCallMethod(myname,mytype)\ |
57
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
257 temp_cdata = cdata->lastframe;\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
258 free_stack(ct, cdata);\ |
2174878a6e4b
Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents:
56
diff
changeset
|
259 cdata = temp_cdata;\ |
65
1db811fa4744
Handle native Rhope functions and plain C functions separately as part of move to new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
63
diff
changeset
|
260 lv_ ## myname ## AT_ ## type_name = (lt_ ## myname ## AT_ ## type_name *)(cdata+1); |
61
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
261 |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
262 #define TPrepCall(callspace) \ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
263 func = cdata->lastframe->func;\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
264 temp_cdata = cdata->lastframe->lastframe;\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
265 free_stack(ct, cdata->lastframe);\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
266 cdata = alloc_cdata(ct, temp_cdata, callspace);\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
267 cdata->func = func; |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
268 |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
269 #define TCall(tocall, numparams)\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
270 cdata->num_params = numparams;\ |
fa24ef3b026f
Added macro for tail calls with new C strategy
Mike Pavone <pavone@retrodev.com>
parents:
59
diff
changeset
|
271 goto sf_ ## tocall; |
12
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
272 |
31f8182f3433
Finished fib test and did some small work on the c backend
Mike Pavone <pavone@retrodev.com>
parents:
11
diff
changeset
|
273 |
66
d4b44ae2e34a
New variant of C backend works now
Mike Pavone <pavone@retrodev.com>
parents:
65
diff
changeset
|
274 #endif //_FUNC_H_ |