Browse Source

some more speed-up changes

ceriel 35 years ago
parent
commit
3107e638f8

+ 3 - 0
util/int/ChangeLog

@@ -1,3 +1,6 @@
+22-Nov-89  Ceriel Jacobs (ceriel) at ceriel
+	Some more speed-up changes, resulting in another 5%.
+
 13-Nov-89  Ceriel Jacobs (ceriel) at ceriel
 	Many changes for speed-up (resulting speed-up: 20-25%).
 	Also fixed serious problem in floating point handling: the existing

+ 85 - 5
util/int/data.c

@@ -94,6 +94,7 @@ newHP(ap)
  *									*
  *	dt_stdp(addr, p)	- STore Data Pointer.			*
  *	dt_stn(addr, l, n)	- STore N byte integer.			*
+ *	dt_stw(addr, l)		- STore wsize byte integer.		*
  *	dt_stf(addr, f, n)	- STore n byte Floating point number.	*
  *									*
  ************************************************************************/
@@ -159,6 +160,30 @@ dt_stn(addr, al, n)
 	}
 }
 
+dt_stw(addr, al)
+	register ptr addr;
+	long al;
+{
+	register int i;
+	register long l = al;
+#ifdef LOGGING
+	/* a psize zero is ambiguous */
+	int sh_flags = (l == 0 && wsize == psize) ? (SH_INT|SH_DATAP) : SH_INT;
+#endif LOGGING
+
+	LOG(("@g6 dt_stw(%lu, %lu)", addr, l));
+	ch_in_data(addr, wsize);
+	ch_wordaligned(addr);
+	for (i = (int) wsize; i > 0; i--, addr++) {
+		ch_dt_prot(addr);
+		data_loc(addr) = (char) l;
+#ifdef LOGGING
+		dt_sh(addr) = sh_flags;
+#endif	LOGGING
+		l = l>>8;
+	}
+}
+
 #ifndef	NOFLOAT
 dt_stf(addr, f, n)
 	register ptr addr;
@@ -191,7 +216,9 @@ dt_stf(addr, f, n)
  *	dt_lddp(addr)      - LoaD Data Pointer from data.		*
  *	dt_ldip(addr)      - LoaD Instruction Pointer from data.	*
  *	dt_ldu(addr, n)    - LoaD n Unsigned bytes from data.		*
+ *	dt_lduw(addr)      - LoaD wsize Unsigned bytes from data.	*
  *	dt_lds(addr, n)    - LoaD n Signed bytes from data.		*
+ *	dt_ldsw(addr)      - LoaD wsize Signed bytes from data.		*
  *									*
  ************************************************************************/
 
@@ -255,13 +282,39 @@ unsigned long dt_ldu(addr, n)
 	}
 #endif	LOGGING
 
-	for (i = (int) n-1; i >= 0; i--) {
-		u = (u<<8) | btou(data_loc(addr + i));
+	addr += n-1;
+	for (i = (int) n-1; i >= 0; i--, addr--) {
+		u = (u<<8) | btou(data_loc(addr));
 	}
 	LOG(("@g6 dt_ldu() returns %lu", u));
 	return (u);
 }
 
+unsigned long dt_lduw(addr)
+	register ptr addr;
+{
+	register int i;
+	register unsigned long u = 0;
+
+	LOG(("@g6 dt_lduw(%lu)", addr));
+
+	ch_in_data(addr, wsize);
+	ch_wordaligned(addr);
+#ifdef	LOGGING
+	if (!is_dt_set(addr, wsize, SH_INT)) {
+		warning(WGIEXP);
+		warn_dtbits(addr, wsize);
+	}
+#endif	LOGGING
+
+	addr += wsize-1;
+	for (i = (int) wsize-1; i >= 0; i--, addr--) {
+		u = (u<<8) | btou(data_loc(addr));
+	}
+	LOG(("@g6 dt_lduw() returns %lu", u));
+	return (u);
+}
+
 long dt_lds(addr, n)
 	register ptr addr;
 	size n;
@@ -280,14 +333,41 @@ long dt_lds(addr, n)
 	}
 #endif	LOGGING
 
-	l = btos(data_loc(addr + n - 1));
-	for (i = n - 2; i >= 0; i--) {
-		l = (l<<8) | btol(data_loc(addr + i));
+	addr += n-2;
+	l = btos(data_loc(addr + 1));
+	for (i = n - 2; i >= 0; i--, addr--) {
+		l = (l<<8) | btol(data_loc(addr));
 	}
 	LOG(("@g6 dt_lds() returns %lu", l));
 	return (l);
 }
 
+long dt_ldsw(addr)
+	register ptr addr;
+{
+	register int i;
+	register long l;
+
+	LOG(("@g6 dt_ldsw(%lu)", addr));
+
+	ch_in_data(addr, wsize);
+	ch_wordaligned(addr);
+#ifdef	LOGGING
+	if (!is_dt_set(addr, wsize, SH_INT)) {
+		warning(WGIEXP);
+		warn_dtbits(addr, wsize);
+	}
+#endif	LOGGING
+
+	addr += wsize-2;
+	l = btos(data_loc(addr + 1));
+	for (i = wsize - 2; i >= 0; i--, addr--) {
+		l = (l<<8) | btol(data_loc(addr));
+	}
+	LOG(("@g6 dt_ldsw() returns %lu", l));
+	return (l);
+}
+
 /************************************************************************
  *	Data move division						*
  ************************************************************************

+ 3 - 3
util/int/do_array.c

@@ -39,7 +39,7 @@ DoLARm(arg)
 DoLARz()
 {
 	/* LAR w: Load array element, descriptor contains integers of size w */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@A6 DoLARz(%ld)", l));
 	arr(LAR, arg_wi(l));
@@ -66,7 +66,7 @@ DoSARm(arg)
 DoSARz()
 {
 	/* SAR w: Store array element */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@A6 DoSARz(%ld)", l));
 	arr(SAR, arg_wi(l));
@@ -93,7 +93,7 @@ DoAARm(arg)
 DoAARz()
 {
 	/* AAR w: Load address of array element */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@A6 DoAARz(%ld)", l));
 	arr(AAR, arg_wi(l));

+ 4 - 4
util/int/do_comp.c

@@ -51,7 +51,7 @@ DoCMIm(arg)
 DoCMIz()
 {
 	/* CMI w: Compare w byte integers, Push negative, zero, positive for <, = or > */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register long t = spop(arg_wi(l));
 	register long s = spop(l);
 
@@ -102,7 +102,7 @@ DoCMFz()
 {
 	/* CMF w: Compare w byte reals */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 	double t = fpop(arg_wf(l));
 	double s = fpop(l);
 
@@ -130,7 +130,7 @@ DoCMUl2(arg)
 DoCMUz()
 {
 	/* CMU w: Compare w byte unsigneds */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register unsigned long t = upop(arg_wi(l));
 	register unsigned long s = upop(l);
 
@@ -165,7 +165,7 @@ DoCMSs(hob, wfac)
 DoCMSz()
 {
 	/* CMS w: Compare w byte values, can only be used for bit for bit equality test */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@T6 DoCMSz(%ld)", l));
 	spoilFRA();

+ 18 - 18
util/int/do_conv.c

@@ -21,12 +21,12 @@ extern double fpop();
 DoCIIz()
 {
 	/* CII -: Convert integer to integer (*) */
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 	register long s;
 
 	LOG(("@C6 DoCIIz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 12:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
@@ -65,12 +65,12 @@ DoCIIz()
 DoCUIz()
 {
 	/* CUI -: Convert unsigned to integer (*) */
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 	register unsigned long u;
 
 	LOG(("@C6 DoCUIz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 22:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
@@ -116,12 +116,12 @@ DoCFIz()
 {
 	/* CFI -: Convert floating to integer (*) */
 #ifndef	NOFLOAT
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 	double f;
 
 	LOG(("@C6 DoCFIz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 42:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
@@ -172,11 +172,11 @@ DoCIFz()
 {
 	/* CIF -: Convert integer to floating (*) */
 #ifndef	NOFLOAT
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 
 	LOG(("@C6 DoCIFz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 24:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
@@ -207,12 +207,12 @@ DoCUFz()
 {
 	/* CUF -: Convert unsigned to floating (*) */
 #ifndef	NOFLOAT
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 	register unsigned long u;
 
 	LOG(("@C6 DoCUFz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 24:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
@@ -253,11 +253,11 @@ DoCFFz()
 {
 	/* CFF -: Convert floating to floating (*) */
 #ifndef	NOFLOAT
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 
 	LOG(("@C6 DoCFFz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 44:
 		return;
 	case 48:
@@ -279,12 +279,12 @@ DoCFFz()
 DoCIUz()
 {
 	/* CIU -: Convert integer to unsigned */
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 	register long u;
 
 	LOG(("@C6 DoCIUz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 22:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
@@ -313,11 +313,11 @@ DoCIUz()
 DoCUUz()
 {
 	/* CUU -: Convert unsigned to unsigned */
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 
 	LOG(("@C6 DoCUUz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 22:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);
@@ -346,12 +346,12 @@ DoCFUz()
 {
 	/* CFU -: Convert floating to unsigned */
 #ifndef	NOFLOAT
-	register int newsize = spop(wsize);
+	register int newsize = swpop();
 	double f;
 
 	LOG(("@C6 DoCFUz()"));
 	spoilFRA();
-	switch ((int)(10 * spop(wsize) + newsize)) {
+	switch ((int)(10 * swpop() + newsize)) {
 	case 42:
 		if (wsize == 4) {
 			wtrap(WILLCONV, EILLINS);

+ 7 - 7
util/int/do_fpar.c

@@ -68,7 +68,7 @@ DoADFz()
 {
 	/* ADF w: Floating add (*) */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 	double t = fpop(arg_wf(l));
 
 	LOG(("@F6 DoADFz(%ld)", l));
@@ -119,7 +119,7 @@ DoSBFz()
 {
 	/* SBF w: Floating subtract (*) */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 	double t = fpop(arg_wf(l));
 
 	LOG(("@F6 DoSBFz(%ld)", l));
@@ -170,7 +170,7 @@ DoMLFz()
 {
 	/* MLF w: Floating multiply (*) */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 	double t = fpop(arg_wf(l));
 
 	LOG(("@F6 DoMLFz(%ld)", l));
@@ -221,7 +221,7 @@ DoDVFz()
 {
 	/* DVF w: Floating divide (*) */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 	double t = fpop(arg_wf(l));
 
 	LOG(("@F6 DoDVFz(%ld)", l));
@@ -253,7 +253,7 @@ DoNGFz()
 {
 	/* NGF w: Floating negate (*) */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 	double t = fpop(arg_wf(l));
 
 	LOG(("@F6 DoNGFz(%ld)", l));
@@ -285,7 +285,7 @@ DoFIFz()
 {
 	/* FIF w: Floating multiply and split integer and fraction part (*) */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 	double t = fpop(arg_wf(l));
 
 	LOG(("@F6 DoFIFz(%ld)", l));
@@ -316,7 +316,7 @@ DoFEFz()
 {
 	/* FEF w: Split floating number in exponent and fraction part (*) */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@F6 DoFEFz(%ld)", l));
 	spoilFRA();

+ 30 - 30
util/int/do_incdec.c

@@ -21,7 +21,7 @@ DoINCz()
 	/* INC -: Increment word on top of stack by 1 (*) */
 	LOG(("@Z6 DoINCz()"));
 	spoilFRA();
-	wpush(inc(spop(wsize)));
+	wpush(inc(swpop()));
 }
 
 DoINLm(arg)
@@ -34,7 +34,7 @@ DoINLm(arg)
 	LOG(("@Z6 DoINLm(%ld)", l));
 	spoilFRA();
 	p = loc_addr(l);
-	st_stn(p, inc(st_lds(p, wsize)), wsize);
+	st_stw(p, inc(st_ldsw(p)));
 }
 
 DoINLn2(arg)
@@ -48,7 +48,7 @@ DoINLn2(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, inc(st_lds(p, wsize)), wsize);
+	st_stw(p, inc(st_ldsw(p)));
 }
 
 DoINLn4(arg)
@@ -62,7 +62,7 @@ DoINLn4(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, inc(st_lds(p, wsize)), wsize);
+	st_stw(p, inc(st_ldsw(p)));
 }
 
 DoINLp2(arg)
@@ -76,7 +76,7 @@ DoINLp2(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, inc(st_lds(p, wsize)), wsize);
+	st_stw(p, inc(st_ldsw(p)));
 }
 
 DoINLp4(arg)
@@ -90,7 +90,7 @@ DoINLp4(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, inc(st_lds(p, wsize)), wsize);
+	st_stw(p, inc(st_ldsw(p)));
 }
 
 DoINLs(hob, wfac)
@@ -105,7 +105,7 @@ DoINLs(hob, wfac)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, inc(st_lds(p, wsize)), wsize);
+	st_stw(p, inc(st_ldsw(p)));
 }
 
 DoINEl2(arg)
@@ -117,7 +117,7 @@ DoINEl2(arg)
 	LOG(("@Z6 DoINEl2(%lu)", p));
 	spoilFRA();
 	p = arg_g(p);
-	dt_stn(p, inc(dt_lds(p, wsize)), wsize);
+	dt_stw(p, inc(dt_ldsw(p)));
 }
 
 DoINEl4(arg)
@@ -129,7 +129,7 @@ DoINEl4(arg)
 	LOG(("@Z6 DoINEl4(%lu)", p));
 	spoilFRA();
 	p = arg_g(p);
-	dt_stn(p, inc(dt_lds(p, wsize)), wsize);
+	dt_stw(p, inc(dt_ldsw(p)));
 }
 
 DoINEs(hob, wfac)
@@ -142,7 +142,7 @@ DoINEs(hob, wfac)
 	LOG(("@Z6 DoINEs(%lu)", p));
 	spoilFRA();
 	p = arg_g(p);
-	dt_stn(p, inc(dt_lds(p, wsize)), wsize);
+	dt_stw(p, inc(dt_ldsw(p)));
 }
 
 DoDECz()
@@ -150,7 +150,7 @@ DoDECz()
 	/* DEC -: Decrement word on top of stack by 1 (*) */
 	LOG(("@Z6 DoDECz()"));
 	spoilFRA();
-	wpush(dec(spop(wsize)));
+	wpush(dec(swpop()));
 }
 
 DoDELn2(arg)
@@ -164,7 +164,7 @@ DoDELn2(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, dec(st_lds(p, wsize)), wsize);
+	st_stw(p, dec(st_ldsw(p)));
 }
 
 DoDELn4(arg)
@@ -178,7 +178,7 @@ DoDELn4(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, dec(st_lds(p, wsize)), wsize);
+	st_stw(p, dec(st_ldsw(p)));
 }
 
 DoDELp2(arg)
@@ -192,7 +192,7 @@ DoDELp2(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, dec(st_lds(p, wsize)), wsize);
+	st_stw(p, dec(st_ldsw(p)));
 }
 
 DoDELp4(arg)
@@ -206,7 +206,7 @@ DoDELp4(arg)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, dec(st_lds(p, wsize)), wsize);
+	st_stw(p, dec(st_ldsw(p)));
 }
 
 DoDELs(hob, wfac)
@@ -221,7 +221,7 @@ DoDELs(hob, wfac)
 	spoilFRA();
 	l = arg_l(l);
 	p = loc_addr(l);
-	st_stn(p, dec(st_lds(p, wsize)), wsize);
+	st_stw(p, dec(st_ldsw(p)));
 }
 
 DoDEEl2(arg)
@@ -233,7 +233,7 @@ DoDEEl2(arg)
 	LOG(("@Z6 DoDEEl2(%lu)", p));
 	spoilFRA();
 	p = arg_g(p);
-	dt_stn(p, dec(dt_lds(p, wsize)), wsize);
+	dt_stw(p, dec(dt_ldsw(p)));
 }
 
 DoDEEl4(arg)
@@ -245,7 +245,7 @@ DoDEEl4(arg)
 	LOG(("@Z6 DoDEEl4(%lu)", p));
 	spoilFRA();
 	p = arg_g(p);
-	dt_stn(p, dec(dt_lds(p, wsize)), wsize);
+	dt_stw(p, dec(dt_ldsw(p)));
 }
 
 DoDEEs(hob, wfac)
@@ -258,7 +258,7 @@ DoDEEs(hob, wfac)
 	LOG(("@Z6 DoDEEs(%lu)", p));
 	spoilFRA();
 	p = arg_g(p);
-	dt_stn(p, dec(dt_lds(p, wsize)), wsize);
+	dt_stw(p, dec(dt_ldsw(p)));
 }
 
 DoZRLm(arg)
@@ -269,7 +269,7 @@ DoZRLm(arg)
 
 	LOG(("@Z6 DoZRLm(%ld)", l));
 	spoilFRA();
-	st_stn(loc_addr(l), 0L, wsize);
+	st_stw(loc_addr(l), 0L);
 }
 
 DoZRLn2(arg)
@@ -281,7 +281,7 @@ DoZRLn2(arg)
 	LOG(("@Z6 DoZRLn2(%ld)", l));
 	spoilFRA();
 	l = arg_l(arg);
-	st_stn(loc_addr(l), 0L, wsize);
+	st_stw(loc_addr(l), 0L);
 }
 
 DoZRLn4(arg)
@@ -293,7 +293,7 @@ DoZRLn4(arg)
 	LOG(("@Z6 DoZRLn4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	st_stn(loc_addr(l), 0L, wsize);
+	st_stw(loc_addr(l), 0L);
 }
 
 DoZRLp2(arg)
@@ -305,7 +305,7 @@ DoZRLp2(arg)
 	LOG(("@Z6 DoZRLp2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	st_stn(loc_addr(l), 0L, wsize);
+	st_stw(loc_addr(l), 0L);
 }
 
 DoZRLp4(arg)
@@ -317,7 +317,7 @@ DoZRLp4(arg)
 	LOG(("@Z6 DoZRLp4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	st_stn(loc_addr(l), 0L, wsize);
+	st_stw(loc_addr(l), 0L);
 }
 
 DoZRLs(hob, wfac)
@@ -330,7 +330,7 @@ DoZRLs(hob, wfac)
 	LOG(("@Z6 DoZRLs(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	st_stn(loc_addr(l), 0L, wsize);
+	st_stw(loc_addr(l), 0L);
 }
 
 DoZREl2(arg)
@@ -341,7 +341,7 @@ DoZREl2(arg)
 
 	LOG(("@Z6 DoZREl2(%lu)", p));
 	spoilFRA();
-	dt_stn(arg_g(p), 0L, wsize);
+	dt_stw(arg_g(p), 0L);
 }
 
 DoZREl4(arg)
@@ -352,7 +352,7 @@ DoZREl4(arg)
 
 	LOG(("@Z6 DoZREl4(%lu)", p));
 	spoilFRA();
-	dt_stn(arg_g(p), 0L, wsize);
+	dt_stw(arg_g(p), 0L);
 }
 
 DoZREs(hob, wfac)
@@ -364,7 +364,7 @@ DoZREs(hob, wfac)
 
 	LOG(("@Z6 DoZREs(%lu)", p));
 	spoilFRA();
-	dt_stn(arg_g(p), 0L, wsize);
+	dt_stw(arg_g(p), 0L);
 }
 
 DoZRFl2(arg)
@@ -387,7 +387,7 @@ DoZRFz()
 {
 	/* ZRF w: Load a floating zero of size w */
 #ifndef	NOFLOAT
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@Z6 DoZRFz(%ld)", l));
 	spoilFRA();
@@ -425,7 +425,7 @@ DoZERs(hob, wfac)
 DoZERz()
 {
 	/* ZER w: Load w zero bytes */
-	register size i, l = spop(wsize);
+	register size i, l = swpop();
 
 	LOG(("@Z6 DoZERz(%ld)", l));
 	spoilFRA();

+ 13 - 13
util/int/do_intar.c

@@ -43,7 +43,7 @@ DoADIm(arg)
 DoADIz()				/* argument on top of stack */
 {
 	/* ADI w: Addition (*) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register long t = spop(arg_wi(l));
 
 	LOG(("@I6 DoADIz(%ld)", l));
@@ -78,7 +78,7 @@ DoSBIm(arg)
 DoSBIz()				/* arg on top of stack */
 {
 	/* SBI w: Subtraction (*) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register long t = spop(arg_wi(l));
 
 	LOG(("@I6 DoSBIz(%ld)", l));
@@ -113,7 +113,7 @@ DoMLIm(arg)
 DoMLIz()				/* arg on top of stack */
 {
 	/* MLI w: Multiplication (*) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register long t = spop(arg_wi(l));
 
 	LOG(("@I6 DoMLIz(%ld)", l));
@@ -148,7 +148,7 @@ DoDVIm(arg)
 DoDVIz()				/* arg on top of stack */
 {
 	/* DVI w: Division (*) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register long t = spop(arg_wi(l));
 
 	LOG(("@I6 DoDVIz(%ld)", l));
@@ -183,7 +183,7 @@ DoRMIm(arg)
 DoRMIz()				/* arg on top of stack */
 {
 	/* RMI w: Remainder (*) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register long t = spop(arg_wi(l));
 
 	LOG(("@I6 DoRMIz(%ld)", l));
@@ -206,7 +206,7 @@ DoNGIl2(arg)
 DoNGIz()
 {
 	/* NGI w: Negate (two's complement) (*) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@I6 DoNGIz(%ld)", l));
 	spoilFRA();
@@ -219,7 +219,7 @@ DoSLIl2(arg)
 {
 	/* SLI w: Shift left (*) */
 	register size l = (L_arg_2() * arg);
-	register long t = spop(wsize);
+	register long t = swpop();
 
 	LOG(("@I6 DoSLIl2(%ld)", l));
 	spoilFRA();
@@ -232,7 +232,7 @@ DoSLIm(arg)
 {
 	/* SLI w: Shift left (*) */
 	register size l = arg_wi(arg);
-	register long t = spop(wsize);
+	register long t = swpop();
 
 	LOG(("@I6 DoSLIm(%ld)", l));
 	spoilFRA();
@@ -242,8 +242,8 @@ DoSLIm(arg)
 DoSLIz()
 {
 	/* SLI w: Shift left (*) */
-	register size l = upop(wsize);
-	register long t = spop(wsize);
+	register size l = uwpop();
+	register long t = swpop();
 
 	LOG(("@I6 DoSLIz(%ld)", l));
 	spoilFRA();
@@ -256,7 +256,7 @@ DoSRIl2(arg)
 {
 	/* SRI w: Shift right (*) */
 	register size l = (L_arg_2() * arg);
-	register long t = spop(wsize);
+	register long t = swpop();
 
 	LOG(("@I6 DoSRIl2(%ld)", l));
 	spoilFRA();
@@ -267,8 +267,8 @@ DoSRIl2(arg)
 DoSRIz()
 {
 	/* SRI w: Shift right (*) */
-	register size l = upop(wsize);
-	register long t = spop(wsize);
+	register size l = uwpop();
+	register long t = swpop();
 
 	LOG(("@I6 DoSRIz(%ld)", l));
 	spoilFRA();

+ 21 - 21
util/int/do_load.c

@@ -42,7 +42,7 @@ DoLOCm(arg)
 	long arg;
 {
 	/* LOC c: Load constant (i.e. push one word onto the stack) */
-	register long l = arg_c(arg);
+	long l = arg_c(arg);
 
 	LOG(("@L6 DoLOCm(%ld)", l));
 	spoilFRA();
@@ -102,7 +102,7 @@ DoLOLm(arg)
 
 	LOG(("@L6 DoLOLm(%ld)", l));
 	spoilFRA();
-	push_st(loc_addr(l), wsize);
+	pushw_st(loc_addr(l));
 }
 
 DoLOLn2(arg)
@@ -114,7 +114,7 @@ DoLOLn2(arg)
 	LOG(("@L6 DoLOLn2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_st(loc_addr(l), wsize);
+	pushw_st(loc_addr(l));
 }
 
 DoLOLn4(arg)
@@ -126,7 +126,7 @@ DoLOLn4(arg)
 	LOG(("@L6 DoLOLn4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_st(loc_addr(l), wsize);
+	pushw_st(loc_addr(l));
 }
 
 DoLOLp2(arg)
@@ -138,7 +138,7 @@ DoLOLp2(arg)
 	LOG(("@L6 DoLOLp2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_st(loc_addr(l), wsize);
+	pushw_st(loc_addr(l));
 }
 
 DoLOLp4(arg)
@@ -150,7 +150,7 @@ DoLOLp4(arg)
 	LOG(("@L6 DoLOLp4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_st(loc_addr(l), wsize);
+	pushw_st(loc_addr(l));
 }
 
 DoLOLs(hob, wfac)
@@ -163,7 +163,7 @@ DoLOLs(hob, wfac)
 	LOG(("@L6 DoLOLs(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_st(loc_addr(l), wsize);
+	pushw_st(loc_addr(l));
 }
 
 DoLOEl2(arg)
@@ -174,7 +174,7 @@ DoLOEl2(arg)
 
 	LOG(("@L6 DoLOEl2(%lu)", p));
 	spoilFRA();
-	push_m(arg_g(p), wsize);
+	pushw_m(arg_g(p));
 }
 
 DoLOEl4(arg)
@@ -185,7 +185,7 @@ DoLOEl4(arg)
 
 	LOG(("@L6 DoLOEl4(%lu)", p));
 	spoilFRA();
-	push_m(arg_g(p), wsize);
+	pushw_m(arg_g(p));
 }
 
 DoLOEs(hob, wfac)
@@ -197,7 +197,7 @@ DoLOEs(hob, wfac)
 
 	LOG(("@L6 DoLOEs(%lu)", p));
 	spoilFRA();
-	push_m(arg_g(p), wsize);
+	pushw_m(arg_g(p));
 }
 
 DoLILm(arg)
@@ -208,7 +208,7 @@ DoLILm(arg)
 
 	LOG(("@L6 DoLILm(%ld)", l));
 	spoilFRA();
-	push_m(st_lddp(loc_addr(l)), wsize);
+	pushw_m(st_lddp(loc_addr(l)));
 }
 
 DoLILn2(arg)
@@ -220,7 +220,7 @@ DoLILn2(arg)
 	LOG(("@L6 DoLILn2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_m(st_lddp(loc_addr(l)), wsize);
+	pushw_m(st_lddp(loc_addr(l)));
 }
 
 DoLILn4(arg)
@@ -232,7 +232,7 @@ DoLILn4(arg)
 	LOG(("@L6 DoLILn4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_m(st_lddp(loc_addr(l)), wsize);
+	pushw_m(st_lddp(loc_addr(l)));
 }
 
 DoLILp2(arg)
@@ -244,7 +244,7 @@ DoLILp2(arg)
 	LOG(("@L6 DoLILp2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_m(st_lddp(loc_addr(l)), wsize);
+	pushw_m(st_lddp(loc_addr(l)));
 }
 
 DoLILp4(arg)
@@ -256,7 +256,7 @@ DoLILp4(arg)
 	LOG(("@L6 DoLILp4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_m(st_lddp(loc_addr(l)), wsize);
+	pushw_m(st_lddp(loc_addr(l)));
 }
 
 DoLILs(hob, wfac)
@@ -269,7 +269,7 @@ DoLILs(hob, wfac)
 	LOG(("@L6 DoLILs(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	push_m(st_lddp(loc_addr(l)), wsize);
+	pushw_m(st_lddp(loc_addr(l)));
 }
 
 DoLOFl2(arg)
@@ -281,7 +281,7 @@ DoLOFl2(arg)
 
 	LOG(("@L6 DoLOFl2(%ld)", l));
 	spoilFRA();
-	push_m(p + arg_f(l), wsize);
+	pushw_m(p + arg_f(l));
 }
 
 DoLOFl4(arg)
@@ -293,7 +293,7 @@ DoLOFl4(arg)
 
 	LOG(("@L6 DoLOFl4(%ld)", l));
 	spoilFRA();
-	push_m(p + arg_f(l), wsize);
+	pushw_m(p + arg_f(l));
 }
 
 DoLOFm(arg)
@@ -305,7 +305,7 @@ DoLOFm(arg)
 
 	LOG(("@L6 DoLOFm(%ld)", l));
 	spoilFRA();
-	push_m(p + arg_f(l), wsize);
+	pushw_m(p + arg_f(l));
 }
 
 DoLOFs(hob, wfac)
@@ -318,7 +318,7 @@ DoLOFs(hob, wfac)
 
 	LOG(("@L6 DoLOFs(%ld)", l));
 	spoilFRA();
-	push_m(p + arg_f(l), wsize);
+	pushw_m(p + arg_f(l));
 }
 
 DoLALm(arg)
@@ -548,7 +548,7 @@ DoLOSl2(arg)
 DoLOSz()
 {
 	/* LOS w: Load indirect, w-byte integer on top of stack gives object size */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr p;
 
 	LOG(("@L6 DoLOSz(%ld)", l));

+ 10 - 10
util/int/do_logic.c

@@ -62,7 +62,7 @@ DoANDz()
 {
 	/* AND w: Boolean and on two groups of w bytes */
 	/* size of objects to be compared (in bytes) on top of stack */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr p;
 
 	LOG(("@X6 DoANDz(%ld)", l));
@@ -129,7 +129,7 @@ DoIORs(hob, wfac)
 DoIORz()
 {
 	/* IOR w: Boolean inclusive or on two groups of w bytes */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr p;
 
 	LOG(("@X6 DoIORz(%ld)", l));
@@ -162,7 +162,7 @@ DoXORl2(arg)
 DoXORz()
 {
 	/* XOR w: Boolean exclusive or on two groups of w bytes */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr p;
 
 	LOG(("@X6 DoXORz(%ld)", l));
@@ -194,7 +194,7 @@ DoCOMl2(arg)
 DoCOMz()
 {
 	/* COM w: Complement (one's complement of top w bytes) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr p;
 
 	LOG(("@X6 DoCOMz(%ld)", l));
@@ -211,7 +211,7 @@ DoROLl2(arg)
 {
 	/* ROL w: Rotate left a group of w bytes */
 	register size l = (L_arg_2() * arg);
-	register long s, t = upop(wsize);
+	register long s, t = uwpop();
 	register long signbit;
 
 	LOG(("@X6 DoROLl2(%ld)", l));
@@ -243,8 +243,8 @@ DoROLl2(arg)
 DoROLz()
 {
 	/* ROL w: Rotate left a group of w bytes */
-	register size l = upop(wsize);
-	register long s, t = upop(wsize);
+	register size l = uwpop();
+	register long s, t = uwpop();
 	register long signbit;
 
 	LOG(("@X6 DoROLz(%ld)", l));
@@ -278,7 +278,7 @@ DoRORl2(arg)
 {
 	/* ROR w: Rotate right a group of w bytes */
 	register size l = (L_arg_2() * arg);
-	register long s, t = upop(wsize);
+	register long s, t = uwpop();
 	register long signbit;
 
 	LOG(("@X6 DoRORl2(%ld)", l));
@@ -313,8 +313,8 @@ DoRORl2(arg)
 DoRORz()
 {
 	/* ROR w: Rotate right a group of w bytes */
-	register size l = upop(wsize);
-	register long s, t = upop(wsize);
+	register size l = uwpop();
+	register long s, t = uwpop();
 	register long signbit;
 
 	LOG(("@X6 DoRORz(%ld)", l));

+ 20 - 20
util/int/do_misc.c

@@ -86,7 +86,7 @@ DoASSl2(arg)
 DoASSz()
 {
 	/* ASS w: Adjust the stack pointer by w-byte integer */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@M6 DoASSz(%ld)", l));
 	spoilFRA();
@@ -162,7 +162,7 @@ DoBLSl2(arg)
 DoBLSz()
 {
 	/* BLS w: Block move, size is in w-byte integer on top of stack */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr dp1, dp2;
 
 	LOG(("@M6 DoBLSz(%ld)", l));
@@ -196,7 +196,7 @@ DoCSAm(arg)
 DoCSAz()
 {
 	/* CSA w: Case jump; address of jump table at top of stack */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@M6 DoCSAz(%ld)", l));
 	spoilFRA();
@@ -226,7 +226,7 @@ DoCSBm(arg)
 DoCSBz()
 {
 	/* CSB w: Table lookup jump; address of jump table at top of stack */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@M6 DoCSBz(%ld)", l));
 	spoilFRA();
@@ -290,7 +290,7 @@ DoDUSl2(arg)
 DoDUSz()
 {
 	/* DUS w: Duplicate top w bytes */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr oldSP;
 
 	LOG(("@M6 DoDUSz(%ld)", l));
@@ -337,7 +337,7 @@ DoEXGs(hob, wfac)
 DoEXGz()
 {
 	/* EXG w: Exchange top w bytes */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr oldSP = SP;
 
 	LOG(("@M6 DoEXGz(%ld)", l));
@@ -522,7 +522,7 @@ DoRCKm(arg)
 DoRCKz()
 {
 	/* RCK w: Range check; trap on error */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@M6 DoRCKz(%ld)", l));
 	spoilFRA();
@@ -555,11 +555,11 @@ DoRTTz()
 	}
 
 	/* pop the trap number */
-	upop(wsize);
+	uwpop();
 	
 	/* restore the Function Return Area */
-	FRA_def = upop(wsize);
-	FRASize = upop(wsize);
+	FRA_def = uwpop();
+	FRASize = uwpop();
 	popFRA(FRASize);
 }
 
@@ -587,7 +587,7 @@ DoSIMz()
 	/* SIM -: Store 16 bit ignore mask */
 	LOG(("@M6 DoSIMz()"));
 	spoilFRA();
-	IgnMask = (upop(wsize) | PreIgnMask) & MASK2;
+	IgnMask = (uwpop() | PreIgnMask) & MASK2;
 }
 
 DoSTRs(hob, wfac)
@@ -616,7 +616,7 @@ DoSTRs(hob, wfac)
 DoTRPz()
 {
 	/* TRP -: Cause trap to occur (Error number on stack) */
-	register unsigned int tr = (unsigned int)upop(wsize);
+	register unsigned int tr = (unsigned int)uwpop();
 
 	LOG(("@M6 DoTRPz()"));
 	spoilFRA();
@@ -690,11 +690,11 @@ PRIVATE index_jump(nbytes)
 {
 	register ptr cdp = dppop();	/* Case Descriptor Pointer */
 	register long t_index =		/* Table INDEX */
-			spop(nbytes) - mem_lds(cdp + psize, wsize);
+			spop(nbytes) - mem_lds(cdp + psize, nbytes);
 	register ptr nPC;		/* New Program Counter */
 
-	if (t_index >= 0 && t_index <= mem_lds(cdp + wsize + psize, wsize)) {
-		nPC = mem_ldip(cdp + (2 * wsize) + ((t_index + 1) * psize));
+	if (t_index >= 0 && t_index <= mem_lds(cdp + nbytes + psize, nbytes)) {
+		nPC = mem_ldip(cdp + (2 * nbytes) + ((t_index + 1) * psize));
 	}
 	else if ((nPC = mem_ldip(cdp)) == 0) {
 		trap(ECASE);
@@ -719,12 +719,12 @@ PRIVATE search_jump(nbytes)
 	register ptr cdp = dppop();	/* Case Descriptor Pointer */
 	register long sv = spop(nbytes);/* Search Value */
 	register long nt =		/* Number of Table-entries */
-			mem_lds(cdp + psize, wsize);
+			mem_lds(cdp + psize, nbytes);
 	register ptr nPC;		/* New Program Counter */
 
 	while (--nt >= 0) {
-		if (sv == mem_lds(cdp + (nt+1) * (wsize+psize), wsize)) {
-			nPC = mem_ldip(cdp + wsize + (nt+1)*(wsize+psize));
+		if (sv == mem_lds(cdp + (nt+1) * (nbytes+psize), nbytes)) {
+			nPC = mem_ldip(cdp + nbytes + (nt+1)*(nbytes+psize));
 			if (nPC == 0)
 				trap(ECASE);
 			newPC(nPC);
@@ -754,8 +754,8 @@ PRIVATE range_check(nbytes)
 			st_lds(SP, nbytes);
 
 	if (must_test && !(IgnMask&BIT(ERANGE))) {
-		if (	cv < mem_lds(rdp, wsize)
-		||	cv > mem_lds(rdp + wsize, wsize)
+		if (	cv < mem_lds(rdp, nbytes)
+		||	cv > mem_lds(rdp + nbytes, nbytes)
 		) {
 			trap(ERANGE);
 		}

+ 2 - 2
util/int/do_ptrar.c

@@ -141,7 +141,7 @@ DoADSm(arg)
 DoADSz()
 {
 	/* ADS w: Add w-byte value and pointer */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register long t = spop(arg_wi(l));
 	register ptr p, s = st_lddp(SP);
 
@@ -182,7 +182,7 @@ DoSBSl2(arg)
 DoSBSz()
 {
 	/* SBS w: Subtract pointers in same fragment and push diff as size w integer */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr t = st_lddp(SP);
 	register ptr s = st_lddp(SP + psize);
 	register long w;

+ 4 - 4
util/int/do_sets.c

@@ -40,7 +40,7 @@ DoINNs(hob, wfac)
 DoINNz()
 {
 	/* INN w: Bit test on w byte set (bit number on top of stack) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@Y6 DoINNz(%ld)", l));
 	spoilFRA();
@@ -73,7 +73,7 @@ DoSETs(hob, wfac)
 DoSETz()
 {
 	/* SET w: Create singleton w byte set with bit n on (n is top of stack) */
-	register size l = upop(wsize);
+	register size l = uwpop();
 
 	LOG(("@Y6 DoSETz(%ld)", l));
 	spoilFRA();
@@ -93,7 +93,7 @@ PRIVATE bit_test(w)
 	size w;
 {
 	register int bitno =
-		(int) spop(wsize);	/* bitno on TOS */
+		(int) swpop();	/* bitno on TOS */
 	register char test_byte = (char) 0;/* default value to be tested */
 
 	if (must_test && !(IgnMask&BIT(ESET))) {
@@ -119,7 +119,7 @@ PRIVATE bit_test(w)
 PRIVATE create_set(w)
 	size w;
 {
-	register int bitno = (int) spop(wsize);
+	register int bitno = (int) swpop();
 	register size nbytes = w;
 
 	st_inc(nbytes);

+ 19 - 19
util/int/do_store.c

@@ -21,7 +21,7 @@ DoSTLm(arg)
 
 	LOG(("@S6 DoSTLm(%ld)", l));
 	spoilFRA();
-	pop_st(loc_addr(l), wsize);
+	popw_st(loc_addr(l));
 }
 
 DoSTLn2(arg)
@@ -33,7 +33,7 @@ DoSTLn2(arg)
 	LOG(("@S6 DoSTLn2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_st(loc_addr(l), wsize);
+	popw_st(loc_addr(l));
 }
 
 DoSTLn4(arg)
@@ -45,7 +45,7 @@ DoSTLn4(arg)
 	LOG(("@S6 DoSTLn4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_st(loc_addr(l), wsize);
+	popw_st(loc_addr(l));
 }
 
 DoSTLp2(arg)
@@ -57,7 +57,7 @@ DoSTLp2(arg)
 	LOG(("@S6 DoSTLp2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_st(loc_addr(l), wsize);
+	popw_st(loc_addr(l));
 }
 
 DoSTLp4(arg)
@@ -69,7 +69,7 @@ DoSTLp4(arg)
 	LOG(("@S6 DoSTLp4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_st(loc_addr(l), wsize);
+	popw_st(loc_addr(l));
 }
 
 DoSTLs(hob, wfac)
@@ -82,7 +82,7 @@ DoSTLs(hob, wfac)
 	LOG(("@S6 DoSTLs(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_st(loc_addr(l), wsize);
+	popw_st(loc_addr(l));
 }
 
 DoSTEl2(arg)
@@ -93,7 +93,7 @@ DoSTEl2(arg)
 
 	LOG(("@S6 DoSTEl2(%lu)", p));
 	spoilFRA();
-	pop_m(arg_g(p), wsize);
+	popw_m(arg_g(p));
 }
 
 DoSTEl4(arg)
@@ -104,7 +104,7 @@ DoSTEl4(arg)
 
 	LOG(("@S6 DoSTEl4(%lu)", p));
 	spoilFRA();
-	pop_m(arg_g(p), wsize);
+	popw_m(arg_g(p));
 }
 
 DoSTEs(hob, wfac)
@@ -116,7 +116,7 @@ DoSTEs(hob, wfac)
 
 	LOG(("@S6 DoSTEs(%lu)", p));
 	spoilFRA();
-	pop_m(arg_g(p), wsize);
+	popw_m(arg_g(p));
 }
 
 DoSILn2(arg)
@@ -128,7 +128,7 @@ DoSILn2(arg)
 	LOG(("@S6 DoSILn2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_m(st_lddp(loc_addr(l)), wsize);
+	popw_m(st_lddp(loc_addr(l)));
 }
 
 DoSILn4(arg)
@@ -140,7 +140,7 @@ DoSILn4(arg)
 	LOG(("@S6 DoSILn4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_m(st_lddp(loc_addr(l)), wsize);
+	popw_m(st_lddp(loc_addr(l)));
 }
 
 DoSILp2(arg)
@@ -152,7 +152,7 @@ DoSILp2(arg)
 	LOG(("@S6 DoSILp2(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_m(st_lddp(loc_addr(l)), wsize);
+	popw_m(st_lddp(loc_addr(l)));
 }
 
 DoSILp4(arg)
@@ -164,7 +164,7 @@ DoSILp4(arg)
 	LOG(("@S6 DoSILp4(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_m(st_lddp(loc_addr(l)), wsize);
+	popw_m(st_lddp(loc_addr(l)));
 }
 
 DoSILs(hob, wfac)
@@ -177,7 +177,7 @@ DoSILs(hob, wfac)
 	LOG(("@S6 DoSILs(%ld)", l));
 	spoilFRA();
 	l = arg_l(l);
-	pop_m(st_lddp(loc_addr(l)), wsize);
+	popw_m(st_lddp(loc_addr(l)));
 }
 
 DoSTFl2(arg)
@@ -189,7 +189,7 @@ DoSTFl2(arg)
 
 	LOG(("@S6 DoSTFl2(%ld)", l));
 	spoilFRA();
-	pop_m(p + arg_f(l), wsize);
+	popw_m(p + arg_f(l));
 }
 
 DoSTFl4(arg)
@@ -201,7 +201,7 @@ DoSTFl4(arg)
 
 	LOG(("@S6 DoSTFl4(%ld)", l));
 	spoilFRA();
-	pop_m(p + arg_f(l), wsize);
+	popw_m(p + arg_f(l));
 }
 
 DoSTFm(arg)
@@ -213,7 +213,7 @@ DoSTFm(arg)
 
 	LOG(("@S6 DoSTFm(%ld)", l));
 	spoilFRA();
-	pop_m(p + arg_f(l), wsize);
+	popw_m(p + arg_f(l));
 }
 
 DoSTFs(hob, wfac)
@@ -226,7 +226,7 @@ DoSTFs(hob, wfac)
 
 	LOG(("@S6 DoSTFs(%ld)", l));
 	spoilFRA();
-	pop_m(p + arg_f(l), wsize);
+	popw_m(p + arg_f(l));
 }
 
 DoSTIl2(arg)
@@ -294,7 +294,7 @@ DoSTSl2(arg)
 DoSTSz()				/* the arg 'w' is on top of stack */
 {
 	/* STS w: Store indirect, w-byte integer on top of stack gives object size */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register ptr p;
 
 	LOG(("@S6 DoSTSz(%ld)", l));

+ 11 - 11
util/int/do_unsar.c

@@ -48,7 +48,7 @@ DoADUl2(arg)
 DoADUz()
 {
 	/* ADU w: Addition */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register unsigned long t = upop(arg_wi(l));
 
 	LOG(("@U6 DoADUz(%ld)", l));
@@ -71,7 +71,7 @@ DoSBUl2(arg)
 DoSBUz()
 {
 	/* SBU w: Subtraction */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register unsigned long t = upop(arg_wi(l));
 
 	LOG(("@U6 DoSBUz(%ld)", l));
@@ -94,7 +94,7 @@ DoMLUl2(arg)
 DoMLUz()
 {
 	/* MLU w: Multiplication */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register unsigned long t = upop(arg_wi(l));
 
 	LOG(("@U6 DoMLUz(%ld)", l));
@@ -117,7 +117,7 @@ DoDVUl2(arg)
 DoDVUz()
 {
 	/* DVU w: Division */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register unsigned long t = upop(arg_wi(l));
 
 	LOG(("@U6 DoDVUz(%ld)", l));
@@ -140,7 +140,7 @@ DoRMUl2(arg)
 DoRMUz()
 {
 	/* RMU w: Remainder */
-	register size l = upop(wsize);
+	register size l = uwpop();
 	register unsigned long t = upop(arg_wi(l));
 
 	LOG(("@U6 DoRMUz(%ld)", l));
@@ -153,7 +153,7 @@ DoSLUl2(arg)
 {
 	/* SLU w: Shift left */
 	register size l = (L_arg_2() * arg);
-	register unsigned long t = upop(wsize);
+	register unsigned long t = uwpop();
 
 	LOG(("@U6 DoSLUl2(%ld)", l));
 	spoilFRA();
@@ -164,8 +164,8 @@ DoSLUl2(arg)
 DoSLUz()
 {
 	/* SLU w: Shift left */
-	register size l = upop(wsize);
-	register unsigned long t = upop(wsize);
+	register size l = uwpop();
+	register unsigned long t = uwpop();
 
 	LOG(("@U6 DoSLUz(%ld)", l));
 	spoilFRA();
@@ -178,7 +178,7 @@ DoSRUl2(arg)
 {
 	/* SRU w: Shift right */
 	register size l = (L_arg_2() * arg);
-	register unsigned long t = upop(wsize);
+	register unsigned long t = uwpop();
 
 	LOG(("@U6 DoSRUl2(%ld)", l));
 	spoilFRA();
@@ -189,8 +189,8 @@ DoSRUl2(arg)
 DoSRUz()
 {
 	/* SRU w: Shift right */
-	register size l = upop(wsize);
-	register unsigned long t = upop(wsize);
+	register size l = uwpop();
+	register unsigned long t = uwpop();
 
 	LOG(("@U6 DoSRUz(%ld)", l));
 	spoilFRA();

+ 1 - 1
util/int/dump.c

@@ -130,7 +130,7 @@ PRIVATE std_item(addr)
 	}
 	else
 	if (	is_wordaligned(addr)
-	&&	is_in_stack(addr, wsize)
+	&&	w_is_in_stack(addr)
 	&&	std_bytes(addr, addr + wsize, SH_INT)
 	) {
 		/* print a word value */

+ 13 - 4
util/int/mem.h

@@ -17,11 +17,13 @@
 /******** Checks on adresses and ranges ********/
 
 #define	is_aligned(a,n)	((p2i(a)) % (n) == 0)
-#define	is_wordaligned(a)	(((p2i(a)) & wsizem1) == 0)
+#define	is_wordaligned(a) \
+			(((p2i(a)) & wsizem1) == 0)
 
 #define	ch_aligned(a,n)	{ if (!is_aligned(a, min(n, wsize))) \
 						{ trap(EBADPTR); } }
-#define	ch_wordaligned(a)	{ if (!is_wordaligned(a)) \
+#define	ch_wordaligned(a) \
+			{ if (!is_wordaligned(a)) \
 						{ trap(EBADPTR); } }
 
 #define	in_gda(p)	((p) < HB)
@@ -33,6 +35,9 @@
 #define	is_in_stack(a,n) (SP <= (a) && (a) + (n) - 1 <= ML)
 #define	ch_in_stack(a,n) { if (!is_in_stack(a, n)) { trap(EMEMFLT); } }
 
+#define	w_is_in_stack(a) (SP <= (a) && (a) + wsizem1 <= ML)
+#define	ch_w_in_stack(a) { if (!w_is_in_stack(a)) { trap(EMEMFLT); } }
+
 #define	is_in_FRA(a,n)	((a) + (n) <= FRASize)
 
 
@@ -45,10 +50,14 @@
 #define	mem_lddp(a)	(in_stack(a) ? st_lddp(a) : dt_lddp(a))
 #define	mem_ldip(a)	(in_stack(a) ? st_ldip(a) : dt_ldip(a))
 #define	mem_ldu(a,n)	(in_stack(a) ? st_ldu(a, n) : dt_ldu(a, n))
+#define	mem_lduw(a)	(in_stack(a) ? st_lduw(a) : dt_lduw(a))
 #define	mem_lds(a,n)	(in_stack(a) ? st_lds(a, n) : dt_lds(a, n))
+#define	mem_ldsw(a)	(in_stack(a) ? st_ldsw(a) : dt_ldsw(a))
 
 #define	push_m(a,n)	{ if (in_stack(a)) push_st(a, n); else push_dt(a, n); }
+#define	pushw_m(a)	{ if (in_stack(a)) pushw_st(a); else pushw_dt(a); }
 #define	pop_m(a,n)	{ if (in_stack(a)) pop_st(a, n); else pop_dt(a, n); }
+#define	popw_m(a)	{ if (in_stack(a)) popw_st(a); else popw_dt(a); }
 
 
 /******** Simple stack manipulation ********/
@@ -61,6 +70,6 @@
 
 extern ptr st_ldip(), dt_ldip();
 extern ptr st_lddp(), dt_lddp(), dppop();
-extern long st_lds(), dt_lds(), spop(), wpop();
-extern unsigned long st_ldu(), dt_ldu(), upop();
+extern long st_lds(), st_ldsw(), dt_lds(), dt_ldsw(), spop(), swpop(), wpop();
+extern unsigned long st_ldu(), st_lduw(), dt_ldu(), dt_lduw(), upop(), uwpop();
 

+ 1 - 1
util/int/moncalls.c

@@ -70,7 +70,7 @@ extern void sync();
 #define	INT2SIZE	max(wsize, 2L)
 #define	INT4SIZE	max(wsize, 4L)
 
-#define	pop_int()	((int) spop(wsize))
+#define	pop_int()	((int) swpop())
 #define	pop_int2()	((int) spop(INT2SIZE))
 #define	pop_int4()	(spop(INT4SIZE))
 #define	pop_intp()	((int) spop(psize))

+ 3 - 3
util/int/read.c

@@ -234,7 +234,7 @@ PRIVATE ptr rd_descr(type, count, pos)
 	case 1:			/* m uninitialized words */
 		j = count;
 		while (j--) {
-			dt_stn(pos, 0L, wsize);
+			dt_stw(pos, 0L);
 			pos += wsize;
 		}
 		break;
@@ -246,7 +246,7 @@ PRIVATE ptr rd_descr(type, count, pos)
 		break;
 	case 3:			/* m initialized wordsize integers */
 		for (j = 0; j < count; j++) {
-			dt_stn(pos, rd_int(wsize), wsize);
+			dt_stw(pos, rd_int(wsize));
 			pos += wsize;
 		}
 		break;
@@ -301,7 +301,7 @@ PRIVATE int rd_byte()
 {
 	register int i;
 	
-	if ((i = fgetc(load_fp)) == EOF)
+	if ((i = getc(load_fp)) == EOF)
 		fatal("EOF reached during initialization");
 	return (i);
 }

+ 3 - 3
util/int/rsb.c

@@ -37,7 +37,7 @@ pushrsb(rsbcode)
 	int rsbcode;
 {
 	/* fill Return Status Block */
-	st_inc(rsbsize);
+	incSP((size)rsbsize);
 
 	st_stdp(SP + rsb_FIL, getFIL());
 	st_prot(SP + rsb_FIL, psize);
@@ -54,7 +54,7 @@ pushrsb(rsbcode)
 	st_stn(SP + rsb_PI, PI, psize);
 	st_prot(SP + rsb_PI, psize);
 
-	st_stn(SP + rsb_rsbcode, (long)rsbcode, wsize);
+	st_stw(SP + rsb_rsbcode, (long)rsbcode);
 	st_prot(SP + rsb_rsbcode, wsize);
 
 	newLB(SP);
@@ -83,7 +83,7 @@ int poprsb(rtt)
 	newSP(LB);
 
 	/* get RSB code and test it for applicability */
-	rsbcode = st_ldu(SP + rsb_rsbcode, wsize);
+	rsbcode = st_lduw(SP + rsb_rsbcode);
 	if ((rsbcode & RSBMASK) != RSBCODE)	/* no RSB at all */
 		return rsbcode;
 

+ 204 - 29
util/int/stack.c

@@ -53,6 +53,8 @@ init_stack() {
  ************************************************************************
  *									*
  *	newSP(p)	- check and adjust StackPointer.		*
+ *	incSP(n)	- increment stack pointer. n already checked	*
+ *	decSP(n)	- decrement stack pointer. n already checked	*
  *	newLB(p)	- check and adjust Local Base and Actual Base	*
  *									*
  ************************************************************************/
@@ -102,6 +104,43 @@ newSP(ap)
 	SP = p;
 }
 
+incSP(n)
+#ifdef LOGGING
+	register
+#endif
+	size n;
+{
+	register ptr p = SP - n;
+	
+	if (p < HP || maxstack || p < SL) newSP(p);
+	else {
+		LOG(("@s6 newSP(%lu), ML = %lu, SP = %lu", p, ML, SP));
+#ifdef LOGGING
+		/* inline version of st_clear_area.
+		*/
+		SP = p;
+		{
+			while (n--) {
+				st_undef(p);
+				p++;
+			}
+		}
+#endif
+	}
+}
+
+decSP(n)
+	size n;
+{
+	register ptr p = SP + n;
+	
+	if (LB < p) newSP(p);
+	else {
+		LOG(("@s6 newSP(%lu), ML = %lu, SP = %lu", p, ML, SP));
+		SP = p;
+	}
+}
+
 newLB(p)
 	ptr p;
 {
@@ -126,6 +165,7 @@ newLB(p)
  *	st_stdp(addr, p)	- STore Data Pointer.			*
  *	st_stip(addr, p)	- STore Instruction Pointer.		*
  *	st_stn(addr, l, n)	- STore N byte integer.			*
+ *	st_stw(addr, l)		- STore wordsize integer.		*
  *	st_stf(addr, f, n)	- STore Floating point number.		*
  *									*
  ************************************************************************/
@@ -194,6 +234,32 @@ st_stn(addr, al, n)
 	}
 }
 
+st_stw(addr, al)
+	register ptr addr;
+	long al;
+{
+	register int i;
+	register long l = al;
+#ifdef LOGGING
+	/* a psize zero is ambiguous */
+	int sh_flags = (l == 0 && wsize == psize) ? (SH_INT|SH_DATAP) : SH_INT;
+#endif
+
+	LOG(("@s6 st_stw(%lu, %ld)", addr, l));
+	ch_w_in_stack(addr);
+	ch_wordaligned(addr);
+
+	/* store the bytes */
+	for (i = (int) wsize; i > 0; i--, addr++) {
+		ch_st_prot(addr);
+		stack_loc(addr) = (char) l;
+#ifdef	LOGGING
+		st_sh(addr) = sh_flags;
+#endif	LOGGING
+		l = l>>8;
+	}
+}
+
 #ifndef	NOFLOAT
 st_stf(addr, f, n)
 	register ptr addr;
@@ -226,7 +292,9 @@ st_stf(addr, f, n)
  *	st_lddp(addr)	- LoaD Data Pointer from stack.			*
  *	st_ldip(addr)	- LoaD Instruction Pointer from stack.		*
  *	st_ldu(addr, n)	- LoaD n Unsigned bytes from stack.		*
+ *	st_lduw(addr)	- LoaD wsize Unsigned bytes from stack.		*
  *	st_lds(addr, n)	- LoaD n Signed bytes from stack.		*
+ *	st_ldsw(addr)	- LoaD wsize Signed bytes from stack.		*
  *	st_ldf(addr, n)	- LoaD Floating point number from stack.	*
  *									*
  ************************************************************************/
@@ -291,13 +359,39 @@ unsigned long st_ldu(addr, n)
 	}
 #endif	LOGGING
 
-	for (i = (int) n-1; i >= 0; i--) {
-		u = (u<<8) | (btou(stack_loc(addr + i)));
+	addr += n-1;
+	for (i = (int) n-1; i >= 0; i--, addr--) {
+		u = (u<<8) | (btou(stack_loc(addr)));
 	}
 	LOG(("@s6 st_ldu() returns %ld", u));
 	return (u);
 }
 
+unsigned long st_lduw(addr)
+	register ptr addr;
+{
+	register int i;
+	register unsigned long u = 0;
+
+	LOG(("@s6 st_lduw(%lu)", addr));
+
+	ch_w_in_stack(addr);
+	ch_wordaligned(addr);
+#ifdef	LOGGING
+	if (!is_st_set(addr, wsize, SH_INT)) {
+		warning(WLIEXP);
+		warn_stbits(addr, wsize);
+	}
+#endif	LOGGING
+
+	addr += wsize - 1;
+	for (i = (int) wsize-1; i >= 0; i--, addr--) {
+		u = (u<<8) | (btou(stack_loc(addr)));
+	}
+	LOG(("@s6 st_lduw() returns %ld", u));
+	return (u);
+}
+
 long st_lds(addr, n)
 	register ptr addr;
 	size n;
@@ -316,14 +410,41 @@ long st_lds(addr, n)
 	}
 #endif	LOGGING
 
-	l = btos(stack_loc(addr + n - 1));
-	for (i = n - 2; i >= 0; i--) {
-		l = (l<<8) | btol(stack_loc(addr + i));
+	addr += n - 2;
+	l = btos(stack_loc(addr + 1));
+	for (i = n - 2; i >= 0; i--, addr--) {
+		l = (l<<8) | btol(stack_loc(addr));
 	}
 	LOG(("@s6 st_lds() returns %ld", l));
 	return (l);
 }
 
+long st_ldsw(addr)
+	register ptr addr;
+{
+	register int i;
+	register long l;
+
+	LOG(("@s6 st_ldsw(%lu)", addr));
+
+	ch_w_in_stack(addr);
+	ch_wordaligned(addr);
+#ifdef	LOGGING
+	if (!is_st_set(addr, wsize, SH_INT)) {
+		warning(WLIEXP);
+		warn_stbits(addr, wsize);
+	}
+#endif	LOGGING
+
+	addr += wsize - 2;
+	l = btos(stack_loc(addr+1));
+	for (i = wsize - 2; i >= 0; i--, addr--) {
+		l = (l<<8) | btol(stack_loc(addr));
+	}
+	LOG(("@s6 st_ldsw() returns %ld", l));
+	return (l);
+}
+
 #ifndef	NOFLOAT
 double st_ldf(addr, n)
 	register ptr addr;
@@ -425,9 +546,13 @@ st_mvd(s, d, n)				/* d -> s */
  *									*
  *	dppop()		- pop a data ptr, return a ptr.			*
  *	upop(n)		- pop n unsigned bytes, return a long.		*
+ *	uwpop()		- pop wsize unsigned bytes, return a long.	*
  *	spop(n)		- pop n signed bytes, return a long.		*
+ *	swpop()		- pop wsize signed bytes, return a long.	*
  *	pop_dt(d, n)	- pop n bytes, store at address d in data.	*
+ *	popw_dt(d)	- pop wsize bytes, store at address d in data.	*
  *	pop_st(s, n)	- pop n bytes, store at address s in stack.	*
+ *	popw_st(s)	- pop wsize bytes, store at address s in stack.	*
  *	fpop()		- pop a floating point number.			*
  *	wpop()		- pop a signed word, don't care about any type.	*
  *									*
@@ -438,7 +563,7 @@ ptr dppop()
 	register ptr p;
 
 	p = st_lddp(SP);
-	st_dec(psize);
+	decSP(psize);
 	LOG(("@s7 dppop(), return: %lu", p));
 	return (p);
 }
@@ -449,22 +574,42 @@ unsigned long upop(n)
 	register unsigned long l;
 
 	l = st_ldu(SP, n);
-	st_dec(max(n, wsize));
+	decSP(max(n, wsize));
 	LOG(("@s7 upop(), return: %lu", l));
 	return (l);
 }
 
+unsigned long uwpop()
+{
+	register unsigned long l;
+
+	l = st_lduw(SP);
+	decSP(wsize);
+	LOG(("@s7 uwpop(), return: %lu", l));
+	return (l);
+}
+
 long spop(n)
 	size n;
 {
 	register long l;
 
 	l = st_lds(SP, n);
-	st_dec(max(n, wsize));
+	decSP(max(n, wsize));
 	LOG(("@s7 spop(), return: %ld", l));
 	return (l);
 }
 
+long swpop()
+{
+	register long l;
+
+	l = st_ldsw(SP);
+	decSP(wsize);
+	LOG(("@s7 swpop(), return: %ld", l));
+	return (l);
+}
+
 pop_dt(d, n)
 	ptr d;
 	size n;
@@ -473,10 +618,17 @@ pop_dt(d, n)
 		dt_stn(d, (long) upop(n), n);
 	else {
 		dt_mvs(d, SP, n);
-		st_dec(n);
+		decSP(n);
 	}
 }
 
+popw_dt(d)
+	ptr d;
+{
+	dt_mvs(d, SP, wsize);
+	decSP(wsize);
+}
+
 pop_st(s, n)
 	ptr s;
 	size n;
@@ -485,10 +637,17 @@ pop_st(s, n)
 		st_stn(s, (long) upop(n), n);
 	else {
 		st_mvs(s, SP, n);
-		st_dec(n);
+		decSP(n);
 	}
 }
 
+popw_st(s)
+	ptr s;
+{
+	st_mvs(s, SP, wsize);
+	decSP(wsize);
+}
+
 #ifndef	NOFLOAT
 double fpop(n)
 	size n;
@@ -496,7 +655,7 @@ double fpop(n)
 	double d;
 
 	d = st_ldf(SP, n);
-	st_dec(n);
+	decSP(n);
 	return (d);
 }
 #endif	NOFLOAT
@@ -506,7 +665,7 @@ long wpop()
 	register long l;
 	
 	l = w_in_stack(SP);
-	st_dec(wsize);
+	decSP(wsize);
 	return (l);
 }
 
@@ -518,7 +677,9 @@ long wpop()
  *	wpush(l)	- push a word, load from l.			*
  *	npush(l, n)	- push n bytes, load from l.			*
  *	push_dt(d, n)	- push n bytes, load from address d in data.	*
+ *	pushw_dt(d)	- push wsize bytes, load from address d in data.*
  *	push_st(s, n)	- push n bytes, load from address s in stack.	*
+ *	pushw_st(s)	- push wsize bytes, load from address s in stack.*
  *	fpush(f, n)	- push a floating point number, of size n.	*
  *									*
  ************************************************************************/
@@ -526,31 +687,31 @@ long wpop()
 dppush(p)
 	ptr p;
 {
-	st_inc(psize);
+	incSP(psize);
 	st_stdp(SP, p);
 }
 
 wpush(l)
 	long l;
 {
-	st_inc(wsize);
-	st_stn(SP, l, wsize);
+	incSP(wsize);
+	st_stw(SP, l);
 }
 
 npush(l, n)
 	register long l;
-	size n;
+	register size n;
 {
-	size m = max(n, wsize);
-
-	st_inc(m);
-	if (n == 1)
-		l &= MASK1;
-	else
-	if (n == 2)
-		l &= MASK2;
-	st_stn(SP, l, m);
-
+	if (n <= wsize) {
+		incSP(wsize);
+		if (n == 1) l &= MASK1;
+		else if (n == 2) l &= MASK2;
+		st_stw(SP, l);
+	}
+	else {
+		incSP(n);
+		st_stn(SP, l, n);
+	}
 }
 
 push_dt(d, n)
@@ -561,11 +722,18 @@ push_dt(d, n)
 		npush((long) dt_ldu(d, n), n);
 	}
 	else {
-		st_inc(n);
+		incSP(n);
 		st_mvd(SP, d, n);
 	}
 }
 
+pushw_dt(d)
+	ptr d;
+{
+	incSP(wsize);
+	st_mvd(SP, d, wsize);
+}
+
 push_st(s, n)
 	ptr s;
 	size n;
@@ -574,17 +742,24 @@ push_st(s, n)
 		npush((long) st_ldu(s, n), n);
 	}
 	else {
-		st_inc(n);
+		incSP(n);
 		st_mvs(SP, s, n);
 	}
 }
 
+pushw_st(s)
+	ptr s;
+{
+	incSP(wsize);
+	st_mvs(SP, s, wsize);
+}
+
 #ifndef	NOFLOAT
 fpush(f, n)
 	double f;
 	size n;
 {
-	st_inc(n);
+	incSP(n);
 	st_stf(SP, f, n);
 }
 #endif	NOFLOAT