# ; ; (c) copyright 1988 by the Vrije Universiteit, Amsterdam, The Netherlands. ; See the copyright notice in the ACK home directory, in the file "Copyright". ; ; ; Module: Compute non-constant set displays ; Author: Ceriel J.H. Jacobs ; Version: $Header: /cvsup/minix/src/lib/ack/libm2/LtoUset.e,v 1.1 2005/10/10 15:27:46 beng Exp $ ; mes 2,_EM_WSIZE,_EM_PSIZE ; LtoUset is called for set displays containing { expr1 .. expr2 }. ; 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 5*_EM_WSIZE #define SETLOW 4*_EM_WSIZE #define SETSIZE 3*_EM_WSIZE #define USETSIZ 2*_EM_WSIZE #define LWB _EM_WSIZE #define UPB 0 exp $LtoUset pro $LtoUset,0 lal SETBASE ; address of initial set lol SETSIZE los _EM_WSIZE ; load initial set lol LWB ; low bound lol SETLOW sbu _EM_WSIZE stl LWB lol UPB ; high bound 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 lol LWB loc 1 adu _EM_WSIZE stl LWB bra *1 ; loop back 2 lal SETBASE lol SETSIZE sts _EM_WSIZE ; store result over initial set ret 0 end 0