From 3c63f1b6565806cf06693d087abc0d423b0583a6 Mon Sep 17 00:00:00 2001 From: ceriel Date: Wed, 28 Oct 1987 16:10:02 +0000 Subject: [PATCH] sets now allowed for all subranges --- lang/m2/libm2/LtoUset.e | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/lang/m2/libm2/LtoUset.e b/lang/m2/libm2/LtoUset.e index bd7e823f0..595747240 100644 --- a/lang/m2/libm2/LtoUset.e +++ b/lang/m2/libm2/LtoUset.e @@ -2,14 +2,16 @@ mes 2,EM_WSIZE,EM_PSIZE ; _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 lower bound of the set type. ; - The set size in bytes. ; - The upper bound of set elements, specified by the set-type. ; - "expr2", the upper 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 USETSIZ 2*EM_WSIZE #define LWB EM_WSIZE @@ -19,16 +21,28 @@ lal SETBASE ; address of initial set lol SETSIZE los EM_WSIZE ; load initial set -1 lol LWB ; low bound + lol SETLOW + sbu EM_WSIZE + stl LWB 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 SETSIZE set ? ; create [low] lol SETSIZE ior ? ; merge with initial set - inl LWB ; increment low bound + lol LWB + loc 1 + adu EM_WSIZE + stl LWB bra *1 ; loop back 2 lal SETBASE -- 2.34.1