Pristine Ack-5.5
[Ack-5.5.git] / util / int / do_store.c
1 /*
2  * Sources of the "STORE" group instructions
3  */
4
5 /* $Id: do_store.c,v 2.4 1994/06/24 10:46:57 ceriel Exp $ */
6
7 #include        <em_abs.h>
8 #include        "global.h"
9 #include        "log.h"
10 #include        "mem.h"
11 #include        "trap.h"
12 #include        "text.h"
13 #include        "fra.h"
14 #include        "warn.h"
15
16 DoSTL(l)
17         register long l;
18 {
19         /* STL l: Store local or parameter */
20
21         LOG(("@S6 DoSTL(%ld)", l));
22         spoilFRA();
23         l = arg_l(l);
24         popw_st(loc_addr(l));
25 }
26
27 DoSTE(arg)
28         register unsigned long arg;
29 {
30         /* STE g: Store external */
31         register ptr p = i2p(arg);
32
33         LOG(("@S6 DoSTE(%lu)", p));
34         spoilFRA();
35         popw_m(arg_g(p));
36 }
37
38 DoSIL(l)
39         register long l;
40 {
41         /* SIL l: Store into word pointed to by l-th local or parameter */
42
43         LOG(("@S6 DoSIL(%ld)", l));
44         spoilFRA();
45         l = arg_l(l);
46         popw_m(st_lddp(loc_addr(l)));
47 }
48
49 DoSTF(l)
50         register long l;
51 {
52         /* STF f: Store offsetted */
53         register ptr p = dppop();
54
55         LOG(("@S6 DoSTF(%ld)", l));
56         spoilFRA();
57         popw_m(p + arg_f(l));
58 }
59
60 DoSTI(l)
61         register size l;
62 {
63         /* STI o: Store indirect o bytes (pop address, then data) */
64         register ptr p = dppop();
65
66         LOG(("@S6 DoSTI(%ld)", l));
67         spoilFRA();
68         pop_m(p, arg_o(l));
69 }
70
71 DoSTS(l)
72         register size l;
73 {
74         /* STS w: Store indirect, w-byte integer on top of stack gives object size */
75         register ptr p;
76
77         LOG(("@S6 DoSTS(%ld)", l));
78         spoilFRA();
79         l = upop(arg_wi(l));
80         p = dppop();
81         pop_m(p, arg_o(l));
82 }
83
84 DoSDL(l)
85         register long l;
86 {
87         /* SDL l: Store double local or parameter */
88
89         LOG(("@S6 DoSDL(%ld)", l));
90         spoilFRA();
91         l = arg_l(l);
92         pop_st(loc_addr(l), dwsize);
93 }
94
95 DoSDE(arg)
96         register unsigned long arg;
97 {
98         /* SDE g: Store double external */
99         register ptr p = i2p(arg);
100
101         LOG(("@S6 DoSDE(%lu)", p));
102         spoilFRA();
103         pop_m(arg_g(p), dwsize);
104 }
105
106 DoSDF(l)
107         register long l;
108 {
109         /* SDF f: Store double offsetted */
110         register ptr p = dppop();
111
112         LOG(("@S6 DoSDF(%ld)", l));
113         spoilFRA();
114         pop_m(p + arg_f(l), dwsize);
115 }