some more speed-up changes
authorceriel <none@none>
Wed, 22 Nov 1989 13:38:37 +0000 (13:38 +0000)
committerceriel <none@none>
Wed, 22 Nov 1989 13:38:37 +0000 (13:38 +0000)
21 files changed:
util/int/ChangeLog
util/int/data.c
util/int/do_array.c
util/int/do_comp.c
util/int/do_conv.c
util/int/do_fpar.c
util/int/do_incdec.c
util/int/do_intar.c
util/int/do_load.c
util/int/do_logic.c
util/int/do_misc.c
util/int/do_ptrar.c
util/int/do_sets.c
util/int/do_store.c
util/int/do_unsar.c
util/int/dump.c
util/int/mem.h
util/int/moncalls.c
util/int/read.c
util/int/rsb.c
util/int/stack.c

index 759ded4..be39ed3 100644 (file)
@@ -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
index 9b3e1fa..77a0905 100644 (file)
@@ -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                                              *
  ************************************************************************
index a7bfa01..81123b9 100644 (file)
@@ -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));
index bccd577..483e474 100644 (file)
@@ -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();
index ce6ef2f..c4797a7 100644 (file)
@@ -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);
index 80a9c24..188a29e 100644 (file)
@@ -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();
index 9b3cebf..2d31041 100644 (file)
@@ -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();
index 3b7662c..f147c2b 100644 (file)
@@ -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();
index bc397de..fd70ea6 100644 (file)
@@ -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));
index f2f339d..13b3900 100644 (file)
@@ -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));
index 9eecf0d..d0eb420 100644 (file)
@@ -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);
                }
index b92137e..96258da 100644 (file)
@@ -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;
index a0a63fc..c3eabec 100644 (file)
@@ -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);
index 23f6a8b..20d769c 100644 (file)
@@ -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));
index 51a8aae..1581849 100644 (file)
@@ -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();
index a2e1121..e64db3e 100644 (file)
@@ -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 */
index e83333e..f10c0d6 100644 (file)
 /******** 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)
 
 
 #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();
 
index 096a3bb..23e080d 100644 (file)
@@ -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))
index dd2e7e8..b7bb3a2 100644 (file)
@@ -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);
 }
index fffe723..d70db63 100644 (file)
@@ -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;
 
index 01ca81e..6ec240c 100644 (file)
@@ -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