BSD 4 release
[unix-history] / usr / src / cmd / px / 23case.s
#\f
# Copyright (c) 1979 Regents of the University of California
#
# char sccsid[] = "@(#)23case.s 4.1 10/10/80";
#
# CASE OPERATORS
#
_CASE1OP:
cvtbl (r10)+,r0
bneq l2401
cvtwl (r10)+,r0 #r0 has length of case table
l2401:
movaw (r10)[r0],r2 #r2 has pointer to cases
cvtwl (sp)+,r3 #r3 has case element to find
locc r3,r0,(r2) #find case element
beql caserr #case not found
offset:
mnegl r0,r0 #calc new lc
cvtwl (r2)[r0],r1
addl2 r1,r10
jmp (r8)
_CASE2OP:
cvtbl (r10)+,r0
bneq l2402
cvtwl (r10)+,r0 #r0 has length of case table
l2402:
movaw (r10)[r0],r1 #r1 has pointer to cases
movl r1,r2 #save base pointer
movzwl (sp)+,r3 #r3 has case element to find
l2403:
cmpw r3,(r1)+ #search for case
beqlu offset
sobgtr r0,l2403
brb caserr #not found
_CASE4OP:
cvtbl (r10)+,r0
bneq l2404
cvtwl (r10)+,r0 #r0 has length of case table
l2404:
movaw (r10)[r0],r1 #r1 has pointer to cases
movl r1,r2 #save base pointer
movl (sp)+,r3 #r3 has case element to find
l2405:
cmpl r3,(r1)+ #search for case
beqlu offset
sobgtr r0,l2405
caserr:
movw $ECASE,_perrno
jbr error