        while(n--) { R[*ip++] = tuple[pos++]; }
        NEXT(0); }
     op33: { /* jrt a t o, jump by raw type (ignoring padding info) */
-@@ -1250,7 +1265,7 @@ invoke: /* nargs and regs ready, maybe gc and execute ob */
+@@ -1254,7 +1301,7 @@ invoke: /* nargs and regs ready, maybe gc and execute ob */
        NEXT(4); }
     op36: { /* size o r */
        word *ob = (word *) R[*ip++];

 #define allocate(size, to)          to = fp; fp += size;
 #define error(opcode, a, b)         R[4] = F(opcode); R[5] = (word) a; R[6] = (word) b; goto invoke_mcp;
 #define likely(x)                   __builtin_expect((x),1)
@@ -109,6 +109,7 @@ typedef unsigned long in_addr_t;
 #define RET(n)                      ob=(word *)R[3]; R[3] = R[n]; acc = 1; goto apply
 #define MEMPAD                      (NR+2)*8 /* space at end of heap for starting GC */
 #define MINGEN                      1024*32  /* minimum generation size before doing full GC  */

    if (likely(allocp(ob))) {
       word hdr = *ob & 4095;
       if (hdr == 262) { /* proc  */ 
@@ -1005,7 +1049,9 @@ switch_thread: /* enter mcp if present */
       goto apply;
    }
 invoke: /* nargs and regs ready, maybe gc and execute ob */
-   if (((word)fp) + 1024*64 >= ((word) memend)) { /* <- fixme... can be lowered after the compiler pass */
+   if (((word)fp) + 1024*64 >= ((word) memend))
+      //(1)  // always gc
+	{
       int p = 0; 
       *fp = make_header(NR+2, 50); /* hdr r_0 .. r_(NR-1) ob */ 
       while(p < NR) { fp[p+1] = R[p]; p++; } 
@@ -1020,6 +1066,7 @@ invoke: /* nargs and regs ready, maybe gc and execute ob */
 
    if (op) {
       main_dispatch:
