Initial entry
This commit is contained in:
455
util/int/do_incdec.c
Normal file
455
util/int/do_incdec.c
Normal file
@@ -0,0 +1,455 @@
|
||||
/*
|
||||
* Sources of the "INCREMENT/DECREMENT/ZERO" group instructions
|
||||
*/
|
||||
|
||||
/* $Header$ */
|
||||
|
||||
#include <em_abs.h>
|
||||
#include "global.h"
|
||||
#include "log.h"
|
||||
#include "nofloat.h"
|
||||
#include "trap.h"
|
||||
#include "mem.h"
|
||||
#include "text.h"
|
||||
#include "fra.h"
|
||||
#include "warn.h"
|
||||
|
||||
PRIVATE long inc(), dec();
|
||||
|
||||
DoINCz()
|
||||
{
|
||||
/* INC -: Increment word on top of stack by 1 (*) */
|
||||
LOG(("@Z6 DoINCz()"));
|
||||
spoilFRA();
|
||||
npush(inc(spop(wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINLm(arg)
|
||||
long arg;
|
||||
{
|
||||
/* INL l: Increment local or parameter (*) */
|
||||
register long l = arg_l(arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoINLm(%ld)", l));
|
||||
spoilFRA();
|
||||
p = loc_addr(l);
|
||||
st_stn(p, inc(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINLn2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* INL l: Increment local or parameter (*) */
|
||||
register long l = (N_arg_2() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoINLn2(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, inc(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINLn4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* INL l: Increment local or parameter (*) */
|
||||
register long l = (N_arg_4() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoINLn4(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, inc(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINLp2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* INL l: Increment local or parameter (*) */
|
||||
register long l = (P_arg_2() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoINLp2(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, inc(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINLp4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* INL l: Increment local or parameter (*) */
|
||||
register long l = (P_arg_4() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoINLp4(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, inc(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINLs(hob, wfac)
|
||||
long hob;
|
||||
size wfac;
|
||||
{
|
||||
/* INL l: Increment local or parameter (*) */
|
||||
register long l = (S_arg(hob) * wfac);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoINLs(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, inc(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINEl2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* INE g: Increment external (*) */
|
||||
register ptr p = i2p(L_arg_2() * arg);
|
||||
|
||||
LOG(("@Z6 DoINEl2(%lu)", p));
|
||||
spoilFRA();
|
||||
p = arg_g(p);
|
||||
dt_stn(p, inc(dt_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINEl4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* INE g: Increment external (*) */
|
||||
register ptr p = i2p(L_arg_4() * arg);
|
||||
|
||||
LOG(("@Z6 DoINEl4(%lu)", p));
|
||||
spoilFRA();
|
||||
p = arg_g(p);
|
||||
dt_stn(p, inc(dt_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoINEs(hob, wfac)
|
||||
long hob;
|
||||
size wfac;
|
||||
{
|
||||
/* INE g: Increment external (*) */
|
||||
register ptr p = i2p(S_arg(hob) * wfac);
|
||||
|
||||
LOG(("@Z6 DoINEs(%lu)", p));
|
||||
spoilFRA();
|
||||
p = arg_g(p);
|
||||
dt_stn(p, inc(dt_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDECz()
|
||||
{
|
||||
/* DEC -: Decrement word on top of stack by 1 (*) */
|
||||
LOG(("@Z6 DoDECz()"));
|
||||
spoilFRA();
|
||||
npush(dec(spop(wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDELn2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* DEL l: Decrement local or parameter (*) */
|
||||
register long l = (N_arg_2() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoDELn2(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, dec(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDELn4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* DEL l: Decrement local or parameter (*) */
|
||||
register long l = (N_arg_4() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoDELn4(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, dec(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDELp2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* DEL l: Decrement local or parameter (*) */
|
||||
register long l = (P_arg_2() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoDELp2(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, dec(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDELp4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* DEL l: Decrement local or parameter (*) */
|
||||
register long l = (P_arg_4() * arg);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoDELp4(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, dec(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDELs(hob, wfac)
|
||||
long hob;
|
||||
size wfac;
|
||||
{
|
||||
/* DEL l: Decrement local or parameter (*) */
|
||||
register long l = (S_arg(hob) * wfac);
|
||||
register ptr p;
|
||||
|
||||
LOG(("@Z6 DoDELs(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
p = loc_addr(l);
|
||||
st_stn(p, dec(st_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDEEl2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* DEE g: Decrement external (*) */
|
||||
register ptr p = i2p(L_arg_2() * arg);
|
||||
|
||||
LOG(("@Z6 DoDEEl2(%lu)", p));
|
||||
spoilFRA();
|
||||
p = arg_g(p);
|
||||
dt_stn(p, dec(dt_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDEEl4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* DEE g: Decrement external (*) */
|
||||
register ptr p = i2p(L_arg_4() * arg);
|
||||
|
||||
LOG(("@Z6 DoDEEl4(%lu)", p));
|
||||
spoilFRA();
|
||||
p = arg_g(p);
|
||||
dt_stn(p, dec(dt_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoDEEs(hob, wfac)
|
||||
long hob;
|
||||
size wfac;
|
||||
{
|
||||
/* DEE g: Decrement external (*) */
|
||||
register ptr p = i2p(S_arg(hob) * wfac);
|
||||
|
||||
LOG(("@Z6 DoDEEs(%lu)", p));
|
||||
spoilFRA();
|
||||
p = arg_g(p);
|
||||
dt_stn(p, dec(dt_lds(p, wsize)), wsize);
|
||||
}
|
||||
|
||||
DoZRLm(arg)
|
||||
long arg;
|
||||
{
|
||||
/* ZRL l: Zero local or parameter */
|
||||
register long l = arg_l(arg);
|
||||
|
||||
LOG(("@Z6 DoZRLm(%ld)", l));
|
||||
spoilFRA();
|
||||
st_stn(loc_addr(l), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZRLn2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* ZRL l: Zero local or parameter */
|
||||
register long l = (N_arg_2() * arg);
|
||||
|
||||
LOG(("@Z6 DoZRLn2(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(arg);
|
||||
st_stn(loc_addr(l), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZRLn4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* ZRL l: Zero local or parameter */
|
||||
register long l = (N_arg_4() * arg);
|
||||
|
||||
LOG(("@Z6 DoZRLn4(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
st_stn(loc_addr(l), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZRLp2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* ZRL l: Zero local or parameter */
|
||||
register long l = (P_arg_2() * arg);
|
||||
|
||||
LOG(("@Z6 DoZRLp2(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
st_stn(loc_addr(l), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZRLp4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* ZRL l: Zero local or parameter */
|
||||
register long l = (P_arg_4() * arg);
|
||||
|
||||
LOG(("@Z6 DoZRLp4(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
st_stn(loc_addr(l), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZRLs(hob, wfac)
|
||||
long hob;
|
||||
size wfac;
|
||||
{
|
||||
/* ZRL l: Zero local or parameter */
|
||||
register long l = (S_arg(hob) * wfac);
|
||||
|
||||
LOG(("@Z6 DoZRLs(%ld)", l));
|
||||
spoilFRA();
|
||||
l = arg_l(l);
|
||||
st_stn(loc_addr(l), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZREl2(arg)
|
||||
long arg;
|
||||
{
|
||||
/* ZRE g: Zero external */
|
||||
register ptr p = i2p(L_arg_2() * arg);
|
||||
|
||||
LOG(("@Z6 DoZREl2(%lu)", p));
|
||||
spoilFRA();
|
||||
dt_stn(arg_g(p), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZREl4(arg)
|
||||
long arg;
|
||||
{
|
||||
/* ZRE g: Zero external */
|
||||
register ptr p = i2p(L_arg_4() * arg);
|
||||
|
||||
LOG(("@Z6 DoZREl4(%lu)", p));
|
||||
spoilFRA();
|
||||
dt_stn(arg_g(p), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZREs(hob, wfac)
|
||||
long hob;
|
||||
size wfac;
|
||||
{
|
||||
/* ZRE g: Zero external */
|
||||
register ptr p = i2p(S_arg(hob) * wfac);
|
||||
|
||||
LOG(("@Z6 DoZREs(%lu)", p));
|
||||
spoilFRA();
|
||||
dt_stn(arg_g(p), 0L, wsize);
|
||||
}
|
||||
|
||||
DoZRFl2(arg)
|
||||
size arg;
|
||||
{
|
||||
/* ZRF w: Load a floating zero of size w */
|
||||
#ifndef NOFLOAT
|
||||
register size l = (L_arg_2() * arg);
|
||||
|
||||
LOG(("@Z6 DoZRFl2(%ld)", l));
|
||||
spoilFRA();
|
||||
fpush(0.0, arg_wf(l));
|
||||
#else NOFLOAT
|
||||
arg = arg;
|
||||
nofloat();
|
||||
#endif NOFLOAT
|
||||
}
|
||||
|
||||
DoZRFz()
|
||||
{
|
||||
/* ZRF w: Load a floating zero of size w */
|
||||
#ifndef NOFLOAT
|
||||
register size l = upop(wsize);
|
||||
|
||||
LOG(("@Z6 DoZRFz(%ld)", l));
|
||||
spoilFRA();
|
||||
fpush(0.0, arg_wf(l));
|
||||
#else NOFLOAT
|
||||
nofloat();
|
||||
#endif NOFLOAT
|
||||
}
|
||||
|
||||
DoZERl2(arg)
|
||||
size arg;
|
||||
{
|
||||
/* ZER w: Load w zero bytes */
|
||||
register size i, l = (L_arg_2() * arg);
|
||||
|
||||
LOG(("@Z6 DoZERl2(%ld)", l));
|
||||
spoilFRA();
|
||||
for (i = arg_w(l); i; i -= wsize)
|
||||
npush(0L, wsize);
|
||||
}
|
||||
|
||||
DoZERs(hob, wfac)
|
||||
long hob;
|
||||
size wfac;
|
||||
{
|
||||
/* ZER w: Load w zero bytes */
|
||||
register size i, l = (S_arg(hob) * wfac);
|
||||
|
||||
LOG(("@Z6 DoZERs(%ld)", l));
|
||||
spoilFRA();
|
||||
for (i = arg_w(l); i; i -= wsize)
|
||||
npush(0L, wsize);
|
||||
}
|
||||
|
||||
DoZERz()
|
||||
{
|
||||
/* ZER w: Load w zero bytes */
|
||||
register size i, l = spop(wsize);
|
||||
|
||||
LOG(("@Z6 DoZERz(%ld)", l));
|
||||
spoilFRA();
|
||||
for (i = arg_w(l); i; i -= wsize)
|
||||
npush(0L, wsize);
|
||||
}
|
||||
|
||||
PRIVATE long inc(l)
|
||||
long l;
|
||||
{
|
||||
if (must_test && !(IgnMask&BIT(EIOVFL))) {
|
||||
if (l == i_maxsw)
|
||||
trap(EIOVFL);
|
||||
}
|
||||
return (l + 1);
|
||||
}
|
||||
|
||||
PRIVATE long dec(l)
|
||||
long l;
|
||||
{
|
||||
if (must_test && !(IgnMask&BIT(EIOVFL))) {
|
||||
if (l == i_minsw)
|
||||
trap(EIOVFL);
|
||||
}
|
||||
return (l - 1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user