sets now allowed for all subranges

This commit is contained in:
ceriel 1987-10-28 16:10:02 +00:00
parent b668810351
commit 3c63f1b656

View file

@ -2,14 +2,16 @@
mes 2,EM_WSIZE,EM_PSIZE mes 2,EM_WSIZE,EM_PSIZE
; _LtoUset is called for set displays containing { expr1 .. expr2 }. ; _LtoUset is called for set displays containing { expr1 .. expr2 }.
; It has five parameters, of which the caller must pop four: ; It has six parameters, of which the caller must pop five:
; - The set in which bits must be set. ; - The set in which bits must be set.
; - the lower bound of the set type.
; - The set size in bytes. ; - The set size in bytes.
; - The upper bound of set elements, specified by the set-type. ; - The upper bound of set elements, specified by the set-type.
; - "expr2", the upper bound ; - "expr2", the upper bound
; - "expr1", the lower bound ; - "expr1", the lower bound
#define SETBASE 4*EM_WSIZE #define SETBASE 5*EM_WSIZE
#define SETLOW 4*EM_WSIZE
#define SETSIZE 3*EM_WSIZE #define SETSIZE 3*EM_WSIZE
#define USETSIZ 2*EM_WSIZE #define USETSIZ 2*EM_WSIZE
#define LWB EM_WSIZE #define LWB EM_WSIZE
@ -19,16 +21,28 @@
lal SETBASE ; address of initial set lal SETBASE ; address of initial set
lol SETSIZE lol SETSIZE
los EM_WSIZE ; load initial set los EM_WSIZE ; load initial set
1
lol LWB ; low bound lol LWB ; low bound
lol SETLOW
sbu EM_WSIZE
stl LWB
lol UPB ; high bound lol UPB ; high bound
bgt *2 ; while low <= high lol SETLOW
sbu EM_WSIZE
stl UPB
1
lol LWB
lol UPB
cmu EM_WSIZE
zgt *2 ; while low <= high
lol LWB lol LWB
lol SETSIZE lol SETSIZE
set ? ; create [low] set ? ; create [low]
lol SETSIZE lol SETSIZE
ior ? ; merge with initial set ior ? ; merge with initial set
inl LWB ; increment low bound lol LWB
loc 1
adu EM_WSIZE
stl LWB
bra *1 ; loop back bra *1 ; loop back
2 2
lal SETBASE lal SETBASE