V10/cmd/spitbol/opttsts
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