Warning: this is an htmlized version!
The original is across this link,
and the conversion rules are here.
# «.test:prims»		(to "test:prims")



#%%%%
#
# Tests, part 1: defining the C primitives
#
#%%%%

# «test:prims»  (to ".test:prims")

SFprims EXIT \; { RS--; goto forth;
  } PLUS + { DS[-1]+=DS[0]; DS--; goto forth;
  } DUP    { DS[1]=DS[0]; DS++; goto forth;
  } 2DUP   { DS[1]=DS[-1]; DS[2]=DS[0]; DS+=2; goto forth;
  } SWAP   { itmp=DS[-1]; DS[-1]=DS[0]; DS[0]=itmp; goto forth;
  } DROP   { DS--; goto forth;
  } SBRANCH   { SS[0]=(int)_f0+*((ushort *)(SS[0])); goto forth;
  } S0BRANCH  { tmp=*((ushort *)(SS[0]))++; if(DS[0]==0) SS[0]=(int)_f0+tmp;
		DS--; goto forth;
  }

Fprims 1    { DS[1]=1; DS++; goto forth;
  } TIMES * { DS[-1]*=DS[0]; DS--; goto forth;
  } COUNT   { DS[1]=*((uchar *)(DS[0]))++; DS++; goto forth;
  } TYPE    { fwrite((void *)(DS[-1]), 1, DS[0], stdout); DS-=2; goto forth;
  } CR      { printf("\n"); goto forth;
  } STO S>  { DS[1]=SS[0]; DS++; SS--; goto forth;
  } TOS >S  { SS[1]=DS[0]; SS++; DS--; goto forth;
  } SGOBBLE1  { DS[1]=*((uchar *)(SS[0]))++; DS++; goto forth;
  } SGOBBLE2  { DS[1]=*((ushort *)(SS[0]))++; DS++; goto forth;
  } WSTORE W! { *((ushort *)(DS[0]))=DS[1]; DS-=2; goto forth;
  } WFETCH W@ { DS[0]=*((ushort *)(DS[0])); goto forth;
  }

FIPprims RETURN { RS--; return;
  } RSREXIT { RS[0]=SS[0]-((int)_f0); SS--; goto forth;
  }

Hprims COL : { goto forth;
  } CON { DS[1]=*(int *)(_f0+RS[0]); DS++; RS--; goto forth;
  } TO  { *(int *)(_f0+RS[0]+1)=DS[0]; DS--; RS--; goto forth;
  } AT  { DS[1]=((int)_f0)+RS[0]+2; DS++; RS--; goto forth;
  } RSR { SS[1]=((int)_f0)+RS[-1]; SS++; RS[-1]=FIP_RSREXIT; goto head;
  } C1  { fun=*(funptr *)(_f0+RS[0]); DS[0]=(*fun)(DS[0]); RS--; goto forth;
  } C2  { fun=*(funptr *)(_f0+RS[0]); DS[-1]=(*fun)(DS[-1], DS[0]);
	    DS--; RS--; goto forth;
  } C3  { fun=*(funptr *)(_f0+RS[0]); DS[-2]=(*fun)(DS[-2], DS[-1], DS[0]);
	    DS-=2; RS--; goto forth;
  }