movl initr,r8 # terminal flag #---> tstl r8 # skip if no terminal beqlu ini13 # skip if no terminal addl2 cswex,noxeq # add -noexecute flag #---> tstl noxeq # jump if execution suppressed bnequ inix2 # jump if execution suppressed movl 4*icval(r10),r5 # load exponent #---> tstl r5 # error if negative exponent bgeq 0f # error if negative exponent subl2 4*1(sp),r6 # minus final cursor = total length #---> tstl r6 # jump if result is null bnequ 0f # jump if result is null movl 4*sclen(r10),r6 # load length #---> tstl r6 # jump if null replacement beqlu orpl2 # jump if null replacement subl2 r8,r6 # minus final cursor = part 3 length #---> tstl r6 # jump to assign if part 3 is null bnequ 0f # jump to assign if part 3 is null labo1: movl kvert,r6 # load error code #---> tstl r6 # jump if no error has occured beqlu labo2 # jump if no error has occured lcnt1: movl r$cnt,r9 # load continuation code block ptr #---> tstl r9 # jump if no previous error beqlu lcnt2 # jump if no previous error movl 4*efrsl(r10),r7 # get result type id #---> tstl r7 # branch if not unconverted bnequ befa8 # branch if not unconverted movl 4*ffnxt(r9),r9 # else link to next ffblk on chain #---> tstl r9 # loop back if another entry to check bnequ bffc1 # loop back if another entry to check movl 4*pfnlo(r10),r6 # load number of locals #---> tstl r6 # jump if no locals beqlu bpf07 # jump if no locals addl2 kvftr,r6 # add ftrace value #---> tstl r6 # jump if tracing possible bnequ bpf09 # jump if tracing possible bicl2 r11,r6 #---> tstl r6 # fail if no match bnequ 0f # fail if no match decl r8 # else decrement level counter #---> tstl r8 # loop back if not at outer level bnequ pbal2 # loop back if not at outer level subl2 r7,r8 # get number of characters left #---> tstl r8 # fail if no characters left bnequ 0f # fail if no characters left subl2 r7,r8 # get number of characters left #---> tstl r8 # fail if no characters left bnequ 0f # fail if no characters left bicl2 r11,r6 #---> tstl r6 # succeed if break character found beqlu 0f # succeed if break character found bicl2 r11,r6 #---> tstl r6 # fail if character is matched beqlu 0f # fail if character is matched subl2 r7,r8 # calculate number of characters left #---> tstl r8 # fail if no characters left bnequ 0f # fail if no characters left bicl2 r11,r6 #---> tstl r6 # jump if no match beqlu pspn3 # jump if no match subl2 r7,r8 # calculate number of characters left #---> tstl r8 # fail if no characters left bnequ 0f # fail if no characters left movl 4*icval(r9),r5 # load integer value #---> tstl r5 # jump if zero or neg (bad dimension) bgtr 0f # jump if zero or neg (bad dimension) movl arptr,r10 # load offset (also pass indicator) #---> tstl r10 # jump if first pass beqlu sar05 # jump if first pass movl 4*icval(r9),r5 # get value #---> tstl r5 # branch if negative or zero bleq sbf01 # branch if negative or zero sclr4: movl 4*vrnxt(r9),r9 # point to next vrblk on chain #---> tstl r9 # jump for next bucket if chain end beqlu sclr3 # jump for next bucket if chain end scv02: movl (r10)+,r9 # load next table entry, bump pointer #---> tstl r9 # fail if zero marking end of list bnequ 0f # fail if zero marking end of list subl2 intv2,r5 # subtract 2 to compare #---> tstl r5 # fail if dim2 not 2 beql 0f # fail if dim2 not 2 movl 4*1(r10),r6 # load length for sbstr #---> tstl r6 # return null if length is zero bnequ 0f # return null if length is zero decl (sp) # count down #---> tstl (sp) # loop bnequ sdup5 # loop movl 4*2(r10),r10 # get next link #---> tstl r10 # stop if chain end beqlu senf4 # stop if chain end senf4: movl enfch,r10 # get chain head #---> tstl r10 # finished if chain end bnequ 0f # finished if chain end movl r$rpt,r9 # point to current table (if any) #---> tstl r9 # jump if we already have a table bnequ srpl2 # jump if we already have a table movl r9,r7 # save second argument #---> tstl r7 # jump if second argument zero bnequ 0f # jump if second argument zero ssubb: movl sbssv,r8 # reload third argument #---> tstl r8 # skip if third arg given bnequ ssub1 # skip if third arg given acs05: movl 4*trtyp(r9),r7 # load trap type code #---> tstl r7 # jump if not input association beqlu 0f # jump if not input association movl 4*trfpt(r9),r10 # get file ctrl blk ptr or zero #---> tstl r10 # jump if not standard input file bnequ acs06 # jump if not standard input file acmp3: movl 4*icval(r10),r5 # load second argument #---> tstl r5 # gt if negative blss acmp1 # gt if negative subl2 aldyn,r5 # subtract from scaled up free store #---> tstl r5 # jump if sufficient free store bgtr aloc5 # jump if sufficient free store asg11: movl 4*trfpt(r10),r6 # fcblk ptr #---> tstl r6 # jump if standard output file beqlu asg13 # jump if standard output file bicl2 r11,r6 #---> tstl r6 # jump if constant keyword bnequ cgv00 # jump if constant keyword bicl2 r11,r6 #---> tstl r6 # jump if not beqlu cgv12 # jump if not bicl2 r11,r6 #---> tstl r6 # jump if preevaluation permitted bnequ cgv08 # jump if preevaluation permitted bicl2 r11,r6 #---> tstl r6 # ordinary binop if not bnequ 0f # ordinary binop if not bicl2 r11,r6 #---> tstl r6 # go gen if not constant bnequ 0f # go gen if not constant cdwd1: movl r$ccb,r9 # load ptr to ccblk being built #---> tstl r9 # jump if block allocated bnequ cdwd2 # jump if block allocated subl2 r7,r6 # get length of label #---> tstl r6 # skip if label length zero bnequ 0f # skip if label length zero bisl2 4*cmcgo(sp),r8 # check if conditional goto #---> tstl r8 # jump if -nofail and no cond. goto beqlu cmpse # jump if -nofail and no cond. goto movl 4*cmlbl(sp),r10 # get possible label pointer #---> tstl r10 # skip if no label beqlu cmp26 # skip if no label cmp27: movl 4*cmsop(sp),r6 # load success offset #---> tstl r6 # jump if no fill in required beqlu cmp28 # jump if no fill in required bisl2 4*cmsgo(sp),r7 # or in success goto #---> tstl r7 # ok if non-null field beqlu 0f # ok if non-null field bicl2 r11,r7 #---> tstl r7 # redef ok if not beqlu dffn3 # redef ok if not movl 4*trtrf(r10),r10# point to trtrf trap block #---> tstl r10 # jump if no iochn beqlu dtch5 # jump if no iochn movl 4*trtrf(r10),r10# point to next link #---> tstl r10 # jump if end of chain beqlu dtch5 # jump if end of chain dmp01: movl 4*vrnxt(r9),r9 # point to next vrblk on chain #---> tstl r9 # jump if end of this hash chain bnequ 0f # jump if end of this hash chain movl (r10),r9 # load pointer to next entry #---> tstl r9 # jump if end of chain to insert bnequ 0f # jump if end of chain to insert dmp10: movl dmvch,r9 # load pointer to next entry on chain #---> tstl r9 # jump if end of chain beqlu dmp11 # jump if end of chain dmp12: movl (r10)+,r9 # load next svblk ptr from table #---> tstl r9 # jump if end of list beqlu dmp13 # jump if end of list movl 4*bclen(r9),r8 # load defined length #---> tstl r8 # skip characters if none beqlu dmp32 # skip characters if none movl 4*sclen(r9),r6 # get length of string #---> tstl r6 # jump if null beqlu ert02 # jump if null gbc02: movl (r10),r9 # load ptr to next vrblk #---> tstl r9 # jump if end of chain beqlu gbc03 # jump if end of chain gbc11: movl gbcnm,r10 # point to next move block #---> tstl r10 # jump if end of chain beqlu gbc12 # jump if end of chain movl gbsvb,r7 # reload move offset #---> tstl r7 # jump if no move required beqlu gbc13 # jump if no move required movl (sp)+,r8 # restore block pointer #---> tstl r8 # continue loop unless outer levl bnequ gpf02 # continue loop unless outer levl movl 4*vrnxt(r10),r10# point to next vrblk on chain #---> tstl r10 # jump if end of chain beqlu gnv08 # jump if end of chain bicl2 r11,r7 #---> tstl r7 # jump if not present beqlu gnv13 # jump if not present bicl2 r11,r8 #---> tstl r8 # jump if no keyword number beqlu gnv17 # jump if no keyword number bicl2 r11,r8 #---> tstl r8 # skip if no system function beqlu gnv18 # skip if no system function bicl2 r11,r8 #---> tstl r8 # jump if bit is off (no system labl) beqlu gnv19 # jump if bit is off (no system labl) bicl2 r11,r8 #---> tstl r8 # all done if no value bnequ 0f # all done if no value movl 4*sclen(r10),r6 # load length #---> tstl r6 # jump if not system variable bnequ gts04 # jump if not system variable decl r10 # decrement counter #---> tstl r10 # loop back if more to go bnequ gts25 # loop back if more to go movl 4*bclen(r10),r6 # get size to allocate #---> tstl r6 # if null then return null beqlu gts33 # if null then return null subl2 r8,r6 # subtract to get remainder #---> tstl r6 # no pad if already even boundary bnequ 0f # no pad if already even boundary movl r$iot,r9 # get 0 or trtrf ptr #---> tstl r9 # jump if trtrf block exists beqlu 0f # jump if trtrf block exists iop20: movl 4*trtrf(r9),r9 # next link of chain #---> tstl r9 # not found beqlu iop21 # not found bicl2 r11,r6 #---> tstl r6 # error if no keyword association beqlu kwnm1 # error if no keyword association movl lstsn,r9 # load statement number #---> tstl r9 # jump if no statement number beqlu list2 # jump if no statement number movl r$stl,r9 # load pointer to sub-title #---> tstl r9 # jump if no sub-title beqlu lstt1 # jump if no sub-title movl r$cim,r9 # point to image #---> tstl r9 # jump if no image beqlu nxts2 # jump if no image movl 4*sclen(r10),r7 # load string length #---> tstl r7 # jump if null string case beqlu pats6 # jump if null string case movl (r9),r5 # load nr of executions #---> tstl r5 # no printing if zero beql prfl3 # no printing if zero movl prlen,r7 # get prior length if any #---> tstl r7 # skip if no length beqlu prpa2 # skip if no length bicl2 r11,r7 #---> tstl r7 # skip if clear beqlu prpa4 # skip if clear bicl2 r11,r8 #---> tstl r8 # jump if terminal required beqlu 0f # jump if terminal required prn07: movl r9,r8 # copy vrblk pointer #---> tstl r8 # jump if chain end (or prnmv zero) beqlu prn09 # jump if chain end (or prnmv zero) subl2 r7,r6 # subtract count of chars already out #---> tstl r6 # jump to exit if none left bnequ 0f # jump to exit if none left subl2 profs,r9 # get chars left in print buffer #---> tstl r9 # skip if room left on this line bnequ prst2 # skip if room left on this line movl r$cni,r9 # get ptr to next image #---> tstl r9 # exit if already read bnequ read3 # exit if already read subl2 4*ardm2(r10),r5 # check against dimension #---> tstl r5 # fail if too large blss 0f # fail if too large subl2 $4,r8 # i = i - 1 #---> tstl r8 # loop if i gt 0 bnequ srt10 # loop if i gt 0 srt11: subl2 $4,r8 # i = i - 1 (n - 1 initially) #---> tstl r8 # jump if done beqlu srt12 # jump if done decl srtnr # decrement row count #---> tstl srtnr # repeat till all rows done bnequ srt13 # repeat till all rows done movl srtfd,r9 # get possible former dfblk ptr #---> tstl r9 # jump if not beqlu srtf4 # jump if not tfn02: movl 4*1(r9),r5 # load value as hash source #---> tstl r5 # ok if positive or zero bgeq tfn06 # ok if positive or zero movl 4*2(sp),r7 # restore name/value indicator #---> tstl r7 # jump if called by name bnequ tfn09 # jump if called by name movl 4*2(sp),r7 # load name/value indicator #---> tstl r7 # exit with default if value call beqlu tfn09 # exit with default if value call movl (sp)+,r7 # get trblk ptr again #---> tstl r7 # jump if stoptr case beqlu trc05 # jump if stoptr case movl 4*sclen(r9),r6 # load string length #---> tstl r6 # jump if null input beqlu trim2 # jump if null input trim1: decl r6 # else decrement character count #---> tstl r6 # loop back if more to check bnequ trim0 # loop back if more to check subl2 r7,r6 # get number of remaining characters #---> tstl r6 # jump if no characters left beqlu xscn2 # jump if no characters left decl r6 # decrement count of chars left #---> tstl r6 # loop back if more chars to go bnequ xscn1 # loop back if more chars to go subl2 4*ardim(r9),r5 # subtract dimension #---> tstl r5 # out of range fail if too large blss 0f # out of range fail if too large addl2 kvftr,r7 # add ftrace #---> tstl r7 # jump if no tracing possible bnequ 0f # jump if no tracing possible movl 4*pfrtr(r9),r9 # else load return trace trblk ptr #---> tstl r9 # jump if not return traced beqlu rtn02 # jump if not return traced movl (sp)+,r10 # pop saved pointer #---> tstl r10 # no action if none beqlu rtn7c # no action if none addl2 4*pfnlo(r9),r7 # add number of locals #---> tstl r7 # jump if no args/locals beqlu rtn10 # jump if no args/locals movl kvstc,r5 # get stmt count #---> tstl r5 # omit counting if negative bgeq 0f # omit counting if negative movl kvstl,r5 # get statement limit #---> tstl r5 # skip if negative blss stpr2 # skip if negative movl scnse,r6 # load scan element offset #---> tstl r6 # skip if not set beqlu err02 # skip if not set movl r$sxc,r9 # load setexit cdblk pointer #---> tstl r9 # continue if no setexit trap bnequ 0f # continue if no setexit trap err08: movl dmvch,r9 # chain head for affected vrblks #---> tstl r9 # done if zero beqlu err06 # done if zero 111 redundant TSTL instructions removed