1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include "prescheme.h"
5 #include "scheme48vm.h"
6 #include "scheme48heap.h"
7 
8 struct image_location {
9   long new_descriptor;
10   long next;
11 };
12 struct table {
13   long *keys;
14   struct image_location **values;
15   long count;
16   long size;
17 };
18 static struct image_location *table_ref(struct table*, long);
19 static long copy_weak_pointer(long, char *, char **);
20 static void table_setB(struct table*, long, struct image_location*);
21 static long real_copy_object(long, char *, char **);
22 static char resumer_recordP(long);
23 static long trace_image_value(long);
24 void s48_write_barrier(long, char *, long);
25 void s48_forbid_gcB(void);
26 void s48_allow_gcB(void);
27 char s48_gc_can_allocate_unmovableP(void);
28 char * s48_allocate_traced_unmovableAgc(long);
29 char * s48_allocate_untraced_unmovableAgc(long);
30 char s48_unmovableP(long);
31 long s48_allocate_unmovable_stob(long, long);
32 long s48_heap_size(void);
33 long s48_gc_count(void);
34 long s48_gc_run_time(long*);
35 void s48_initialization_completeB(void);
36 long s48_max_heap_size(void);
37 long s48_startup_procedure(void);
38 long s48_initial_symbols(void);
39 long s48_initial_imported_bindings(void);
40 long s48_initial_exported_bindings(void);
41 long s48_resumer_records(void);
42 void s48_set_image_valuesB(long, long, long, long, long);
43 char * s48_allocate_small(long);
44 char s48_stob_in_heapP(long);
45 long s48_available(void);
46 char s48_extantP(long);
47 long s48_gather_objects(char(*)(long), char(*)(char(*)(long)));
48 static char pD1(long);
49 char s48_check_heap(long);
50 long s48_find_all(long);
51 long s48_trace_value(long);
52 long s48_find_all_records(long);
53 void s48_initializing_gc_root(void);
54 long s48_write_image(long, long, FILE *);
55 void s48_collect(char);
56 void s48_make_availableAgc(long);
57 char * s48_allocate_tracedAgc(long);
58 char * s48_allocate_weakAgc(long);
59 char * s48_allocate_untracedAgc(long);
60 long s48_allocate_stob(long, long);
61 long s48_allocate_weak_stob(long, long);
62 long s48_read_image(char*, long);
63 void s48_trace_locationsB(char *, char *);
64 void s48_trace_stob_contentsB(long);
65 void s48_trace_continuation_contentsB(char *, char *, long);
66 static char * Soldspace_hpS;
67 static char * Soldspace_limitS;
68 static char * Snewspace_beginS;
69 static char * Snewspace_endS;
70 static char * Soldspace_beginS;
71 static char * Soldspace_endS;
72 static char * Snew_heap_start_addrS;
73 static char * *Spure_areasS;
74 static char * *Simpure_areasS;
75 static long *Spure_sizesS;
76 static long *Simpure_sizesS;
77 static long Spure_area_countS;
78 static long Simpure_area_countS;
79 static char (*Scollect_predicateS)(long);
80 static long Sfinding_typeS;
81 static long Sheap_errors_leftS;
82 static long Sgc_countS;
83 static long Sgc_secondsS;
84 static long Sgc_msecondsS;
85 static char * Sfrom_beginS;
86 static char * Sfrom_endS;
87 static char * Sweak_pointer_hpS;
88 static char * Sweak_pointer_limitS;
89 static long SstatusS;
90 static char SeofPS;
91 static long Sstartup_procedureS;
92 static long SsymbolsS;
93 static long Simported_bindingsS;
94 static long Sexported_bindingsS;
95 static long Sresumer_recordsS;
96 static char * Simg_start_addrS;
97 static char * Simg_end_addrS;
98 static long Simg_heap_sizeS;
99 static char * Ssmall_img_start_addrS;
100 static char * Ssmall_img_hp_addrS;
101 static char * Ssmall_img_end_addrS;
102 static long Ssmall_img_heap_sizeS;
103 static char * Slarge_img_start_addrS;
104 static char * Slarge_img_hp_addrS;
105 static char * Slarge_img_end_addrS;
106 static long Slarge_img_heap_sizeS;
107 static char * Sweaks_img_start_addrS;
108 static char * Sweaks_img_hp_addrS;
109 static char * Sweaks_img_end_addrS;
110 static long Sweaks_img_heap_sizeS;
111 static char * Sheap_image_pointerS;
112 static char * Ssymbol_addressS;
113 static long Sheap_object_remaining_cellsS;
114 static char * Sheap_object_pointerS;
115 static struct table *Sstob_tableS;
116 static long SoffsetS;
117 static char * Sarea_startS;
118 static char SinitializingPS;
119 static long SstatusS;
120 static FILE * Simage_portS;
121 static char * Simage_bufferS;
122 static char * Simage_buffer_pointerS;
123 static long image_start_address;
124 static char * Simage_beginS;
125 static char * Simage_hpS;
126 static struct table *Sstob_tableS;
127 static long Sfirst_stobS;
128 static struct image_location *Slast_stobS;
129 static long Sresumer_countS;
130 static long Sresumer_recordsS;
131 static long Sundumpable_recordsS;
132 static long Sundumpable_countS;
133 static long Hthe_record_type270;
134 char * s48_ShpS;
135 char * s48_SlimitS;
136 
table_ref(struct table * table_1X,long key_2X)137 static struct image_location *table_ref(struct table *table_1X, long key_2X)
138 {
139   long arg0K0;
140   long next_6X;
141   long i_5X;
142   long *keys_4X;
143   long size_3X;
144  {  if ((0 < (table_1X->size))) {
145     size_3X = table_1X->size;
146     keys_4X = table_1X->keys;
147     arg0K0 = ((key_2X ^ ((PS_SHIFT_LEFT_INLINE(key_2X, 1)) ^ (PS_SHIFT_RIGHT_INLINE(key_2X, 10)))) & (-1 + size_3X));
148     goto L3037;}
149   else {
150     return (NULL);}}
151  L3037: {
152   i_5X = arg0K0;
153   next_6X = *(keys_4X + i_5X);
154   if ((key_2X == next_6X)) {
155     return (*((table_1X->values) + i_5X));}
156   else {
157     if ((0 == next_6X)) {
158       if ((i_5X == (table_1X->size))) {
159         arg0K0 = 0;
160         goto L3037;}
161       else {
162         return (NULL);}}
163     else {
164       arg0K0 = (1 + i_5X);
165       goto L3037;}}}
166 }
copy_weak_pointer(long weak_7X,char * frontier_8X,char ** TT0)167 static long copy_weak_pointer(long weak_7X, char * frontier_8X, char * *TT0)
168 {
169   char * arg1K0;
170   long new_13X;
171   char * frontier_12X;
172   char * new_frontier_11X;
173   char * old_10X;
174   char * x_9X;
175  {  x_9X = Sweak_pointer_hpS;
176   if ((x_9X == NULL)) {
177     goto L6768;}
178   else {
179     if (((Sweak_pointer_hpS) < (Sweak_pointer_limitS))) {
180       arg1K0 = frontier_8X;
181       goto L6773;}
182     else {
183       goto L6768;}}}
184  L6768: {
185   old_10X = Sweak_pointer_hpS;
186   new_frontier_11X = frontier_8X + 2048;
187   Sweak_pointer_hpS = frontier_8X;
188   Sweak_pointer_limitS = new_frontier_11X;
189   *((long *) (Sweak_pointer_hpS)) = (long) (522310);
190   *((long *) ((Sweak_pointer_hpS) + 16)) = (long) ((((long) old_10X)));
191   arg1K0 = new_frontier_11X;
192   goto L6773;}
193  L6773: {
194   frontier_12X = arg1K0;
195   new_13X = 3 + (((long) ((Sweak_pointer_hpS) + 8)));
196   *((long *) ((Sweak_pointer_hpS) + 8)) = (long) ((*((long *) (((char *) (-3 + weak_7X))))));
197   Sweak_pointer_hpS = ((Sweak_pointer_hpS) + 16);
198   *((long *) (((char *) (-11 + weak_7X)))) = (long) (new_13X);
199   *TT0 = frontier_12X;
200   return new_13X;}
201 }
table_setB(struct table * table_14X,long key_15X,struct image_location * value_16X)202 static void table_setB(struct table *table_14X, long key_15X, struct image_location *value_16X)
203 {
204   long arg0K0;
205   long i_32X;
206   struct image_location *value_31X;
207   long key_30X;
208   long i_29X;
209   long i_28X;
210   struct image_location **new_values_27X;
211   long *new_keys_26X;
212   long new_size_25X;
213   struct image_location **old_values_24X;
214   long v_23X;
215   long old_size_22X;
216   long *old_keys_21X;
217   long next_20X;
218   long i_19X;
219   long *keys_18X;
220   long size_17X;
221  {  if ((0 < (table_14X->size))) {
222     size_17X = table_14X->size;
223     keys_18X = table_14X->keys;
224     arg0K0 = ((key_15X ^ ((PS_SHIFT_LEFT_INLINE(key_15X, 1)) ^ (PS_SHIFT_RIGHT_INLINE(key_15X, 10)))) & (-1 + size_17X));
225     goto L7276;}
226   else {
227     return;}}
228  L7276: {
229   i_19X = arg0K0;
230   next_20X = *(keys_18X + i_19X);
231   if ((key_15X == next_20X)) {
232     *((table_14X->values) + i_19X) = value_16X;
233     return;}
234   else {
235     if ((0 == next_20X)) {
236       if ((i_19X == (table_14X->size))) {
237         arg0K0 = 0;
238         goto L7276;}
239       else {
240         *((table_14X->keys) + i_19X) = key_15X;
241         *((table_14X->values) + i_19X) = value_16X;
242         table_14X->count = (1 + (table_14X->count));
243         if (((table_14X->count) == ((table_14X->size) / 3))) {
244           old_keys_21X = table_14X->keys;
245           old_size_22X = table_14X->size;
246           v_23X = table_14X->size;
247           old_values_24X = table_14X->values;
248           new_size_25X = PS_SHIFT_LEFT_INLINE(v_23X, 1);
249           new_keys_26X = (long*)malloc(sizeof(long) * (1 + new_size_25X));
250           new_values_27X = (struct image_location**)malloc(sizeof(struct image_location*) * new_size_25X);
251           if ((NULL == new_keys_26X)) {
252             goto L4457;}
253           else {
254             if ((NULL == new_values_27X)) {
255               goto L4457;}
256             else {
257               table_14X->keys = new_keys_26X;
258               table_14X->values = new_values_27X;
259               table_14X->size = new_size_25X;
260               table_14X->count = 0;
261               arg0K0 = 0;
262               goto L4610;}}}
263         else {
264           return;}}}
265     else {
266       arg0K0 = (1 + i_19X);
267       goto L7276;}}}
268  L4457: {
269   if ((NULL == new_keys_26X)) {
270     goto L4465;}
271   else {
272     free(new_keys_26X);
273     goto L4465;}}
274  L4610: {
275   i_28X = arg0K0;
276   if ((i_28X < (1 + new_size_25X))) {
277     *(new_keys_26X + i_28X) = 0;
278     arg0K0 = (1 + i_28X);
279     goto L4610;}
280   else {
281     arg0K0 = 0;
282     goto L4488;}}
283  L4465: {
284   if ((NULL == new_values_27X)) {
285     goto L4473;}
286   else {
287     free(new_values_27X);
288     goto L4473;}}
289  L4488: {
290   i_29X = arg0K0;
291   if ((i_29X == old_size_22X)) {
292     free(old_keys_21X);
293     free(old_values_24X);
294     return;}
295   else {
296     key_30X = *(old_keys_21X + i_29X);
297     if ((0 == key_30X)) {
298       goto L4504;}
299     else {
300       value_31X = *(old_values_24X + i_29X);
301       arg0K0 = ((key_30X ^ ((PS_SHIFT_LEFT_INLINE(key_30X, 1)) ^ (PS_SHIFT_RIGHT_INLINE(key_30X, 10)))) & (-1 + new_size_25X));
302       goto L4632;}}}
303  L4473: {
304   table_14X->size = 0;
305   return;}
306  L4504: {
307   arg0K0 = (1 + i_29X);
308   goto L4488;}
309  L4632: {
310   i_32X = arg0K0;
311   if ((0 == (*(new_keys_26X + i_32X)))) {
312     if ((i_32X == new_size_25X)) {
313       arg0K0 = 0;
314       goto L4632;}
315     else {
316       *(new_keys_26X + i_32X) = key_30X;
317       *(new_values_27X + i_32X) = value_31X;
318       goto L4504;}}
319   else {
320     arg0K0 = (1 + i_32X);
321     goto L4632;}}
322 }
real_copy_object(long thing_33X,char * frontier_34X,char ** TT0)323 static long real_copy_object(long thing_33X, char * frontier_34X, char * *TT0)
324 {
325   long new_39X;
326   char * data_addr_38X;
327   char * a_37X;
328   long descriptor_36X;
329   long h_35X;
330  {  h_35X = *((long *) (((char *) (-11 + thing_33X))));
331   if ((3 == (3 & h_35X))) {
332     *TT0 = frontier_34X;
333     return h_35X;}
334   else {
335     if ((2102 == h_35X)) {
336       descriptor_36X = *((long *) (((char *) (-3 + thing_33X))));
337       if ((3 == (3 & descriptor_36X))) {
338         a_37X = ((char *) (-3 + descriptor_36X));
339         if ((a_37X < (Sfrom_beginS))) {
340           goto L10678;}
341         else {
342           if ((a_37X < (Sfrom_endS))) {
343             return copy_weak_pointer(thing_33X, frontier_34X, TT0);}
344           else {
345             goto L10678;}}}
346       else {
347         goto L10678;}}
348     else {
349       goto L10678;}}}
350  L10678: {
351   *((long *) frontier_34X) = (long) (h_35X);
352   data_addr_38X = frontier_34X + 8;
353   new_39X = 3 + (((long) data_addr_38X));
354   *((long *) (((char *) (-11 + thing_33X)))) = (long) (new_39X);
355   memmove((void *)data_addr_38X, (void *)(((char *) (-3 + thing_33X))),(PS_SHIFT_RIGHT_LOGICAL_INLINE(h_35X, 8)));
356   *TT0 = (data_addr_38X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(h_35X, 8)))));
357   return new_39X;}
358 }
resumer_recordP(long stob_40X)359 static char resumer_recordP(long stob_40X)
360 {
361   long type_41X;
362  {  if ((3 == (3 & stob_40X))) {
363     if ((9 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + stob_40X))))), 2))))) {
364       type_41X = *((long *) (((char *) (-3 + stob_40X))));
365       if ((3 == (3 & type_41X))) {
366         if ((9 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + type_41X))))), 2))))) {
367           return (3 == (3 & (*((long *) ((((char *) (-3 + type_41X))) + 8)))));}
368         else {
369           return 0;}}
370       else {
371         return 0;}}
372     else {
373       return 0;}}
374   else {
375     return 0;}}
376 }
trace_image_value(long thing_42X)377 static long trace_image_value(long thing_42X)
378 {
379   struct image_location *arg2K0;
380   struct image_location *arg2K1;
381   long arg0K0;
382   long merged_arg0K0;
383 
384 #ifdef USE_DIRECT_THREADING
385   void *gc_recordP_return_address;
386 #else
387   int gc_recordP_return_tag;
388 #endif
389   char gc_recordP0_return_value;
390   long x_43X;
391   long header_63X;
392   char v_62X;
393   long x_61X;
394   struct image_location *new_60X;
395   long new_descriptor_59X;
396   struct image_location *new_58X;
397   struct image_location *image_location_57X;
398   long new_descriptor_56X;
399   char * data_addr_55X;
400   long h_54X;
401   long stob_53X;
402   struct image_location *image_location_52X;
403   long new_alias_51X;
404   long i_50X;
405   long len_49X;
406   long vector_48X;
407   char v_47X;
408   long type_46X;
409   char v_45X;
410   struct image_location *have_44X;
411  {  if ((3 == (3 & thing_42X))) {
412     have_44X = table_ref((Sstob_tableS), thing_42X);
413     if ((NULL == have_44X)) {
414       merged_arg0K0 = thing_42X;
415 #ifdef USE_DIRECT_THREADING
416       gc_recordP_return_address = &&gc_recordP_return_0;
417 #else
418       gc_recordP_return_tag = 0;
419 #endif
420       goto gc_recordP;
421      gc_recordP_return_0:
422       v_45X = gc_recordP0_return_value;
423       if (v_45X) {
424         type_46X = *((long *) (((char *) (-3 + thing_42X))));
425         merged_arg0K0 = type_46X;
426 #ifdef USE_DIRECT_THREADING
427         gc_recordP_return_address = &&gc_recordP_return_1;
428 #else
429         gc_recordP_return_tag = 1;
430 #endif
431         goto gc_recordP;
432        gc_recordP_return_1:
433         v_47X = gc_recordP0_return_value;
434         if (v_47X) {
435           if ((1 == (*((long *) ((((char *) (-3 + type_46X))) + 8))))) {
436             if (((Sundumpable_countS) < (PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE((*((long *) (((char *) (-11 + (Sundumpable_recordsS)))))), 8))), 3)))) {
437               vector_48X = Sundumpable_recordsS;
438               len_49X = PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE((*((long *) (((char *) (-11 + vector_48X))))), 8))), 3);
439               arg0K0 = 0;
440               goto L12669;}
441             else {
442               goto L14432;}}
443           else {
444             arg0K0 = thing_42X;
445             goto L13162;}}
446         else {
447           arg0K0 = thing_42X;
448           goto L13162;}}
449       else {
450         arg0K0 = thing_42X;
451         goto L13162;}}
452     else {
453       return (have_44X->new_descriptor);}}
454   else {
455     return thing_42X;}}
456  L12669: {
457   i_50X = arg0K0;
458   if ((i_50X == len_49X)) {
459     *((long *) ((((char *) (-3 + (Sundumpable_recordsS)))) + (PS_SHIFT_LEFT_INLINE((Sundumpable_countS), 3)))) = (long) (thing_42X);
460     Sundumpable_countS = (1 + (Sundumpable_countS));
461     goto L14432;}
462   else {
463     if (((*((long *) ((((char *) (-3 + vector_48X))) + (PS_SHIFT_LEFT_INLINE(i_50X, 3))))) == thing_42X)) {
464       goto L14432;}
465     else {
466       arg0K0 = (1 + i_50X);
467       goto L12669;}}}
468  L14432: {
469   new_alias_51X = trace_image_value((*((long *) ((((char *) (-3 + thing_42X))) + 8))));
470   image_location_52X = (struct image_location*)malloc(sizeof(struct image_location));
471   if ((NULL == image_location_52X)) {
472     arg2K0 = image_location_52X;
473     goto L14436;}
474   else {
475     image_location_52X->new_descriptor = new_alias_51X;
476     image_location_52X->next = 0;
477     arg2K0 = image_location_52X;
478     goto L14436;}}
479  L13162: {
480   stob_53X = arg0K0;
481   h_54X = *((long *) (((char *) (-11 + stob_53X))));
482   data_addr_55X = (Simage_hpS) + 8;
483   Simage_hpS = (data_addr_55X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(h_54X, 8)))));
484   new_descriptor_56X = 3 + (((long) data_addr_55X));
485   image_location_57X = (struct image_location*)malloc(sizeof(struct image_location));
486   if ((NULL == image_location_57X)) {
487     arg0K0 = new_descriptor_56X;
488     arg2K1 = image_location_57X;
489     goto L13166;}
490   else {
491     image_location_57X->new_descriptor = new_descriptor_56X;
492     image_location_57X->next = 0;
493     arg0K0 = new_descriptor_56X;
494     arg2K1 = image_location_57X;
495     goto L13166;}}
496  L14436: {
497   new_58X = arg2K0;
498   if ((NULL == new_58X)) {
499     (Sstob_tableS)->size = 0;
500     return new_alias_51X;}
501   else {table_setB((Sstob_tableS), thing_42X, new_58X);
502     return new_alias_51X;}}
503  L13166: {
504   new_descriptor_59X = arg0K0;
505   new_60X = arg2K1;
506   if ((NULL == new_60X)) {
507     (Sstob_tableS)->size = 0;
508     return new_descriptor_59X;}
509   else {
510     x_61X = Sfirst_stobS;
511     if ((1 == x_61X)) {
512       Sfirst_stobS = stob_53X;
513       goto L13187;}
514     else {
515       (Slast_stobS)->next = stob_53X;
516       goto L13187;}}}
517  L13187: {
518   Slast_stobS = new_60X;
519   new_60X->next = 1;table_setB((Sstob_tableS), stob_53X, new_60X);
520   v_62X = resumer_recordP(stob_53X);
521   if (v_62X) {
522     Sresumer_countS = (1 + (Sresumer_countS));
523     return new_descriptor_59X;}
524   else {
525     return new_descriptor_59X;}}
526  gc_recordP: {
527   x_43X = merged_arg0K0;{
528   if ((3 == (3 & x_43X))) {
529     header_63X = *((long *) (((char *) (-11 + x_43X))));
530     if ((3 == (3 & header_63X))) {
531       if ((3 == (3 & header_63X))) {
532         gc_recordP0_return_value = (9 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + header_63X))))), 2))));
533 #ifdef USE_DIRECT_THREADING
534         goto *gc_recordP_return_address;
535 #else
536         goto gc_recordP_return;
537 #endif
538 }
539       else {
540         gc_recordP0_return_value = 0;
541 #ifdef USE_DIRECT_THREADING
542         goto *gc_recordP_return_address;
543 #else
544         goto gc_recordP_return;
545 #endif
546 }}
547     else {
548       if ((3 == (3 & x_43X))) {
549         gc_recordP0_return_value = (9 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + x_43X))))), 2))));
550 #ifdef USE_DIRECT_THREADING
551         goto *gc_recordP_return_address;
552 #else
553         goto gc_recordP_return;
554 #endif
555 }
556       else {
557         gc_recordP0_return_value = 0;
558 #ifdef USE_DIRECT_THREADING
559         goto *gc_recordP_return_address;
560 #else
561         goto gc_recordP_return;
562 #endif
563 }}}
564   else {
565     gc_recordP0_return_value = 0;
566 #ifdef USE_DIRECT_THREADING
567     goto *gc_recordP_return_address;
568 #else
569     goto gc_recordP_return;
570 #endif
571 }}
572 #ifndef USE_DIRECT_THREADING
573  gc_recordP_return:
574   switch (gc_recordP_return_tag) {
575   case 0: goto gc_recordP_return_0;
576   default: goto gc_recordP_return_1;
577   }
578 #endif
579 }
580 
581 }
s48_write_barrier(long stob_64X,char * address_65X,long value_66X)582 void s48_write_barrier(long stob_64X, char * address_65X, long value_66X)
583 {
584 
585  {  return;}
586 }
s48_forbid_gcB(void)587 void s48_forbid_gcB(void)
588 {
589 
590  {  return;}
591 }
s48_allow_gcB(void)592 void s48_allow_gcB(void)
593 {
594 
595  {  return;}
596 }
s48_gc_can_allocate_unmovableP(void)597 char s48_gc_can_allocate_unmovableP(void)
598 {
599 
600  {  return 0;}
601 }
s48_allocate_traced_unmovableAgc(long len_67X)602 char * s48_allocate_traced_unmovableAgc(long len_67X)
603 {
604 
605  {  ps_error("twospace gc does not support unmovable objects", 0);
606   return NULL;}
607 }
s48_allocate_untraced_unmovableAgc(long len_68X)608 char * s48_allocate_untraced_unmovableAgc(long len_68X)
609 {
610 
611  {  ps_error("twospace gc does not support unmovable objects", 0);
612   return NULL;}
613 }
s48_unmovableP(long stob_69X)614 char s48_unmovableP(long stob_69X)
615 {
616 
617  {  return 0;}
618 }
s48_allocate_unmovable_stob(long type_70X,long size_71X)619 long s48_allocate_unmovable_stob(long type_70X, long size_71X)
620 {
621 
622  {  ps_error("twospace gc does not support unmovable objects", 0);
623   return 0;}
624 }
s48_heap_size(void)625 long s48_heap_size(void)
626 {
627 
628  {  return ((Snewspace_endS) - (Snewspace_beginS));}
629 }
s48_gc_count(void)630 long s48_gc_count(void)
631 {
632 
633  {  return (Sgc_countS);}
634 }
s48_gc_run_time(long * TT0)635 long s48_gc_run_time(long *TT0)
636 {
637 
638  {  *TT0 = (Sgc_msecondsS);
639   return (Sgc_secondsS);}
640 }
s48_initialization_completeB(void)641 void s48_initialization_completeB(void)
642 {
643 
644  {  SinitializingPS = 0;
645   return;}
646 }
s48_max_heap_size(void)647 long s48_max_heap_size(void)
648 {
649 
650  {  return (PS_SHIFT_RIGHT_INLINE((7 + ((Snewspace_endS) - (Snewspace_beginS))), 3));}
651 }
s48_startup_procedure(void)652 long s48_startup_procedure(void)
653 {
654 
655  {  return (Sstartup_procedureS);}
656 }
s48_initial_symbols(void)657 long s48_initial_symbols(void)
658 {
659 
660  {  return (SsymbolsS);}
661 }
s48_initial_imported_bindings(void)662 long s48_initial_imported_bindings(void)
663 {
664 
665  {  return (Simported_bindingsS);}
666 }
s48_initial_exported_bindings(void)667 long s48_initial_exported_bindings(void)
668 {
669 
670  {  return (Sexported_bindingsS);}
671 }
s48_resumer_records(void)672 long s48_resumer_records(void)
673 {
674 
675  {  return (Sresumer_recordsS);}
676 }
s48_set_image_valuesB(long startup_proc_72X,long symbols_73X,long imports_74X,long exports_75X,long records_76X)677 void s48_set_image_valuesB(long startup_proc_72X, long symbols_73X, long imports_74X, long exports_75X, long records_76X)
678 {
679 
680  {  Sstartup_procedureS = startup_proc_72X;
681   SsymbolsS = symbols_73X;
682   Simported_bindingsS = imports_74X;
683   Sexported_bindingsS = exports_75X;
684   Sresumer_recordsS = records_76X;
685   return;}
686 }
s48_allocate_small(long len_77X)687 char * s48_allocate_small(long len_77X)
688 {
689   char * new_78X;
690  {  new_78X = s48_ShpS;
691   s48_ShpS = ((s48_ShpS) + (-8 & (7 + len_77X)));
692   return new_78X;}
693 }
s48_stob_in_heapP(long stob_79X)694 char s48_stob_in_heapP(long stob_79X)
695 {
696   char temp_81X;
697   char * addr_80X;
698  {  addr_80X = ((char *) (-11 + stob_79X));
699   temp_81X = addr_80X < (Snewspace_beginS);
700   if (temp_81X) {
701     goto L3918;}
702   else {
703     if ((addr_80X < (s48_ShpS))) {
704       if ((2 == (3 & (*((long *) addr_80X))))) {
705         return 1;}
706       else {
707         ps_write_string("Heap-check: stob has no header.", (stderr));
708         { long ignoreXX;
709         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
710         Sheap_errors_leftS = (-1 + (Sheap_errors_leftS));
711         return ((Sheap_errors_leftS) < 1);}}
712     else {
713       goto L3918;}}}
714  L3918: {
715   ps_write_string("Heap-check: address out of bounds.", (stderr));
716   { long ignoreXX;
717   PS_WRITE_CHAR(10, (stderr), ignoreXX) }
718   Sheap_errors_leftS = (-1 + (Sheap_errors_leftS));
719   return ((Sheap_errors_leftS) < 1);}
720 }
s48_available(void)721 long s48_available(void)
722 {
723 
724  {  return (PS_SHIFT_RIGHT_INLINE(((s48_SlimitS) - (s48_ShpS)), 3));}
725 }
s48_extantP(long thing_82X)726 char s48_extantP(long thing_82X)
727 {
728   char * a_83X;
729  {  if ((3 == (3 & thing_82X))) {
730     if ((3 == (3 & thing_82X))) {
731       a_83X = ((char *) (-3 + thing_82X));
732       if ((a_83X < (Sfrom_beginS))) {
733         return 1;}
734       else {
735         if ((a_83X < (Sfrom_endS))) {
736           return (3 == (3 & (*((long *) (((char *) (-11 + thing_82X)))))));}
737         else {
738           return 1;}}}
739     else {
740       return 1;}}
741   else {
742     return 1;}}
743 }
s48_gather_objects(char (* predicate_84X)(long),char (* for_each_object_85X)(char (*)(long)))744 long s48_gather_objects(char (*predicate_84X)(long), char (*for_each_object_85X)(char(*)(long)))
745 {
746   char v_87X;
747   char * start_hp_86X;
748  {  Scollect_predicateS = predicate_84X;
749   start_hp_86X = s48_ShpS;
750   *((long *) (s48_ShpS)) = (long) (0);
751   s48_ShpS = ((s48_ShpS) + 8);
752   v_87X = (*for_each_object_85X)(pD1);
753   if (v_87X) {
754     *((long *) start_hp_86X) = (long) ((10 + (PS_SHIFT_LEFT_INLINE(((s48_ShpS) - (start_hp_86X + 8)), 8))));
755     return (3 + (((long) (start_hp_86X + 8))));}
756   else {
757     s48_ShpS = start_hp_86X;
758     return 1;}}
759 }
pD1(long obj_88X)760 static char pD1(long obj_88X)
761 {
762   char x_89X;
763  {  x_89X = (*(Scollect_predicateS))(obj_88X);
764   if (x_89X) {
765     if ((((s48_ShpS) + 64) < (s48_SlimitS))) {
766       *((long *) (s48_ShpS)) = (long) (obj_88X);
767       s48_ShpS = ((s48_ShpS) + 8);
768       return 1;}
769     else {
770       return 0;}}
771   else {
772     return 1;}}
773 }
s48_check_heap(long error_count_90X)774 char s48_check_heap(long error_count_90X)
775 {
776   char * arg1K0;
777   long arg0K0;
778   char * merged_arg1K1;
779   char * merged_arg1K0;
780 
781 #ifdef USE_DIRECT_THREADING
782   void *check_area_return_address;
783 #else
784   int check_area_return_tag;
785 #endif
786   char check_area0_return_value;
787   char * start_91X;
788   char * end_92X;
789   char v_109X;
790   long x_108X;
791   char * addr_107X;
792   char * next_106X;
793   long d_105X;
794   char * addr_104X;
795   char v_103X;
796   long i_102X;
797   long count_101X;
798   long *sizes_100X;
799   char * *areas_99X;
800   char v_98X;
801   long i_97X;
802   long count_96X;
803   long *sizes_95X;
804   char * *areas_94X;
805   char v_93X;
806  {  Sheap_errors_leftS = error_count_90X;
807   merged_arg1K0 = (Snewspace_beginS);
808   merged_arg1K1 = (s48_ShpS);
809 #ifdef USE_DIRECT_THREADING
810   check_area_return_address = &&check_area_return_0;
811 #else
812   check_area_return_tag = 0;
813 #endif
814   goto check_area;
815  check_area_return_0:
816   v_93X = check_area0_return_value;
817   if (v_93X) {
818     if ((0 < (Simpure_area_countS))) {
819       areas_94X = Simpure_areasS;
820       sizes_95X = Simpure_sizesS;
821       count_96X = Simpure_area_countS;
822       arg0K0 = 0;
823       goto L11599;}
824     else {
825       goto L11583;}}
826   else {
827     return 0;}}
828  L11599: {
829   i_97X = arg0K0;
830   if ((i_97X < count_96X)) {
831     merged_arg1K0 = (*(areas_94X + i_97X));
832     merged_arg1K1 = ((*(areas_94X + i_97X)) + (*(sizes_95X + i_97X)));
833 #ifdef USE_DIRECT_THREADING
834     check_area_return_address = &&check_area_return_1;
835 #else
836     check_area_return_tag = 1;
837 #endif
838     goto check_area;
839    check_area_return_1:
840     v_98X = check_area0_return_value;
841     if (v_98X) {
842       arg0K0 = (1 + i_97X);
843       goto L11599;}
844     else {
845       return 0;}}
846   else {
847     goto L11583;}}
848  L11583: {
849   if ((0 < (Spure_area_countS))) {
850     areas_99X = Spure_areasS;
851     sizes_100X = Spure_sizesS;
852     count_101X = Spure_area_countS;
853     arg0K0 = 0;
854     goto L11620;}
855   else {
856     return 1;}}
857  L11620: {
858   i_102X = arg0K0;
859   if ((i_102X < count_101X)) {
860     merged_arg1K0 = (*(areas_99X + i_102X));
861     merged_arg1K1 = ((*(areas_99X + i_102X)) + (*(sizes_100X + i_102X)));
862 #ifdef USE_DIRECT_THREADING
863     check_area_return_address = &&check_area_return_2;
864 #else
865     check_area_return_tag = 2;
866 #endif
867     goto check_area;
868    check_area_return_2:
869     v_103X = check_area0_return_value;
870     if (v_103X) {
871       arg0K0 = (1 + i_102X);
872       goto L11620;}
873     else {
874       return 0;}}
875   else {
876     return 1;}}
877  check_area: {
878   start_91X = merged_arg1K0;
879   end_92X = merged_arg1K1;{
880   arg1K0 = start_91X;
881   goto L10511;}
882  L10511: {
883   addr_104X = arg1K0;
884   if ((addr_104X < end_92X)) {
885     d_105X = *((long *) addr_104X);
886     next_106X = addr_104X + (8 + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(d_105X, 8)))));
887     if ((2 == (3 & d_105X))) {
888       if ((end_92X < next_106X)) {
889         ps_write_string("Heap-check: header too large.", (stderr));
890         { long ignoreXX;
891         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
892         Sheap_errors_leftS = (-1 + (Sheap_errors_leftS));
893         check_area0_return_value = ((Sheap_errors_leftS) < 1);
894 #ifdef USE_DIRECT_THREADING
895         goto *check_area_return_address;
896 #else
897         goto check_area_return;
898 #endif
899 }
900       else {
901         if ((2 == (3 & d_105X))) {
902           if (((31 & (PS_SHIFT_RIGHT_INLINE(d_105X, 2))) < 16)) {
903             goto L10537;}
904           else {
905             arg1K0 = next_106X;
906             goto L10511;}}
907         else {
908           goto L10537;}}}
909     else {
910       ps_write_string("Heap-check: unexpected non-header.", (stderr));
911       { long ignoreXX;
912       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
913       Sheap_errors_leftS = (-1 + (Sheap_errors_leftS));
914       check_area0_return_value = ((Sheap_errors_leftS) < 1);
915 #ifdef USE_DIRECT_THREADING
916       goto *check_area_return_address;
917 #else
918       goto check_area_return;
919 #endif
920 }}
921   else {
922     check_area0_return_value = 1;
923 #ifdef USE_DIRECT_THREADING
924     goto *check_area_return_address;
925 #else
926     goto check_area_return;
927 #endif
928 }}
929  L10537: {
930   arg1K0 = (addr_104X + 8);
931   goto L9271;}
932  L9271: {
933   addr_107X = arg1K0;
934   if ((addr_107X == next_106X)) {
935     arg1K0 = next_106X;
936     goto L10511;}
937   else {
938     x_108X = *((long *) addr_107X);
939     if ((2 == (3 & x_108X))) {
940       ps_write_string("Heap-check: unexpected header.", (stderr));
941       { long ignoreXX;
942       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
943       Sheap_errors_leftS = (-1 + (Sheap_errors_leftS));
944       if (((Sheap_errors_leftS) < 1)) {
945         arg1K0 = next_106X;
946         goto L10511;}
947       else {
948         check_area0_return_value = 0;
949 #ifdef USE_DIRECT_THREADING
950         goto *check_area_return_address;
951 #else
952         goto check_area_return;
953 #endif
954 }}
955     else {
956       if ((3 == (3 & x_108X))) {
957         v_109X = s48_stob_in_heapP(x_108X);
958         if (v_109X) {
959           goto L9296;}
960         else {
961           check_area0_return_value = 0;
962 #ifdef USE_DIRECT_THREADING
963           goto *check_area_return_address;
964 #else
965           goto check_area_return;
966 #endif
967 }}
968       else {
969         goto L9296;}}}}
970  L9296: {
971   arg1K0 = (addr_107X + 8);
972   goto L9271;}
973 #ifndef USE_DIRECT_THREADING
974  check_area_return:
975   switch (check_area_return_tag) {
976   case 0: goto check_area_return_0;
977   case 1: goto check_area_return_1;
978   default: goto check_area_return_2;
979   }
980 #endif
981 }
982 
983 }
s48_find_all(long type_110X)984 long s48_find_all(long type_110X)
985 {
986   char * arg1K0;
987   long arg0K0;
988   char * merged_arg1K1;
989   char * merged_arg1K0;
990 
991 #ifdef USE_DIRECT_THREADING
992   void *Hproc24111_return_address;
993 #else
994   int Hproc24111_return_tag;
995 #endif
996   char Hproc241110_return_value;
997   char * start_112X;
998   char * end_113X;
999   char * next_130X;
1000   long d_129X;
1001   char * addr_128X;
1002   long type_127X;
1003   char v_126X;
1004   long i_125X;
1005   long count_124X;
1006   long *sizes_123X;
1007   char * *areas_122X;
1008   char v_121X;
1009   long i_120X;
1010   long count_119X;
1011   long *sizes_118X;
1012   char * *areas_117X;
1013   char v_116X;
1014   char * start_hp_115X;
1015   char * start_hp_114X;
1016  {  Sfinding_typeS = type_110X;
1017   start_hp_114X = s48_ShpS;
1018   start_hp_115X = s48_ShpS;
1019   *((long *) (s48_ShpS)) = (long) (0);
1020   s48_ShpS = ((s48_ShpS) + 8);
1021   merged_arg1K0 = (Snewspace_beginS);
1022   merged_arg1K1 = start_hp_114X;
1023 #ifdef USE_DIRECT_THREADING
1024   Hproc24111_return_address = &&Hproc24111_return_0;
1025 #else
1026   Hproc24111_return_tag = 0;
1027 #endif
1028   goto Hproc24111;
1029  Hproc24111_return_0:
1030   v_116X = Hproc241110_return_value;
1031   if (v_116X) {
1032     if ((0 < (Simpure_area_countS))) {
1033       areas_117X = Simpure_areasS;
1034       sizes_118X = Simpure_sizesS;
1035       count_119X = Simpure_area_countS;
1036       arg0K0 = 0;
1037       goto L11734;}
1038     else {
1039       goto L11703;}}
1040   else {
1041     goto L11716;}}
1042  L11734: {
1043   i_120X = arg0K0;
1044   if ((i_120X < count_119X)) {
1045     merged_arg1K0 = (*(areas_117X + i_120X));
1046     merged_arg1K1 = ((*(areas_117X + i_120X)) + (*(sizes_118X + i_120X)));
1047 #ifdef USE_DIRECT_THREADING
1048     Hproc24111_return_address = &&Hproc24111_return_1;
1049 #else
1050     Hproc24111_return_tag = 1;
1051 #endif
1052     goto Hproc24111;
1053    Hproc24111_return_1:
1054     v_121X = Hproc241110_return_value;
1055     if (v_121X) {
1056       arg0K0 = (1 + i_120X);
1057       goto L11734;}
1058     else {
1059       goto L11716;}}
1060   else {
1061     goto L11703;}}
1062  L11703: {
1063   if ((0 < (Spure_area_countS))) {
1064     areas_122X = Spure_areasS;
1065     sizes_123X = Spure_sizesS;
1066     count_124X = Spure_area_countS;
1067     arg0K0 = 0;
1068     goto L11755;}
1069   else {
1070     goto L11718;}}
1071  L11716: {
1072   s48_ShpS = start_hp_115X;
1073   return 1;}
1074  L11755: {
1075   i_125X = arg0K0;
1076   if ((i_125X < count_124X)) {
1077     merged_arg1K0 = (*(areas_122X + i_125X));
1078     merged_arg1K1 = ((*(areas_122X + i_125X)) + (*(sizes_123X + i_125X)));
1079 #ifdef USE_DIRECT_THREADING
1080     Hproc24111_return_address = &&Hproc24111_return_2;
1081 #else
1082     Hproc24111_return_tag = 2;
1083 #endif
1084     goto Hproc24111;
1085    Hproc24111_return_2:
1086     v_126X = Hproc241110_return_value;
1087     if (v_126X) {
1088       arg0K0 = (1 + i_125X);
1089       goto L11755;}
1090     else {
1091       goto L11716;}}
1092   else {
1093     goto L11718;}}
1094  L11718: {
1095   *((long *) start_hp_115X) = (long) ((10 + (PS_SHIFT_LEFT_INLINE(((s48_ShpS) - (start_hp_115X + 8)), 8))));
1096   return (3 + (((long) (start_hp_115X + 8))));}
1097  Hproc24111: {
1098   start_112X = merged_arg1K0;
1099   end_113X = merged_arg1K1;{
1100   type_127X = Sfinding_typeS;
1101   arg1K0 = start_112X;
1102   goto L11029;}
1103  L11029: {
1104   addr_128X = arg1K0;
1105   if ((addr_128X < end_113X)) {
1106     d_129X = *((long *) addr_128X);
1107     next_130X = addr_128X + (8 + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(d_129X, 8)))));
1108     if ((2 == (3 & d_129X))) {
1109       if ((type_127X == (31 & (PS_SHIFT_RIGHT_INLINE(d_129X, 2))))) {
1110         if ((((s48_ShpS) + 64) < (s48_SlimitS))) {
1111           *((long *) (s48_ShpS)) = (long) ((3 + (((long) (addr_128X + 8)))));
1112           s48_ShpS = ((s48_ShpS) + 8);
1113           arg1K0 = next_130X;
1114           goto L11029;}
1115         else {
1116           Hproc241110_return_value = 0;
1117 #ifdef USE_DIRECT_THREADING
1118           goto *Hproc24111_return_address;
1119 #else
1120           goto Hproc24111_return;
1121 #endif
1122 }}
1123       else {
1124         arg1K0 = next_130X;
1125         goto L11029;}}
1126     else {
1127       ps_write_string("heap is in an inconsistent state.", (stderr));
1128       Hproc241110_return_value = 0;
1129 #ifdef USE_DIRECT_THREADING
1130       goto *Hproc24111_return_address;
1131 #else
1132       goto Hproc24111_return;
1133 #endif
1134 }}
1135   else {
1136     Hproc241110_return_value = 1;
1137 #ifdef USE_DIRECT_THREADING
1138     goto *Hproc24111_return_address;
1139 #else
1140     goto Hproc24111_return;
1141 #endif
1142 }}
1143 #ifndef USE_DIRECT_THREADING
1144  Hproc24111_return:
1145   switch (Hproc24111_return_tag) {
1146   case 0: goto Hproc24111_return_0;
1147   case 1: goto Hproc24111_return_1;
1148   default: goto Hproc24111_return_2;
1149   }
1150 #endif
1151 }
1152 
1153 }
s48_trace_value(long stob_131X)1154 long s48_trace_value(long stob_131X)
1155 {
1156   char * new_hp_134X;
1157   long new_thing_133X;
1158   char * a_132X;
1159  {  if ((3 == (3 & stob_131X))) {
1160     a_132X = ((char *) (-3 + stob_131X));
1161     if ((a_132X < (Sfrom_beginS))) {
1162       return stob_131X;}
1163     else {
1164       if ((a_132X < (Sfrom_endS))) {
1165         new_thing_133X = real_copy_object(stob_131X, (s48_ShpS), &new_hp_134X);
1166         s48_ShpS = new_hp_134X;
1167         return new_thing_133X;}
1168       else {
1169         return stob_131X;}}}
1170   else {
1171     return stob_131X;}}
1172 }
s48_find_all_records(long record_type_135X)1173 long s48_find_all_records(long record_type_135X)
1174 {
1175   char * arg1K0;
1176   long arg0K0;
1177   char * merged_arg1K1;
1178   char * merged_arg1K0;
1179 
1180 #ifdef USE_DIRECT_THREADING
1181   void *Hproc95136_return_address;
1182 #else
1183   int Hproc95136_return_tag;
1184 #endif
1185   char Hproc951360_return_value;
1186   char * start_137X;
1187   char * end_138X;
1188   long obj_156X;
1189   char * next_155X;
1190   long d_154X;
1191   char * addr_153X;
1192   long type_152X;
1193   char v_151X;
1194   long i_150X;
1195   long count_149X;
1196   long *sizes_148X;
1197   char * *areas_147X;
1198   char v_146X;
1199   long i_145X;
1200   long count_144X;
1201   long *sizes_143X;
1202   char * *areas_142X;
1203   char v_141X;
1204   char * start_hp_140X;
1205   char * start_hp_139X;
1206  {  Hthe_record_type270 = record_type_135X;
1207   Sfinding_typeS = 9;
1208   start_hp_139X = s48_ShpS;
1209   start_hp_140X = s48_ShpS;
1210   *((long *) (s48_ShpS)) = (long) (0);
1211   s48_ShpS = ((s48_ShpS) + 8);
1212   merged_arg1K0 = (Snewspace_beginS);
1213   merged_arg1K1 = start_hp_139X;
1214 #ifdef USE_DIRECT_THREADING
1215   Hproc95136_return_address = &&Hproc95136_return_0;
1216 #else
1217   Hproc95136_return_tag = 0;
1218 #endif
1219   goto Hproc95136;
1220  Hproc95136_return_0:
1221   v_141X = Hproc951360_return_value;
1222   if (v_141X) {
1223     if ((0 < (Simpure_area_countS))) {
1224       areas_142X = Simpure_areasS;
1225       sizes_143X = Simpure_sizesS;
1226       count_144X = Simpure_area_countS;
1227       arg0K0 = 0;
1228       goto L11864;}
1229     else {
1230       goto L11833;}}
1231   else {
1232     goto L11846;}}
1233  L11864: {
1234   i_145X = arg0K0;
1235   if ((i_145X < count_144X)) {
1236     merged_arg1K0 = (*(areas_142X + i_145X));
1237     merged_arg1K1 = ((*(areas_142X + i_145X)) + (*(sizes_143X + i_145X)));
1238 #ifdef USE_DIRECT_THREADING
1239     Hproc95136_return_address = &&Hproc95136_return_1;
1240 #else
1241     Hproc95136_return_tag = 1;
1242 #endif
1243     goto Hproc95136;
1244    Hproc95136_return_1:
1245     v_146X = Hproc951360_return_value;
1246     if (v_146X) {
1247       arg0K0 = (1 + i_145X);
1248       goto L11864;}
1249     else {
1250       goto L11846;}}
1251   else {
1252     goto L11833;}}
1253  L11833: {
1254   if ((0 < (Spure_area_countS))) {
1255     areas_147X = Spure_areasS;
1256     sizes_148X = Spure_sizesS;
1257     count_149X = Spure_area_countS;
1258     arg0K0 = 0;
1259     goto L11885;}
1260   else {
1261     goto L11848;}}
1262  L11846: {
1263   s48_ShpS = start_hp_140X;
1264   return 1;}
1265  L11885: {
1266   i_150X = arg0K0;
1267   if ((i_150X < count_149X)) {
1268     merged_arg1K0 = (*(areas_147X + i_150X));
1269     merged_arg1K1 = ((*(areas_147X + i_150X)) + (*(sizes_148X + i_150X)));
1270 #ifdef USE_DIRECT_THREADING
1271     Hproc95136_return_address = &&Hproc95136_return_2;
1272 #else
1273     Hproc95136_return_tag = 2;
1274 #endif
1275     goto Hproc95136;
1276    Hproc95136_return_2:
1277     v_151X = Hproc951360_return_value;
1278     if (v_151X) {
1279       arg0K0 = (1 + i_150X);
1280       goto L11885;}
1281     else {
1282       goto L11846;}}
1283   else {
1284     goto L11848;}}
1285  L11848: {
1286   *((long *) start_hp_140X) = (long) ((10 + (PS_SHIFT_LEFT_INLINE(((s48_ShpS) - (start_hp_140X + 8)), 8))));
1287   return (3 + (((long) (start_hp_140X + 8))));}
1288  Hproc95136: {
1289   start_137X = merged_arg1K0;
1290   end_138X = merged_arg1K1;{
1291   type_152X = Sfinding_typeS;
1292   arg1K0 = start_137X;
1293   goto L11196;}
1294  L11196: {
1295   addr_153X = arg1K0;
1296   if ((addr_153X < end_138X)) {
1297     d_154X = *((long *) addr_153X);
1298     next_155X = addr_153X + (8 + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(d_154X, 8)))));
1299     if ((2 == (3 & d_154X))) {
1300       if ((type_152X == (31 & (PS_SHIFT_RIGHT_INLINE(d_154X, 2))))) {
1301         obj_156X = 3 + (((long) (addr_153X + 8)));
1302         if (((*((long *) (((char *) (-3 + obj_156X))))) == (Hthe_record_type270))) {
1303           if ((((s48_ShpS) + 64) < (s48_SlimitS))) {
1304             *((long *) (s48_ShpS)) = (long) (obj_156X);
1305             s48_ShpS = ((s48_ShpS) + 8);
1306             arg1K0 = next_155X;
1307             goto L11196;}
1308           else {
1309             Hproc951360_return_value = 0;
1310 #ifdef USE_DIRECT_THREADING
1311             goto *Hproc95136_return_address;
1312 #else
1313             goto Hproc95136_return;
1314 #endif
1315 }}
1316         else {
1317           arg1K0 = next_155X;
1318           goto L11196;}}
1319       else {
1320         arg1K0 = next_155X;
1321         goto L11196;}}
1322     else {
1323       ps_write_string("heap is in an inconsistent state.", (stderr));
1324       Hproc951360_return_value = 0;
1325 #ifdef USE_DIRECT_THREADING
1326       goto *Hproc95136_return_address;
1327 #else
1328       goto Hproc95136_return;
1329 #endif
1330 }}
1331   else {
1332     Hproc951360_return_value = 1;
1333 #ifdef USE_DIRECT_THREADING
1334     goto *Hproc95136_return_address;
1335 #else
1336     goto Hproc95136_return;
1337 #endif
1338 }}
1339 #ifndef USE_DIRECT_THREADING
1340  Hproc95136_return:
1341   switch (Hproc95136_return_tag) {
1342   case 0: goto Hproc95136_return_0;
1343   case 1: goto Hproc95136_return_1;
1344   default: goto Hproc95136_return_2;
1345   }
1346 #endif
1347 }
1348 
1349 }
s48_initializing_gc_root(void)1350 void s48_initializing_gc_root(void)
1351 {
1352   long arg0K0;
1353   long expr_181X;
1354   char * new_hp_180X;
1355   long new_thing_179X;
1356   char * a_178X;
1357   long stob_177X;
1358   long expr_176X;
1359   char * new_hp_175X;
1360   long new_thing_174X;
1361   char * a_173X;
1362   long stob_172X;
1363   long expr_171X;
1364   char * new_hp_170X;
1365   long new_thing_169X;
1366   char * a_168X;
1367   long stob_167X;
1368   long expr_166X;
1369   char * new_hp_165X;
1370   long new_thing_164X;
1371   char * a_163X;
1372   long stob_162X;
1373   long expr_161X;
1374   char * new_hp_160X;
1375   long new_thing_159X;
1376   char * a_158X;
1377   long stob_157X;
1378  {  if ((SinitializingPS)) {
1379     stob_157X = Sstartup_procedureS;
1380     if ((3 == (3 & stob_157X))) {
1381       a_158X = ((char *) (-3 + stob_157X));
1382       if ((a_158X < (Sfrom_beginS))) {
1383         arg0K0 = stob_157X;
1384         goto L13606;}
1385       else {
1386         if ((a_158X < (Sfrom_endS))) {
1387           new_thing_159X = real_copy_object(stob_157X, (s48_ShpS), &new_hp_160X);
1388           s48_ShpS = new_hp_160X;
1389           arg0K0 = new_thing_159X;
1390           goto L13606;}
1391         else {
1392           arg0K0 = stob_157X;
1393           goto L13606;}}}
1394     else {
1395       arg0K0 = stob_157X;
1396       goto L13606;}}
1397   else {
1398     return;}}
1399  L13606: {
1400   expr_161X = arg0K0;
1401   Sstartup_procedureS = expr_161X;
1402   stob_162X = SsymbolsS;
1403   if ((3 == (3 & stob_162X))) {
1404     a_163X = ((char *) (-3 + stob_162X));
1405     if ((a_163X < (Sfrom_beginS))) {
1406       arg0K0 = stob_162X;
1407       goto L13612;}
1408     else {
1409       if ((a_163X < (Sfrom_endS))) {
1410         new_thing_164X = real_copy_object(stob_162X, (s48_ShpS), &new_hp_165X);
1411         s48_ShpS = new_hp_165X;
1412         arg0K0 = new_thing_164X;
1413         goto L13612;}
1414       else {
1415         arg0K0 = stob_162X;
1416         goto L13612;}}}
1417   else {
1418     arg0K0 = stob_162X;
1419     goto L13612;}}
1420  L13612: {
1421   expr_166X = arg0K0;
1422   SsymbolsS = expr_166X;
1423   stob_167X = Simported_bindingsS;
1424   if ((3 == (3 & stob_167X))) {
1425     a_168X = ((char *) (-3 + stob_167X));
1426     if ((a_168X < (Sfrom_beginS))) {
1427       arg0K0 = stob_167X;
1428       goto L13618;}
1429     else {
1430       if ((a_168X < (Sfrom_endS))) {
1431         new_thing_169X = real_copy_object(stob_167X, (s48_ShpS), &new_hp_170X);
1432         s48_ShpS = new_hp_170X;
1433         arg0K0 = new_thing_169X;
1434         goto L13618;}
1435       else {
1436         arg0K0 = stob_167X;
1437         goto L13618;}}}
1438   else {
1439     arg0K0 = stob_167X;
1440     goto L13618;}}
1441  L13618: {
1442   expr_171X = arg0K0;
1443   Simported_bindingsS = expr_171X;
1444   stob_172X = Sexported_bindingsS;
1445   if ((3 == (3 & stob_172X))) {
1446     a_173X = ((char *) (-3 + stob_172X));
1447     if ((a_173X < (Sfrom_beginS))) {
1448       arg0K0 = stob_172X;
1449       goto L13624;}
1450     else {
1451       if ((a_173X < (Sfrom_endS))) {
1452         new_thing_174X = real_copy_object(stob_172X, (s48_ShpS), &new_hp_175X);
1453         s48_ShpS = new_hp_175X;
1454         arg0K0 = new_thing_174X;
1455         goto L13624;}
1456       else {
1457         arg0K0 = stob_172X;
1458         goto L13624;}}}
1459   else {
1460     arg0K0 = stob_172X;
1461     goto L13624;}}
1462  L13624: {
1463   expr_176X = arg0K0;
1464   Sexported_bindingsS = expr_176X;
1465   stob_177X = Sresumer_recordsS;
1466   if ((3 == (3 & stob_177X))) {
1467     a_178X = ((char *) (-3 + stob_177X));
1468     if ((a_178X < (Sfrom_beginS))) {
1469       arg0K0 = stob_177X;
1470       goto L13630;}
1471     else {
1472       if ((a_178X < (Sfrom_endS))) {
1473         new_thing_179X = real_copy_object(stob_177X, (s48_ShpS), &new_hp_180X);
1474         s48_ShpS = new_hp_180X;
1475         arg0K0 = new_thing_179X;
1476         goto L13630;}
1477       else {
1478         arg0K0 = stob_177X;
1479         goto L13630;}}}
1480   else {
1481     arg0K0 = stob_177X;
1482     goto L13630;}}
1483  L13630: {
1484   expr_181X = arg0K0;
1485   Sresumer_recordsS = expr_181X;
1486   return;}
1487 }
s48_write_image(long resume_proc_182X,long undumpables_183X,FILE * port_184X)1488 long s48_write_image(long resume_proc_182X, long undumpables_183X, FILE * port_184X)
1489 {
1490   struct table *arg3K0;
1491   long arg0K0;
1492   char * arg1K0;
1493   char * merged_arg1K0;
1494   long merged_arg0K1;
1495   long merged_arg0K0;
1496 
1497 #ifdef USE_DIRECT_THREADING
1498   void *write_descriptor_return_address;
1499 #else
1500   int write_descriptor_return_tag;
1501 #endif
1502 #ifdef USE_DIRECT_THREADING
1503   void *write_shared_table_return_address;
1504 #else
1505   int write_shared_table_return_tag;
1506 #endif
1507   char write_shared_table0_return_value;
1508 #ifdef USE_DIRECT_THREADING
1509   void *copy_image_data_return_address;
1510 #else
1511   int copy_image_data_return_tag;
1512 #endif
1513   long descriptor_185X;
1514   long table_186X;
1515   char * start_187X;
1516   long size_188X;
1517   long have_330X;
1518   long v_329X;
1519   long value_328X;
1520   struct image_location *have_327X;
1521   long thing_326X;
1522   long link_325X;
1523   struct image_location *v_324X;
1524   long next_323X;
1525   long shared_322X;
1526   long link_321X;
1527   char temp_320X;
1528   long i_319X;
1529   long have_318X;
1530   long value_317X;
1531   long v_316X;
1532   struct image_location *have_315X;
1533   long v_314X;
1534   long v_313X;
1535   struct image_location *have_312X;
1536   long thing_311X;
1537   struct image_location *have_310X;
1538   long thing_309X;
1539   long x_308X;
1540   char * addr_307X;
1541   long v_306X;
1542   long value_305X;
1543   struct image_location *have_304X;
1544   long thing_303X;
1545   char * addr_302X;
1546   char * start_301X;
1547   long header_300X;
1548   long next_299X;
1549   struct image_location *have_298X;
1550   long thing_297X;
1551   struct image_location *have_296X;
1552   char * addr_295X;
1553   long v_294X;
1554   long link_293X;
1555   struct image_location *v_292X;
1556   long next_291X;
1557   char * start_290X;
1558   long header_289X;
1559   long next_288X;
1560   long value_287X;
1561   long have_286X;
1562   long available_285X;
1563   long size_284X;
1564   char * start_283X;
1565   long header_282X;
1566   long shared_281X;
1567   long link_280X;
1568   struct image_location *v_279X;
1569   long next_278X;
1570   struct image_location *have_277X;
1571   long thing_276X;
1572   long i_275X;
1573   long link_274X;
1574   long symbol_273X;
1575   long v_272X;
1576   long link_271X;
1577   struct image_location *v_270X;
1578   long next_269X;
1579   struct image_location **values_268X;
1580   long *keys_267X;
1581   struct table *table_266X;
1582   long link_265X;
1583   struct image_location *have_264X;
1584   long thing_263X;
1585   long id_262X;
1586   char * addr_261X;
1587   long symbol_260X;
1588   long have_259X;
1589   char v_258X;
1590   struct image_location *location_257X;
1591   long stob_256X;
1592   char * start_255X;
1593   long header_254X;
1594   struct image_location *have_253X;
1595   long thing_252X;
1596   long link_251X;
1597   long v_250X;
1598   long v_249X;
1599   long i_248X;
1600   struct image_location *v_247X;
1601   long thing_246X;
1602   long table_245X;
1603   struct image_location *location_244X;
1604   long stob_243X;
1605   struct table *stob_table_242X;
1606   long first_stob_241X;
1607   long v_240X;
1608   long v_239X;
1609   long v_238X;
1610   long v_237X;
1611   long n_236X;
1612   struct image_location *have_235X;
1613   long thing_234X;
1614   long v_233X;
1615   long n_232X;
1616   struct image_location *have_231X;
1617   long thing_230X;
1618   long v_229X;
1619   long n_228X;
1620   struct image_location *have_227X;
1621   long thing_226X;
1622   long v_225X;
1623   long cells_224X;
1624   long v_223X;
1625   long cells_222X;
1626   long v_221X;
1627   long v_220X;
1628   long v_219X;
1629   long v_218X;
1630   long i_217X;
1631   long v_216X;
1632   struct image_location **values_215X;
1633   long *keys_214X;
1634   struct table *table_213X;
1635   long v_212X;
1636   long resumer_records_211X;
1637   char * data_addr_210X;
1638   long cells_209X;
1639   long v_208X;
1640   long v_207X;
1641   long v_206X;
1642   struct image_location *last_205X;
1643   char * addr_204X;
1644   long next_203X;
1645   struct image_location *image_location_202X;
1646   char * start_201X;
1647   long link_200X;
1648   long entry_199X;
1649   long header_198X;
1650   long stob_197X;
1651   long link_196X;
1652   long i_195X;
1653   long table_194X;
1654   long resume_proc_193X;
1655   struct table *v_192X;
1656   struct table *table_191X;
1657   long i_190X;
1658   long *keys_189X;
1659  {  keys_189X = (long*)malloc(sizeof(long) * 4097);
1660   arg0K0 = 0;
1661   goto L7192;}
1662  L7192: {
1663   i_190X = arg0K0;
1664   if ((i_190X < 4097)) {
1665     *(keys_189X + i_190X) = 0;
1666     arg0K0 = (1 + i_190X);
1667     goto L7192;}
1668   else {
1669     table_191X = (struct table*)malloc(sizeof(struct table));
1670     if ((NULL == table_191X)) {
1671       arg3K0 = table_191X;
1672       goto L7165;}
1673     else {
1674       table_191X->keys = keys_189X;
1675       table_191X->values = ((struct image_location**)malloc(sizeof(struct image_location*) * 4096));
1676       table_191X->count = 0;
1677       table_191X->size = 4096;
1678       arg3K0 = table_191X;
1679       goto L7165;}}}
1680  L7165: {
1681   v_192X = arg3K0;
1682   Sstob_tableS = v_192X;
1683   Sfirst_stobS = 1;
1684   Slast_stobS = (NULL);
1685   Sundumpable_recordsS = undumpables_183X;
1686   Sundumpable_countS = 0;
1687   Sresumer_countS = 0;
1688   image_start_address = (((long) (Snew_heap_start_addrS)));
1689   Simage_beginS = (((char *) (image_start_address)));
1690   Simage_hpS = (((char *) (image_start_address)));
1691   Simage_portS = port_184X;
1692   Simage_bufferS = ((char *)malloc(4096));
1693   Simage_buffer_pointerS = (Simage_bufferS);
1694   SstatusS = NO_ERRORS;
1695   if (((Simage_bufferS) == NULL)) {
1696     return ENOMEM;}
1697   else {
1698     resume_proc_193X = trace_image_value(resume_proc_182X);
1699     table_194X = s48_exported_bindings();
1700     arg0K0 = 0;
1701     goto L12022;}}
1702  L12022: {
1703   i_195X = arg0K0;
1704   if ((1024 == i_195X)) {
1705     arg0K0 = (Sfirst_stobS);
1706     goto L14220;}
1707   else {
1708     link_196X = *((long *) ((((char *) (-3 + table_194X))) + (PS_SHIFT_LEFT_INLINE(i_195X, 3))));
1709     if ((0 == (3 & link_196X))) {
1710       arg0K0 = (3 + (-4 & link_196X));
1711       goto L11996;}
1712     else {
1713       arg0K0 = link_196X;
1714       goto L11996;}}}
1715  L14220: {
1716   stob_197X = arg0K0;
1717   header_198X = *((long *) (((char *) (-11 + stob_197X))));
1718   if ((2 == (3 & header_198X))) {
1719     if (((31 & (PS_SHIFT_RIGHT_INLINE(header_198X, 2))) < 16)) {
1720       goto L14084;}
1721     else {
1722       goto L14222;}}
1723   else {
1724     goto L14084;}}
1725  L11996: {
1726   entry_199X = arg0K0;
1727   if ((1 == entry_199X)) {
1728     arg0K0 = (1 + i_195X);
1729     goto L12022;}
1730   else {trace_image_value(entry_199X);
1731     link_200X = *((long *) ((((char *) (-3 + entry_199X))) + 24));
1732     if ((0 == (3 & link_200X))) {
1733       arg0K0 = (3 + (-4 & link_200X));
1734       goto L11996;}
1735     else {
1736       arg0K0 = link_200X;
1737       goto L11996;}}}
1738  L14084: {
1739   if ((2102 == header_198X)) {
1740     goto L14222;}
1741   else {
1742     start_201X = ((char *) (-3 + stob_197X));
1743     arg1K0 = start_201X;
1744     goto L14103;}}
1745  L14222: {
1746   if ((0 < ((Sstob_tableS)->size))) {
1747     image_location_202X = table_ref((Sstob_tableS), stob_197X);
1748     next_203X = image_location_202X->next;
1749     if ((3 == (3 & next_203X))) {
1750       arg0K0 = next_203X;
1751       goto L14220;}
1752     else {
1753       goto L14301;}}
1754   else {
1755     goto L14301;}}
1756  L14103: {
1757   addr_204X = arg1K0;
1758   if ((addr_204X == (start_201X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(header_198X, 8))))))) {
1759     goto L14222;}
1760   else {trace_image_value((*((long *) addr_204X)));
1761     arg1K0 = (addr_204X + 8);
1762     goto L14103;}}
1763  L14301: {
1764   last_205X = Slast_stobS;
1765   v_206X = s48_symbol_table();trace_image_value(v_206X);
1766   v_207X = s48_imported_bindings();trace_image_value(v_207X);
1767   v_208X = s48_exported_bindings();trace_image_value(v_208X);
1768   last_205X->next = 1;
1769   cells_209X = Sresumer_countS;
1770   data_addr_210X = (Simage_hpS) + 8;
1771   Simage_hpS = (data_addr_210X + (PS_SHIFT_LEFT_INLINE(cells_209X, 3)));
1772   Sresumer_recordsS = (3 + (((long) data_addr_210X)));
1773   if ((0 < ((Sstob_tableS)->size))) {
1774     resumer_records_211X = Sresumer_recordsS;
1775     if (((SstatusS) == NO_ERRORS)) {
1776       PS_WRITE_CHAR(10, port_184X, v_212X)
1777       SstatusS = v_212X;
1778       goto L6111;}
1779     else {
1780       goto L6111;}}
1781   else {
1782     table_213X = Sstob_tableS;
1783     keys_214X = table_213X->keys;
1784     values_215X = table_213X->values;
1785     arg0K0 = 0;
1786     goto L14617;}}
1787  L6111: {
1788   if (((SstatusS) == NO_ERRORS)) {
1789     PS_WRITE_CHAR(12, (Simage_portS), v_216X)
1790     SstatusS = v_216X;
1791     goto L6113;}
1792   else {
1793     goto L6113;}}
1794  L14617: {
1795   i_217X = arg0K0;
1796   if ((i_217X == (table_213X->size))) {
1797     free(keys_214X);
1798     free(values_215X);
1799     free(table_213X);
1800     free((Simage_bufferS));
1801     return ENOMEM;}
1802   else {
1803     if ((0 == (*(keys_214X + i_217X)))) {
1804       goto L14619;}
1805     else {
1806       free((*(values_215X + i_217X)));
1807       goto L14619;}}}
1808  L6113: {
1809   if (((SstatusS) == NO_ERRORS)) {
1810     PS_WRITE_CHAR(10, port_184X, v_218X)
1811     SstatusS = v_218X;
1812     goto L6122;}
1813   else {
1814     goto L6122;}}
1815  L14619: {
1816   arg0K0 = (1 + i_217X);
1817   goto L14617;}
1818  L6122: {
1819   if (((SstatusS) == NO_ERRORS)) {
1820     SstatusS = (ps_write_string("Vanilla 40", port_184X));
1821     goto L6129;}
1822   else {
1823     goto L6129;}}
1824  L6129: {
1825   if (((SstatusS) == NO_ERRORS)) {
1826     PS_WRITE_CHAR(10, port_184X, v_219X)
1827     SstatusS = v_219X;
1828     goto L6138;}
1829   else {
1830     goto L6138;}}
1831  L6138: {
1832   if (((SstatusS) == NO_ERRORS)) {
1833     SstatusS = (ps_write_integer(0, port_184X));
1834     goto L6145;}
1835   else {
1836     goto L6145;}}
1837  L6145: {
1838   if (((SstatusS) == NO_ERRORS)) {
1839     PS_WRITE_CHAR(10, port_184X, v_220X)
1840     SstatusS = v_220X;
1841     goto L6154;}
1842   else {
1843     goto L6154;}}
1844  L6154: {
1845   if (((SstatusS) == NO_ERRORS)) {
1846     SstatusS = (ps_write_integer(8, (Simage_portS)));
1847     goto L6199;}
1848   else {
1849     goto L6199;}}
1850  L6199: {
1851   if (((SstatusS) == NO_ERRORS)) {
1852     PS_WRITE_CHAR(10, (Simage_portS), v_221X)
1853     SstatusS = v_221X;
1854     goto L6156;}
1855   else {
1856     goto L6156;}}
1857  L6156: {
1858   cells_222X = image_start_address;
1859   if (((SstatusS) == NO_ERRORS)) {
1860     SstatusS = (ps_write_integer((PS_SHIFT_RIGHT_INLINE(cells_222X, 3)), (Simage_portS)));
1861     goto L6216;}
1862   else {
1863     goto L6216;}}
1864  L6216: {
1865   if (((SstatusS) == NO_ERRORS)) {
1866     PS_WRITE_CHAR(10, (Simage_portS), v_223X)
1867     SstatusS = v_223X;
1868     goto L6160;}
1869   else {
1870     goto L6160;}}
1871  L6160: {
1872   cells_224X = (image_start_address) + ((Simage_hpS) - (Simage_beginS));
1873   if (((SstatusS) == NO_ERRORS)) {
1874     SstatusS = (ps_write_integer((PS_SHIFT_RIGHT_INLINE(cells_224X, 3)), (Simage_portS)));
1875     goto L6235;}
1876   else {
1877     goto L6235;}}
1878  L6235: {
1879   if (((SstatusS) == NO_ERRORS)) {
1880     PS_WRITE_CHAR(10, (Simage_portS), v_225X)
1881     SstatusS = v_225X;
1882     goto L6166;}
1883   else {
1884     goto L6166;}}
1885  L6166: {
1886   thing_226X = s48_symbol_table();
1887   if ((3 == (3 & thing_226X))) {
1888     have_227X = table_ref((Sstob_tableS), thing_226X);
1889     if ((NULL == have_227X)) {
1890       ps_error("traced object has no descriptor in image", 0);
1891       goto L17892;}
1892     else {
1893       goto L17892;}}
1894   else {
1895     arg0K0 = thing_226X;
1896     goto L6170;}}
1897  L17892: {
1898   arg0K0 = (have_227X->new_descriptor);
1899   goto L6170;}
1900  L6170: {
1901   n_228X = arg0K0;
1902   if (((SstatusS) == NO_ERRORS)) {
1903     SstatusS = (ps_write_integer(n_228X, (Simage_portS)));
1904     goto L6249;}
1905   else {
1906     goto L6249;}}
1907  L6249: {
1908   if (((SstatusS) == NO_ERRORS)) {
1909     PS_WRITE_CHAR(10, (Simage_portS), v_229X)
1910     SstatusS = v_229X;
1911     goto L6172;}
1912   else {
1913     goto L6172;}}
1914  L6172: {
1915   thing_230X = s48_imported_bindings();
1916   if ((3 == (3 & thing_230X))) {
1917     have_231X = table_ref((Sstob_tableS), thing_230X);
1918     if ((NULL == have_231X)) {
1919       ps_error("traced object has no descriptor in image", 0);
1920       goto L17906;}
1921     else {
1922       goto L17906;}}
1923   else {
1924     arg0K0 = thing_230X;
1925     goto L6176;}}
1926  L17906: {
1927   arg0K0 = (have_231X->new_descriptor);
1928   goto L6176;}
1929  L6176: {
1930   n_232X = arg0K0;
1931   if (((SstatusS) == NO_ERRORS)) {
1932     SstatusS = (ps_write_integer(n_232X, (Simage_portS)));
1933     goto L6263;}
1934   else {
1935     goto L6263;}}
1936  L6263: {
1937   if (((SstatusS) == NO_ERRORS)) {
1938     PS_WRITE_CHAR(10, (Simage_portS), v_233X)
1939     SstatusS = v_233X;
1940     goto L6178;}
1941   else {
1942     goto L6178;}}
1943  L6178: {
1944   thing_234X = s48_exported_bindings();
1945   if ((3 == (3 & thing_234X))) {
1946     have_235X = table_ref((Sstob_tableS), thing_234X);
1947     if ((NULL == have_235X)) {
1948       ps_error("traced object has no descriptor in image", 0);
1949       goto L17920;}
1950     else {
1951       goto L17920;}}
1952   else {
1953     arg0K0 = thing_234X;
1954     goto L6182;}}
1955  L17920: {
1956   arg0K0 = (have_235X->new_descriptor);
1957   goto L6182;}
1958  L6182: {
1959   n_236X = arg0K0;
1960   if (((SstatusS) == NO_ERRORS)) {
1961     SstatusS = (ps_write_integer(n_236X, (Simage_portS)));
1962     goto L6277;}
1963   else {
1964     goto L6277;}}
1965  L6277: {
1966   if (((SstatusS) == NO_ERRORS)) {
1967     PS_WRITE_CHAR(10, (Simage_portS), v_237X)
1968     SstatusS = v_237X;
1969     goto L6184;}
1970   else {
1971     goto L6184;}}
1972  L6184: {
1973   if (((SstatusS) == NO_ERRORS)) {
1974     SstatusS = (ps_write_integer(resumer_records_211X, (Simage_portS)));
1975     goto L6291;}
1976   else {
1977     goto L6291;}}
1978  L6291: {
1979   if (((SstatusS) == NO_ERRORS)) {
1980     PS_WRITE_CHAR(10, (Simage_portS), v_238X)
1981     SstatusS = v_238X;
1982     goto L6186;}
1983   else {
1984     goto L6186;}}
1985  L6186: {
1986   if (((SstatusS) == NO_ERRORS)) {
1987     SstatusS = (ps_write_integer(resume_proc_193X, (Simage_portS)));
1988     goto L6305;}
1989   else {
1990     goto L6305;}}
1991  L6305: {
1992   if (((SstatusS) == NO_ERRORS)) {
1993     PS_WRITE_CHAR(10, (Simage_portS), v_239X)
1994     SstatusS = v_239X;
1995     goto L6188;}
1996   else {
1997     goto L6188;}}
1998  L6188: {
1999   if (((SstatusS) == NO_ERRORS)) {
2000     PS_WRITE_CHAR(12, (Simage_portS), v_240X)
2001     SstatusS = v_240X;
2002     goto L14518;}
2003   else {
2004     goto L14518;}}
2005  L14518: {
2006   merged_arg0K0 = 1;
2007 #ifdef USE_DIRECT_THREADING
2008   write_descriptor_return_address = &&write_descriptor_return_0;
2009 #else
2010   write_descriptor_return_tag = 0;
2011 #endif
2012   goto write_descriptor;
2013  write_descriptor_return_0:
2014   first_stob_241X = Sfirst_stobS;
2015   stob_table_242X = Sstob_tableS;
2016   arg0K0 = first_stob_241X;
2017   goto L14024;}
2018  L14024: {
2019   stob_243X = arg0K0;
2020   if ((3 == (3 & stob_243X))) {
2021     location_244X = table_ref(stob_table_242X, stob_243X);
2022     if ((NULL == location_244X)) {
2023       ps_error("traced stob has no image-table entry", 0);
2024       goto L14029;}
2025     else {
2026       goto L14029;}}
2027   else {
2028     table_245X = s48_symbol_table();
2029     merged_arg0K0 = (*((long *) (((char *) (-11 + table_245X)))));
2030 #ifdef USE_DIRECT_THREADING
2031     write_descriptor_return_address = &&write_descriptor_return_1;
2032 #else
2033     write_descriptor_return_tag = 1;
2034 #endif
2035     goto write_descriptor;
2036    write_descriptor_return_1:
2037     arg0K0 = 0;
2038     goto L12404;}}
2039  L14029: {
2040   if ((3 == (3 & stob_243X))) {
2041     if ((13 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + stob_243X))))), 2))))) {
2042       merged_arg0K0 = 2102;
2043 #ifdef USE_DIRECT_THREADING
2044       write_descriptor_return_address = &&write_descriptor_return_2;
2045 #else
2046       write_descriptor_return_tag = 2;
2047 #endif
2048       goto write_descriptor;
2049      write_descriptor_return_2:
2050       thing_246X = *((long *) (((char *) (-3 + stob_243X))));
2051       if ((3 == (3 & thing_246X))) {
2052         v_247X = table_ref((Sstob_tableS), thing_246X);
2053         if ((NULL == v_247X)) {
2054           merged_arg0K0 = 1;
2055 #ifdef USE_DIRECT_THREADING
2056           write_descriptor_return_address = &&write_descriptor_return_3;
2057 #else
2058           write_descriptor_return_tag = 3;
2059 #endif
2060           goto write_descriptor;
2061          write_descriptor_return_3:
2062           goto L14031;}
2063         else {
2064           goto L13750;}}
2065       else {
2066         goto L13750;}}
2067     else {
2068       goto L13756;}}
2069   else {
2070     goto L13756;}}
2071  L12404: {
2072   i_248X = arg0K0;
2073   if ((i_248X == (PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE((*((long *) (((char *) (-11 + table_245X))))), 8))), 3)))) {
2074     v_249X = s48_imported_bindings();
2075     merged_arg0K0 = v_249X;
2076 #ifdef USE_DIRECT_THREADING
2077     write_shared_table_return_address = &&write_shared_table_return_0;
2078 #else
2079     write_shared_table_return_tag = 0;
2080 #endif
2081     goto write_shared_table;
2082    write_shared_table_return_0:
2083     v_250X = s48_exported_bindings();
2084     merged_arg0K0 = v_250X;
2085 #ifdef USE_DIRECT_THREADING
2086     write_shared_table_return_address = &&write_shared_table_return_1;
2087 #else
2088     write_shared_table_return_tag = 1;
2089 #endif
2090     goto write_shared_table;
2091    write_shared_table_return_1:
2092     merged_arg0K0 = (10 + (PS_SHIFT_LEFT_INLINE((Sresumer_countS), 11)));
2093 #ifdef USE_DIRECT_THREADING
2094     write_descriptor_return_address = &&write_descriptor_return_4;
2095 #else
2096     write_descriptor_return_tag = 4;
2097 #endif
2098     goto write_descriptor;
2099    write_descriptor_return_4:
2100     arg0K0 = (Sfirst_stobS);
2101     goto L14047;}
2102   else {
2103     link_251X = *((long *) ((((char *) (-3 + table_245X))) + (PS_SHIFT_LEFT_INLINE(i_248X, 3))));
2104     if ((0 == (3 & link_251X))) {
2105       arg0K0 = (3 + (-4 & link_251X));
2106       goto L12414;}
2107     else {
2108       arg0K0 = link_251X;
2109       goto L12414;}}}
2110  L14031: {
2111   arg0K0 = (location_244X->next);
2112   goto L14024;}
2113  L13750: {
2114   thing_252X = *((long *) (((char *) (-3 + stob_243X))));
2115   if ((3 == (3 & thing_252X))) {
2116     have_253X = table_ref((Sstob_tableS), thing_252X);
2117     if ((NULL == have_253X)) {
2118       ps_error("traced object has no descriptor in image", 0);
2119       goto L13814;}
2120     else {
2121       goto L13814;}}
2122   else {
2123     merged_arg0K0 = thing_252X;
2124 #ifdef USE_DIRECT_THREADING
2125     write_descriptor_return_address = &&write_descriptor_return_5;
2126 #else
2127     write_descriptor_return_tag = 5;
2128 #endif
2129     goto write_descriptor;
2130    write_descriptor_return_5:
2131     goto L14031;}}
2132  L13756: {
2133   if ((3 == (3 & stob_243X))) {
2134     if ((6 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + stob_243X))))), 2))))) {
2135       header_254X = *((long *) (((char *) (-11 + stob_243X))));
2136       merged_arg0K0 = header_254X;
2137 #ifdef USE_DIRECT_THREADING
2138       write_descriptor_return_address = &&write_descriptor_return_6;
2139 #else
2140       write_descriptor_return_tag = 6;
2141 #endif
2142       goto write_descriptor;
2143      write_descriptor_return_6:
2144       merged_arg0K0 = 0;
2145 #ifdef USE_DIRECT_THREADING
2146       write_descriptor_return_address = &&write_descriptor_return_7;
2147 #else
2148       write_descriptor_return_tag = 7;
2149 #endif
2150       goto write_descriptor;
2151      write_descriptor_return_7:
2152       start_255X = (((char *) (-3 + stob_243X))) + 8;
2153       arg1K0 = start_255X;
2154       goto L10451;}
2155     else {
2156       goto L13760;}}
2157   else {
2158     goto L13760;}}
2159  L14047: {
2160   stob_256X = arg0K0;
2161   if ((3 == (3 & stob_256X))) {
2162     location_257X = table_ref((Sstob_tableS), stob_256X);
2163     v_258X = resumer_recordP(stob_256X);
2164     if (v_258X) {
2165       merged_arg0K0 = (location_257X->new_descriptor);
2166 #ifdef USE_DIRECT_THREADING
2167       write_descriptor_return_address = &&write_descriptor_return_8;
2168 #else
2169       write_descriptor_return_tag = 8;
2170 #endif
2171       goto write_descriptor;
2172      write_descriptor_return_8:
2173       goto L14054;}
2174     else {
2175       goto L14054;}}
2176   else {
2177     have_259X = (Simage_buffer_pointerS) - (Simage_bufferS);
2178     if ((0 < have_259X)) {
2179       if (((SstatusS) == NO_ERRORS)) {
2180         SstatusS = (ps_write_block((Simage_portS), ((char *) (Simage_bufferS)), have_259X));
2181         goto L14563;}
2182       else {
2183         goto L14563;}}
2184     else {
2185       goto L14524;}}}
2186  L12414: {
2187   symbol_260X = arg0K0;
2188   arg0K0 = symbol_260X;
2189   goto L12448;}
2190  L13814: {
2191   merged_arg0K0 = (have_253X->new_descriptor);
2192 #ifdef USE_DIRECT_THREADING
2193   write_descriptor_return_address = &&write_descriptor_return_9;
2194 #else
2195   write_descriptor_return_tag = 9;
2196 #endif
2197   goto write_descriptor;
2198  write_descriptor_return_9:
2199   goto L14031;}
2200  L10451: {
2201   addr_261X = arg1K0;
2202   if ((addr_261X == (start_255X + (-8 + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(header_254X, 8)))))))) {
2203     ps_write_string("Channel closed in dumped image: ", (stderr));
2204     id_262X = *((long *) ((((char *) (-3 + stob_243X))) + 8));
2205     if ((0 == (3 & id_262X))) {
2206       ps_write_integer((PS_SHIFT_RIGHT_INLINE(id_262X, 2)), (stderr));
2207       goto L10428;}
2208     else {
2209       ps_write_string((((char *)(((char *) (-3 + id_262X))))), (stderr));
2210       goto L10428;}}
2211   else {
2212     thing_263X = *((long *) addr_261X);
2213     if ((3 == (3 & thing_263X))) {
2214       have_264X = table_ref((Sstob_tableS), thing_263X);
2215       if ((NULL == have_264X)) {
2216         ps_error("traced object has no descriptor in image", 0);
2217         goto L10465;}
2218       else {
2219         goto L10465;}}
2220     else {
2221       arg0K0 = thing_263X;
2222       goto L10456;}}}
2223  L13760: {
2224   if ((3 == (3 & stob_243X))) {
2225     if ((1 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + stob_243X))))), 2))))) {
2226       link_265X = *((long *) ((((char *) (-3 + stob_243X))) + 8));
2227       if ((0 == (3 & link_265X))) {
2228         arg0K0 = (3 + (-4 & link_265X));
2229         goto L13336;}
2230       else {
2231         arg0K0 = link_265X;
2232         goto L13336;}}
2233     else {
2234       goto L13764;}}
2235   else {
2236     goto L13764;}}
2237  L14054: {
2238   arg0K0 = (location_257X->next);
2239   goto L14047;}
2240  L14563: {
2241   Simage_buffer_pointerS = (Simage_bufferS);
2242   goto L14524;}
2243  L14524: {
2244   table_266X = Sstob_tableS;
2245   keys_267X = table_266X->keys;
2246   values_268X = table_266X->values;
2247   arg0K0 = 0;
2248   goto L14583;}
2249  L12448: {
2250   next_269X = arg0K0;
2251   if ((3 == (3 & next_269X))) {
2252     v_270X = table_ref((Sstob_tableS), next_269X);
2253     if ((NULL == v_270X)) {
2254       link_271X = *((long *) ((((char *) (-3 + next_269X))) + 8));
2255       if ((0 == (3 & link_271X))) {
2256         arg0K0 = (3 + (-4 & link_271X));
2257         goto L12448;}
2258       else {
2259         arg0K0 = link_271X;
2260         goto L12448;}}
2261     else {
2262       arg0K0 = next_269X;
2263       goto L12416;}}
2264   else {
2265     arg0K0 = next_269X;
2266     goto L12416;}}
2267  L10428: {
2268   { long ignoreXX;
2269   PS_WRITE_CHAR(10, (stderr), ignoreXX) }
2270   goto L14031;}
2271  L10465: {
2272   arg0K0 = (have_264X->new_descriptor);
2273   goto L10456;}
2274  L10456: {
2275   v_272X = arg0K0;
2276   merged_arg0K0 = v_272X;
2277 #ifdef USE_DIRECT_THREADING
2278   write_descriptor_return_address = &&write_descriptor_return_10;
2279 #else
2280   write_descriptor_return_tag = 10;
2281 #endif
2282   goto write_descriptor;
2283  write_descriptor_return_10:
2284   arg1K0 = (addr_261X + 8);
2285   goto L10451;}
2286  L13336: {
2287   symbol_273X = arg0K0;
2288   arg0K0 = symbol_273X;
2289   goto L13369;}
2290  L13764: {
2291   if ((3 == (3 & stob_243X))) {
2292     if ((14 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + stob_243X))))), 2))))) {
2293       link_274X = *((long *) ((((char *) (-3 + stob_243X))) + 24));
2294       if ((0 == (3 & link_274X))) {
2295         arg0K0 = (3 + (-4 & link_274X));
2296         goto L13451;}
2297       else {
2298         arg0K0 = link_274X;
2299         goto L13451;}}
2300     else {
2301       goto L13768;}}
2302   else {
2303     goto L13768;}}
2304  L14583: {
2305   i_275X = arg0K0;
2306   if ((i_275X == (table_266X->size))) {
2307     free(keys_267X);
2308     free(values_268X);
2309     free(table_266X);
2310     free((Simage_bufferS));
2311     return (SstatusS);}
2312   else {
2313     if ((0 == (*(keys_267X + i_275X)))) {
2314       goto L14585;}
2315     else {
2316       free((*(values_268X + i_275X)));
2317       goto L14585;}}}
2318  L12416: {
2319   thing_276X = arg0K0;
2320   if ((3 == (3 & thing_276X))) {
2321     have_277X = table_ref((Sstob_tableS), thing_276X);
2322     if ((NULL == have_277X)) {
2323       ps_error("traced object has no descriptor in image", 0);
2324       goto L12467;}
2325     else {
2326       goto L12467;}}
2327   else {
2328     arg0K0 = thing_276X;
2329     goto L12418;}}
2330  L13369: {
2331   next_278X = arg0K0;
2332   if ((3 == (3 & next_278X))) {
2333     v_279X = table_ref((Sstob_tableS), next_278X);
2334     if ((NULL == v_279X)) {
2335       link_280X = *((long *) ((((char *) (-3 + next_278X))) + 8));
2336       if ((0 == (3 & link_280X))) {
2337         arg0K0 = (3 + (-4 & link_280X));
2338         goto L13369;}
2339       else {
2340         arg0K0 = link_280X;
2341         goto L13369;}}
2342     else {
2343       arg0K0 = next_278X;
2344       goto L13338;}}
2345   else {
2346     arg0K0 = next_278X;
2347     goto L13338;}}
2348  L13451: {
2349   shared_281X = arg0K0;
2350   arg0K0 = shared_281X;
2351   goto L13500;}
2352  L13768: {
2353   header_282X = *((long *) (((char *) (-11 + stob_243X))));
2354   start_283X = ((char *) (-3 + stob_243X));
2355   merged_arg0K0 = header_282X;
2356 #ifdef USE_DIRECT_THREADING
2357   write_descriptor_return_address = &&write_descriptor_return_11;
2358 #else
2359   write_descriptor_return_tag = 11;
2360 #endif
2361   goto write_descriptor;
2362  write_descriptor_return_11:
2363   if ((2 == (3 & header_282X))) {
2364     if (((31 & (PS_SHIFT_RIGHT_INLINE(header_282X, 2))) < 16)) {
2365       goto L13784;}
2366     else {
2367       size_284X = -8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(header_282X, 8)));
2368       available_285X = 4096 - ((Simage_buffer_pointerS) - (Simage_bufferS));
2369       if ((available_285X < size_284X)) {
2370         if ((4096 < size_284X)) {
2371           have_286X = (Simage_buffer_pointerS) - (Simage_bufferS);
2372           if ((0 < have_286X)) {
2373             if (((SstatusS) == NO_ERRORS)) {
2374               SstatusS = (ps_write_block((Simage_portS), ((char *) (Simage_bufferS)), have_286X));
2375               goto L9477;}
2376             else {
2377               goto L9477;}}
2378           else {
2379             goto L9451;}}
2380         else {
2381           merged_arg1K0 = start_283X;
2382           merged_arg0K1 = available_285X;
2383 #ifdef USE_DIRECT_THREADING
2384           copy_image_data_return_address = &&copy_image_data_return_0;
2385 #else
2386           copy_image_data_return_tag = 0;
2387 #endif
2388           goto copy_image_data;
2389          copy_image_data_return_0:
2390           merged_arg1K0 = (start_283X + available_285X);
2391           merged_arg0K1 = (size_284X - available_285X);
2392 #ifdef USE_DIRECT_THREADING
2393           copy_image_data_return_address = &&copy_image_data_return_1;
2394 #else
2395           copy_image_data_return_tag = 1;
2396 #endif
2397           goto copy_image_data;
2398          copy_image_data_return_1:
2399           goto L14031;}}
2400       else {
2401         merged_arg1K0 = start_283X;
2402         merged_arg0K1 = size_284X;
2403 #ifdef USE_DIRECT_THREADING
2404         copy_image_data_return_address = &&copy_image_data_return_2;
2405 #else
2406         copy_image_data_return_tag = 2;
2407 #endif
2408         goto copy_image_data;
2409        copy_image_data_return_2:
2410         goto L14031;}}}
2411   else {
2412     goto L13784;}}
2413  L14585: {
2414   arg0K0 = (1 + i_275X);
2415   goto L14583;}
2416  L12467: {
2417   arg0K0 = (have_277X->new_descriptor);
2418   goto L12418;}
2419  L12418: {
2420   value_287X = arg0K0;
2421   if ((3 == (3 & value_287X))) {
2422     arg0K0 = (-4 & value_287X);
2423     goto L12420;}
2424   else {
2425     arg0K0 = value_287X;
2426     goto L12420;}}
2427  L13338: {
2428   next_288X = arg0K0;
2429   header_289X = *((long *) (((char *) (-11 + stob_243X))));
2430   merged_arg0K0 = header_289X;
2431 #ifdef USE_DIRECT_THREADING
2432   write_descriptor_return_address = &&write_descriptor_return_12;
2433 #else
2434   write_descriptor_return_tag = 12;
2435 #endif
2436   goto write_descriptor;
2437  write_descriptor_return_12:
2438   start_290X = ((char *) (-3 + stob_243X));
2439   arg1K0 = start_290X;
2440   goto L13398;}
2441  L13500: {
2442   next_291X = arg0K0;
2443   if ((3 == (3 & next_291X))) {
2444     v_292X = table_ref((Sstob_tableS), next_291X);
2445     if ((NULL == v_292X)) {
2446       link_293X = *((long *) ((((char *) (-3 + next_291X))) + 24));
2447       if ((0 == (3 & link_293X))) {
2448         arg0K0 = (3 + (-4 & link_293X));
2449         goto L13500;}
2450       else {
2451         arg0K0 = link_293X;
2452         goto L13500;}}
2453     else {
2454       arg0K0 = next_291X;
2455       goto L13453;}}
2456   else {
2457     arg0K0 = next_291X;
2458     goto L13453;}}
2459  L13784: {
2460   arg1K0 = start_283X;
2461   goto L13886;}
2462  L9477: {
2463   Simage_buffer_pointerS = (Simage_bufferS);
2464   goto L9451;}
2465  L9451: {
2466   if (((SstatusS) == NO_ERRORS)) {
2467     SstatusS = (ps_write_block((Simage_portS), ((char *) start_283X), size_284X));
2468     goto L14031;}
2469   else {
2470     goto L14031;}}
2471  L12420: {
2472   v_294X = arg0K0;
2473   merged_arg0K0 = v_294X;
2474 #ifdef USE_DIRECT_THREADING
2475   write_descriptor_return_address = &&write_descriptor_return_13;
2476 #else
2477   write_descriptor_return_tag = 13;
2478 #endif
2479   goto write_descriptor;
2480  write_descriptor_return_13:
2481   arg0K0 = (1 + i_248X);
2482   goto L12404;}
2483  L13398: {
2484   addr_295X = arg1K0;
2485   if ((addr_295X == (start_290X + (-8 + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(header_289X, 8)))))))) {
2486     if ((3 == (3 & next_288X))) {
2487       have_296X = table_ref((Sstob_tableS), next_288X);
2488       if ((NULL == have_296X)) {
2489         ps_error("traced object has no descriptor in image", 0);
2490         goto L13428;}
2491       else {
2492         goto L13428;}}
2493     else {
2494       arg0K0 = next_288X;
2495       goto L13351;}}
2496   else {
2497     thing_297X = *((long *) addr_295X);
2498     if ((3 == (3 & thing_297X))) {
2499       have_298X = table_ref((Sstob_tableS), thing_297X);
2500       if ((NULL == have_298X)) {
2501         ps_error("traced object has no descriptor in image", 0);
2502         goto L13412;}
2503       else {
2504         goto L13412;}}
2505     else {
2506       arg0K0 = thing_297X;
2507       goto L13403;}}}
2508  L13453: {
2509   next_299X = arg0K0;
2510   header_300X = *((long *) (((char *) (-11 + stob_243X))));
2511   merged_arg0K0 = header_300X;
2512 #ifdef USE_DIRECT_THREADING
2513   write_descriptor_return_address = &&write_descriptor_return_14;
2514 #else
2515   write_descriptor_return_tag = 14;
2516 #endif
2517   goto write_descriptor;
2518  write_descriptor_return_14:
2519   start_301X = ((char *) (-3 + stob_243X));
2520   arg1K0 = start_301X;
2521   goto L13529;}
2522  L13886: {
2523   addr_302X = arg1K0;
2524   if ((addr_302X == (start_283X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(header_282X, 8))))))) {
2525     goto L14031;}
2526   else {
2527     thing_303X = *((long *) addr_302X);
2528     if ((3 == (3 & thing_303X))) {
2529       have_304X = table_ref((Sstob_tableS), thing_303X);
2530       if ((NULL == have_304X)) {
2531         ps_error("traced object has no descriptor in image", 0);
2532         goto L13900;}
2533       else {
2534         goto L13900;}}
2535     else {
2536       arg0K0 = thing_303X;
2537       goto L13891;}}}
2538  L13428: {
2539   arg0K0 = (have_296X->new_descriptor);
2540   goto L13351;}
2541  L13351: {
2542   value_305X = arg0K0;
2543   if ((3 == (3 & value_305X))) {
2544     merged_arg0K0 = (-4 & value_305X);
2545 #ifdef USE_DIRECT_THREADING
2546     write_descriptor_return_address = &&write_descriptor_return_15;
2547 #else
2548     write_descriptor_return_tag = 15;
2549 #endif
2550     goto write_descriptor;
2551    write_descriptor_return_15:
2552     goto L14031;}
2553   else {
2554     merged_arg0K0 = value_305X;
2555 #ifdef USE_DIRECT_THREADING
2556     write_descriptor_return_address = &&write_descriptor_return_16;
2557 #else
2558     write_descriptor_return_tag = 16;
2559 #endif
2560     goto write_descriptor;
2561    write_descriptor_return_16:
2562     goto L14031;}}
2563  L13412: {
2564   arg0K0 = (have_298X->new_descriptor);
2565   goto L13403;}
2566  L13403: {
2567   v_306X = arg0K0;
2568   merged_arg0K0 = v_306X;
2569 #ifdef USE_DIRECT_THREADING
2570   write_descriptor_return_address = &&write_descriptor_return_17;
2571 #else
2572   write_descriptor_return_tag = 17;
2573 #endif
2574   goto write_descriptor;
2575  write_descriptor_return_17:
2576   arg1K0 = (addr_295X + 8);
2577   goto L13398;}
2578  L13529: {
2579   addr_307X = arg1K0;
2580   if ((addr_307X == (start_301X + (-16 + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(header_300X, 8)))))))) {
2581     x_308X = *((long *) ((((char *) (-3 + stob_243X))) + 8));
2582     if ((5 == x_308X)) {
2583       arg0K0 = 529;
2584       goto L13478;}
2585     else {
2586       thing_309X = *((long *) ((((char *) (-3 + stob_243X))) + 16));
2587       if ((3 == (3 & thing_309X))) {
2588         have_310X = table_ref((Sstob_tableS), thing_309X);
2589         if ((NULL == have_310X)) {
2590           ps_error("traced object has no descriptor in image", 0);
2591           goto L13590;}
2592         else {
2593           goto L13590;}}
2594       else {
2595         arg0K0 = thing_309X;
2596         goto L13478;}}}
2597   else {
2598     thing_311X = *((long *) addr_307X);
2599     if ((3 == (3 & thing_311X))) {
2600       have_312X = table_ref((Sstob_tableS), thing_311X);
2601       if ((NULL == have_312X)) {
2602         ps_error("traced object has no descriptor in image", 0);
2603         goto L13543;}
2604       else {
2605         goto L13543;}}
2606     else {
2607       arg0K0 = thing_311X;
2608       goto L13534;}}}
2609  L13900: {
2610   arg0K0 = (have_304X->new_descriptor);
2611   goto L13891;}
2612  L13891: {
2613   v_313X = arg0K0;
2614   merged_arg0K0 = v_313X;
2615 #ifdef USE_DIRECT_THREADING
2616   write_descriptor_return_address = &&write_descriptor_return_18;
2617 #else
2618   write_descriptor_return_tag = 18;
2619 #endif
2620   goto write_descriptor;
2621  write_descriptor_return_18:
2622   arg1K0 = (addr_302X + 8);
2623   goto L13886;}
2624  L13478: {
2625   v_314X = arg0K0;
2626   merged_arg0K0 = v_314X;
2627 #ifdef USE_DIRECT_THREADING
2628   write_descriptor_return_address = &&write_descriptor_return_19;
2629 #else
2630   write_descriptor_return_tag = 19;
2631 #endif
2632   goto write_descriptor;
2633  write_descriptor_return_19:
2634   if ((3 == (3 & next_299X))) {
2635     have_315X = table_ref((Sstob_tableS), next_299X);
2636     if ((NULL == have_315X)) {
2637       ps_error("traced object has no descriptor in image", 0);
2638       goto L13566;}
2639     else {
2640       goto L13566;}}
2641   else {
2642     arg0K0 = next_299X;
2643     goto L13482;}}
2644  L13590: {
2645   arg0K0 = (have_310X->new_descriptor);
2646   goto L13478;}
2647  L13543: {
2648   arg0K0 = (have_312X->new_descriptor);
2649   goto L13534;}
2650  L13534: {
2651   v_316X = arg0K0;
2652   merged_arg0K0 = v_316X;
2653 #ifdef USE_DIRECT_THREADING
2654   write_descriptor_return_address = &&write_descriptor_return_20;
2655 #else
2656   write_descriptor_return_tag = 20;
2657 #endif
2658   goto write_descriptor;
2659  write_descriptor_return_20:
2660   arg1K0 = (addr_307X + 8);
2661   goto L13529;}
2662  L13566: {
2663   arg0K0 = (have_315X->new_descriptor);
2664   goto L13482;}
2665  L13482: {
2666   value_317X = arg0K0;
2667   if ((3 == (3 & value_317X))) {
2668     merged_arg0K0 = (-4 & value_317X);
2669 #ifdef USE_DIRECT_THREADING
2670     write_descriptor_return_address = &&write_descriptor_return_21;
2671 #else
2672     write_descriptor_return_tag = 21;
2673 #endif
2674     goto write_descriptor;
2675    write_descriptor_return_21:
2676     goto L14031;}
2677   else {
2678     merged_arg0K0 = value_317X;
2679 #ifdef USE_DIRECT_THREADING
2680     write_descriptor_return_address = &&write_descriptor_return_22;
2681 #else
2682     write_descriptor_return_tag = 22;
2683 #endif
2684     goto write_descriptor;
2685    write_descriptor_return_22:
2686     goto L14031;}}
2687  copy_image_data: {
2688   start_187X = merged_arg1K0;
2689   size_188X = merged_arg0K1;{
2690   memmove((void *)(Simage_buffer_pointerS), (void *)start_187X,size_188X);
2691   Simage_buffer_pointerS = ((Simage_buffer_pointerS) + size_188X);
2692   if ((4096 == ((Simage_buffer_pointerS) - (Simage_bufferS)))) {
2693     have_318X = (Simage_buffer_pointerS) - (Simage_bufferS);
2694     if ((0 < have_318X)) {
2695       if (((SstatusS) == NO_ERRORS)) {
2696         SstatusS = (ps_write_block((Simage_portS), ((char *) (Simage_bufferS)), have_318X));
2697         goto L6919;}
2698       else {
2699         goto L6919;}}
2700     else {
2701 #ifdef USE_DIRECT_THREADING
2702       goto *copy_image_data_return_address;
2703 #else
2704       goto copy_image_data_return;
2705 #endif
2706 }}
2707   else {
2708 #ifdef USE_DIRECT_THREADING
2709     goto *copy_image_data_return_address;
2710 #else
2711     goto copy_image_data_return;
2712 #endif
2713 }}
2714  L6919: {
2715   Simage_buffer_pointerS = (Simage_bufferS);
2716 #ifdef USE_DIRECT_THREADING
2717   goto *copy_image_data_return_address;
2718 #else
2719   goto copy_image_data_return;
2720 #endif
2721 }
2722 #ifndef USE_DIRECT_THREADING
2723  copy_image_data_return:
2724   switch (copy_image_data_return_tag) {
2725   case 0: goto copy_image_data_return_0;
2726   case 1: goto copy_image_data_return_1;
2727   default: goto copy_image_data_return_2;
2728   }
2729 #endif
2730 }
2731 
2732  write_shared_table: {
2733   table_186X = merged_arg0K0;{
2734   merged_arg0K0 = (*((long *) (((char *) (-11 + table_186X)))));
2735 #ifdef USE_DIRECT_THREADING
2736   write_descriptor_return_address = &&write_descriptor_return_23;
2737 #else
2738   write_descriptor_return_tag = 23;
2739 #endif
2740   goto write_descriptor;
2741  write_descriptor_return_23:
2742   arg0K0 = 0;
2743   goto L12494;}
2744  L12494: {
2745   i_319X = arg0K0;
2746   temp_320X = i_319X == (PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE((*((long *) (((char *) (-11 + table_186X))))), 8))), 3));
2747   if (temp_320X) {
2748     write_shared_table0_return_value = temp_320X;
2749 #ifdef USE_DIRECT_THREADING
2750     goto *write_shared_table_return_address;
2751 #else
2752     goto write_shared_table_return;
2753 #endif
2754 }
2755   else {
2756     link_321X = *((long *) ((((char *) (-3 + table_186X))) + (PS_SHIFT_LEFT_INLINE(i_319X, 3))));
2757     if ((0 == (3 & link_321X))) {
2758       arg0K0 = (3 + (-4 & link_321X));
2759       goto L12504;}
2760     else {
2761       arg0K0 = link_321X;
2762       goto L12504;}}}
2763  L12504: {
2764   shared_322X = arg0K0;
2765   arg0K0 = shared_322X;
2766   goto L12538;}
2767  L12538: {
2768   next_323X = arg0K0;
2769   if ((3 == (3 & next_323X))) {
2770     v_324X = table_ref((Sstob_tableS), next_323X);
2771     if ((NULL == v_324X)) {
2772       link_325X = *((long *) ((((char *) (-3 + next_323X))) + 24));
2773       if ((0 == (3 & link_325X))) {
2774         arg0K0 = (3 + (-4 & link_325X));
2775         goto L12538;}
2776       else {
2777         arg0K0 = link_325X;
2778         goto L12538;}}
2779     else {
2780       arg0K0 = next_323X;
2781       goto L12506;}}
2782   else {
2783     arg0K0 = next_323X;
2784     goto L12506;}}
2785  L12506: {
2786   thing_326X = arg0K0;
2787   if ((3 == (3 & thing_326X))) {
2788     have_327X = table_ref((Sstob_tableS), thing_326X);
2789     if ((NULL == have_327X)) {
2790       ps_error("traced object has no descriptor in image", 0);
2791       goto L12557;}
2792     else {
2793       goto L12557;}}
2794   else {
2795     arg0K0 = thing_326X;
2796     goto L12508;}}
2797  L12557: {
2798   arg0K0 = (have_327X->new_descriptor);
2799   goto L12508;}
2800  L12508: {
2801   value_328X = arg0K0;
2802   if ((3 == (3 & value_328X))) {
2803     arg0K0 = (-4 & value_328X);
2804     goto L12510;}
2805   else {
2806     arg0K0 = value_328X;
2807     goto L12510;}}
2808  L12510: {
2809   v_329X = arg0K0;
2810   merged_arg0K0 = v_329X;
2811 #ifdef USE_DIRECT_THREADING
2812   write_descriptor_return_address = &&write_descriptor_return_24;
2813 #else
2814   write_descriptor_return_tag = 24;
2815 #endif
2816   goto write_descriptor;
2817  write_descriptor_return_24:
2818   arg0K0 = (1 + i_319X);
2819   goto L12494;}
2820 #ifndef USE_DIRECT_THREADING
2821  write_shared_table_return:
2822   switch (write_shared_table_return_tag) {
2823   case 0: goto write_shared_table_return_0;
2824   default: goto write_shared_table_return_1;
2825   }
2826 #endif
2827 }
2828 
2829  write_descriptor: {
2830   descriptor_185X = merged_arg0K0;{
2831   *((long *) (Simage_buffer_pointerS)) = (long) (descriptor_185X);
2832   Simage_buffer_pointerS = ((Simage_buffer_pointerS) + 8);
2833   if ((4096 == ((Simage_buffer_pointerS) - (Simage_bufferS)))) {
2834     have_330X = (Simage_buffer_pointerS) - (Simage_bufferS);
2835     if ((0 < have_330X)) {
2836       if (((SstatusS) == NO_ERRORS)) {
2837         SstatusS = (ps_write_block((Simage_portS), ((char *) (Simage_bufferS)), have_330X));
2838         goto L6894;}
2839       else {
2840         goto L6894;}}
2841     else {
2842 #ifdef USE_DIRECT_THREADING
2843       goto *write_descriptor_return_address;
2844 #else
2845       goto write_descriptor_return;
2846 #endif
2847 }}
2848   else {
2849 #ifdef USE_DIRECT_THREADING
2850     goto *write_descriptor_return_address;
2851 #else
2852     goto write_descriptor_return;
2853 #endif
2854 }}
2855  L6894: {
2856   Simage_buffer_pointerS = (Simage_bufferS);
2857 #ifdef USE_DIRECT_THREADING
2858   goto *write_descriptor_return_address;
2859 #else
2860   goto write_descriptor_return;
2861 #endif
2862 }
2863 #ifndef USE_DIRECT_THREADING
2864  write_descriptor_return:
2865   switch (write_descriptor_return_tag) {
2866   case 0: goto write_descriptor_return_0;
2867   case 1: goto write_descriptor_return_1;
2868   case 2: goto write_descriptor_return_2;
2869   case 3: goto write_descriptor_return_3;
2870   case 4: goto write_descriptor_return_4;
2871   case 5: goto write_descriptor_return_5;
2872   case 6: goto write_descriptor_return_6;
2873   case 7: goto write_descriptor_return_7;
2874   case 8: goto write_descriptor_return_8;
2875   case 9: goto write_descriptor_return_9;
2876   case 10: goto write_descriptor_return_10;
2877   case 11: goto write_descriptor_return_11;
2878   case 12: goto write_descriptor_return_12;
2879   case 13: goto write_descriptor_return_13;
2880   case 14: goto write_descriptor_return_14;
2881   case 15: goto write_descriptor_return_15;
2882   case 16: goto write_descriptor_return_16;
2883   case 17: goto write_descriptor_return_17;
2884   case 18: goto write_descriptor_return_18;
2885   case 19: goto write_descriptor_return_19;
2886   case 20: goto write_descriptor_return_20;
2887   case 21: goto write_descriptor_return_21;
2888   case 22: goto write_descriptor_return_22;
2889   case 23: goto write_descriptor_return_23;
2890   default: goto write_descriptor_return_24;
2891   }
2892 #endif
2893 }
2894 
2895 }
s48_collect(char force_majorP_331X)2896 void s48_collect(char force_majorP_331X)
2897 {
2898   char * arg1K1;
2899   char * arg1K0;
2900   long arg0K0;
2901   long x2_352X;
2902   long h_351X;
2903   char * a_350X;
2904   long value_349X;
2905   char * scan_348X;
2906   char * next_347X;
2907   char * end_346X;
2908   char * start_345X;
2909   long end_mseconds_344X;
2910   long end_seconds_343X;
2911   char v_342X;
2912   char * end_341X;
2913   char * x_340X;
2914   char * end_339X;
2915   char * start_338X;
2916   char * temp_337X;
2917   char * temp_336X;
2918   char * temp_335X;
2919   char * temp_334X;
2920   long start_mseconds_333X;
2921   long start_seconds_332X;
2922  {  start_seconds_332X = s48_run_time(&start_mseconds_333X);
2923   Sfrom_beginS = (Snewspace_beginS);
2924   Sfrom_endS = (Snewspace_endS);
2925   temp_334X = s48_SlimitS;
2926   s48_SlimitS = (Soldspace_limitS);
2927   Soldspace_limitS = temp_334X;
2928   temp_335X = s48_ShpS;
2929   s48_ShpS = (Soldspace_hpS);
2930   Soldspace_hpS = temp_335X;
2931   temp_336X = Snewspace_beginS;
2932   Snewspace_beginS = (Soldspace_beginS);
2933   Soldspace_beginS = temp_336X;
2934   temp_337X = Snewspace_endS;
2935   Snewspace_endS = (Soldspace_endS);
2936   Soldspace_endS = temp_337X;
2937   s48_ShpS = (Snewspace_beginS);
2938   Sweak_pointer_hpS = NULL;s48_gc_root();
2939   arg1K0 = (Snewspace_beginS);
2940   goto L14786;}
2941  L14786: {
2942   start_338X = arg1K0;
2943   end_339X = s48_ShpS;s48_trace_locationsB(start_338X, end_339X);
2944   if (((PS_SHIFT_RIGHT_INLINE(((s48_SlimitS) - (s48_ShpS)), 3)) < 0)) {
2945     ps_error("GC error: ran out of space in new heap", 0);
2946     goto L14722;}
2947   else {
2948     if ((end_339X < (s48_ShpS))) {
2949       arg1K0 = end_339X;
2950       goto L14786;}
2951     else {
2952       goto L14722;}}}
2953  L14722: {
2954   if (((Sweak_pointer_hpS) == NULL)) {
2955     goto L14724;}
2956   else {
2957     x_340X = Sweak_pointer_limitS;
2958     end_341X = Sweak_pointer_hpS;
2959     arg1K0 = (x_340X + -2048);
2960     arg1K1 = end_341X;
2961     goto L10304;}}
2962  L14724: {
2963   v_342X = (PS_SHIFT_RIGHT_INLINE(((s48_SlimitS) - (s48_ShpS)), 3)) < ((PS_SHIFT_RIGHT_INLINE((7 + ((Snewspace_endS) - (Snewspace_beginS))), 3)) / 10);s48_post_gc_cleanup(1, v_342X);
2964   Sgc_countS = (1 + (Sgc_countS));
2965   end_seconds_343X = s48_run_time(&end_mseconds_344X);
2966   if ((end_mseconds_344X < start_mseconds_333X)) {
2967     Sgc_secondsS = (-1 + ((Sgc_secondsS) + (end_seconds_343X - start_seconds_332X)));
2968     Sgc_msecondsS = ((Sgc_msecondsS) + ((1000 + end_mseconds_344X) - start_mseconds_333X));
2969     return;}
2970   else {
2971     Sgc_secondsS = ((Sgc_secondsS) + (end_seconds_343X - start_seconds_332X));
2972     Sgc_msecondsS = ((Sgc_msecondsS) + (end_mseconds_344X - start_mseconds_333X));
2973     return;}}
2974  L10304: {
2975   start_345X = arg1K0;
2976   end_346X = arg1K1;
2977   next_347X = ((char *) (*((long *) (start_345X + 16))));
2978   arg1K0 = start_345X;
2979   goto L6538;}
2980  L6538: {
2981   scan_348X = arg1K0;
2982   if ((scan_348X < end_346X)) {
2983     *((long *) scan_348X) = (long) (2102);
2984     value_349X = *((long *) (scan_348X + 8));
2985     if ((3 == (3 & value_349X))) {
2986       a_350X = ((char *) (-3 + value_349X));
2987       if ((a_350X < (Sfrom_beginS))) {
2988         goto L6584;}
2989       else {
2990         if ((a_350X < (Sfrom_endS))) {
2991           if ((3 == (3 & value_349X))) {
2992             h_351X = *((long *) (((char *) (-11 + value_349X))));
2993             if ((3 == (3 & h_351X))) {
2994               arg0K0 = h_351X;
2995               goto L6579;}
2996             else {
2997               arg0K0 = 1;
2998               goto L6579;}}
2999           else {
3000             goto L6584;}}
3001         else {
3002           goto L6584;}}}
3003     else {
3004       goto L6584;}}
3005   else {
3006     if ((next_347X == NULL)) {
3007       if ((end_341X < (Sweak_pointer_limitS))) {
3008         *((long *) end_341X) = (long) ((70 + (PS_SHIFT_LEFT_INLINE((-8 & ((Sweak_pointer_limitS) - (end_341X + 8))), 8))));
3009         goto L14724;}
3010       else {
3011         goto L14724;}}
3012     else {
3013       arg1K0 = (next_347X + -2048);
3014       arg1K1 = next_347X;
3015       goto L10304;}}}
3016  L6584: {
3017   arg1K0 = (scan_348X + 16);
3018   goto L6538;}
3019  L6579: {
3020   x2_352X = arg0K0;
3021   *((long *) (scan_348X + 8)) = (long) (x2_352X);
3022   goto L6584;}
3023 }
s48_make_availableAgc(long len_353X)3024 void s48_make_availableAgc(long len_353X)
3025 {
3026   char x_354X;
3027  {  x_354X = ((s48_ShpS) + (-8 & (7 + len_353X))) < (s48_SlimitS);
3028   if (x_354X) {
3029     goto L14840;}
3030   else {s48_collect(0);
3031     goto L14840;}}
3032  L14840: {
3033   if ((((s48_ShpS) + (-8 & (7 + len_353X))) < (s48_SlimitS))) {
3034     return;}
3035   else {
3036     ps_error("Scheme 48 heap overflow", 0);
3037     return;}}
3038 }
s48_allocate_tracedAgc(long len_355X)3039 char * s48_allocate_tracedAgc(long len_355X)
3040 {
3041   char * new_357X;
3042   char x_356X;
3043  {  x_356X = ((s48_ShpS) + (-8 & (7 + len_355X))) < (s48_SlimitS);
3044   if (x_356X) {
3045     goto L14914;}
3046   else {s48_collect(0);
3047     goto L14914;}}
3048  L14914: {
3049   if ((((s48_ShpS) + (-8 & (7 + len_355X))) < (s48_SlimitS))) {
3050     new_357X = s48_ShpS;
3051     s48_ShpS = ((s48_ShpS) + (-8 & (7 + len_355X)));
3052     return new_357X;}
3053   else {
3054     return NULL;}}
3055 }
s48_allocate_weakAgc(long len_358X)3056 char * s48_allocate_weakAgc(long len_358X)
3057 {
3058   char * new_360X;
3059   char x_359X;
3060  {  x_359X = ((s48_ShpS) + (-8 & (7 + len_358X))) < (s48_SlimitS);
3061   if (x_359X) {
3062     goto L14986;}
3063   else {s48_collect(0);
3064     goto L14986;}}
3065  L14986: {
3066   if ((((s48_ShpS) + (-8 & (7 + len_358X))) < (s48_SlimitS))) {
3067     new_360X = s48_ShpS;
3068     s48_ShpS = ((s48_ShpS) + (-8 & (7 + len_358X)));
3069     return new_360X;}
3070   else {
3071     return NULL;}}
3072 }
s48_allocate_untracedAgc(long len_361X)3073 char * s48_allocate_untracedAgc(long len_361X)
3074 {
3075   char * new_363X;
3076   char x_362X;
3077  {  x_362X = ((s48_ShpS) + (-8 & (7 + len_361X))) < (s48_SlimitS);
3078   if (x_362X) {
3079     goto L15007;}
3080   else {s48_collect(0);
3081     goto L15007;}}
3082  L15007: {
3083   if ((((s48_ShpS) + (-8 & (7 + len_361X))) < (s48_SlimitS))) {
3084     new_363X = s48_ShpS;
3085     s48_ShpS = ((s48_ShpS) + (-8 & (7 + len_361X)));
3086     return new_363X;}
3087   else {
3088     return NULL;}}
3089 }
s48_allocate_stob(long type_364X,long size_365X)3090 long s48_allocate_stob(long type_364X, long size_365X)
3091 {
3092   long arg0K0;
3093   char * arg1K0;
3094   char * thing_373X;
3095   char * new_372X;
3096   char * new_371X;
3097   char x_370X;
3098   char x_369X;
3099   long needed_368X;
3100   long length_in_bytes_367X;
3101   char tracedP_366X;
3102  {  tracedP_366X = type_364X < 16;
3103   if (tracedP_366X) {
3104     arg0K0 = (PS_SHIFT_LEFT_INLINE(size_365X, 3));
3105     goto L15054;}
3106   else {
3107     arg0K0 = size_365X;
3108     goto L15054;}}
3109  L15054: {
3110   length_in_bytes_367X = arg0K0;
3111   needed_368X = 8 + length_in_bytes_367X;
3112   if (tracedP_366X) {
3113     x_369X = ((s48_ShpS) + (-8 & (7 + needed_368X))) < (s48_SlimitS);
3114     if (x_369X) {
3115       goto L15120;}
3116     else {s48_collect(0);
3117       goto L15120;}}
3118   else {
3119     x_370X = ((s48_ShpS) + (-8 & (7 + needed_368X))) < (s48_SlimitS);
3120     if (x_370X) {
3121       goto L15139;}
3122     else {s48_collect(0);
3123       goto L15139;}}}
3124  L15120: {
3125   if ((((s48_ShpS) + (-8 & (7 + needed_368X))) < (s48_SlimitS))) {
3126     new_371X = s48_ShpS;
3127     s48_ShpS = ((s48_ShpS) + (-8 & (7 + needed_368X)));
3128     arg1K0 = new_371X;
3129     goto L15070;}
3130   else {
3131     arg1K0 = NULL;
3132     goto L15070;}}
3133  L15139: {
3134   if ((((s48_ShpS) + (-8 & (7 + needed_368X))) < (s48_SlimitS))) {
3135     new_372X = s48_ShpS;
3136     s48_ShpS = ((s48_ShpS) + (-8 & (7 + needed_368X)));
3137     arg1K0 = new_372X;
3138     goto L15070;}
3139   else {
3140     arg1K0 = NULL;
3141     goto L15070;}}
3142  L15070: {
3143   thing_373X = arg1K0;
3144   if ((thing_373X == NULL)) {
3145     ps_error("insufficient heap space for external allocation", 0);
3146     goto L15082;}
3147   else {
3148     goto L15082;}}
3149  L15082: {
3150   *((long *) thing_373X) = (long) ((2 + (PS_SHIFT_LEFT_INLINE(((PS_SHIFT_LEFT_INLINE(length_in_bytes_367X, 6)) + type_364X), 2))));
3151   return (3 + (((long) (thing_373X + 8))));}
3152 }
s48_allocate_weak_stob(long type_374X,long size_375X)3153 long s48_allocate_weak_stob(long type_374X, long size_375X)
3154 {
3155 
3156  {  return s48_allocate_stob(type_374X, size_375X);}
3157 }
s48_read_image(char * image_filename_376X,long max_heap_size_377X)3158 long s48_read_image(char *image_filename_376X, long max_heap_size_377X)
3159 {
3160   struct image_location *arg2K0;
3161   struct table *arg3K0;
3162   char *arg5K1;
3163   char arg4K1;
3164   char arg4K0;
3165   char * arg1K0;
3166   long arg0K2;
3167   long arg0K1;
3168   long arg0K0;
3169   FILE * merged_arg6K2;
3170   struct table *merged_arg3K1;
3171   char * merged_arg1K1;
3172   char * merged_arg1K0;
3173   long merged_arg0K2;
3174   long merged_arg0K1;
3175   long merged_arg0K0;
3176 
3177 #ifdef USE_DIRECT_THREADING
3178   void *relocateD2_return_address;
3179 #else
3180   int relocateD2_return_tag;
3181 #endif
3182   long relocateD20_return_value;
3183 #ifdef USE_DIRECT_THREADING
3184   void *old_Gnew_addr_return_address;
3185 #else
3186   int old_Gnew_addr_return_tag;
3187 #endif
3188   char * old_Gnew_addr0_return_value;
3189 #ifdef USE_DIRECT_THREADING
3190   void *parse_reachable_objects_return_address;
3191 #else
3192   int parse_reachable_objects_return_tag;
3193 #endif
3194   long parse_reachable_objects0_return_value;
3195 #ifdef USE_DIRECT_THREADING
3196   void *alloc_object_return_address;
3197 #else
3198   int alloc_object_return_tag;
3199 #endif
3200   char * alloc_object0_return_value;
3201 #ifdef USE_DIRECT_THREADING
3202   void *allocate_table_return_address;
3203 #else
3204   int allocate_table_return_tag;
3205 #endif
3206   long allocate_table0_return_value;
3207 #ifdef USE_DIRECT_THREADING
3208   void *relocate_binding_table_bibopB_return_address;
3209 #else
3210   int relocate_binding_table_bibopB_return_tag;
3211 #endif
3212 #ifdef USE_DIRECT_THREADING
3213   void *relocateD0_return_address;
3214 #else
3215   int relocateD0_return_tag;
3216 #endif
3217   long relocateD00_return_value;
3218 #ifdef USE_DIRECT_THREADING
3219   void *relocate_binding_table_two_spaceB_return_address;
3220 #else
3221   int relocate_binding_table_two_spaceB_return_tag;
3222 #endif
3223 #ifdef USE_DIRECT_THREADING
3224   void *reverse_byte_orderB_return_address;
3225 #else
3226   int reverse_byte_orderB_return_tag;
3227 #endif
3228 #ifdef USE_DIRECT_THREADING
3229   void *really_read_image_area_return_address;
3230 #else
3231   int really_read_image_area_return_tag;
3232 #endif
3233   long really_read_image_area0_return_value;
3234   long address_378X;
3235   char * addr_379X;
3236   long format_380X;
3237   char * from_addr_381X;
3238   char * to_addr_382X;
3239   long image_format_383X;
3240   char * current_address_384X;
3241   long size_in_bytes_385X;
3242   long tab_386X;
3243   long image_format_387X;
3244   long table_388X;
3245   struct table *stob_table_389X;
3246   long address_390X;
3247   long table_391X;
3248   long delta_392X;
3249   char * start_393X;
3250   char * end_394X;
3251   char * new_start_addr_395X;
3252   long img_heap_size_396X;
3253   FILE * port_397X;
3254   struct image_location *image_location_753X;
3255   long v_752X;
3256   char * address_751X;
3257   char * y_750X;
3258   char * y_749X;
3259   char * v_748X;
3260   char * y_747X;
3261   char * new_address_746X;
3262   struct image_location *image_location_745X;
3263   long v_744X;
3264   struct image_location *image_location_743X;
3265   long v_742X;
3266   char * index_741X;
3267   char * new_address_740X;
3268   struct image_location *v_739X;
3269   long v_738X;
3270   char * address_737X;
3271   char * new_address_736X;
3272   char * v_735X;
3273   char * new_address_734X;
3274   long size_in_cells_733X;
3275   struct image_location *v_732X;
3276   long v_731X;
3277   char * v_730X;
3278   char * new_address_729X;
3279   long size_in_bytes_728X;
3280   long size_in_cells_727X;
3281   long header_cell_726X;
3282   char * x1_725X;
3283   char * current_addr_724X;
3284   struct image_location *v_723X;
3285   long v_722X;
3286   char * current_addr_721X;
3287   long size_in_cells_720X;
3288   long cell_719X;
3289   char * x1_718X;
3290   char * current_addr_717X;
3291   long v_716X;
3292   struct image_location *val_715X;
3293   struct image_location *image_location_714X;
3294   char * new_address_713X;
3295   char * new_712X;
3296   char x_711X;
3297   char * pointer_710X;
3298   char * new_709X;
3299   long v_708X;
3300   char x_707X;
3301   long size_in_byte_706X;
3302   long size_705X;
3303   long cell_704X;
3304   char * addr_703X;
3305   long val_702X;
3306   long next_701X;
3307   long next_700X;
3308   long link_699X;
3309   long entry_698X;
3310   long value_697X;
3311   long bucket_696X;
3312   long bucket_695X;
3313   long link_694X;
3314   long i_693X;
3315   struct image_location *image_location_692X;
3316   long v_691X;
3317   char * address_690X;
3318   long val_689X;
3319   long next_688X;
3320   long next_687X;
3321   long link_686X;
3322   long entry_685X;
3323   long value_684X;
3324   long bucket_683X;
3325   long bucket_682X;
3326   long link_681X;
3327   long i_680X;
3328   char * next_679X;
3329   long value_678X;
3330   long byte_a_677X;
3331   char * addr_b_676X;
3332   char * addr_a_675X;
3333   long j_674X;
3334   long i_673X;
3335   char * ptr_672X;
3336   long status_671X;
3337   long status_670X;
3338   char *string_669X;
3339   char okayP_668X;
3340   long status_667X;
3341   char eofP_666X;
3342   long got_665X;
3343   long need_664X;
3344   long val_663X;
3345   long val_662X;
3346   long next_661X;
3347   long next_660X;
3348   long next_659X;
3349   long next_658X;
3350   struct image_location *image_location_657X;
3351   long v_656X;
3352   long i_655X;
3353   long link_654X;
3354   long entry_653X;
3355   long link_652X;
3356   long entry_651X;
3357   char * address_650X;
3358   long cell_649X;
3359   long size_648X;
3360   char * address_647X;
3361   struct image_location **values_646X;
3362   long *keys_645X;
3363   struct table *table_644X;
3364   long d_643X;
3365   long value_642X;
3366   long value_641X;
3367   long cell_640X;
3368   long resumer_records_639X;
3369   long expr_638X;
3370   long descriptor_637X;
3371   char * ptr_636X;
3372   long bucket_635X;
3373   long bucket_634X;
3374   long bucket_633X;
3375   long bucket_632X;
3376   long expr_631X;
3377   long v_630X;
3378   char * start_629X;
3379   long link_628X;
3380   long i_627X;
3381   long link_626X;
3382   long i_625X;
3383   long expr_624X;
3384   long v_623X;
3385   long table_622X;
3386   long expr_621X;
3387   struct table *stob_table_620X;
3388   long table_619X;
3389   long expr_618X;
3390   long v_617X;
3391   struct image_location *image_location_616X;
3392   long v_615X;
3393   long descriptor_614X;
3394   long expr_613X;
3395   char * address_612X;
3396   long descriptor_611X;
3397   long expr_610X;
3398   long descriptor_609X;
3399   long expr_608X;
3400   long status_607X;
3401   long status_606X;
3402   long status_605X;
3403   char * v_604X;
3404   char * v_603X;
3405   long expr_602X;
3406   long status_601X;
3407   long descriptor_600X;
3408   long expr_599X;
3409   long status_598X;
3410   long status_597X;
3411   long status_596X;
3412   long status_595X;
3413   long status_594X;
3414   long status_593X;
3415   char eofP_592X;
3416   char v_591X;
3417   long expr_590X;
3418   long status_589X;
3419   char *string_588X;
3420   char okayP_587X;
3421   long status_586X;
3422   long status_585X;
3423   long status_584X;
3424   long status_583X;
3425   long descriptor_582X;
3426   long status_581X;
3427   long expr_580X;
3428   long expr_579X;
3429   long expr_578X;
3430   long status_577X;
3431   char eofP_576X;
3432   long got_575X;
3433   long need_574X;
3434   struct table *v_573X;
3435   long status_572X;
3436   long status_571X;
3437   long status_570X;
3438   long status_569X;
3439   long status_568X;
3440   long status_567X;
3441   char eofP_566X;
3442   char v_565X;
3443   char *string_564X;
3444   char okayP_563X;
3445   long status_562X;
3446   char eofP_561X;
3447   long expr_560X;
3448   struct table *table_559X;
3449   long i_558X;
3450   long status_557X;
3451   char eofP_556X;
3452   long got_555X;
3453   long need_554X;
3454   char * address_553X;
3455   long cells_552X;
3456   long status_551X;
3457   char eofP_550X;
3458   char ch_549X;
3459   long we_548X;
3460   long cells_547X;
3461   long status_546X;
3462   long *keys_545X;
3463   char * v_544X;
3464   long expr_543X;
3465   long status_542X;
3466   char eofP_541X;
3467   long thing_540X;
3468   long status_539X;
3469   long wh_538X;
3470   long cells_537X;
3471   long v_536X;
3472   long byte_a_535X;
3473   char * addr_b_534X;
3474   char * addr_a_533X;
3475   long j_532X;
3476   long i_531X;
3477   long status_530X;
3478   long v_529X;
3479   char x_528X;
3480   long size_in_byte_527X;
3481   char * new_hp_526X;
3482   long delta_525X;
3483   char reverse_byte_orderP_524X;
3484   long status_523X;
3485   char eofP_522X;
3486   long thing_521X;
3487   long status_520X;
3488   long expr_519X;
3489   long status_518X;
3490   char eofP_517X;
3491   long thing_516X;
3492   long status_515X;
3493   long le_514X;
3494   long cells_513X;
3495   long status_512X;
3496   char eofP_511X;
3497   long thing_510X;
3498   long status_509X;
3499   long expr_508X;
3500   long status_507X;
3501   char eofP_506X;
3502   long thing_505X;
3503   long status_504X;
3504   long lh_503X;
3505   long cells_502X;
3506   long status_501X;
3507   char eofP_500X;
3508   long got_499X;
3509   char * new_addr_498X;
3510   long status_497X;
3511   char eofP_496X;
3512   long thing_495X;
3513   long status_494X;
3514   long expr_493X;
3515   long status_492X;
3516   char eofP_491X;
3517   long thing_490X;
3518   long status_489X;
3519   long se_488X;
3520   long cells_487X;
3521   char * temp_486X;
3522   char * temp_485X;
3523   char * temp_484X;
3524   char * temp_483X;
3525   long semisize_482X;
3526   long status_481X;
3527   char eofP_480X;
3528   long thing_479X;
3529   long status_478X;
3530   long expr_477X;
3531   long status_476X;
3532   char eofP_475X;
3533   long thing_474X;
3534   long status_473X;
3535   long sh_472X;
3536   long cells_471X;
3537   long cells_470X;
3538   char * heap_469X;
3539   long heap_size_468X;
3540   long status_467X;
3541   long status_466X;
3542   char eofP_465X;
3543   long thing_464X;
3544   long status_463X;
3545   long status_462X;
3546   char eofP_461X;
3547   long thing_460X;
3548   long status_459X;
3549   long sb_458X;
3550   long cells_457X;
3551   long status_456X;
3552   char eofP_455X;
3553   long thing_454X;
3554   long status_453X;
3555   long cells_452X;
3556   long minimum_size_451X;
3557   char * image_start_address_450X;
3558   long format_449X;
3559   long status_448X;
3560   long status_447X;
3561   long status_446X;
3562   long status_445X;
3563   long status_444X;
3564   long status_443X;
3565   char eofP_442X;
3566   long thing_441X;
3567   long status_440X;
3568   long status_439X;
3569   char eofP_438X;
3570   long thing_437X;
3571   long status_436X;
3572   long status_435X;
3573   long status_434X;
3574   long status_433X;
3575   long status_432X;
3576   long status_431X;
3577   long old_bytes_per_cell_430X;
3578   long status_429X;
3579   char eofP_428X;
3580   char thing_427X;
3581   long status_426X;
3582   char eofP_425X;
3583   long thing_424X;
3584   long status_423X;
3585   long format_422X;
3586   long status_421X;
3587   char eofP_420X;
3588   long status_419X;
3589   char eofP_418X;
3590   char ch_417X;
3591   long i_416X;
3592   long status_415X;
3593   char eofP_414X;
3594   long n_413X;
3595   long status_412X;
3596   char same_versionP_411X;
3597   long status_410X;
3598   char eofP_409X;
3599   long status_408X;
3600   char eofP_407X;
3601   char ch_406X;
3602   long status_405X;
3603   long status_404X;
3604   char eofP_403X;
3605   char ch_402X;
3606   long status_401X;
3607   long status_400X;
3608   long status_399X;
3609   FILE * port_398X;
3610  {  SstatusS = NO_ERRORS;
3611   SeofPS = 0;
3612   port_398X = ps_open_input_file(image_filename_376X, &status_399X);
3613   if ((status_399X == NO_ERRORS)) {
3614     status_400X = SstatusS;
3615     if ((status_400X == NO_ERRORS)) {
3616       if ((SeofPS)) {
3617         goto L7392;}
3618       else {
3619         goto L8915;}}
3620     else {
3621       goto L7392;}}
3622   else {
3623     ps_write_string("Can't open heap image file", (stderr));
3624     { long ignoreXX;
3625     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3626     ps_write_string((ps_error_string(status_399X)), (stderr));
3627     { long ignoreXX;
3628     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3629     return -1;}}
3630  L7392: {
3631   status_401X = SstatusS;
3632   if ((status_401X == NO_ERRORS)) {
3633     if ((SeofPS)) {
3634       goto L7443;}
3635     else {
3636       goto L8835;}}
3637   else {
3638     goto L7443;}}
3639  L8915: {
3640   PS_READ_CHAR(port_398X, ch_402X, eofP_403X, status_404X)
3641   if (eofP_403X) {
3642     arg4K0 = eofP_403X;
3643     arg0K1 = status_404X;
3644     goto L7366;}
3645   else {
3646     if ((status_404X == NO_ERRORS)) {
3647       if ((12 == ch_402X)) {
3648         arg4K0 = 0;
3649         arg0K1 = status_404X;
3650         goto L7366;}
3651       else {
3652         goto L8915;}}
3653     else {
3654       arg4K0 = eofP_403X;
3655       arg0K1 = status_404X;
3656       goto L7366;}}}
3657  L7443: {
3658   status_405X = SstatusS;
3659   if ((status_405X == NO_ERRORS)) {
3660     if ((SeofPS)) {
3661       arg4K0 = 0;
3662       goto L7494;}
3663     else {
3664       arg0K0 = 0;
3665       goto L8769;}}
3666   else {
3667     arg4K0 = 0;
3668     goto L7494;}}
3669  L8835: {
3670   PS_READ_CHAR(port_398X, ch_406X, eofP_407X, status_408X)
3671   if (eofP_407X) {
3672     arg4K0 = eofP_407X;
3673     arg0K1 = status_408X;
3674     goto L7417;}
3675   else {
3676     if ((status_408X == NO_ERRORS)) {
3677       if ((10 == ch_406X)) {
3678         arg4K0 = 0;
3679         arg0K1 = status_408X;
3680         goto L7417;}
3681       else {
3682         goto L8835;}}
3683     else {
3684       arg4K0 = eofP_407X;
3685       arg0K1 = status_408X;
3686       goto L7417;}}}
3687  L7366: {
3688   eofP_409X = arg4K0;
3689   status_410X = arg0K1;
3690   if (eofP_409X) {
3691     SeofPS = 1;
3692     goto L7392;}
3693   else {
3694     if ((status_410X == NO_ERRORS)) {
3695       goto L7392;}
3696     else {
3697       SeofPS = 1;
3698       if (((SstatusS) == NO_ERRORS)) {
3699         SstatusS = status_410X;
3700         goto L7392;}
3701       else {
3702         goto L7392;}}}}
3703  L7494: {
3704   same_versionP_411X = arg4K0;
3705   status_412X = SstatusS;
3706   if ((status_412X == NO_ERRORS)) {
3707     if ((SeofPS)) {
3708       arg0K0 = -1;
3709       goto L7547;}
3710     else {
3711       PS_READ_INTEGER(port_398X, n_413X, eofP_414X, status_415X)
3712       if (eofP_414X) {
3713         SeofPS = 1;
3714         arg0K0 = -1;
3715         goto L7547;}
3716       else {
3717         if ((status_415X == NO_ERRORS)) {
3718           arg0K0 = n_413X;
3719           goto L7547;}
3720         else {
3721           SeofPS = 1;
3722           if (((SstatusS) == NO_ERRORS)) {
3723             SstatusS = status_415X;
3724             arg0K0 = -1;
3725             goto L7547;}
3726           else {
3727             arg0K0 = -1;
3728             goto L7547;}}}}}
3729   else {
3730     arg0K0 = -1;
3731     goto L7547;}}
3732  L8769: {
3733   i_416X = arg0K0;
3734   PS_READ_CHAR(port_398X, ch_417X, eofP_418X, status_419X)
3735   if (eofP_418X) {
3736     arg4K0 = 0;
3737     arg4K1 = eofP_418X;
3738     arg0K2 = status_419X;
3739     goto L7468;}
3740   else {
3741     if ((status_419X == NO_ERRORS)) {
3742       if ((i_416X == (strlen((char *) "Vanilla 40")))) {
3743         arg4K0 = (10 == ch_417X);
3744         arg4K1 = 0;
3745         arg0K2 = status_419X;
3746         goto L7468;}
3747       else {
3748         if ((ch_417X == (*("Vanilla 40" + i_416X)))) {
3749           arg0K0 = (1 + i_416X);
3750           goto L8769;}
3751         else {
3752           arg4K0 = 0;
3753           arg4K1 = 0;
3754           arg0K2 = status_419X;
3755           goto L7468;}}}
3756     else {
3757       arg4K0 = 0;
3758       arg4K1 = eofP_418X;
3759       arg0K2 = status_419X;
3760       goto L7468;}}}
3761  L7417: {
3762   eofP_420X = arg4K0;
3763   status_421X = arg0K1;
3764   if (eofP_420X) {
3765     SeofPS = 1;
3766     goto L7443;}
3767   else {
3768     if ((status_421X == NO_ERRORS)) {
3769       goto L7443;}
3770     else {
3771       SeofPS = 1;
3772       if (((SstatusS) == NO_ERRORS)) {
3773         SstatusS = status_421X;
3774         goto L7443;}
3775       else {
3776         goto L7443;}}}}
3777  L7547: {
3778   format_422X = arg0K0;
3779   status_423X = SstatusS;
3780   if ((status_423X == NO_ERRORS)) {
3781     if ((SeofPS)) {
3782       arg0K0 = -1;
3783       goto L7600;}
3784     else {
3785       PS_READ_INTEGER(port_398X, thing_424X, eofP_425X, status_426X)
3786       if (eofP_425X) {
3787         SeofPS = 1;
3788         arg0K0 = -1;
3789         goto L7600;}
3790       else {
3791         if ((status_426X == NO_ERRORS)) {
3792           arg0K0 = thing_424X;
3793           goto L7600;}
3794         else {
3795           SeofPS = 1;
3796           if (((SstatusS) == NO_ERRORS)) {
3797             SstatusS = status_426X;
3798             arg0K0 = -1;
3799             goto L7600;}
3800           else {
3801             arg0K0 = -1;
3802             goto L7600;}}}}}
3803   else {
3804     arg0K0 = -1;
3805     goto L7600;}}
3806  L7468: {
3807   thing_427X = arg4K0;
3808   eofP_428X = arg4K1;
3809   status_429X = arg0K2;
3810   if (eofP_428X) {
3811     SeofPS = 1;
3812     arg4K0 = 0;
3813     goto L7494;}
3814   else {
3815     if ((status_429X == NO_ERRORS)) {
3816       arg4K0 = thing_427X;
3817       goto L7494;}
3818     else {
3819       SeofPS = 1;
3820       if (((SstatusS) == NO_ERRORS)) {
3821         SstatusS = status_429X;
3822         arg4K0 = 0;
3823         goto L7494;}
3824       else {
3825         arg4K0 = 0;
3826         goto L7494;}}}}
3827  L7600: {
3828   old_bytes_per_cell_430X = arg0K0;
3829   if (((SstatusS) == NO_ERRORS)) {
3830     if ((SeofPS)) {
3831       SstatusS = EDOM;
3832       ps_write_string("Premature EOF when reading image file", (stderr));
3833       { long ignoreXX;
3834       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3835       status_431X = SstatusS;
3836       if ((status_431X == NO_ERRORS)) {
3837         goto L8048;}
3838       else {
3839         ps_write_string((ps_error_string((SstatusS))), (stderr));
3840         { long ignoreXX;
3841         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3842         goto L8048;}}
3843     else {
3844       if (same_versionP_411X) {
3845         if ((0 == format_422X)) {
3846           goto L8112;}
3847         else {
3848           if ((1 == format_422X)) {
3849             goto L8112;}
3850           else {
3851             ps_write_string("Unknown image format", (stderr));
3852             { long ignoreXX;
3853             PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3854             status_432X = SstatusS;
3855             if ((status_432X == NO_ERRORS)) {
3856               goto L8123;}
3857             else {
3858               ps_write_string((ps_error_string((SstatusS))), (stderr));
3859               { long ignoreXX;
3860               PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3861               goto L8123;}}}}
3862       else {
3863         ps_write_string("Format of image is incompatible with this version of system", (stderr));
3864         { long ignoreXX;
3865         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3866         status_433X = SstatusS;
3867         if ((status_433X == NO_ERRORS)) {
3868           goto L8082;}
3869         else {
3870           ps_write_string((ps_error_string((SstatusS))), (stderr));
3871           { long ignoreXX;
3872           PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3873           goto L8082;}}}}
3874   else {
3875     ps_write_string("Error reading from image file", (stderr));
3876     { long ignoreXX;
3877     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3878     status_434X = SstatusS;
3879     if ((status_434X == NO_ERRORS)) {
3880       goto L8013;}
3881     else {
3882       ps_write_string((ps_error_string((SstatusS))), (stderr));
3883       { long ignoreXX;
3884       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3885       goto L8013;}}}
3886  L8048: {
3887   status_435X = ps_close(port_398X);
3888   if ((status_435X == NO_ERRORS)) {
3889     arg0K0 = -1;
3890     arg0K1 = format_422X;
3891     goto L16783;}
3892   else {
3893     ps_write_string("Error closing image file", (stderr));
3894     { long ignoreXX;
3895     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3896     arg0K0 = -1;
3897     arg0K1 = format_422X;
3898     goto L16783;}}
3899  L8112: {
3900   if ((8 == old_bytes_per_cell_430X)) {
3901     if ((0 == format_422X)) {
3902       status_436X = SstatusS;
3903       if ((status_436X == NO_ERRORS)) {
3904         if ((SeofPS)) {
3905           arg0K0 = -1;
3906           goto L4995;}
3907         else {
3908           PS_READ_INTEGER(port_398X, thing_437X, eofP_438X, status_439X)
3909           if (eofP_438X) {
3910             SeofPS = 1;
3911             arg0K0 = -1;
3912             goto L4995;}
3913           else {
3914             if ((status_439X == NO_ERRORS)) {
3915               arg0K0 = thing_437X;
3916               goto L4995;}
3917             else {
3918               SeofPS = 1;
3919               if (((SstatusS) == NO_ERRORS)) {
3920                 SstatusS = status_439X;
3921                 arg0K0 = -1;
3922                 goto L4995;}
3923               else {
3924                 arg0K0 = -1;
3925                 goto L4995;}}}}}
3926       else {
3927         arg0K0 = -1;
3928         goto L4995;}}
3929     else {
3930       if ((1 == format_422X)) {
3931         status_440X = SstatusS;
3932         if ((status_440X == NO_ERRORS)) {
3933           if ((SeofPS)) {
3934             arg0K0 = -1;
3935             goto L5113;}
3936           else {
3937             PS_READ_INTEGER(port_398X, thing_441X, eofP_442X, status_443X)
3938             if (eofP_442X) {
3939               SeofPS = 1;
3940               arg0K0 = -1;
3941               goto L5113;}
3942             else {
3943               if ((status_443X == NO_ERRORS)) {
3944                 arg0K0 = thing_441X;
3945                 goto L5113;}
3946               else {
3947                 SeofPS = 1;
3948                 if (((SstatusS) == NO_ERRORS)) {
3949                   SstatusS = status_443X;
3950                   arg0K0 = -1;
3951                   goto L5113;}
3952                 else {
3953                   arg0K0 = -1;
3954                   goto L5113;}}}}}
3955         else {
3956           arg0K0 = -1;
3957           goto L5113;}}
3958       else {
3959         ps_error("check-all-data!: Unknown image format (this can't happen)", 0);
3960         goto L7642;}}}
3961   else {
3962     ps_write_string("Incompatible bytes-per-cell in image", (stderr));
3963     { long ignoreXX;
3964     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3965     status_444X = SstatusS;
3966     if ((status_444X == NO_ERRORS)) {
3967       goto L8157;}
3968     else {
3969       ps_write_string((ps_error_string((SstatusS))), (stderr));
3970       { long ignoreXX;
3971       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3972       goto L8157;}}}
3973  L8123: {
3974   status_445X = ps_close(port_398X);
3975   if ((status_445X == NO_ERRORS)) {
3976     arg0K0 = -1;
3977     arg0K1 = format_422X;
3978     goto L16783;}
3979   else {
3980     ps_write_string("Error closing image file", (stderr));
3981     { long ignoreXX;
3982     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3983     arg0K0 = -1;
3984     arg0K1 = format_422X;
3985     goto L16783;}}
3986  L8082: {
3987   status_446X = ps_close(port_398X);
3988   if ((status_446X == NO_ERRORS)) {
3989     arg0K0 = -1;
3990     arg0K1 = format_422X;
3991     goto L16783;}
3992   else {
3993     ps_write_string("Error closing image file", (stderr));
3994     { long ignoreXX;
3995     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
3996     arg0K0 = -1;
3997     arg0K1 = format_422X;
3998     goto L16783;}}
3999  L8013: {
4000   status_447X = ps_close(port_398X);
4001   if ((status_447X == NO_ERRORS)) {
4002     arg0K0 = -1;
4003     arg0K1 = format_422X;
4004     goto L16783;}
4005   else {
4006     ps_write_string("Error closing image file", (stderr));
4007     { long ignoreXX;
4008     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4009     arg0K0 = -1;
4010     arg0K1 = format_422X;
4011     goto L16783;}}
4012  L16783: {
4013   status_448X = arg0K0;
4014   format_449X = arg0K1;
4015   if ((0 == status_448X)) {
4016     if (((SstatusS) == NO_ERRORS)) {
4017       image_start_address_450X = Simg_start_addrS;
4018       minimum_size_451X = PS_SHIFT_LEFT_INLINE((Simg_heap_sizeS), 2);
4019       if ((max_heap_size_377X < minimum_size_451X)) {
4020         ps_write_string("Heap size ", (stderr));
4021         ps_write_integer(max_heap_size_377X, (stderr));
4022         ps_write_string(" is too small, using ", (stderr));
4023         ps_write_integer(minimum_size_451X, (stderr));
4024         ps_write_string(" cells", (stderr));
4025         { long ignoreXX;
4026         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4027         arg0K0 = minimum_size_451X;
4028         goto L2325;}
4029       else {
4030         arg0K0 = max_heap_size_377X;
4031         goto L2325;}}
4032     else {
4033       return -1;}}
4034   else {
4035     return -1;}}
4036  L4995: {
4037   cells_452X = arg0K0;
4038   Simg_start_addrS = (((char *) (PS_SHIFT_LEFT_INLINE(cells_452X, 3))));
4039   status_453X = SstatusS;
4040   if ((status_453X == NO_ERRORS)) {
4041     if ((SeofPS)) {
4042       arg0K0 = -1;
4043       goto L5050;}
4044     else {
4045       PS_READ_INTEGER(port_398X, thing_454X, eofP_455X, status_456X)
4046       if (eofP_455X) {
4047         SeofPS = 1;
4048         arg0K0 = -1;
4049         goto L5050;}
4050       else {
4051         if ((status_456X == NO_ERRORS)) {
4052           arg0K0 = thing_454X;
4053           goto L5050;}
4054         else {
4055           SeofPS = 1;
4056           if (((SstatusS) == NO_ERRORS)) {
4057             SstatusS = status_456X;
4058             arg0K0 = -1;
4059             goto L5050;}
4060           else {
4061             arg0K0 = -1;
4062             goto L5050;}}}}}
4063   else {
4064     arg0K0 = -1;
4065     goto L5050;}}
4066  L5113: {
4067   cells_457X = arg0K0;
4068   sb_458X = PS_SHIFT_LEFT_INLINE(cells_457X, 3);
4069   status_459X = SstatusS;
4070   if ((status_459X == NO_ERRORS)) {
4071     if ((SeofPS)) {
4072       arg0K0 = -1;
4073       goto L5168;}
4074     else {
4075       PS_READ_INTEGER(port_398X, thing_460X, eofP_461X, status_462X)
4076       if (eofP_461X) {
4077         SeofPS = 1;
4078         arg0K0 = -1;
4079         goto L5168;}
4080       else {
4081         if ((status_462X == NO_ERRORS)) {
4082           arg0K0 = thing_460X;
4083           goto L5168;}
4084         else {
4085           SeofPS = 1;
4086           if (((SstatusS) == NO_ERRORS)) {
4087             SstatusS = status_462X;
4088             arg0K0 = -1;
4089             goto L5168;}
4090           else {
4091             arg0K0 = -1;
4092             goto L5168;}}}}}
4093   else {
4094     arg0K0 = -1;
4095     goto L5168;}}
4096  L7642: {
4097   status_463X = SstatusS;
4098   if ((status_463X == NO_ERRORS)) {
4099     if ((SeofPS)) {
4100       arg0K0 = -1;
4101       goto L7693;}
4102     else {
4103       PS_READ_INTEGER(port_398X, thing_464X, eofP_465X, status_466X)
4104       if (eofP_465X) {
4105         SeofPS = 1;
4106         arg0K0 = -1;
4107         goto L7693;}
4108       else {
4109         if ((status_466X == NO_ERRORS)) {
4110           arg0K0 = thing_464X;
4111           goto L7693;}
4112         else {
4113           SeofPS = 1;
4114           if (((SstatusS) == NO_ERRORS)) {
4115             SstatusS = status_466X;
4116             arg0K0 = -1;
4117             goto L7693;}
4118           else {
4119             arg0K0 = -1;
4120             goto L7693;}}}}}
4121   else {
4122     arg0K0 = -1;
4123     goto L7693;}}
4124  L8157: {
4125   status_467X = ps_close(port_398X);
4126   if ((status_467X == NO_ERRORS)) {
4127     arg0K0 = -1;
4128     arg0K1 = format_422X;
4129     goto L16783;}
4130   else {
4131     ps_write_string("Error closing image file", (stderr));
4132     { long ignoreXX;
4133     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4134     arg0K0 = -1;
4135     arg0K1 = format_422X;
4136     goto L16783;}}
4137  L2325: {
4138   heap_size_468X = arg0K0;
4139   heap_469X = (char *)malloc((PS_SHIFT_LEFT_INLINE(heap_size_468X, 4)));
4140   if ((heap_469X == NULL)) {
4141     ps_error("unable to allocate heap space", 0);
4142     goto L2341;}
4143   else {
4144     goto L2341;}}
4145  L5050: {
4146   cells_470X = arg0K0;
4147   Simg_end_addrS = (((char *) (PS_SHIFT_LEFT_INLINE(cells_470X, 3))));
4148   Simg_heap_sizeS = (PS_SHIFT_RIGHT_INLINE((7 + ((Simg_end_addrS) - (Simg_start_addrS))), 3));
4149   goto L7642;}
4150  L5168: {
4151   cells_471X = arg0K0;
4152   sh_472X = PS_SHIFT_LEFT_INLINE(cells_471X, 3);
4153   status_473X = SstatusS;
4154   if ((status_473X == NO_ERRORS)) {
4155     if ((SeofPS)) {
4156       arg0K0 = -1;
4157       goto L5223;}
4158     else {
4159       PS_READ_INTEGER(port_398X, thing_474X, eofP_475X, status_476X)
4160       if (eofP_475X) {
4161         SeofPS = 1;
4162         arg0K0 = -1;
4163         goto L5223;}
4164       else {
4165         if ((status_476X == NO_ERRORS)) {
4166           arg0K0 = thing_474X;
4167           goto L5223;}
4168         else {
4169           SeofPS = 1;
4170           if (((SstatusS) == NO_ERRORS)) {
4171             SstatusS = status_476X;
4172             arg0K0 = -1;
4173             goto L5223;}
4174           else {
4175             arg0K0 = -1;
4176             goto L5223;}}}}}
4177   else {
4178     arg0K0 = -1;
4179     goto L5223;}}
4180  L7693: {
4181   expr_477X = arg0K0;
4182   SsymbolsS = expr_477X;
4183   status_478X = SstatusS;
4184   if ((status_478X == NO_ERRORS)) {
4185     if ((SeofPS)) {
4186       arg0K0 = -1;
4187       goto L7746;}
4188     else {
4189       PS_READ_INTEGER(port_398X, thing_479X, eofP_480X, status_481X)
4190       if (eofP_480X) {
4191         SeofPS = 1;
4192         arg0K0 = -1;
4193         goto L7746;}
4194       else {
4195         if ((status_481X == NO_ERRORS)) {
4196           arg0K0 = thing_479X;
4197           goto L7746;}
4198         else {
4199           SeofPS = 1;
4200           if (((SstatusS) == NO_ERRORS)) {
4201             SstatusS = status_481X;
4202             arg0K0 = -1;
4203             goto L7746;}
4204           else {
4205             arg0K0 = -1;
4206             goto L7746;}}}}}
4207   else {
4208     arg0K0 = -1;
4209     goto L7746;}}
4210  L2341: {
4211   semisize_482X = PS_SHIFT_LEFT_INLINE(heap_size_468X, 3);
4212   Snewspace_beginS = heap_469X;
4213   Snewspace_endS = ((Snewspace_beginS) + semisize_482X);
4214   Soldspace_beginS = (Snewspace_endS);
4215   Soldspace_endS = ((Soldspace_beginS) + semisize_482X);
4216   if (((Soldspace_beginS) == image_start_address_450X)) {
4217     temp_483X = s48_SlimitS;
4218     s48_SlimitS = (Soldspace_limitS);
4219     Soldspace_limitS = temp_483X;
4220     temp_484X = s48_ShpS;
4221     s48_ShpS = (Soldspace_hpS);
4222     Soldspace_hpS = temp_484X;
4223     temp_485X = Snewspace_beginS;
4224     Snewspace_beginS = (Soldspace_beginS);
4225     Soldspace_beginS = temp_485X;
4226     temp_486X = Snewspace_endS;
4227     Snewspace_endS = (Soldspace_endS);
4228     Soldspace_endS = temp_486X;
4229     goto L2365;}
4230   else {
4231     goto L2365;}}
4232  L5223: {
4233   cells_487X = arg0K0;
4234   se_488X = PS_SHIFT_LEFT_INLINE(cells_487X, 3);
4235   status_489X = SstatusS;
4236   if ((status_489X == NO_ERRORS)) {
4237     if ((SeofPS)) {
4238       arg0K0 = -1;
4239       goto L5280;}
4240     else {
4241       PS_READ_INTEGER(port_398X, thing_490X, eofP_491X, status_492X)
4242       if (eofP_491X) {
4243         SeofPS = 1;
4244         arg0K0 = -1;
4245         goto L5280;}
4246       else {
4247         if ((status_492X == NO_ERRORS)) {
4248           arg0K0 = thing_490X;
4249           goto L5280;}
4250         else {
4251           SeofPS = 1;
4252           if (((SstatusS) == NO_ERRORS)) {
4253             SstatusS = status_492X;
4254             arg0K0 = -1;
4255             goto L5280;}
4256           else {
4257             arg0K0 = -1;
4258             goto L5280;}}}}}
4259   else {
4260     arg0K0 = -1;
4261     goto L5280;}}
4262  L7746: {
4263   expr_493X = arg0K0;
4264   Simported_bindingsS = expr_493X;
4265   status_494X = SstatusS;
4266   if ((status_494X == NO_ERRORS)) {
4267     if ((SeofPS)) {
4268       arg0K0 = -1;
4269       goto L7799;}
4270     else {
4271       PS_READ_INTEGER(port_398X, thing_495X, eofP_496X, status_497X)
4272       if (eofP_496X) {
4273         SeofPS = 1;
4274         arg0K0 = -1;
4275         goto L7799;}
4276       else {
4277         if ((status_497X == NO_ERRORS)) {
4278           arg0K0 = thing_495X;
4279           goto L7799;}
4280         else {
4281           SeofPS = 1;
4282           if (((SstatusS) == NO_ERRORS)) {
4283             SstatusS = status_497X;
4284             arg0K0 = -1;
4285             goto L7799;}
4286           else {
4287             arg0K0 = -1;
4288             goto L7799;}}}}}
4289   else {
4290     arg0K0 = -1;
4291     goto L7799;}}
4292  L2365: {
4293   Soldspace_hpS = (Soldspace_beginS);
4294   Soldspace_limitS = (Soldspace_endS);
4295   s48_ShpS = (Snewspace_beginS);
4296   s48_SlimitS = (Snewspace_endS);
4297   Snew_heap_start_addrS = (Snewspace_beginS);
4298   if (((SstatusS) == NO_ERRORS)) {
4299     new_addr_498X = (char *)malloc(8);
4300     got_499X = ps_read_block(port_398X, ((char *) new_addr_498X), 8, &eofP_500X, &status_501X);
4301     if ((status_501X == NO_ERRORS)) {
4302       if (eofP_500X) {
4303         goto L4812;}
4304       else {
4305         if ((got_499X < 8)) {
4306           goto L4812;}
4307         else {
4308           goto L4764;}}}
4309     else {
4310       SstatusS = status_501X;
4311       goto L4812;}}
4312   else {
4313     return -1;}}
4314  L5280: {
4315   cells_502X = arg0K0;
4316   lh_503X = PS_SHIFT_LEFT_INLINE(cells_502X, 3);
4317   status_504X = SstatusS;
4318   if ((status_504X == NO_ERRORS)) {
4319     if ((SeofPS)) {
4320       arg0K0 = -1;
4321       goto L5335;}
4322     else {
4323       PS_READ_INTEGER(port_398X, thing_505X, eofP_506X, status_507X)
4324       if (eofP_506X) {
4325         SeofPS = 1;
4326         arg0K0 = -1;
4327         goto L5335;}
4328       else {
4329         if ((status_507X == NO_ERRORS)) {
4330           arg0K0 = thing_505X;
4331           goto L5335;}
4332         else {
4333           SeofPS = 1;
4334           if (((SstatusS) == NO_ERRORS)) {
4335             SstatusS = status_507X;
4336             arg0K0 = -1;
4337             goto L5335;}
4338           else {
4339             arg0K0 = -1;
4340             goto L5335;}}}}}
4341   else {
4342     arg0K0 = -1;
4343     goto L5335;}}
4344  L7799: {
4345   expr_508X = arg0K0;
4346   Sexported_bindingsS = expr_508X;
4347   status_509X = SstatusS;
4348   if ((status_509X == NO_ERRORS)) {
4349     if ((SeofPS)) {
4350       arg0K0 = -1;
4351       goto L7852;}
4352     else {
4353       PS_READ_INTEGER(port_398X, thing_510X, eofP_511X, status_512X)
4354       if (eofP_511X) {
4355         SeofPS = 1;
4356         arg0K0 = -1;
4357         goto L7852;}
4358       else {
4359         if ((status_512X == NO_ERRORS)) {
4360           arg0K0 = thing_510X;
4361           goto L7852;}
4362         else {
4363           SeofPS = 1;
4364           if (((SstatusS) == NO_ERRORS)) {
4365             SstatusS = status_512X;
4366             arg0K0 = -1;
4367             goto L7852;}
4368           else {
4369             arg0K0 = -1;
4370             goto L7852;}}}}}
4371   else {
4372     arg0K0 = -1;
4373     goto L7852;}}
4374  L4812: {
4375   ps_error("byte order check failed", 0);
4376   goto L4764;}
4377  L4764: {
4378   if ((1 == (*((long *) new_addr_498X)))) {
4379     free(new_addr_498X);
4380     arg4K0 = 0;
4381     goto L16851;}
4382   else {
4383     arg0K0 = 0;
4384     arg0K1 = 7;
4385     goto L4825;}}
4386  L5335: {
4387   cells_513X = arg0K0;
4388   le_514X = PS_SHIFT_LEFT_INLINE(cells_513X, 3);
4389   status_515X = SstatusS;
4390   if ((status_515X == NO_ERRORS)) {
4391     if ((SeofPS)) {
4392       arg0K0 = -1;
4393       goto L5392;}
4394     else {
4395       PS_READ_INTEGER(port_398X, thing_516X, eofP_517X, status_518X)
4396       if (eofP_517X) {
4397         SeofPS = 1;
4398         arg0K0 = -1;
4399         goto L5392;}
4400       else {
4401         if ((status_518X == NO_ERRORS)) {
4402           arg0K0 = thing_516X;
4403           goto L5392;}
4404         else {
4405           SeofPS = 1;
4406           if (((SstatusS) == NO_ERRORS)) {
4407             SstatusS = status_518X;
4408             arg0K0 = -1;
4409             goto L5392;}
4410           else {
4411             arg0K0 = -1;
4412             goto L5392;}}}}}
4413   else {
4414     arg0K0 = -1;
4415     goto L5392;}}
4416  L7852: {
4417   expr_519X = arg0K0;
4418   Sresumer_recordsS = expr_519X;
4419   status_520X = SstatusS;
4420   if ((status_520X == NO_ERRORS)) {
4421     if ((SeofPS)) {
4422       arg0K0 = -1;
4423       goto L7905;}
4424     else {
4425       PS_READ_INTEGER(port_398X, thing_521X, eofP_522X, status_523X)
4426       if (eofP_522X) {
4427         SeofPS = 1;
4428         arg0K0 = -1;
4429         goto L7905;}
4430       else {
4431         if ((status_523X == NO_ERRORS)) {
4432           arg0K0 = thing_521X;
4433           goto L7905;}
4434         else {
4435           SeofPS = 1;
4436           if (((SstatusS) == NO_ERRORS)) {
4437             SstatusS = status_523X;
4438             arg0K0 = -1;
4439             goto L7905;}
4440           else {
4441             arg0K0 = -1;
4442             goto L7905;}}}}}
4443   else {
4444     arg0K0 = -1;
4445     goto L7905;}}
4446  L16851: {
4447   reverse_byte_orderP_524X = arg4K0;
4448   if ((0 == format_449X)) {
4449     delta_525X = (Snew_heap_start_addrS) - (Simg_start_addrS);
4450     new_hp_526X = (Simg_end_addrS) + delta_525X;
4451     size_in_byte_527X = PS_SHIFT_LEFT_INLINE((Simg_heap_sizeS), 3);
4452     x_528X = ((s48_ShpS) + (-8 & (7 + size_in_byte_527X))) < (s48_SlimitS);
4453     if (x_528X) {
4454       goto L15427;}
4455     else {s48_collect(0);
4456       goto L15427;}}
4457   else {
4458     if ((1 == format_449X)) {
4459       Sheap_image_pointerS = NULL;
4460       Ssymbol_addressS = NULL;
4461       v_529X = SsymbolsS;
4462       if ((1 == v_529X)) {
4463         arg1K0 = (Simg_end_addrS);
4464         goto L7112;}
4465       else {
4466         arg1K0 = (((char *) (-11 + (SsymbolsS))));
4467         goto L7112;}}
4468     else {
4469       ps_write_string("unknown image format", (stderr));
4470       { long ignoreXX;
4471       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4472       status_530X = SstatusS;
4473       if ((status_530X == NO_ERRORS)) {
4474         goto L16728;}
4475       else {
4476         ps_write_string((ps_error_string((SstatusS))), (stderr));
4477         { long ignoreXX;
4478         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4479         goto L16728;}}}}
4480  L4825: {
4481   i_531X = arg0K0;
4482   j_532X = arg0K1;
4483   if ((i_531X < j_532X)) {
4484     addr_a_533X = new_addr_498X + i_531X;
4485     addr_b_534X = new_addr_498X + j_532X;
4486     byte_a_535X = *((unsigned char *) addr_a_533X);
4487     *((unsigned char *) addr_a_533X) = (unsigned char) ((*((unsigned char *) addr_b_534X)));
4488     *((unsigned char *) addr_b_534X) = (unsigned char) (byte_a_535X);
4489     arg0K0 = (1 + i_531X);
4490     arg0K1 = (-1 + j_532X);
4491     goto L4825;}
4492   else {
4493     v_536X = *((long *) new_addr_498X);
4494     if ((1 == v_536X)) {
4495       goto L4784;}
4496     else {
4497       ps_error("Unable to correct byte order", 0);
4498       goto L4784;}}}
4499  L5392: {
4500   cells_537X = arg0K0;
4501   wh_538X = PS_SHIFT_LEFT_INLINE(cells_537X, 3);
4502   status_539X = SstatusS;
4503   if ((status_539X == NO_ERRORS)) {
4504     if ((SeofPS)) {
4505       arg0K0 = -1;
4506       goto L5447;}
4507     else {
4508       PS_READ_INTEGER(port_398X, thing_540X, eofP_541X, status_542X)
4509       if (eofP_541X) {
4510         SeofPS = 1;
4511         arg0K0 = -1;
4512         goto L5447;}
4513       else {
4514         if ((status_542X == NO_ERRORS)) {
4515           arg0K0 = thing_540X;
4516           goto L5447;}
4517         else {
4518           SeofPS = 1;
4519           if (((SstatusS) == NO_ERRORS)) {
4520             SstatusS = status_542X;
4521             arg0K0 = -1;
4522             goto L5447;}
4523           else {
4524             arg0K0 = -1;
4525             goto L5447;}}}}}
4526   else {
4527     arg0K0 = -1;
4528     goto L5447;}}
4529  L7905: {
4530   expr_543X = arg0K0;
4531   Sstartup_procedureS = expr_543X;
4532   if (((SstatusS) == NO_ERRORS)) {
4533     if ((SeofPS)) {
4534       arg0K0 = 0;
4535       arg0K1 = format_422X;
4536       goto L16783;}
4537     else {
4538       goto L8244;}}
4539   else {
4540     arg0K0 = 0;
4541     arg0K1 = format_422X;
4542     goto L16783;}}
4543  L15427: {
4544   if ((((s48_ShpS) + (-8 & (7 + size_in_byte_527X))) < (s48_SlimitS))) {
4545     s48_ShpS = ((s48_ShpS) + (-8 & (7 + size_in_byte_527X)));
4546     goto L15306;}
4547   else {
4548     goto L15306;}}
4549  L7112: {
4550   v_544X = arg1K0;
4551   Ssymbol_addressS = v_544X;
4552   Sheap_object_remaining_cellsS = 0;
4553   Sheap_object_pointerS = NULL;
4554   keys_545X = (long*)malloc(sizeof(long) * 4097);
4555   arg0K0 = 0;
4556   goto L7135;}
4557  L16728: {
4558   status_546X = ps_close(port_398X);
4559   if ((status_546X == NO_ERRORS)) {
4560     arg0K0 = -1;
4561     goto L16853;}
4562   else {
4563     ps_write_string("Error closing image file", (stderr));
4564     { long ignoreXX;
4565     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4566     arg0K0 = -1;
4567     goto L16853;}}
4568  L4784: {
4569   free(new_addr_498X);
4570   arg4K0 = 1;
4571   goto L16851;}
4572  L5447: {
4573   cells_547X = arg0K0;
4574   we_548X = PS_SHIFT_LEFT_INLINE(cells_547X, 3);
4575   Ssmall_img_start_addrS = (((char *) sb_458X));
4576   Ssmall_img_hp_addrS = (((char *) sh_472X));
4577   Ssmall_img_end_addrS = (((char *) se_488X));
4578   Slarge_img_start_addrS = (((char *) se_488X));
4579   Slarge_img_hp_addrS = (((char *) lh_503X));
4580   Slarge_img_end_addrS = (((char *) le_514X));
4581   Sweaks_img_start_addrS = (((char *) le_514X));
4582   Sweaks_img_hp_addrS = (((char *) wh_538X));
4583   Sweaks_img_end_addrS = (((char *) we_548X));
4584   Ssmall_img_heap_sizeS = (PS_SHIFT_RIGHT_INLINE((sh_472X - sb_458X), 3));
4585   Slarge_img_heap_sizeS = (PS_SHIFT_RIGHT_INLINE((lh_503X - se_488X), 3));
4586   Sweaks_img_heap_sizeS = (PS_SHIFT_RIGHT_INLINE((wh_538X - le_514X), 3));
4587   Simg_start_addrS = (((char *) le_514X));
4588   Simg_end_addrS = (((char *) sh_472X));
4589   Simg_heap_sizeS = (((PS_SHIFT_RIGHT_INLINE((se_488X - sb_458X), 3)) + (PS_SHIFT_RIGHT_INLINE((le_514X - se_488X), 3))) + (PS_SHIFT_RIGHT_INLINE((we_548X - le_514X), 3)));
4590   goto L7642;}
4591  L8244: {
4592   PS_READ_CHAR(port_398X, ch_549X, eofP_550X, status_551X)
4593   if (eofP_550X) {
4594     arg4K0 = eofP_550X;
4595     arg0K1 = status_551X;
4596     goto L7932;}
4597   else {
4598     if ((status_551X == NO_ERRORS)) {
4599       if ((12 == ch_549X)) {
4600         arg4K0 = 0;
4601         arg0K1 = status_551X;
4602         goto L7932;}
4603       else {
4604         goto L8244;}}
4605     else {
4606       arg4K0 = eofP_550X;
4607       arg0K1 = status_551X;
4608       goto L7932;}}}
4609  L15306: {
4610   cells_552X = Simg_heap_sizeS;
4611   address_553X = Snew_heap_start_addrS;
4612   need_554X = PS_SHIFT_LEFT_INLINE(cells_552X, 3);
4613   got_555X = ps_read_block(port_398X, ((char *) address_553X), need_554X, &eofP_556X, &status_557X);
4614   if ((status_557X == NO_ERRORS)) {
4615     if (eofP_556X) {
4616       arg4K0 = 0;
4617       arg5K1 = "Premature EOF when reading image file";
4618       goto L15316;}
4619     else {
4620       if ((got_555X < need_554X)) {
4621         arg4K0 = 0;
4622         arg5K1 = "Read returned too few bytes";
4623         goto L15316;}
4624       else {
4625         arg4K0 = 1;
4626         arg5K1 = "";
4627         goto L15316;}}}
4628   else {
4629     SstatusS = status_557X;
4630     arg4K0 = 0;
4631     arg5K1 = "Error reading from image file";
4632     goto L15316;}}
4633  L7135: {
4634   i_558X = arg0K0;
4635   if ((i_558X < 4097)) {
4636     *(keys_545X + i_558X) = 0;
4637     arg0K0 = (1 + i_558X);
4638     goto L7135;}
4639   else {
4640     table_559X = (struct table*)malloc(sizeof(struct table));
4641     if ((NULL == table_559X)) {
4642       arg3K0 = table_559X;
4643       goto L7123;}
4644     else {
4645       table_559X->keys = keys_545X;
4646       table_559X->values = ((struct image_location**)malloc(sizeof(struct image_location*) * 4096));
4647       table_559X->count = 0;
4648       table_559X->size = 4096;
4649       arg3K0 = table_559X;
4650       goto L7123;}}}
4651  L16853: {
4652   expr_560X = arg0K0;
4653   if ((0 == expr_560X)) {
4654     if (((SstatusS) == NO_ERRORS)) {
4655       return 0;}
4656     else {
4657       return -1;}}
4658   else {
4659     return -1;}}
4660  L7932: {
4661   eofP_561X = arg4K0;
4662   status_562X = arg0K1;
4663   if (eofP_561X) {
4664     SeofPS = 1;
4665     arg0K0 = 0;
4666     arg0K1 = format_422X;
4667     goto L16783;}
4668   else {
4669     if ((status_562X == NO_ERRORS)) {
4670       arg0K0 = 0;
4671       arg0K1 = format_422X;
4672       goto L16783;}
4673     else {
4674       SeofPS = 1;
4675       if (((SstatusS) == NO_ERRORS)) {
4676         SstatusS = status_562X;
4677         arg0K0 = 0;
4678         arg0K1 = format_422X;
4679         goto L16783;}
4680       else {
4681         arg0K0 = 0;
4682         arg0K1 = format_422X;
4683         goto L16783;}}}}
4684  L15316: {
4685   okayP_563X = arg4K0;
4686   string_564X = arg5K1;
4687   PS_READ_CHAR(port_398X, v_565X, eofP_566X, status_567X)
4688   if (okayP_563X) {
4689     if ((status_567X == NO_ERRORS)) {
4690       if (eofP_566X) {
4691         status_568X = ps_close(port_398X);
4692         if ((status_568X == NO_ERRORS)) {
4693           if (reverse_byte_orderP_524X) {
4694             merged_arg1K0 = (Snew_heap_start_addrS);
4695             merged_arg1K1 = new_hp_526X;
4696 #ifdef USE_DIRECT_THREADING
4697             reverse_byte_orderB_return_address = &&reverse_byte_orderB_return_0;
4698 #else
4699             reverse_byte_orderB_return_tag = 0;
4700 #endif
4701             goto reverse_byte_orderB;
4702            reverse_byte_orderB_return_0:
4703             goto L15356;}
4704           else {
4705             goto L15356;}}
4706         else {
4707           ps_write_string("Error closing image file", (stderr));
4708           { long ignoreXX;
4709           PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4710           status_569X = SstatusS;
4711           if ((status_569X == NO_ERRORS)) {
4712             goto L15573;}
4713           else {
4714             ps_write_string((ps_error_string((SstatusS))), (stderr));
4715             { long ignoreXX;
4716             PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4717             goto L15573;}}}
4718       else {
4719         ps_write_string("Image file has extraneous data after image", (stderr));
4720         { long ignoreXX;
4721         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4722         status_570X = SstatusS;
4723         if ((status_570X == NO_ERRORS)) {
4724           goto L15541;}
4725         else {
4726           ps_write_string((ps_error_string((SstatusS))), (stderr));
4727           { long ignoreXX;
4728           PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4729           goto L15541;}}}
4730     else {
4731       ps_write_string("Error reading from image file", (stderr));
4732       { long ignoreXX;
4733       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4734       status_571X = SstatusS;
4735       if ((status_571X == NO_ERRORS)) {
4736         goto L15509;}
4737       else {
4738         ps_write_string((ps_error_string((SstatusS))), (stderr));
4739         { long ignoreXX;
4740         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4741         goto L15509;}}}
4742   else {
4743     ps_write_string(string_564X, (stderr));
4744     { long ignoreXX;
4745     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4746     status_572X = SstatusS;
4747     if ((status_572X == NO_ERRORS)) {
4748       goto L15477;}
4749     else {
4750       ps_write_string((ps_error_string((SstatusS))), (stderr));
4751       { long ignoreXX;
4752       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4753       goto L15477;}}}
4754  L7123: {
4755   v_573X = arg3K0;
4756   Sstob_tableS = v_573X;
4757   Sheap_image_pointerS = ((char *)malloc((PS_SHIFT_LEFT_INLINE((Simg_heap_sizeS), 3))));
4758   if ((0 == format_449X)) {
4759     need_574X = PS_SHIFT_LEFT_INLINE((Simg_heap_sizeS), 3);
4760     got_575X = ps_read_block(port_398X, ((char *) (Sheap_image_pointerS)), need_574X, &eofP_576X, &status_577X);
4761     if ((status_577X == NO_ERRORS)) {
4762       if (eofP_576X) {
4763         arg4K0 = 0;
4764         arg5K1 = "Premature EOF when reading image file";
4765         goto L9551;}
4766       else {
4767         if ((got_575X < need_574X)) {
4768           arg4K0 = 0;
4769           arg5K1 = "Read returned too few bytes";
4770           goto L9551;}
4771         else {
4772           arg4K0 = 1;
4773           arg5K1 = "";
4774           goto L9551;}}}
4775     else {
4776       SstatusS = status_577X;
4777       arg4K0 = 0;
4778       arg5K1 = "Error reading from image file";
4779       goto L9551;}}
4780   else {
4781     if ((1 == format_449X)) {
4782       merged_arg1K0 = (Sheap_image_pointerS);
4783       merged_arg0K1 = (Sweaks_img_heap_sizeS);
4784       merged_arg6K2 = port_398X;
4785 #ifdef USE_DIRECT_THREADING
4786       really_read_image_area_return_address = &&really_read_image_area_return_0;
4787 #else
4788       really_read_image_area_return_tag = 0;
4789 #endif
4790       goto really_read_image_area;
4791      really_read_image_area_return_0:
4792       expr_578X = really_read_image_area0_return_value;
4793       if ((0 == expr_578X)) {
4794         if (((SstatusS) == NO_ERRORS)) {
4795           merged_arg1K0 = ((Sheap_image_pointerS) + ((Sweaks_img_end_addrS) - (Sweaks_img_start_addrS)));
4796           merged_arg0K1 = (Slarge_img_heap_sizeS);
4797           merged_arg6K2 = port_398X;
4798 #ifdef USE_DIRECT_THREADING
4799           really_read_image_area_return_address = &&really_read_image_area_return_1;
4800 #else
4801           really_read_image_area_return_tag = 1;
4802 #endif
4803           goto really_read_image_area;
4804          really_read_image_area_return_1:
4805           expr_579X = really_read_image_area0_return_value;
4806           if ((0 == expr_579X)) {
4807             if (((SstatusS) == NO_ERRORS)) {
4808               merged_arg1K0 = ((Sheap_image_pointerS) + ((Sweaks_img_end_addrS) - (Slarge_img_start_addrS)));
4809               merged_arg0K1 = (Ssmall_img_heap_sizeS);
4810               merged_arg6K2 = port_398X;
4811 #ifdef USE_DIRECT_THREADING
4812               really_read_image_area_return_address = &&really_read_image_area_return_2;
4813 #else
4814               really_read_image_area_return_tag = 2;
4815 #endif
4816               goto really_read_image_area;
4817              really_read_image_area_return_2:
4818               expr_580X = really_read_image_area0_return_value;
4819               if ((0 == expr_580X)) {
4820                 if (((SstatusS) == NO_ERRORS)) {
4821                   arg0K0 = 0;
4822                   goto L9584;}
4823                 else {
4824                   arg0K0 = -1;
4825                   goto L9584;}}
4826               else {
4827                 arg0K0 = -1;
4828                 goto L9584;}}
4829             else {
4830               arg0K0 = -1;
4831               goto L9584;}}
4832           else {
4833             arg0K0 = -1;
4834             goto L9584;}}
4835         else {
4836           arg0K0 = -1;
4837           goto L9584;}}
4838       else {
4839         arg0K0 = -1;
4840         goto L9584;}}
4841     else {
4842       ps_write_string("this can't happen: invalid image format", (stderr));
4843       { long ignoreXX;
4844       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4845       status_581X = SstatusS;
4846       if ((status_581X == NO_ERRORS)) {
4847         goto L9954;}
4848       else {
4849         ps_write_string((ps_error_string((SstatusS))), (stderr));
4850         { long ignoreXX;
4851         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4852         goto L9954;}}}}
4853  L15356: {
4854   if ((0 == delta_525X)) {
4855     arg0K0 = 0;
4856     goto L16853;}
4857   else {
4858     descriptor_582X = Sstartup_procedureS;
4859     if ((3 == (3 & descriptor_582X))) {
4860       arg0K0 = (3 + (((long) ((((char *) (-3 + descriptor_582X))) + delta_525X))));
4861       goto L15365;}
4862     else {
4863       arg0K0 = descriptor_582X;
4864       goto L15365;}}}
4865  L15573: {
4866   status_583X = ps_close(port_398X);
4867   if ((status_583X == NO_ERRORS)) {
4868     arg0K0 = -1;
4869     goto L16853;}
4870   else {
4871     ps_write_string("Error closing image file", (stderr));
4872     { long ignoreXX;
4873     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4874     arg0K0 = -1;
4875     goto L16853;}}
4876  L15541: {
4877   status_584X = ps_close(port_398X);
4878   if ((status_584X == NO_ERRORS)) {
4879     arg0K0 = -1;
4880     goto L16853;}
4881   else {
4882     ps_write_string("Error closing image file", (stderr));
4883     { long ignoreXX;
4884     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4885     arg0K0 = -1;
4886     goto L16853;}}
4887  L15509: {
4888   status_585X = ps_close(port_398X);
4889   if ((status_585X == NO_ERRORS)) {
4890     arg0K0 = -1;
4891     goto L16853;}
4892   else {
4893     ps_write_string("Error closing image file", (stderr));
4894     { long ignoreXX;
4895     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4896     arg0K0 = -1;
4897     goto L16853;}}
4898  L15477: {
4899   status_586X = ps_close(port_398X);
4900   if ((status_586X == NO_ERRORS)) {
4901     arg0K0 = -1;
4902     goto L16853;}
4903   else {
4904     ps_write_string("Error closing image file", (stderr));
4905     { long ignoreXX;
4906     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4907     arg0K0 = -1;
4908     goto L16853;}}
4909  L9551: {
4910   okayP_587X = arg4K0;
4911   string_588X = arg5K1;
4912   if (okayP_587X) {
4913     arg0K0 = 0;
4914     goto L9584;}
4915   else {
4916     ps_write_string(string_588X, (stderr));
4917     { long ignoreXX;
4918     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4919     status_589X = SstatusS;
4920     if ((status_589X == NO_ERRORS)) {
4921       goto L9819;}
4922     else {
4923       ps_write_string((ps_error_string((SstatusS))), (stderr));
4924       { long ignoreXX;
4925       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4926       goto L9819;}}}
4927  L9584: {
4928   expr_590X = arg0K0;
4929   if ((0 == expr_590X)) {
4930     if (((SstatusS) == NO_ERRORS)) {
4931       PS_READ_CHAR(port_398X, v_591X, eofP_592X, status_593X)
4932       if ((status_593X == NO_ERRORS)) {
4933         if (eofP_592X) {
4934           status_594X = ps_close(port_398X);
4935           if ((status_594X == NO_ERRORS)) {
4936             arg0K0 = 0;
4937             goto L16622;}
4938           else {
4939             ps_write_string("Error closing image file", (stderr));
4940             { long ignoreXX;
4941             PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4942             status_595X = SstatusS;
4943             if ((status_595X == NO_ERRORS)) {
4944               goto L9702;}
4945             else {
4946               ps_write_string((ps_error_string((SstatusS))), (stderr));
4947               { long ignoreXX;
4948               PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4949               goto L9702;}}}
4950         else {
4951           ps_write_string("Image file has extraneous data after image", (stderr));
4952           { long ignoreXX;
4953           PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4954           status_596X = SstatusS;
4955           if ((status_596X == NO_ERRORS)) {
4956             goto L9670;}
4957           else {
4958             ps_write_string((ps_error_string((SstatusS))), (stderr));
4959             { long ignoreXX;
4960             PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4961             goto L9670;}}}
4962       else {
4963         ps_write_string("Error reading from image file", (stderr));
4964         { long ignoreXX;
4965         PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4966         status_597X = SstatusS;
4967         if ((status_597X == NO_ERRORS)) {
4968           goto L9638;}
4969         else {
4970           ps_write_string((ps_error_string((SstatusS))), (stderr));
4971           { long ignoreXX;
4972           PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4973           goto L9638;}}}
4974     else {
4975       arg0K0 = -1;
4976       goto L16622;}}
4977   else {
4978     arg0K0 = -1;
4979     goto L16622;}}
4980  L9954: {
4981   status_598X = ps_close(port_398X);
4982   if ((status_598X == NO_ERRORS)) {
4983     arg0K0 = -1;
4984     goto L9584;}
4985   else {
4986     ps_write_string("Error closing image file", (stderr));
4987     { long ignoreXX;
4988     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
4989     arg0K0 = -1;
4990     goto L9584;}}
4991  L15365: {
4992   expr_599X = arg0K0;
4993   Sstartup_procedureS = expr_599X;
4994   descriptor_600X = SsymbolsS;
4995   if ((3 == (3 & descriptor_600X))) {
4996     arg0K0 = (3 + (((long) ((((char *) (-3 + descriptor_600X))) + delta_525X))));
4997     goto L15371;}
4998   else {
4999     arg0K0 = descriptor_600X;
5000     goto L15371;}}
5001  L9819: {
5002   status_601X = ps_close(port_398X);
5003   if ((status_601X == NO_ERRORS)) {
5004     arg0K0 = -1;
5005     goto L9584;}
5006   else {
5007     ps_write_string("Error closing image file", (stderr));
5008     { long ignoreXX;
5009     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5010     arg0K0 = -1;
5011     goto L9584;}}
5012  L16622: {
5013   expr_602X = arg0K0;
5014   if ((0 == expr_602X)) {
5015     if (((SstatusS) == NO_ERRORS)) {
5016       if (reverse_byte_orderP_524X) {
5017         merged_arg1K0 = (Simg_start_addrS);
5018         merged_arg0K1 = format_449X;
5019 #ifdef USE_DIRECT_THREADING
5020         old_Gnew_addr_return_address = &&old_Gnew_addr_return_0;
5021 #else
5022         old_Gnew_addr_return_tag = 0;
5023 #endif
5024         goto old_Gnew_addr;
5025        old_Gnew_addr_return_0:
5026         v_603X = old_Gnew_addr0_return_value;
5027         merged_arg1K0 = (Simg_end_addrS);
5028         merged_arg0K1 = format_449X;
5029 #ifdef USE_DIRECT_THREADING
5030         old_Gnew_addr_return_address = &&old_Gnew_addr_return_1;
5031 #else
5032         old_Gnew_addr_return_tag = 1;
5033 #endif
5034         goto old_Gnew_addr;
5035        old_Gnew_addr_return_1:
5036         v_604X = old_Gnew_addr0_return_value;
5037         merged_arg1K0 = v_603X;
5038         merged_arg1K1 = v_604X;
5039 #ifdef USE_DIRECT_THREADING
5040         reverse_byte_orderB_return_address = &&reverse_byte_orderB_return_1;
5041 #else
5042         reverse_byte_orderB_return_tag = 1;
5043 #endif
5044         goto reverse_byte_orderB;
5045        reverse_byte_orderB_return_1:
5046         goto L16634;}
5047       else {
5048         goto L16634;}}
5049     else {
5050       arg0K0 = -1;
5051       goto L16853;}}
5052   else {
5053     arg0K0 = -1;
5054     goto L16853;}}
5055  L9702: {
5056   status_605X = ps_close(port_398X);
5057   if ((status_605X == NO_ERRORS)) {
5058     arg0K0 = -1;
5059     goto L16622;}
5060   else {
5061     ps_write_string("Error closing image file", (stderr));
5062     { long ignoreXX;
5063     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5064     arg0K0 = -1;
5065     goto L16622;}}
5066  L9670: {
5067   status_606X = ps_close(port_398X);
5068   if ((status_606X == NO_ERRORS)) {
5069     arg0K0 = -1;
5070     goto L16622;}
5071   else {
5072     ps_write_string("Error closing image file", (stderr));
5073     { long ignoreXX;
5074     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5075     arg0K0 = -1;
5076     goto L16622;}}
5077  L9638: {
5078   status_607X = ps_close(port_398X);
5079   if ((status_607X == NO_ERRORS)) {
5080     arg0K0 = -1;
5081     goto L16622;}
5082   else {
5083     ps_write_string("Error closing image file", (stderr));
5084     { long ignoreXX;
5085     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5086     arg0K0 = -1;
5087     goto L16622;}}
5088  L15371: {
5089   expr_608X = arg0K0;
5090   SsymbolsS = expr_608X;
5091   descriptor_609X = Simported_bindingsS;
5092   if ((3 == (3 & descriptor_609X))) {
5093     arg0K0 = (3 + (((long) ((((char *) (-3 + descriptor_609X))) + delta_525X))));
5094     goto L15377;}
5095   else {
5096     arg0K0 = descriptor_609X;
5097     goto L15377;}}
5098  L16634: {
5099   if ((0 == format_449X)) {
5100     merged_arg1K0 = (Simg_start_addrS);
5101     merged_arg1K1 = (Ssymbol_addressS);
5102     merged_arg0K2 = format_449X;
5103 #ifdef USE_DIRECT_THREADING
5104     parse_reachable_objects_return_address = &&parse_reachable_objects_return_0;
5105 #else
5106     parse_reachable_objects_return_tag = 0;
5107 #endif
5108     goto parse_reachable_objects;
5109    parse_reachable_objects_return_0:
5110     goto L16636;}
5111   else {
5112     if ((1 == format_449X)) {
5113       merged_arg1K0 = (Ssmall_img_start_addrS);
5114       merged_arg1K1 = (Ssymbol_addressS);
5115       merged_arg0K2 = format_449X;
5116 #ifdef USE_DIRECT_THREADING
5117       parse_reachable_objects_return_address = &&parse_reachable_objects_return_1;
5118 #else
5119       parse_reachable_objects_return_tag = 1;
5120 #endif
5121       goto parse_reachable_objects;
5122      parse_reachable_objects_return_1:
5123       merged_arg1K0 = (Slarge_img_start_addrS);
5124       merged_arg1K1 = ((Slarge_img_start_addrS) + (PS_SHIFT_LEFT_INLINE((Slarge_img_heap_sizeS), 3)));
5125       merged_arg0K2 = format_449X;
5126 #ifdef USE_DIRECT_THREADING
5127       parse_reachable_objects_return_address = &&parse_reachable_objects_return_2;
5128 #else
5129       parse_reachable_objects_return_tag = 2;
5130 #endif
5131       goto parse_reachable_objects;
5132      parse_reachable_objects_return_2:
5133       merged_arg1K0 = (Sweaks_img_start_addrS);
5134       merged_arg1K1 = ((Sweaks_img_start_addrS) + (PS_SHIFT_LEFT_INLINE((Sweaks_img_heap_sizeS), 3)));
5135       merged_arg0K2 = format_449X;
5136 #ifdef USE_DIRECT_THREADING
5137       parse_reachable_objects_return_address = &&parse_reachable_objects_return_3;
5138 #else
5139       parse_reachable_objects_return_tag = 3;
5140 #endif
5141       goto parse_reachable_objects;
5142      parse_reachable_objects_return_3:
5143       goto L16636;}
5144     else {
5145       ps_error("allocate+parse+copy-objects!: Unknown image format", 0);
5146       goto L16636;}}}
5147  L15377: {
5148   expr_610X = arg0K0;
5149   Simported_bindingsS = expr_610X;
5150   descriptor_611X = Sexported_bindingsS;
5151   if ((3 == (3 & descriptor_611X))) {
5152     arg0K0 = (3 + (((long) ((((char *) (-3 + descriptor_611X))) + delta_525X))));
5153     goto L15383;}
5154   else {
5155     arg0K0 = descriptor_611X;
5156     goto L15383;}}
5157  L16636: {
5158   address_612X = ((char *) (-11 + (Sstartup_procedureS)));
5159   if ((0 == (((long) address_612X)))) {
5160     arg0K0 = -1;
5161     goto L15963;}
5162   else {
5163     arg0K0 = (((long) address_612X));
5164     goto L15963;}}
5165  L15383: {
5166   expr_613X = arg0K0;
5167   Sexported_bindingsS = expr_613X;
5168   descriptor_614X = Sresumer_recordsS;
5169   if ((3 == (3 & descriptor_614X))) {
5170     arg0K0 = (3 + (((long) ((((char *) (-3 + descriptor_614X))) + delta_525X))));
5171     goto L15389;}
5172   else {
5173     arg0K0 = descriptor_614X;
5174     goto L15389;}}
5175  L15963: {
5176   v_615X = arg0K0;
5177   image_location_616X = table_ref((Sstob_tableS), v_615X);
5178   Sstartup_procedureS = (3 + (((long) ((((char *) (image_location_616X->new_descriptor))) + 8))));
5179   v_617X = SsymbolsS;
5180   if ((1 == v_617X)) {
5181     goto L15893;}
5182   else {
5183     merged_arg0K0 = (SsymbolsS);
5184     merged_arg0K1 = format_449X;
5185 #ifdef USE_DIRECT_THREADING
5186     allocate_table_return_address = &&allocate_table_return_0;
5187 #else
5188     allocate_table_return_tag = 0;
5189 #endif
5190     goto allocate_table;
5191    allocate_table_return_0:
5192     expr_618X = allocate_table0_return_value;
5193     SsymbolsS = expr_618X;
5194     table_619X = SsymbolsS;
5195     stob_table_620X = Sstob_tableS;
5196     if ((3 == (3 & table_619X))) {
5197       if ((2 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + table_619X))))), 2))))) {
5198         arg0K0 = 0;
5199         goto L12939;}
5200       else {
5201         goto L15893;}}
5202     else {
5203       goto L15893;}}}
5204  L15389: {
5205   expr_621X = arg0K0;
5206   Sresumer_recordsS = expr_621X;
5207   table_622X = SsymbolsS;
5208   if ((3 == (3 & table_622X))) {
5209     if ((2 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + table_622X))))), 2))))) {
5210       arg0K0 = 0;
5211       goto L12741;}
5212     else {
5213       goto L15395;}}
5214   else {
5215     goto L15395;}}
5216  L15893: {
5217   v_623X = Simported_bindingsS;
5218   if ((1 == v_623X)) {
5219     goto L15913;}
5220   else {
5221     merged_arg0K0 = (Simported_bindingsS);
5222     merged_arg0K1 = format_449X;
5223 #ifdef USE_DIRECT_THREADING
5224     allocate_table_return_address = &&allocate_table_return_1;
5225 #else
5226     allocate_table_return_tag = 1;
5227 #endif
5228     goto allocate_table;
5229    allocate_table_return_1:
5230     expr_624X = allocate_table0_return_value;
5231     Simported_bindingsS = expr_624X;
5232     merged_arg0K0 = (Simported_bindingsS);
5233     merged_arg3K1 = (Sstob_tableS);
5234 #ifdef USE_DIRECT_THREADING
5235     relocate_binding_table_bibopB_return_address = &&relocate_binding_table_bibopB_return_0;
5236 #else
5237     relocate_binding_table_bibopB_return_tag = 0;
5238 #endif
5239     goto relocate_binding_table_bibopB;
5240    relocate_binding_table_bibopB_return_0:
5241     goto L15913;}}
5242  L12939: {
5243   i_625X = arg0K0;
5244   if ((1024 == i_625X)) {
5245     goto L15893;}
5246   else {
5247     link_626X = *((long *) ((((char *) (-3 + table_619X))) + (PS_SHIFT_LEFT_INLINE(i_625X, 3))));
5248     if ((0 == (3 & link_626X))) {
5249       arg0K0 = (3 + (-4 & link_626X));
5250       goto L12945;}
5251     else {
5252       arg0K0 = link_626X;
5253       goto L12945;}}}
5254  L12741: {
5255   i_627X = arg0K0;
5256   if ((1024 == i_627X)) {
5257     goto L15395;}
5258   else {
5259     link_628X = *((long *) ((((char *) (-3 + table_622X))) + (PS_SHIFT_LEFT_INLINE(i_627X, 3))));
5260     if ((0 == (3 & link_628X))) {
5261       arg0K0 = (3 + (-4 & link_628X));
5262       goto L12747;}
5263     else {
5264       arg0K0 = link_628X;
5265       goto L12747;}}}
5266  L15395: {
5267   merged_arg0K0 = (Simported_bindingsS);
5268   merged_arg0K1 = delta_525X;
5269 #ifdef USE_DIRECT_THREADING
5270   relocate_binding_table_two_spaceB_return_address = &&relocate_binding_table_two_spaceB_return_0;
5271 #else
5272   relocate_binding_table_two_spaceB_return_tag = 0;
5273 #endif
5274   goto relocate_binding_table_two_spaceB;
5275  relocate_binding_table_two_spaceB_return_0:
5276   merged_arg0K0 = (Sexported_bindingsS);
5277   merged_arg0K1 = delta_525X;
5278 #ifdef USE_DIRECT_THREADING
5279   relocate_binding_table_two_spaceB_return_address = &&relocate_binding_table_two_spaceB_return_1;
5280 #else
5281   relocate_binding_table_two_spaceB_return_tag = 1;
5282 #endif
5283   goto relocate_binding_table_two_spaceB;
5284  relocate_binding_table_two_spaceB_return_1:
5285   start_629X = Snew_heap_start_addrS;
5286   arg1K0 = start_629X;
5287   goto L10900;}
5288  L15913: {
5289   v_630X = Sexported_bindingsS;
5290   if ((1 == v_630X)) {
5291     goto L15933;}
5292   else {
5293     merged_arg0K0 = (Sexported_bindingsS);
5294     merged_arg0K1 = format_449X;
5295 #ifdef USE_DIRECT_THREADING
5296     allocate_table_return_address = &&allocate_table_return_2;
5297 #else
5298     allocate_table_return_tag = 2;
5299 #endif
5300     goto allocate_table;
5301    allocate_table_return_2:
5302     expr_631X = allocate_table0_return_value;
5303     Sexported_bindingsS = expr_631X;
5304     merged_arg0K0 = (Sexported_bindingsS);
5305     merged_arg3K1 = (Sstob_tableS);
5306 #ifdef USE_DIRECT_THREADING
5307     relocate_binding_table_bibopB_return_address = &&relocate_binding_table_bibopB_return_1;
5308 #else
5309     relocate_binding_table_bibopB_return_tag = 1;
5310 #endif
5311     goto relocate_binding_table_bibopB;
5312    relocate_binding_table_bibopB_return_1:
5313     goto L15933;}}
5314  L12945: {
5315   bucket_632X = arg0K0;
5316   if ((1 == bucket_632X)) {
5317     goto L12941;}
5318   else {
5319     merged_arg0K0 = bucket_632X;
5320 #ifdef USE_DIRECT_THREADING
5321     relocateD2_return_address = &&relocateD2_return_0;
5322 #else
5323     relocateD2_return_tag = 0;
5324 #endif
5325     goto relocateD2;
5326    relocateD2_return_0:
5327     bucket_633X = relocateD20_return_value;
5328     if ((3 == (3 & bucket_633X))) {
5329       arg0K0 = (-4 & bucket_633X);
5330       goto L12950;}
5331     else {
5332       arg0K0 = bucket_633X;
5333       goto L12950;}}}
5334  L12747: {
5335   bucket_634X = arg0K0;
5336   if ((1 == bucket_634X)) {
5337     goto L12743;}
5338   else {
5339     bucket_635X = bucket_634X + delta_525X;
5340     if ((3 == (3 & bucket_635X))) {
5341       arg0K0 = (-4 & bucket_635X);
5342       goto L12752;}
5343     else {
5344       arg0K0 = bucket_635X;
5345       goto L12752;}}}
5346  L10900: {
5347   ptr_636X = arg1K0;
5348   if ((ptr_636X < new_hp_526X)) {
5349     descriptor_637X = *((long *) ptr_636X);
5350     if ((3 == (3 & descriptor_637X))) {
5351       arg0K0 = (3 + (((long) ((((char *) (-3 + descriptor_637X))) + delta_525X))));
5352       goto L10905;}
5353     else {
5354       arg0K0 = descriptor_637X;
5355       goto L10905;}}
5356   else {
5357     arg0K0 = 0;
5358     goto L16853;}}
5359  L15933: {
5360   if ((1 == (Sresumer_recordsS))) {
5361     goto L16638;}
5362   else {
5363     merged_arg0K0 = (Sresumer_recordsS);
5364     merged_arg0K1 = format_449X;
5365 #ifdef USE_DIRECT_THREADING
5366     allocate_table_return_address = &&allocate_table_return_3;
5367 #else
5368     allocate_table_return_tag = 3;
5369 #endif
5370     goto allocate_table;
5371    allocate_table_return_3:
5372     expr_638X = allocate_table0_return_value;
5373     Sresumer_recordsS = expr_638X;
5374     resumer_records_639X = Sresumer_recordsS;
5375     cell_640X = *((long *) (((char *) (-11 + resumer_records_639X))));
5376     if ((2 == (3 & cell_640X))) {
5377       arg1K0 = (((char *) (-3 + resumer_records_639X)));
5378       arg0K1 = (PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(cell_640X, 8))), 3));
5379       goto L10041;}
5380     else {
5381       ps_error("relocate-resumer-record! - no header", 0);
5382       goto L16638;}}}
5383  L12941: {
5384   arg0K0 = (1 + i_625X);
5385   goto L12939;}
5386  L12950: {
5387   value_641X = arg0K0;
5388   *((long *) ((((char *) (-3 + table_619X))) + (PS_SHIFT_LEFT_INLINE(i_625X, 3)))) = (long) (value_641X);
5389   arg0K0 = bucket_633X;
5390   goto L12957;}
5391  L12743: {
5392   arg0K0 = (1 + i_627X);
5393   goto L12741;}
5394  L12752: {
5395   value_642X = arg0K0;
5396   *((long *) ((((char *) (-3 + table_622X))) + (PS_SHIFT_LEFT_INLINE(i_627X, 3)))) = (long) (value_642X);
5397   arg0K0 = bucket_635X;
5398   goto L12759;}
5399  L10905: {
5400   d_643X = arg0K0;
5401   *((long *) ptr_636X) = (long) (d_643X);
5402   if ((2 == (3 & d_643X))) {
5403     if (((31 & (PS_SHIFT_RIGHT_INLINE(d_643X, 2))) < 16)) {
5404       goto L10917;}
5405     else {
5406       arg1K0 = (ptr_636X + (8 + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(d_643X, 8))))));
5407       goto L10900;}}
5408   else {
5409     goto L10917;}}
5410  L16638: {
5411   table_644X = Sstob_tableS;
5412   keys_645X = table_644X->keys;
5413   values_646X = table_644X->values;
5414   arg0K0 = 0;
5415   goto L2988;}
5416  L10041: {
5417   address_647X = arg1K0;
5418   size_648X = arg0K1;
5419   if ((0 == size_648X)) {
5420     goto L16638;}
5421   else {
5422     cell_649X = *((long *) address_647X);
5423     if ((3 == (3 & cell_649X))) {
5424       address_650X = ((char *) (-11 + cell_649X));
5425       if ((0 == (((long) address_650X)))) {
5426         arg0K0 = -1;
5427         goto L10106;}
5428       else {
5429         arg0K0 = (((long) address_650X));
5430         goto L10106;}}
5431     else {
5432       ps_error("Could this happen?", 0);
5433       goto L16638;}}}
5434  L12957: {
5435   entry_651X = arg0K0;
5436   link_652X = *((long *) ((((char *) (-3 + entry_651X))) + 8));
5437   if ((0 == (3 & link_652X))) {
5438     arg0K0 = (3 + (-4 & link_652X));
5439     goto L12961;}
5440   else {
5441     arg0K0 = link_652X;
5442     goto L12961;}}
5443  L12759: {
5444   entry_653X = arg0K0;
5445   link_654X = *((long *) ((((char *) (-3 + entry_653X))) + 8));
5446   if ((0 == (3 & link_654X))) {
5447     arg0K0 = (3 + (-4 & link_654X));
5448     goto L12763;}
5449   else {
5450     arg0K0 = link_654X;
5451     goto L12763;}}
5452  L10917: {
5453   arg1K0 = (ptr_636X + 8);
5454   goto L10900;}
5455  L2988: {
5456   i_655X = arg0K0;
5457   if ((i_655X == (table_644X->size))) {
5458     free(keys_645X);
5459     free(values_646X);
5460     free(table_644X);
5461     free((Sheap_image_pointerS));
5462     arg0K0 = 0;
5463     goto L16853;}
5464   else {
5465     if ((0 == (*(keys_645X + i_655X)))) {
5466       goto L2990;}
5467     else {
5468       free((*(values_646X + i_655X)));
5469       goto L2990;}}}
5470  L10106: {
5471   v_656X = arg0K0;
5472   image_location_657X = table_ref((Sstob_tableS), v_656X);
5473   *((long *) address_647X) = (long) ((3 + (((long) ((((char *) (image_location_657X->new_descriptor))) + 8)))));
5474   arg1K0 = (address_647X + 8);
5475   arg0K1 = (-1 + size_648X);
5476   goto L10041;}
5477  L12961: {
5478   next_658X = arg0K0;
5479   if ((1 == next_658X)) {
5480     goto L12941;}
5481   else {
5482     merged_arg0K0 = next_658X;
5483 #ifdef USE_DIRECT_THREADING
5484     relocateD2_return_address = &&relocateD2_return_1;
5485 #else
5486     relocateD2_return_tag = 1;
5487 #endif
5488     goto relocateD2;
5489    relocateD2_return_1:
5490     next_659X = relocateD20_return_value;
5491     if ((3 == (3 & next_659X))) {
5492       arg0K0 = (-4 & next_659X);
5493       goto L12966;}
5494     else {
5495       arg0K0 = next_659X;
5496       goto L12966;}}}
5497  L12763: {
5498   next_660X = arg0K0;
5499   if ((1 == next_660X)) {
5500     goto L12743;}
5501   else {
5502     next_661X = next_660X + delta_525X;
5503     if ((3 == (3 & next_661X))) {
5504       arg0K0 = (-4 & next_661X);
5505       goto L12768;}
5506     else {
5507       arg0K0 = next_661X;
5508       goto L12768;}}}
5509  L2990: {
5510   arg0K0 = (1 + i_655X);
5511   goto L2988;}
5512  L12966: {
5513   val_662X = arg0K0;
5514   *((long *) ((((char *) (-3 + entry_651X))) + 8)) = (long) (val_662X);
5515   arg0K0 = next_659X;
5516   goto L12957;}
5517  L12768: {
5518   val_663X = arg0K0;
5519   *((long *) ((((char *) (-3 + entry_653X))) + 8)) = (long) (val_663X);
5520   arg0K0 = next_661X;
5521   goto L12759;}
5522  really_read_image_area: {
5523   new_start_addr_395X = merged_arg1K0;
5524   img_heap_size_396X = merged_arg0K1;
5525   port_397X = merged_arg6K2;{
5526   need_664X = PS_SHIFT_LEFT_INLINE(img_heap_size_396X, 3);
5527   got_665X = ps_read_block(port_397X, ((char *) new_start_addr_395X), need_664X, &eofP_666X, &status_667X);
5528   if ((status_667X == NO_ERRORS)) {
5529     if (eofP_666X) {
5530       arg4K0 = 0;
5531       arg5K1 = "Premature EOF when reading image file";
5532       goto L4121;}
5533     else {
5534       if ((got_665X < need_664X)) {
5535         arg4K0 = 0;
5536         arg5K1 = "Read returned too few bytes";
5537         goto L4121;}
5538       else {
5539         arg4K0 = 1;
5540         arg5K1 = "";
5541         goto L4121;}}}
5542   else {
5543     SstatusS = status_667X;
5544     arg4K0 = 0;
5545     arg5K1 = "Error reading from image file";
5546     goto L4121;}}
5547  L4121: {
5548   okayP_668X = arg4K0;
5549   string_669X = arg5K1;
5550   if (okayP_668X) {
5551     really_read_image_area0_return_value = 0;
5552 #ifdef USE_DIRECT_THREADING
5553     goto *really_read_image_area_return_address;
5554 #else
5555     goto really_read_image_area_return;
5556 #endif
5557 }
5558   else {
5559     ps_write_string(string_669X, (stderr));
5560     { long ignoreXX;
5561     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5562     status_670X = SstatusS;
5563     if ((status_670X == NO_ERRORS)) {
5564       goto L4164;}
5565     else {
5566       ps_write_string((ps_error_string((SstatusS))), (stderr));
5567       { long ignoreXX;
5568       PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5569       goto L4164;}}}
5570  L4164: {
5571   status_671X = ps_close(port_397X);
5572   if ((status_671X == NO_ERRORS)) {
5573     really_read_image_area0_return_value = -1;
5574 #ifdef USE_DIRECT_THREADING
5575     goto *really_read_image_area_return_address;
5576 #else
5577     goto really_read_image_area_return;
5578 #endif
5579 }
5580   else {
5581     ps_write_string("Error closing image file", (stderr));
5582     { long ignoreXX;
5583     PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5584     really_read_image_area0_return_value = -1;
5585 #ifdef USE_DIRECT_THREADING
5586     goto *really_read_image_area_return_address;
5587 #else
5588     goto really_read_image_area_return;
5589 #endif
5590 }}
5591 #ifndef USE_DIRECT_THREADING
5592  really_read_image_area_return:
5593   switch (really_read_image_area_return_tag) {
5594   case 0: goto really_read_image_area_return_0;
5595   case 1: goto really_read_image_area_return_1;
5596   default: goto really_read_image_area_return_2;
5597   }
5598 #endif
5599 }
5600 
5601  reverse_byte_orderB: {
5602   start_393X = merged_arg1K0;
5603   end_394X = merged_arg1K1;{
5604   ps_write_string("Correcting byte order of resumed image.", (stderr));
5605   { long ignoreXX;
5606   PS_WRITE_CHAR(10, (stderr), ignoreXX) }
5607   arg1K0 = start_393X;
5608   goto L10794;}
5609  L10794: {
5610   ptr_672X = arg1K0;
5611   if ((ptr_672X < end_394X)) {
5612     arg0K0 = 0;
5613     arg0K1 = 7;
5614     goto L10834;}
5615   else {
5616 #ifdef USE_DIRECT_THREADING
5617     goto *reverse_byte_orderB_return_address;
5618 #else
5619     goto reverse_byte_orderB_return;
5620 #endif
5621 }}
5622  L10834: {
5623   i_673X = arg0K0;
5624   j_674X = arg0K1;
5625   if ((i_673X < j_674X)) {
5626     addr_a_675X = ptr_672X + i_673X;
5627     addr_b_676X = ptr_672X + j_674X;
5628     byte_a_677X = *((unsigned char *) addr_a_675X);
5629     *((unsigned char *) addr_a_675X) = (unsigned char) ((*((unsigned char *) addr_b_676X)));
5630     *((unsigned char *) addr_b_676X) = (unsigned char) (byte_a_677X);
5631     arg0K0 = (1 + i_673X);
5632     arg0K1 = (-1 + j_674X);
5633     goto L10834;}
5634   else {
5635     value_678X = *((long *) ptr_672X);
5636     next_679X = ptr_672X + 8;
5637     if ((2 == (3 & value_678X))) {
5638       if (((31 & (PS_SHIFT_RIGHT_INLINE(value_678X, 2))) < 16)) {
5639         arg1K0 = next_679X;
5640         goto L10794;}
5641       else {
5642         arg1K0 = (next_679X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(value_678X, 8)))));
5643         goto L10794;}}
5644     else {
5645       arg1K0 = next_679X;
5646       goto L10794;}}}
5647 #ifndef USE_DIRECT_THREADING
5648  reverse_byte_orderB_return:
5649   switch (reverse_byte_orderB_return_tag) {
5650   case 0: goto reverse_byte_orderB_return_0;
5651   default: goto reverse_byte_orderB_return_1;
5652   }
5653 #endif
5654 }
5655 
5656  relocate_binding_table_two_spaceB: {
5657   table_391X = merged_arg0K0;
5658   delta_392X = merged_arg0K1;{
5659   if ((3 == (3 & table_391X))) {
5660     if ((2 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + table_391X))))), 2))))) {
5661       arg0K0 = 0;
5662       goto L12828;}
5663     else {
5664 #ifdef USE_DIRECT_THREADING
5665       goto *relocate_binding_table_two_spaceB_return_address;
5666 #else
5667       goto relocate_binding_table_two_spaceB_return;
5668 #endif
5669 }}
5670   else {
5671 #ifdef USE_DIRECT_THREADING
5672     goto *relocate_binding_table_two_spaceB_return_address;
5673 #else
5674     goto relocate_binding_table_two_spaceB_return;
5675 #endif
5676 }}
5677  L12828: {
5678   i_680X = arg0K0;
5679   if ((1024 == i_680X)) {
5680 #ifdef USE_DIRECT_THREADING
5681     goto *relocate_binding_table_two_spaceB_return_address;
5682 #else
5683     goto relocate_binding_table_two_spaceB_return;
5684 #endif
5685 }
5686   else {
5687     link_681X = *((long *) ((((char *) (-3 + table_391X))) + (PS_SHIFT_LEFT_INLINE(i_680X, 3))));
5688     if ((0 == (3 & link_681X))) {
5689       arg0K0 = (3 + (-4 & link_681X));
5690       goto L12834;}
5691     else {
5692       arg0K0 = link_681X;
5693       goto L12834;}}}
5694  L12834: {
5695   bucket_682X = arg0K0;
5696   if ((1 == bucket_682X)) {
5697     goto L12830;}
5698   else {
5699     bucket_683X = bucket_682X + delta_392X;
5700     if ((3 == (3 & bucket_683X))) {
5701       arg0K0 = (-4 & bucket_683X);
5702       goto L12839;}
5703     else {
5704       arg0K0 = bucket_683X;
5705       goto L12839;}}}
5706  L12830: {
5707   arg0K0 = (1 + i_680X);
5708   goto L12828;}
5709  L12839: {
5710   value_684X = arg0K0;
5711   *((long *) ((((char *) (-3 + table_391X))) + (PS_SHIFT_LEFT_INLINE(i_680X, 3)))) = (long) (value_684X);
5712   arg0K0 = bucket_683X;
5713   goto L12846;}
5714  L12846: {
5715   entry_685X = arg0K0;
5716   link_686X = *((long *) ((((char *) (-3 + entry_685X))) + 24));
5717   if ((0 == (3 & link_686X))) {
5718     arg0K0 = (3 + (-4 & link_686X));
5719     goto L12850;}
5720   else {
5721     arg0K0 = link_686X;
5722     goto L12850;}}
5723  L12850: {
5724   next_687X = arg0K0;
5725   if ((1 == next_687X)) {
5726     goto L12830;}
5727   else {
5728     next_688X = next_687X + delta_392X;
5729     if ((3 == (3 & next_688X))) {
5730       arg0K0 = (-4 & next_688X);
5731       goto L12855;}
5732     else {
5733       arg0K0 = next_688X;
5734       goto L12855;}}}
5735  L12855: {
5736   val_689X = arg0K0;
5737   *((long *) ((((char *) (-3 + entry_685X))) + 24)) = (long) (val_689X);
5738   arg0K0 = next_688X;
5739   goto L12846;}
5740 #ifndef USE_DIRECT_THREADING
5741  relocate_binding_table_two_spaceB_return:
5742   switch (relocate_binding_table_two_spaceB_return_tag) {
5743   case 0: goto relocate_binding_table_two_spaceB_return_0;
5744   default: goto relocate_binding_table_two_spaceB_return_1;
5745   }
5746 #endif
5747 }
5748 
5749  relocateD0: {
5750   address_390X = merged_arg0K0;{
5751   address_690X = ((char *) (-11 + address_390X));
5752   if ((0 == (((long) address_690X)))) {
5753     arg0K0 = -1;
5754     goto L13029;}
5755   else {
5756     arg0K0 = (((long) address_690X));
5757     goto L13029;}}
5758  L13029: {
5759   v_691X = arg0K0;
5760   image_location_692X = table_ref(stob_table_389X, v_691X);
5761   relocateD00_return_value = (3 + (((long) ((((char *) (image_location_692X->new_descriptor))) + 8))));
5762 #ifdef USE_DIRECT_THREADING
5763   goto *relocateD0_return_address;
5764 #else
5765   goto relocateD0_return;
5766 #endif
5767 }
5768 #ifndef USE_DIRECT_THREADING
5769  relocateD0_return:
5770   switch (relocateD0_return_tag) {
5771   case 0: goto relocateD0_return_0;
5772   default: goto relocateD0_return_1;
5773   }
5774 #endif
5775 }
5776 
5777  relocate_binding_table_bibopB: {
5778   table_388X = merged_arg0K0;
5779   stob_table_389X = merged_arg3K1;{
5780   if ((3 == (3 & table_388X))) {
5781     if ((2 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + table_388X))))), 2))))) {
5782       arg0K0 = 0;
5783       goto L13059;}
5784     else {
5785 #ifdef USE_DIRECT_THREADING
5786       goto *relocate_binding_table_bibopB_return_address;
5787 #else
5788       goto relocate_binding_table_bibopB_return;
5789 #endif
5790 }}
5791   else {
5792 #ifdef USE_DIRECT_THREADING
5793     goto *relocate_binding_table_bibopB_return_address;
5794 #else
5795     goto relocate_binding_table_bibopB_return;
5796 #endif
5797 }}
5798  L13059: {
5799   i_693X = arg0K0;
5800   if ((1024 == i_693X)) {
5801 #ifdef USE_DIRECT_THREADING
5802     goto *relocate_binding_table_bibopB_return_address;
5803 #else
5804     goto relocate_binding_table_bibopB_return;
5805 #endif
5806 }
5807   else {
5808     link_694X = *((long *) ((((char *) (-3 + table_388X))) + (PS_SHIFT_LEFT_INLINE(i_693X, 3))));
5809     if ((0 == (3 & link_694X))) {
5810       arg0K0 = (3 + (-4 & link_694X));
5811       goto L13065;}
5812     else {
5813       arg0K0 = link_694X;
5814       goto L13065;}}}
5815  L13065: {
5816   bucket_695X = arg0K0;
5817   if ((1 == bucket_695X)) {
5818     goto L13061;}
5819   else {
5820     merged_arg0K0 = bucket_695X;
5821 #ifdef USE_DIRECT_THREADING
5822     relocateD0_return_address = &&relocateD0_return_0;
5823 #else
5824     relocateD0_return_tag = 0;
5825 #endif
5826     goto relocateD0;
5827    relocateD0_return_0:
5828     bucket_696X = relocateD00_return_value;
5829     if ((3 == (3 & bucket_696X))) {
5830       arg0K0 = (-4 & bucket_696X);
5831       goto L13070;}
5832     else {
5833       arg0K0 = bucket_696X;
5834       goto L13070;}}}
5835  L13061: {
5836   arg0K0 = (1 + i_693X);
5837   goto L13059;}
5838  L13070: {
5839   value_697X = arg0K0;
5840   *((long *) ((((char *) (-3 + table_388X))) + (PS_SHIFT_LEFT_INLINE(i_693X, 3)))) = (long) (value_697X);
5841   arg0K0 = bucket_696X;
5842   goto L13077;}
5843  L13077: {
5844   entry_698X = arg0K0;
5845   link_699X = *((long *) ((((char *) (-3 + entry_698X))) + 24));
5846   if ((0 == (3 & link_699X))) {
5847     arg0K0 = (3 + (-4 & link_699X));
5848     goto L13081;}
5849   else {
5850     arg0K0 = link_699X;
5851     goto L13081;}}
5852  L13081: {
5853   next_700X = arg0K0;
5854   if ((1 == next_700X)) {
5855     goto L13061;}
5856   else {
5857     merged_arg0K0 = next_700X;
5858 #ifdef USE_DIRECT_THREADING
5859     relocateD0_return_address = &&relocateD0_return_1;
5860 #else
5861     relocateD0_return_tag = 1;
5862 #endif
5863     goto relocateD0;
5864    relocateD0_return_1:
5865     next_701X = relocateD00_return_value;
5866     if ((3 == (3 & next_701X))) {
5867       arg0K0 = (-4 & next_701X);
5868       goto L13086;}
5869     else {
5870       arg0K0 = next_701X;
5871       goto L13086;}}}
5872  L13086: {
5873   val_702X = arg0K0;
5874   *((long *) ((((char *) (-3 + entry_698X))) + 24)) = (long) (val_702X);
5875   arg0K0 = next_701X;
5876   goto L13077;}
5877 #ifndef USE_DIRECT_THREADING
5878  relocate_binding_table_bibopB_return:
5879   switch (relocate_binding_table_bibopB_return_tag) {
5880   case 0: goto relocate_binding_table_bibopB_return_0;
5881   default: goto relocate_binding_table_bibopB_return_1;
5882   }
5883 #endif
5884 }
5885 
5886  allocate_table: {
5887   tab_386X = merged_arg0K0;
5888   image_format_387X = merged_arg0K1;{
5889   merged_arg1K0 = (((char *) (-11 + tab_386X)));
5890   merged_arg0K1 = image_format_387X;
5891 #ifdef USE_DIRECT_THREADING
5892   old_Gnew_addr_return_address = &&old_Gnew_addr_return_2;
5893 #else
5894   old_Gnew_addr_return_tag = 2;
5895 #endif
5896   goto old_Gnew_addr;
5897  old_Gnew_addr_return_2:
5898   addr_703X = old_Gnew_addr0_return_value;
5899   cell_704X = *((long *) addr_703X);
5900   if ((2 == (3 & cell_704X))) {
5901     size_705X = PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(cell_704X, 8))), 3);
5902     size_in_byte_706X = 8 + (PS_SHIFT_LEFT_INLINE(size_705X, 3));
5903     x_707X = ((s48_ShpS) + (-8 & (7 + size_in_byte_706X))) < (s48_SlimitS);
5904     if (x_707X) {
5905       goto L15265;}
5906     else {s48_collect(0);
5907       goto L15265;}}
5908   else {
5909     ps_error("read-tables! no header", 0);
5910     allocate_table0_return_value = v_708X;
5911 #ifdef USE_DIRECT_THREADING
5912     goto *allocate_table_return_address;
5913 #else
5914     goto allocate_table_return;
5915 #endif
5916 }}
5917  L15265: {
5918   if ((((s48_ShpS) + (-8 & (7 + size_in_byte_706X))) < (s48_SlimitS))) {
5919     new_709X = s48_ShpS;
5920     s48_ShpS = ((s48_ShpS) + (-8 & (7 + size_in_byte_706X)));
5921     arg1K0 = new_709X;
5922     goto L15233;}
5923   else {
5924     arg1K0 = NULL;
5925     goto L15233;}}
5926  L15233: {
5927   pointer_710X = arg1K0;
5928   memmove((void *)pointer_710X, (void *)addr_703X,(8 + (PS_SHIFT_LEFT_INLINE(size_705X, 3))));
5929   allocate_table0_return_value = (3 + (((long) (pointer_710X + 8))));
5930 #ifdef USE_DIRECT_THREADING
5931   goto *allocate_table_return_address;
5932 #else
5933   goto allocate_table_return;
5934 #endif
5935 }
5936 #ifndef USE_DIRECT_THREADING
5937  allocate_table_return:
5938   switch (allocate_table_return_tag) {
5939   case 0: goto allocate_table_return_0;
5940   case 1: goto allocate_table_return_1;
5941   case 2: goto allocate_table_return_2;
5942   default: goto allocate_table_return_3;
5943   }
5944 #endif
5945 }
5946 
5947  alloc_object: {
5948   current_address_384X = merged_arg1K0;
5949   size_in_bytes_385X = merged_arg0K1;{
5950   x_711X = ((s48_ShpS) + (-8 & (7 + size_in_bytes_385X))) < (s48_SlimitS);
5951   if (x_711X) {
5952     goto L15172;}
5953   else {s48_collect(0);
5954     goto L15172;}}
5955  L15172: {
5956   if ((((s48_ShpS) + (-8 & (7 + size_in_bytes_385X))) < (s48_SlimitS))) {
5957     new_712X = s48_ShpS;
5958     s48_ShpS = ((s48_ShpS) + (-8 & (7 + size_in_bytes_385X)));
5959     arg1K0 = new_712X;
5960     goto L15162;}
5961   else {
5962     arg1K0 = NULL;
5963     goto L15162;}}
5964  L15162: {
5965   new_address_713X = arg1K0;
5966   image_location_714X = (struct image_location*)malloc(sizeof(struct image_location));
5967   if ((NULL == image_location_714X)) {
5968     arg2K0 = image_location_714X;
5969     goto L15189;}
5970   else {
5971     image_location_714X->new_descriptor = (((long) new_address_713X));
5972     image_location_714X->next = 0;
5973     arg2K0 = image_location_714X;
5974     goto L15189;}}
5975  L15189: {
5976   val_715X = arg2K0;
5977   if ((0 == (((long) current_address_384X)))) {
5978     arg0K0 = -1;
5979     goto L15191;}
5980   else {
5981     arg0K0 = (((long) current_address_384X));
5982     goto L15191;}}
5983  L15191: {
5984   v_716X = arg0K0;table_setB((Sstob_tableS), v_716X, val_715X);
5985   alloc_object0_return_value = new_address_713X;
5986 #ifdef USE_DIRECT_THREADING
5987   goto *alloc_object_return_address;
5988 #else
5989   goto alloc_object_return;
5990 #endif
5991 }
5992 #ifndef USE_DIRECT_THREADING
5993  alloc_object_return:
5994   switch (alloc_object_return_tag) {
5995   case 0: goto alloc_object_return_0;
5996   case 1: goto alloc_object_return_1;
5997   case 2: goto alloc_object_return_2;
5998   default: goto alloc_object_return_3;
5999   }
6000 #endif
6001 }
6002 
6003  parse_reachable_objects: {
6004   from_addr_381X = merged_arg1K0;
6005   to_addr_382X = merged_arg1K1;
6006   image_format_383X = merged_arg0K2;{
6007   arg1K0 = from_addr_381X;
6008   goto L16284;}
6009  L16284: {
6010   current_addr_717X = arg1K0;
6011   if ((current_addr_717X == to_addr_382X)) {
6012     parse_reachable_objects0_return_value = 0;
6013 #ifdef USE_DIRECT_THREADING
6014     goto *parse_reachable_objects_return_address;
6015 #else
6016     goto parse_reachable_objects_return;
6017 #endif
6018 }
6019   else {
6020     merged_arg1K0 = current_addr_717X;
6021     merged_arg0K1 = image_format_383X;
6022 #ifdef USE_DIRECT_THREADING
6023     old_Gnew_addr_return_address = &&old_Gnew_addr_return_3;
6024 #else
6025     old_Gnew_addr_return_tag = 3;
6026 #endif
6027     goto old_Gnew_addr;
6028    old_Gnew_addr_return_3:
6029     x1_718X = old_Gnew_addr0_return_value;
6030     cell_719X = *((long *) x1_718X);
6031     if ((2 == (3 & cell_719X))) {
6032       size_in_cells_720X = PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(cell_719X, 8))), 3);
6033       if ((0 == (Sheap_object_remaining_cellsS))) {
6034         goto L16309;}
6035       else {
6036         ps_error("Encountered an header within an d-vector.", 0);
6037         goto L16309;}}
6038     else {
6039       if ((3 == (3 & cell_719X))) {
6040         current_addr_721X = ((char *) (-11 + cell_719X));
6041         if ((0 == (((long) current_addr_721X)))) {
6042           arg0K0 = -1;
6043           goto L16511;}
6044         else {
6045           arg0K0 = (((long) current_addr_721X));
6046           goto L16511;}}
6047       else {
6048         *((long *) (Sheap_object_pointerS)) = (long) (cell_719X);
6049         Sheap_object_remaining_cellsS = (-1 + (Sheap_object_remaining_cellsS));
6050         Sheap_object_pointerS = ((Sheap_object_pointerS) + 8);
6051         goto L16366;}}}}
6052  L16309: {
6053   if ((2 == (3 & cell_719X))) {
6054     if (((31 & (PS_SHIFT_RIGHT_INLINE(cell_719X, 2))) < 16)) {
6055       goto L16325;}
6056     else {
6057       if ((0 == (((long) current_addr_717X)))) {
6058         arg0K0 = -1;
6059         goto L16397;}
6060       else {
6061         arg0K0 = (((long) current_addr_717X));
6062         goto L16397;}}}
6063   else {
6064     goto L16325;}}
6065  L16511: {
6066   v_722X = arg0K0;
6067   v_723X = table_ref((Sstob_tableS), v_722X);
6068   if ((NULL == v_723X)) {
6069     current_addr_724X = ((char *) (-11 + cell_719X));
6070     merged_arg1K0 = current_addr_724X;
6071     merged_arg0K1 = image_format_383X;
6072 #ifdef USE_DIRECT_THREADING
6073     old_Gnew_addr_return_address = &&old_Gnew_addr_return_4;
6074 #else
6075     old_Gnew_addr_return_tag = 4;
6076 #endif
6077     goto old_Gnew_addr;
6078    old_Gnew_addr_return_4:
6079     x1_725X = old_Gnew_addr0_return_value;
6080     header_cell_726X = *((long *) x1_725X);
6081     size_in_cells_727X = 1 + (PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(header_cell_726X, 8))), 3));
6082     size_in_bytes_728X = PS_SHIFT_LEFT_INLINE(size_in_cells_727X, 3);
6083     if ((2 == (3 & header_cell_726X))) {
6084       if (((31 & (PS_SHIFT_RIGHT_INLINE(header_cell_726X, 2))) < 16)) {
6085         goto L16143;}
6086       else {
6087         merged_arg1K0 = current_addr_724X;
6088         merged_arg0K1 = (PS_SHIFT_LEFT_INLINE(size_in_cells_727X, 3));
6089 #ifdef USE_DIRECT_THREADING
6090         alloc_object_return_address = &&alloc_object_return_0;
6091 #else
6092         alloc_object_return_tag = 0;
6093 #endif
6094         goto alloc_object;
6095        alloc_object_return_0:
6096         new_address_729X = alloc_object0_return_value;
6097         merged_arg1K0 = current_addr_724X;
6098         merged_arg0K1 = image_format_383X;
6099 #ifdef USE_DIRECT_THREADING
6100         old_Gnew_addr_return_address = &&old_Gnew_addr_return_5;
6101 #else
6102         old_Gnew_addr_return_tag = 5;
6103 #endif
6104         goto old_Gnew_addr;
6105        old_Gnew_addr_return_5:
6106         v_730X = old_Gnew_addr0_return_value;
6107         memmove((void *)new_address_729X, (void *)v_730X,(PS_SHIFT_LEFT_INLINE(size_in_cells_727X, 3)));
6108         goto L16357;}}
6109     else {
6110       goto L16143;}}
6111   else {
6112     goto L16357;}}
6113  L16366: {
6114   arg1K0 = (current_addr_717X + 8);
6115   goto L16284;}
6116  L16325: {
6117   if ((0 == (((long) current_addr_717X)))) {
6118     arg0K0 = -1;
6119     goto L16424;}
6120   else {
6121     arg0K0 = (((long) current_addr_717X));
6122     goto L16424;}}
6123  L16397: {
6124   v_731X = arg0K0;
6125   v_732X = table_ref((Sstob_tableS), v_731X);
6126   if ((NULL == v_732X)) {
6127     size_in_cells_733X = 1 + size_in_cells_720X;
6128     merged_arg1K0 = current_addr_717X;
6129     merged_arg0K1 = (PS_SHIFT_LEFT_INLINE(size_in_cells_733X, 3));
6130 #ifdef USE_DIRECT_THREADING
6131     alloc_object_return_address = &&alloc_object_return_1;
6132 #else
6133     alloc_object_return_tag = 1;
6134 #endif
6135     goto alloc_object;
6136    alloc_object_return_1:
6137     new_address_734X = alloc_object0_return_value;
6138     merged_arg1K0 = current_addr_717X;
6139     merged_arg0K1 = image_format_383X;
6140 #ifdef USE_DIRECT_THREADING
6141     old_Gnew_addr_return_address = &&old_Gnew_addr_return_6;
6142 #else
6143     old_Gnew_addr_return_tag = 6;
6144 #endif
6145     goto old_Gnew_addr;
6146    old_Gnew_addr_return_6:
6147     v_735X = old_Gnew_addr0_return_value;
6148     memmove((void *)new_address_734X, (void *)v_735X,(PS_SHIFT_LEFT_INLINE(size_in_cells_733X, 3)));
6149     goto L16322;}
6150   else {
6151     goto L16322;}}
6152  L16143: {
6153   merged_arg1K0 = current_addr_724X;
6154   merged_arg0K1 = size_in_bytes_728X;
6155 #ifdef USE_DIRECT_THREADING
6156   alloc_object_return_address = &&alloc_object_return_2;
6157 #else
6158   alloc_object_return_tag = 2;
6159 #endif
6160   goto alloc_object;
6161  alloc_object_return_2:
6162   new_address_736X = alloc_object0_return_value;
6163   *((long *) new_address_736X) = (long) ((-1978 + (PS_SHIFT_LEFT_INLINE(size_in_bytes_728X, 8))));
6164   arg1K0 = (new_address_736X + 8);
6165   goto L16161;}
6166  L16357: {
6167   address_737X = ((char *) (-11 + cell_719X));
6168   if ((0 == (((long) address_737X)))) {
6169     arg0K0 = -1;
6170     goto L16525;}
6171   else {
6172     arg0K0 = (((long) address_737X));
6173     goto L16525;}}
6174  L16424: {
6175   v_738X = arg0K0;
6176   v_739X = table_ref((Sstob_tableS), v_738X);
6177   if ((NULL == v_739X)) {
6178     merged_arg1K0 = current_addr_717X;
6179     merged_arg0K1 = (8 + (PS_SHIFT_LEFT_INLINE(size_in_cells_720X, 3)));
6180 #ifdef USE_DIRECT_THREADING
6181     alloc_object_return_address = &&alloc_object_return_3;
6182 #else
6183     alloc_object_return_tag = 3;
6184 #endif
6185     goto alloc_object;
6186    alloc_object_return_3:
6187     new_address_740X = alloc_object0_return_value;
6188     if ((2 == (3 & cell_719X))) {
6189       goto L16441;}
6190     else {
6191       ps_error("cell was not a header", 0);
6192       goto L16441;}}
6193   else {
6194     if ((0 == (((long) current_addr_717X)))) {
6195       arg0K0 = -1;
6196       goto L10166;}
6197     else {
6198       arg0K0 = (((long) current_addr_717X));
6199       goto L10166;}}}
6200  L16322: {
6201   arg1K0 = (current_addr_717X + (8 + (PS_SHIFT_LEFT_INLINE(size_in_cells_720X, 3))));
6202   goto L16284;}
6203  L16161: {
6204   index_741X = arg1K0;
6205   if ((index_741X == (new_address_736X + (-8 & (7 + size_in_bytes_728X))))) {
6206     goto L16357;}
6207   else {
6208     *((long *) index_741X) = (long) (0);
6209     arg1K0 = (index_741X + 8);
6210     goto L16161;}}
6211  L16525: {
6212   v_742X = arg0K0;
6213   image_location_743X = table_ref((Sstob_tableS), v_742X);
6214   *((long *) (Sheap_object_pointerS)) = (long) ((3 + (((long) ((((char *) (image_location_743X->new_descriptor))) + 8)))));
6215   Sheap_object_remaining_cellsS = (-1 + (Sheap_object_remaining_cellsS));
6216   Sheap_object_pointerS = ((Sheap_object_pointerS) + 8);
6217   goto L16366;}
6218  L16441: {
6219   *((long *) new_address_740X) = (long) (cell_719X);
6220   Sheap_object_pointerS = new_address_740X;
6221   Sheap_object_remaining_cellsS = (1 + (PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(cell_719X, 8))), 3)));
6222   Sheap_object_remaining_cellsS = (-1 + (Sheap_object_remaining_cellsS));
6223   Sheap_object_pointerS = ((Sheap_object_pointerS) + 8);
6224   goto L16337;}
6225  L10166: {
6226   v_744X = arg0K0;
6227   image_location_745X = table_ref((Sstob_tableS), v_744X);
6228   new_address_746X = ((char *) (image_location_745X->new_descriptor));
6229   if ((2 == (3 & cell_719X))) {
6230     goto L10151;}
6231   else {
6232     ps_error("cell was not a header", 0);
6233     goto L10151;}}
6234  L16337: {
6235   arg1K0 = (current_addr_717X + 8);
6236   goto L16284;}
6237  L10151: {
6238   *((long *) new_address_746X) = (long) (cell_719X);
6239   Sheap_object_pointerS = new_address_746X;
6240   Sheap_object_remaining_cellsS = (1 + (PS_SHIFT_RIGHT_INLINE((7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(cell_719X, 8))), 3)));
6241   Sheap_object_remaining_cellsS = (-1 + (Sheap_object_remaining_cellsS));
6242   Sheap_object_pointerS = ((Sheap_object_pointerS) + 8);
6243   goto L16337;}
6244 #ifndef USE_DIRECT_THREADING
6245  parse_reachable_objects_return:
6246   switch (parse_reachable_objects_return_tag) {
6247   case 0: goto parse_reachable_objects_return_0;
6248   case 1: goto parse_reachable_objects_return_1;
6249   case 2: goto parse_reachable_objects_return_2;
6250   default: goto parse_reachable_objects_return_3;
6251   }
6252 #endif
6253 }
6254 
6255  old_Gnew_addr: {
6256   addr_379X = merged_arg1K0;
6257   format_380X = merged_arg0K1;{
6258   if ((0 == format_380X)) {
6259     old_Gnew_addr0_return_value = ((Sheap_image_pointerS) + (addr_379X - (Simg_start_addrS)));
6260 #ifdef USE_DIRECT_THREADING
6261     goto *old_Gnew_addr_return_address;
6262 #else
6263     goto old_Gnew_addr_return;
6264 #endif
6265 }
6266   else {
6267     if ((1 == format_380X)) {
6268       y_747X = Ssmall_img_start_addrS;
6269       if ((addr_379X < y_747X)) {
6270         goto L3091;}
6271       else {
6272         if (((Ssmall_img_hp_addrS) < addr_379X)) {
6273           goto L3091;}
6274         else {
6275           SoffsetS = (((Sweaks_img_end_addrS) - (Sweaks_img_start_addrS)) + ((Slarge_img_end_addrS) - (Slarge_img_start_addrS)));
6276           Sarea_startS = (Ssmall_img_start_addrS);
6277           goto L3143;}}}
6278     else {
6279       ps_error("old->new-addr: Unknown image format", 0);
6280       old_Gnew_addr0_return_value = v_748X;
6281 #ifdef USE_DIRECT_THREADING
6282       goto *old_Gnew_addr_return_address;
6283 #else
6284       goto old_Gnew_addr_return;
6285 #endif
6286 }}}
6287  L3091: {
6288   y_749X = Slarge_img_start_addrS;
6289   if ((addr_379X < y_749X)) {
6290     goto L3117;}
6291   else {
6292     if (((Slarge_img_hp_addrS) < addr_379X)) {
6293       goto L3117;}
6294     else {
6295       SoffsetS = ((Sweaks_img_end_addrS) - (Sweaks_img_start_addrS));
6296       Sarea_startS = (Slarge_img_start_addrS);
6297       goto L3143;}}}
6298  L3143: {
6299   old_Gnew_addr0_return_value = ((Sheap_image_pointerS) + ((SoffsetS) + (addr_379X - (Sarea_startS))));
6300 #ifdef USE_DIRECT_THREADING
6301   goto *old_Gnew_addr_return_address;
6302 #else
6303   goto old_Gnew_addr_return;
6304 #endif
6305 }
6306  L3117: {
6307   y_750X = Sweaks_img_start_addrS;
6308   if ((addr_379X < y_750X)) {
6309     goto L3139;}
6310   else {
6311     if (((Sweaks_img_hp_addrS) < addr_379X)) {
6312       goto L3139;}
6313     else {
6314       SoffsetS = 0;
6315       Sarea_startS = (Sweaks_img_start_addrS);
6316       goto L3143;}}}
6317  L3139: {
6318   ps_error("Unknown address area!", 0);
6319   goto L3143;}
6320 #ifndef USE_DIRECT_THREADING
6321  old_Gnew_addr_return:
6322   switch (old_Gnew_addr_return_tag) {
6323   case 0: goto old_Gnew_addr_return_0;
6324   case 1: goto old_Gnew_addr_return_1;
6325   case 2: goto old_Gnew_addr_return_2;
6326   case 3: goto old_Gnew_addr_return_3;
6327   case 4: goto old_Gnew_addr_return_4;
6328   case 5: goto old_Gnew_addr_return_5;
6329   default: goto old_Gnew_addr_return_6;
6330   }
6331 #endif
6332 }
6333 
6334  relocateD2: {
6335   address_378X = merged_arg0K0;{
6336   address_751X = ((char *) (-11 + address_378X));
6337   if ((0 == (((long) address_751X)))) {
6338     arg0K0 = -1;
6339     goto L12909;}
6340   else {
6341     arg0K0 = (((long) address_751X));
6342     goto L12909;}}
6343  L12909: {
6344   v_752X = arg0K0;
6345   image_location_753X = table_ref(stob_table_620X, v_752X);
6346   relocateD20_return_value = (3 + (((long) ((((char *) (image_location_753X->new_descriptor))) + 8))));
6347 #ifdef USE_DIRECT_THREADING
6348   goto *relocateD2_return_address;
6349 #else
6350   goto relocateD2_return;
6351 #endif
6352 }
6353 #ifndef USE_DIRECT_THREADING
6354  relocateD2_return:
6355   switch (relocateD2_return_tag) {
6356   case 0: goto relocateD2_return_0;
6357   default: goto relocateD2_return_1;
6358   }
6359 #endif
6360 }
6361 
6362 }
s48_trace_locationsB(char * start_754X,char * end_755X)6363 void s48_trace_locationsB(char * start_754X, char * end_755X)
6364 {
6365   char * arg1K0;
6366   char * arg1K1;
6367   long arg0K0;
6368   long newpair_787X;
6369   char * pair_address_786X;
6370   long tconc_cdr_785X;
6371   char * ptr_784X;
6372   long mask_783X;
6373   long thing_782X;
6374   long tconc_car_781X;
6375   char * trace_ptr_780X;
6376   char * mask_ptr_779X;
6377   long new_778X;
6378   char * data_addr_777X;
6379   char * frontier_776X;
6380   long new_thing_775X;
6381   long thing_774X;
6382   long tconc_773X;
6383   long tlc_772X;
6384   long size_771X;
6385   char * mask_pointer_770X;
6386   char * data_pointer_769X;
6387   long mask_size_768X;
6388   char * code_pointer_767X;
6389   long size_766X;
6390   char * frontier_765X;
6391   long new_thing_764X;
6392   char * a_763X;
6393   long descriptor_762X;
6394   long h_761X;
6395   char * a_760X;
6396   char * next_759X;
6397   long thing_758X;
6398   char * frontier_757X;
6399   char * addr_756X;
6400  {  arg1K0 = start_754X;
6401   arg1K1 = (s48_ShpS);
6402   goto L16944;}
6403  L16944: {
6404   addr_756X = arg1K0;
6405   frontier_757X = arg1K1;
6406   if ((addr_756X < end_755X)) {
6407     thing_758X = *((long *) addr_756X);
6408     next_759X = addr_756X + 8;
6409     if ((2 == (3 & thing_758X))) {
6410       if ((2 == (3 & thing_758X))) {
6411         if (((31 & (PS_SHIFT_RIGHT_INLINE(thing_758X, 2))) < 16)) {
6412           goto L16961;}
6413         else {
6414           arg1K0 = (next_759X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(thing_758X, 8)))));
6415           arg1K1 = frontier_757X;
6416           goto L16944;}}
6417       else {
6418         goto L16961;}}
6419     else {
6420       if ((3 == (3 & thing_758X))) {
6421         a_760X = ((char *) (-3 + thing_758X));
6422         if ((a_760X < (Sfrom_beginS))) {
6423           arg1K0 = next_759X;
6424           arg1K1 = frontier_757X;
6425           goto L16944;}
6426         else {
6427           if ((a_760X < (Sfrom_endS))) {
6428             h_761X = *((long *) (((char *) (-11 + thing_758X))));
6429             if ((3 == (3 & h_761X))) {
6430               arg0K0 = h_761X;
6431               arg1K1 = frontier_757X;
6432               goto L16997;}
6433             else {
6434               if ((2102 == h_761X)) {
6435                 descriptor_762X = *((long *) (((char *) (-3 + thing_758X))));
6436                 if ((3 == (3 & descriptor_762X))) {
6437                   a_763X = ((char *) (-3 + descriptor_762X));
6438                   if ((a_763X < (Sfrom_beginS))) {
6439                     goto L17683;}
6440                   else {
6441                     if ((a_763X < (Sfrom_endS))) {
6442                       new_thing_764X = copy_weak_pointer(thing_758X, frontier_757X, &frontier_765X);
6443                       arg0K0 = new_thing_764X;
6444                       arg1K1 = frontier_765X;
6445                       goto L16997;}
6446                     else {
6447                       goto L17683;}}}
6448                 else {
6449                   goto L17683;}}
6450               else {
6451                 goto L17683;}}}
6452           else {
6453             arg1K0 = next_759X;
6454             arg1K1 = frontier_757X;
6455             goto L16944;}}}
6456       else {
6457         arg1K0 = next_759X;
6458         arg1K1 = frontier_757X;
6459         goto L16944;}}}
6460   else {
6461     s48_ShpS = frontier_757X;
6462     return;}}
6463  L16961: {
6464   if ((10 == (31 & (PS_SHIFT_RIGHT_INLINE(thing_758X, 2))))) {
6465     size_766X = -8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(thing_758X, 8)));
6466     s48_ShpS = frontier_757X;
6467     code_pointer_767X = (((char *) (-3 + (*((long *) (next_759X + 8)))))) + (PS_SHIFT_RIGHT_INLINE((*((long *) next_759X)), 2));
6468     mask_size_768X = *((unsigned char *) (code_pointer_767X + -3));
6469     if ((0 == mask_size_768X)) {s48_trace_locationsB(next_759X, (next_759X + size_766X));
6470       goto L16972;}
6471     else {
6472       data_pointer_769X = next_759X + 24;s48_trace_locationsB(next_759X, data_pointer_769X);
6473       mask_pointer_770X = code_pointer_767X + -7;
6474       arg1K0 = (mask_pointer_770X + (0 - mask_size_768X));
6475       arg1K1 = data_pointer_769X;
6476       goto L17635;}}
6477   else {
6478     if ((15 == (31 & (PS_SHIFT_RIGHT_INLINE(thing_758X, 2))))) {
6479       size_771X = -8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(thing_758X, 8)));
6480       s48_ShpS = frontier_757X;s48_trace_locationsB(next_759X, (next_759X + size_771X));
6481       tlc_772X = 3 + (((long) next_759X));
6482       tconc_773X = *((long *) ((((char *) (-3 + tlc_772X))) + 16));
6483       if ((3 == (3 & tconc_773X))) {
6484         if ((0 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + tconc_773X))))), 2))))) {
6485           if ((3 == (3 & (*((long *) (((char *) (-3 + tlc_772X)))))))) {
6486             thing_774X = *((long *) (((char *) (-3 + tconc_773X))));
6487             if ((3 == (3 & thing_774X))) {
6488               if ((3 == (3 & (*((long *) (((char *) (-11 + thing_774X)))))))) {
6489                 arg0K0 = (*((long *) (((char *) (-11 + thing_774X)))));
6490                 goto L17182;}
6491               else {
6492                 arg0K0 = thing_774X;
6493                 goto L17182;}}
6494             else {
6495               arg0K0 = thing_774X;
6496               goto L17182;}}
6497           else {
6498             goto L16986;}}
6499         else {
6500           goto L16986;}}
6501       else {
6502         goto L16986;}}
6503     else {
6504       arg1K0 = next_759X;
6505       arg1K1 = frontier_757X;
6506       goto L16944;}}}
6507  L16997: {
6508   new_thing_775X = arg0K0;
6509   frontier_776X = arg1K1;
6510   *((long *) addr_756X) = (long) (new_thing_775X);
6511   arg1K0 = next_759X;
6512   arg1K1 = frontier_776X;
6513   goto L16944;}
6514  L17683: {
6515   *((long *) frontier_757X) = (long) (h_761X);
6516   data_addr_777X = frontier_757X + 8;
6517   new_778X = 3 + (((long) data_addr_777X));
6518   *((long *) (((char *) (-11 + thing_758X)))) = (long) (new_778X);
6519   memmove((void *)data_addr_777X, (void *)(((char *) (-3 + thing_758X))),(PS_SHIFT_RIGHT_LOGICAL_INLINE(h_761X, 8)));
6520   arg0K0 = new_778X;
6521   arg1K1 = (data_addr_777X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(h_761X, 8)))));
6522   goto L16997;}
6523  L16972: {
6524   arg1K0 = (next_759X + size_766X);
6525   arg1K1 = (s48_ShpS);
6526   goto L16944;}
6527  L17635: {
6528   mask_ptr_779X = arg1K0;
6529   trace_ptr_780X = arg1K1;
6530   if ((mask_ptr_779X == mask_pointer_770X)) {
6531     goto L16972;}
6532   else {
6533     arg0K0 = (*((unsigned char *) mask_ptr_779X));
6534     arg1K1 = trace_ptr_780X;
6535     goto L17642;}}
6536  L17182: {
6537   tconc_car_781X = arg0K0;
6538   thing_782X = *((long *) ((((char *) (-3 + tconc_773X))) + 8));
6539   if ((3 == (3 & thing_782X))) {
6540     if ((3 == (3 & (*((long *) (((char *) (-11 + thing_782X)))))))) {
6541       arg0K0 = (*((long *) (((char *) (-11 + thing_782X)))));
6542       goto L17186;}
6543     else {
6544       arg0K0 = thing_782X;
6545       goto L17186;}}
6546   else {
6547     arg0K0 = thing_782X;
6548     goto L17186;}}
6549  L16986: {
6550   arg1K0 = (next_759X + size_771X);
6551   arg1K1 = (s48_ShpS);
6552   goto L16944;}
6553  L17642: {
6554   mask_783X = arg0K0;
6555   ptr_784X = arg1K1;
6556   if ((0 == mask_783X)) {
6557     arg1K0 = (mask_ptr_779X + 1);
6558     arg1K1 = (trace_ptr_780X + 64);
6559     goto L17635;}
6560   else {
6561     if ((1 == (1 & mask_783X))) {s48_trace_locationsB(ptr_784X, (ptr_784X + 8));
6562       goto L17644;}
6563     else {
6564       goto L17644;}}}
6565  L17186: {
6566   tconc_cdr_785X = arg0K0;
6567   if ((3 == (3 & tconc_car_781X))) {
6568     if ((0 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + tconc_car_781X))))), 2))))) {
6569       if ((3 == (3 & tconc_cdr_785X))) {
6570         if ((0 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + tconc_cdr_785X))))), 2))))) {
6571           pair_address_786X = s48_ShpS;
6572           *((long *) pair_address_786X) = (long) (4098);
6573           newpair_787X = 3 + (((long) (pair_address_786X + 8)));
6574           if ((3 == (3 & newpair_787X))) {
6575             if ((0 == (31 & (PS_SHIFT_RIGHT_INLINE((*((long *) (((char *) (-11 + newpair_787X))))), 2))))) {
6576               *((long *) (((char *) (-3 + newpair_787X)))) = (long) (1);
6577               *((long *) ((((char *) (-3 + newpair_787X))) + 8)) = (long) (1);
6578               *((long *) (((char *) (-3 + tconc_cdr_785X)))) = (long) (tlc_772X);
6579               *((long *) ((((char *) (-3 + tconc_cdr_785X))) + 8)) = (long) (newpair_787X);
6580               *((long *) ((((char *) (-3 + tconc_773X))) + 8)) = (long) (newpair_787X);
6581               *((long *) ((((char *) (-3 + tlc_772X))) + 16)) = (long) (1);
6582               s48_ShpS = (pair_address_786X + 24);
6583               goto L16986;}
6584             else {
6585               goto L16986;}}
6586           else {
6587             goto L16986;}}
6588         else {
6589           goto L16986;}}
6590       else {
6591         goto L16986;}}
6592     else {
6593       goto L16986;}}
6594   else {
6595     goto L16986;}}
6596  L17644: {
6597   arg0K0 = (PS_SHIFT_RIGHT_INLINE(mask_783X, 1));
6598   arg1K1 = (ptr_784X + 8);
6599   goto L17642;}
6600 }
s48_trace_stob_contentsB(long stob_788X)6601 void s48_trace_stob_contentsB(long stob_788X)
6602 {
6603   char * start_790X;
6604   long h_789X;
6605  {  h_789X = *((long *) (((char *) (-11 + stob_788X))));
6606   start_790X = ((char *) (-3 + stob_788X));
6607   s48_trace_locationsB(start_790X, (start_790X + (-8 & (7 + (PS_SHIFT_RIGHT_LOGICAL_INLINE(h_789X, 8))))));
6608   return;}
6609 }
s48_trace_continuation_contentsB(char * contents_pointer_791X,char * code_pointer_792X,long mask_size_793X)6610 void s48_trace_continuation_contentsB(char * contents_pointer_791X, char * code_pointer_792X, long mask_size_793X)
6611 {
6612   char * arg1K0;
6613   char * arg1K1;
6614   long arg0K0;
6615   char * ptr_798X;
6616   long mask_797X;
6617   char * trace_ptr_796X;
6618   char * mask_ptr_795X;
6619   char * mask_pointer_794X;
6620  {  mask_pointer_794X = code_pointer_792X + -7;
6621   arg1K0 = (mask_pointer_794X + (0 - mask_size_793X));
6622   arg1K1 = contents_pointer_791X;
6623   goto L17487;}
6624  L17487: {
6625   mask_ptr_795X = arg1K0;
6626   trace_ptr_796X = arg1K1;
6627   if ((mask_ptr_795X == mask_pointer_794X)) {
6628     return;}
6629   else {
6630     arg0K0 = (*((unsigned char *) mask_ptr_795X));
6631     arg1K1 = trace_ptr_796X;
6632     goto L17495;}}
6633  L17495: {
6634   mask_797X = arg0K0;
6635   ptr_798X = arg1K1;
6636   if ((0 == mask_797X)) {
6637     arg1K0 = (mask_ptr_795X + 1);
6638     arg1K1 = (trace_ptr_796X + 64);
6639     goto L17487;}
6640   else {
6641     if ((1 == (1 & mask_797X))) {s48_trace_locationsB(ptr_798X, (ptr_798X + 8));
6642       goto L17511;}
6643     else {
6644       goto L17511;}}}
6645  L17511: {
6646   arg0K0 = (PS_SHIFT_RIGHT_INLINE(mask_797X, 1));
6647   arg1K1 = (ptr_798X + 8);
6648   goto L17495;}
6649 }void
s48_heap_init(void)6650 s48_heap_init(void)
6651 {
6652 Snew_heap_start_addrS = NULL;
6653 Spure_area_countS = 0;
6654 Simpure_area_countS = 0;
6655 Sfinding_typeS = 1;
6656 Sheap_errors_leftS = 0;
6657 Sgc_countS = 0;
6658 Sgc_secondsS = 0;
6659 Sgc_msecondsS = 0;
6660 SstatusS = NO_ERRORS;
6661 SeofPS = 0;
6662 Sstartup_procedureS = 0;
6663 SsymbolsS = 0;
6664 Simported_bindingsS = 0;
6665 Sexported_bindingsS = 0;
6666 Sresumer_recordsS = 0;
6667 Simg_start_addrS = NULL;
6668 Simg_end_addrS = NULL;
6669 Simg_heap_sizeS = 0;
6670 Ssmall_img_start_addrS = NULL;
6671 Ssmall_img_hp_addrS = NULL;
6672 Ssmall_img_end_addrS = NULL;
6673 Ssmall_img_heap_sizeS = 0;
6674 Slarge_img_start_addrS = NULL;
6675 Slarge_img_hp_addrS = NULL;
6676 Slarge_img_end_addrS = NULL;
6677 Slarge_img_heap_sizeS = 0;
6678 Sweaks_img_start_addrS = NULL;
6679 Sweaks_img_hp_addrS = NULL;
6680 Sweaks_img_end_addrS = NULL;
6681 Sweaks_img_heap_sizeS = 0;
6682 SoffsetS = 0;
6683 SinitializingPS = 1;
6684 SstatusS = NO_ERRORS;
6685 image_start_address = 0;
6686 Hthe_record_type270 = 1;
6687 }
6688