/* * Sources of the "STORE" group instructions */ /* $Header$ */ #include #include "global.h" #include "log.h" #include "mem.h" #include "trap.h" #include "text.h" #include "fra.h" #include "warn.h" DoSTL(l) register long l; { /* STL l: Store local or parameter */ LOG(("@S6 DoSTL(%ld)", l)); spoilFRA(); l = arg_l(l); popw_st(loc_addr(l)); } DoSTE(arg) register unsigned long arg; { /* STE g: Store external */ register ptr p = i2p(arg); LOG(("@S6 DoSTE(%lu)", p)); spoilFRA(); popw_m(arg_g(p)); } DoSIL(l) register long l; { /* SIL l: Store into word pointed to by l-th local or parameter */ LOG(("@S6 DoSIL(%ld)", l)); spoilFRA(); l = arg_l(l); popw_m(st_lddp(loc_addr(l))); } DoSTF(l) register long l; { /* STF f: Store offsetted */ register ptr p = dppop(); LOG(("@S6 DoSTF(%ld)", l)); spoilFRA(); popw_m(p + arg_f(l)); } DoSTI(l) register size l; { /* STI o: Store indirect o bytes (pop address, then data) */ register ptr p = dppop(); LOG(("@S6 DoSTI(%ld)", l)); spoilFRA(); pop_m(p, arg_o(l)); } DoSTS(l) register size l; { /* STS w: Store indirect, w-byte integer on top of stack gives object size */ register ptr p; LOG(("@S6 DoSTS(%ld)", l)); spoilFRA(); l = upop(arg_wi(l)); p = dppop(); pop_m(p, arg_o(l)); } DoSDL(l) register long l; { /* SDL l: Store double local or parameter */ LOG(("@S6 DoSDL(%ld)", l)); spoilFRA(); l = arg_l(l); pop_st(loc_addr(l), dwsize); } DoSDE(arg) register unsigned long arg; { /* SDE g: Store double external */ register ptr p = i2p(arg); LOG(("@S6 DoSDE(%lu)", p)); spoilFRA(); pop_m(arg_g(p), dwsize); } DoSDF(l) register long l; { /* SDF f: Store double offsetted */ register ptr p = dppop(); LOG(("@S6 DoSDF(%ld)", l)); spoilFRA(); pop_m(p + arg_f(l), dwsize); }