61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| ;
 | |
| ; (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$
 | |
| ;
 | |
|  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
 |