some more speed-up changes

This commit is contained in:
ceriel
1989-11-22 13:38:37 +00:00
parent a1b292bb31
commit 793a6b8ddd
21 changed files with 475 additions and 208 deletions

View 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 *
************************************************************************