Ticket #5924: Update.cmm

File Update.cmm, 7.9 KB (added by tibbe, 2 years ago)
Line 
1section "data" { __stginit_main:Update:
2}
3
4section "data" {
5    Update.$WMArray_closure:
6        const Update.$WMArray_info;
7}
8
9Update.$WMArray_info()
10        { Just Update.$WMArray_info:
11                   const 65541;
12                   const 0;
13                   const 15;
14        }
15    cjs:
16        Hp = Hp + 8;
17        if (Hp > I32[BaseReg + 92]) goto cjx;
18        I32[Hp - 4] = Update.MArray_con_info;
19        I32[Hp + 0] = I32[Sp + 0];
20        R1 = Hp - 3;
21        Sp = Sp + 4;
22        jump (I32[Sp + 0]) ();
23    cjv:
24        R1 = Update.$WMArray_closure;
25        jump (I32[BaseReg - 4]) ();
26    cjx:
27        I32[BaseReg + 116] = 8;
28        goto cjv;
29}
30
31section "data" {
32    Update.$WArray_closure:
33        const Update.$WArray_info;
34}
35
36Update.$WArray_info()
37        { Just Update.$WArray_info:
38                   const 65541;
39                   const 0;
40                   const 15;
41        }
42    cjF:
43        Hp = Hp + 8;
44        if (Hp > I32[BaseReg + 92]) goto cjK;
45        I32[Hp - 4] = Update.Array_con_info;
46        I32[Hp + 0] = I32[Sp + 0];
47        R1 = Hp - 3;
48        Sp = Sp + 4;
49        jump (I32[Sp + 0]) ();
50    cjI:
51        R1 = Update.$WArray_closure;
52        jump (I32[BaseReg - 4]) ();
53    cjK:
54        I32[BaseReg + 116] = 8;
55        goto cjI;
56}
57
58section "data" {
59    Update.unArray_closure:
60        const Update.unArray_info;
61}
62
63sjh_ret()
64        { Just sjh_info:
65                   const 0;
66                   const 32;
67        }
68    cjV:
69        R1 = I32[R1 + 3];
70        Sp = Sp + 4;
71        jump (I32[Sp + 0]) ();
72}
73
74Update.unArray_info()
75        { Just Update.unArray_info:
76                   const 65541;
77                   const 0;
78                   const 15;
79        }
80    cjY:
81        R1 = I32[Sp + 0];
82        I32[Sp + 0] = sjh_info;
83        if (R1 & 3 != 0) goto ck1;
84        jump I32[R1] ();
85    ck1: jump sjh_info ();
86}
87
88section "data" {
89    Update.unMArray_closure:
90        const Update.unMArray_info;
91}
92
93sjg_ret()
94        { Just sjg_info:
95                   const 0;
96                   const 32;
97        }
98    ckb:
99        R1 = I32[R1 + 3];
100        Sp = Sp + 4;
101        jump (I32[Sp + 0]) ();
102}
103
104Update.unMArray_info()
105        { Just Update.unMArray_info:
106                   const 65541;
107                   const 0;
108                   const 15;
109        }
110    cke:
111        R1 = I32[Sp + 0];
112        I32[Sp + 0] = sjg_info;
113        if (R1 & 3 != 0) goto ckh;
114        jump I32[R1] ();
115    ckh: jump sjg_info ();
116}
117
118section "data" {
119    Update.test1_closure:
120        const GHC.Types.I#_static_info;
121        const 43;
122}
123
124section "data" {
125    Update.test_closure:
126        const Update.test_info;
127}
128
129// the guy that matters
130sjf_ret()
131        { Just sjf_info:
132                   const 0;
133                   const 32;
134        }
135    ckw:
136        Hp = Hp + 8;
137        if (Hp > I32[BaseReg + 92]) goto ckC;  // heap check
138        _ckE::I32 = I32[R1 + 3];
139        _ckO::I32 = BaseReg - 12;
140        // Allocate space for elements
141        (_ckJ::I32, PtrHint) = foreign "ccall"
142          Lallocate$stub((_ckO::I32, PtrHint), (20,));  // XXX: out-of-line allocation
143        // Write StgMutArrPtrs header
144        I32[_ckJ::I32] = I32[Lstg_MUT_ARR_PTRS_DIRTY_info$non_lazy_ptr];
145        I32[_ckJ::I32 + 4] = 16;
146        I32[_ckJ::I32 + 8] = 17;
147        // Copy elements from old array to new array
148        foreign "ccall"
149          MO_Memcpy((_ckJ::I32 + 12, PtrHint), (_ckE::I32 + 12, PtrHint),
150                    (64,), (4,));
151        // Set the card tables to all ones
152        foreign "ccall"
153          MO_Memset((_ckJ::I32 + 76, PtrHint), (1,), (4,), (4,));
154        _sj0::I32 = _ckJ::I32;  // XXX: should have been inlined
155        // Write one element
156        I32[_sj0::I32 + 48] = Update.test1_closure+1;
157        I32[_sj0::I32] = I32[Lstg_MUT_ARR_PTRS_DIRTY_info$non_lazy_ptr];  // XXX: will be overwritten
158        I8[(_sj0::I32 + 12) + (I32[_sj0::I32 + 4] << 2)] = 1 :: W8;  // mark card table
159        I32[_sj0::I32] = I32[Lstg_MUT_ARR_PTRS_FROZEN0_info$non_lazy_ptr];  // for the GC
160        _sj8::I32 = _sj0::I32;  // XXX: should have been inlined
161        // Write Array header
162        I32[Hp - 4] = Update.Array_con_info;
163        I32[Hp + 0] = _sj8::I32;
164        R1 = Hp - 3;
165        Sp = Sp + 4;
166        jump (I32[Sp + 0]) ();
167    ckA: jump (I32[BaseReg - 8]) ();
168    ckC:
169        I32[BaseReg + 116] = 8;
170        goto ckA;
171}
172
173sat_sjc_info()
174        { Just sat_sjc_info:
175                   const 65539;
176                   const 1;
177                   const 10;
178        }
179    clf:
180        if ((Sp + -4) < I32[BaseReg + 84]) goto clh;
181        R1 = I32[R1 + 3];
182        I32[Sp - 4] = sjf_info;
183        Sp = Sp - 4;
184        if (R1 & 3 != 0) goto clk;  // check if evaluated
185        jump I32[R1] ();
186    clh: jump (I32[BaseReg - 4]) ();
187    clk: jump sjf_info ();
188}
189
190Update.test_info()
191        { Just Update.test_info:
192                   const 65541;
193                   const 0;
194                   const 15;
195        }
196    clo:
197        // Allocate closure to pass to runST
198        Hp = Hp + 8;
199        if (Hp > I32[BaseReg + 92]) goto cls;  // heap check
200        I32[Hp - 4] = sat_sjc_info;
201        I32[Hp + 0] = I32[Sp + 0];
202        I32[Sp + 0] = Hp - 3;
203        jump GHC.ST.runSTRep_info ();
204    clq:
205        R1 = Update.test_closure;
206        jump (I32[BaseReg - 4]) ();
207    cls:
208        I32[BaseReg + 116] = 8;
209        goto clq;
210}
211
212section "data" {
213    Update.MArray_closure:
214        const Update.MArray_info;
215}
216
217Update.MArray_info()
218        { Just Update.MArray_info:
219                   const 65541;
220                   const 0;
221                   const 15;
222        }
223    clB:
224        Hp = Hp + 8;
225        if (Hp > I32[BaseReg + 92]) goto clG;
226        I32[Hp - 4] = Update.MArray_con_info;
227        I32[Hp + 0] = I32[Sp + 0];
228        R1 = Hp - 3;
229        Sp = Sp + 4;
230        jump (I32[Sp + 0]) ();
231    clE:
232        R1 = Update.MArray_closure;
233        jump (I32[BaseReg - 4]) ();
234    clG:
235        I32[BaseReg + 116] = 8;
236        goto clE;
237}
238
239section "data" {
240    Update.Array_closure:
241        const Update.Array_info;
242}
243
244Update.Array_info()
245        { Just Update.Array_info:
246                   const 65541;
247                   const 0;
248                   const 15;
249        }
250    clO:
251        Hp = Hp + 8;
252        if (Hp > I32[BaseReg + 92]) goto clT;
253        I32[Hp - 4] = Update.Array_con_info;
254        I32[Hp + 0] = I32[Sp + 0];
255        R1 = Hp - 3;
256        Sp = Sp + 4;
257        jump (I32[Sp + 0]) ();
258    clR:
259        R1 = Update.Array_closure;
260        jump (I32[BaseReg - 4]) ();
261    clT:
262        I32[BaseReg + 116] = 8;
263        goto clR;
264}
265
266section "readonly" {
267    ilW_str:
268        I8[] [109,97,105,110,58,85,112,100,97,116,101,46,77,65,114,114,97,121]
269}
270
271Update.MArray_con_info()
272        { Just Update.MArray_con_info:
273                   const ilW_str-Update.MArray_con_info;
274                   const 1;
275                   const 2;
276        }
277    clZ:
278        R1 = R1 + 1;
279        jump (I32[Sp + 0]) ();
280}
281
282section "readonly" {
283    im1_str:
284        I8[] [109,97,105,110,58,85,112,100,97,116,101,46,77,65,114,114,97,121]
285}
286
287Update.MArray_static_info()
288        { Just Update.MArray_static_info:
289                   const im1_str-Update.MArray_static_info;
290                   const 1;
291                   const 7;
292        }
293    cm4:
294        R1 = R1 + 1;
295        jump (I32[Sp + 0]) ();
296}
297
298section "readonly" {
299    im6_str:
300        I8[] [109,97,105,110,58,85,112,100,97,116,101,46,65,114,114,97,121]
301}
302
303Update.Array_con_info()
304        { Just Update.Array_con_info:
305                   const im6_str-Update.Array_con_info;
306                   const 1;
307                   const 2;
308        }
309    cm9:
310        R1 = R1 + 1;
311        jump (I32[Sp + 0]) ();
312}
313
314section "readonly" {
315    imb_str:
316        I8[] [109,97,105,110,58,85,112,100,97,116,101,46,65,114,114,97,121]
317}
318
319Update.Array_static_info()
320        { Just Update.Array_static_info:
321                   const imb_str-Update.Array_static_info;
322                   const 1;
323                   const 7;
324        }
325    cme:
326        R1 = R1 + 1;
327        jump (I32[Sp + 0]) ();
328}
329