annotate runtime/fib.c @ 58:4c22fe798779

Some small optimizations
author Mike Pavone <pavone@retrodev.com>
date Thu, 08 Oct 2009 03:03:48 -0400
parents 2174878a6e4b
children 4f1ae6eb71d8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1 #include <stdio.h>
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 #include "builtin.h"
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 #include "object.h"
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 #include "context.h"
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 #include "func.h"
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 #include "integer.h"
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 #include "bool.h"
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 typedef enum {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 FUNC__LT_,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 FUNC__LT__AT_Int32,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 FUNC__MN_,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13 FUNC__MN__AT_Int32,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 FUNC__PL_,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 FUNC__PL__AT_Int32,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 FUNC_Fib,
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
17 FUNC_Fib_1,
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
18 FUNC_Fib_2,
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
19 FUNC_Fib_3,
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
20 FUNC_Fib_4,
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
21 FUNC_Fib_5,
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
22 FUNC_Fib_6,
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
23 FUNC_Fib_7,
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 FUNC_If,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 FUNC_If_AT_Yes_SP_No,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 FUNC_Main,
57
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
27 FUNC_Main_1,
2174878a6e4b Avoid unnecessary nested switch
Mike Pavone <pavone@retrodev.com>
parents: 56
diff changeset
28 FUNC_Main_2,
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 FUNC_Print,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 END
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 } funcids;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 typedef struct {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 struct object *____result__0__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 struct object *____result__0__1;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 struct object *____result__10__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37 struct object *____result__11__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 struct object *____result__1__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 struct object *____result__5__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 struct object *____result__6__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 struct object *____result__7__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 struct object *out;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 } lt_Fib;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 typedef struct {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 struct object *____result__0__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 struct object *____result__1__0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 } lt_Main;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
50 object * _const_Whole_SP_Number__1;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
51 object * _const_Whole_SP_Number__2;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
52 object * _const_Whole_SP_Number__30;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
53
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
54 void rhope(uint32_t func)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
55 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
56 uint16_t resume,idx;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
57 context * ct;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
58 calldata * cdata, *temp_cdata;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
59 FuncDef(Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
60 FuncDef(Main)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
61
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
62 ct = new_context();
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
63 cdata = alloc_cdata(ct, NULL, 0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
64 cdata->num_params = 0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
65 cdata->func = END;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
66 _dispatch:
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
67 switch(func)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
68 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
69 Method(_LT_)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
70 MethodDispatch(TYPE_INT32,_LT_,Int32)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
71 EndMethod
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
72
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
73 MethodImplNoLocals(_LT_,Int32,TYPE_INT32,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
74 NumParams 2)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
75
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
76 Param(1, TYPE_INT32)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
77
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
78 if(((t_Int32 *)cdata->params[0])->num < ((t_Int32 *)cdata->params[-1])->num)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
79 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
80 release_ref(cdata->params[0]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
81 Ret(0, Yes)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
82 } else {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
83 release_ref(cdata->params[0]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
84 Ret(0, No)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
85 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
86
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
87 release_ref(cdata->params[-1]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
88 EndFuncNoLocals
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
89
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
90 Method(_MN_)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
91 MethodDispatch(TYPE_INT32,_MN_,Int32)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
92 EndMethod
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
93
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
94 MethodImplNoLocals(_MN_,Int32,TYPE_INT32,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
95 NumParams 2)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
96
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
97 Param(1, TYPE_INT32)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
98
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
99 cdata->params[0] = copy_object(cdata->params[0]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
100 ((t_Int32 *)cdata->params[0])->num -= ((t_Int32 *)cdata->params[-1])->num;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
101
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
102 release_ref(cdata->params[-1]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
103 EndFuncNoLocals
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
104
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
105 Method(_PL_)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
106 MethodDispatch(TYPE_INT32,_PL_,Int32)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
107 EndMethod
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
108
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
109 MethodImplNoLocals(_PL_,Int32,TYPE_INT32,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
110 NumParams 2)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 Param(1, TYPE_INT32)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 cdata->params[0] = copy_object(cdata->params[0]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115 ((t_Int32 *)cdata->params[0])->num += ((t_Int32 *)cdata->params[-1])->num;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 release_ref(cdata->params[-1]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 EndFuncNoLocals
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120 Func(Fib,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 NumParams 1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 lv_Fib->____result__0__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 lv_Fib->____result__0__1 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
124 lv_Fib->____result__1__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125 lv_Fib->____result__5__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
126 lv_Fib->____result__6__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 lv_Fib->____result__7__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128 lv_Fib->____result__10__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129 lv_Fib->____result__11__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130 lv_Fib->out = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
131
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
132 PrepCall(2)
58
4c22fe798779 Some small optimizations
Mike Pavone <pavone@retrodev.com>
parents: 57
diff changeset
133
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
134 SetParam(0, add_ref(cdata->lastframe->params[0]))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
135 SetParam(1, add_ref(_const_Whole_SP_Number__2))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
136 Call(_LT_,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 NumParams 2, 1, Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 lv_Fib->____result__1__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
139
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 SetParam(0, add_ref(lv_Fib->____result__1__0))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 Call(If,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142 NumParams 1, 2, Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143 lv_Fib->____result__0__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 lv_Fib->____result__0__1 = cdata->params[-1];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
145
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 if(lv_Fib->____result__0__1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 SetParam(0, add_ref(cdata->lastframe->params[0]))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 SetParam(1, add_ref(_const_Whole_SP_Number__1))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150 Call(_MN_,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 NumParams 2, 3, Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 lv_Fib->____result__7__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 if(lv_Fib->____result__0__1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 SetParam(0, add_ref(cdata->lastframe->params[0]))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157 SetParam(1, add_ref(_const_Whole_SP_Number__2))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 Call(_MN_,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 NumParams 2, 4, Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 lv_Fib->____result__11__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 if(lv_Fib->____result__0__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164 lv_Fib->out = add_ref(_const_Whole_SP_Number__1);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 if(lv_Fib->____result__0__1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168 SetParam(0, add_ref(lv_Fib->____result__7__0))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 Call(Fib,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 NumParams 1, 5, Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171 lv_Fib->____result__6__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
173 if(lv_Fib->____result__0__1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
174 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
175 SetParam(0, add_ref(lv_Fib->____result__11__0))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
176 Call(Fib,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
177 NumParams 1, 6, Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
178 lv_Fib->____result__10__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
179 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
180 if(lv_Fib->____result__0__1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
181 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
182 SetParam(0, add_ref(lv_Fib->____result__6__0))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
183 SetParam(1, add_ref(lv_Fib->____result__10__0))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 Call(_PL_,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185 NumParams 2, 7, Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
186 lv_Fib->____result__5__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
187 }
58
4c22fe798779 Some small optimizations
Mike Pavone <pavone@retrodev.com>
parents: 57
diff changeset
188 FreeCall
56
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
189 if(lv_Fib->____result__0__1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
190 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
191 lv_Fib->out = add_ref(lv_Fib->____result__5__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
192 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
193 if(lv_Fib->____result__0__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
194 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
195 release_ref(lv_Fib->____result__0__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
196 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
197 if(lv_Fib->____result__0__1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
198 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
199 release_ref(lv_Fib->____result__0__1);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
200 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
201 if(lv_Fib->____result__1__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
202 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
203 release_ref(lv_Fib->____result__1__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
205 if(lv_Fib->____result__5__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
206 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
207 release_ref(lv_Fib->____result__5__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
208 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
209 if(lv_Fib->____result__6__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
210 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
211 release_ref(lv_Fib->____result__6__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
212 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
213 if(lv_Fib->____result__7__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
214 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
215 release_ref(lv_Fib->____result__7__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
216 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
217 if(lv_Fib->____result__10__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
218 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
219 release_ref(lv_Fib->____result__10__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
220 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
221 if(lv_Fib->____result__11__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
222 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
223 release_ref(lv_Fib->____result__11__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
224 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
225 release_ref(cdata->params[0]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
226 Ret(0, lv_Fib->out)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
227 EndFunc(Fib)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
228
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
229 Method(If)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
230 MethodDispatch(TYPE_BOOLEAN,If,Yes_SP_No)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
231 EndMethod
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
232
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
233 MethodImplNoLocals(If,Yes_SP_No,TYPE_BOOLEAN,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
234 NumParams 1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
235
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
236 if(((t_Boolean *)(cdata->params[0]))->val)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
237 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
238 Ret(1, NULL)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
239 } else {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
240 Ret(1, cdata->params[0]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
241 Ret(0, NULL)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
242 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
243 EndFuncNoLocals
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
244
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
245 Func(Main,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
246 NumParams 0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
247
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
248 lv_Main->____result__0__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
249 lv_Main->____result__1__0 = NULL;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
250
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
251 PrepCall(1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
252 SetParam(0, add_ref(_const_Whole_SP_Number__30))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
253 Call(Fib,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
254 NumParams 1, 1, Main)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
255 lv_Main->____result__1__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
256 FreeCall
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
257
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
258 PrepCall(1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
259 SetParam(0, add_ref(lv_Main->____result__1__0))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
260 Call(Print,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
261 NumParams 1, 2, Main)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
262 lv_Main->____result__0__0 = cdata->params[0];
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
263 FreeCall
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
264
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
265 if(lv_Main->____result__0__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
266 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
267 release_ref(lv_Main->____result__0__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
268 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
269 if(lv_Main->____result__1__0)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
270 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
271 release_ref(lv_Main->____result__1__0);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
272 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
273 EndFunc(Main)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
274
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
275 FuncNoLocals(Print,
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
276 NumParams 1)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
277
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
278 if(get_blueprint(cdata->params[0])->type_id == TYPE_INT32)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
279 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
280 printf("%d\n", ((t_Int32 *)(cdata->params[0]))->num);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
281 } else {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
282 puts("Don't know how to print this type");
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
283 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
284 release_ref(cdata->params[0]);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
285 Ret(0, make_Int32(0))
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
286 EndFuncNoLocals
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
287
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
288 case END:
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
289 return;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
290 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
291 _exception:
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
292 puts("whoops, exception!");
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
293 }
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
294
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
295 int main(int argc, char ** argv)
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
296 {
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
297 register_builtin_types();
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
298
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
299 _const_Whole_SP_Number__1 = make_Int32(1);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
300 _const_Whole_SP_Number__2 = make_Int32(2);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
301 _const_Whole_SP_Number__30 = make_Int32(30);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
302
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
303 rhope(FUNC_Main);
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
304 return 0;
d2f9b0a9403d Initial experiment with goto and switch
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
305 }