sets now allowed for all subranges
authorceriel <none@none>
Wed, 28 Oct 1987 16:10:02 +0000 (16:10 +0000)
committerceriel <none@none>
Wed, 28 Oct 1987 16:10:02 +0000 (16:10 +0000)
lang/m2/libm2/LtoUset.e

index bd7e823..5957472 100644 (file)
@@ -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
  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