2 * Sources of the "LOAD" group instructions
5 /* $Id: do_load.c,v 2.5 1994/06/24 10:46:33 ceriel Exp $ */
17 PRIVATE ptr lexback_LB();
22 /* LOC c: Load constant (i.e. push one word onto the stack) */
24 LOG(("@L6 DoLOC(%ld)", l));
32 /* LDC d: Load double constant ( push two words ) */
34 LOG(("@L6 DoLDC(%ld)", l));
43 /* LOL l: Load word at l-th local (l<0) or parameter (l>=0) */
45 LOG(("@L6 DoLOL(%ld)", l));
48 pushw_st(loc_addr(l));
54 /* LOE g: Load external word g */
55 register ptr p = i2p(arg);
57 LOG(("@L6 DoLOE(%lu)", p));
65 /* LIL l: Load word pointed to by l-th local or parameter */
67 LOG(("@L6 DoLIL(%ld)", l));
70 pushw_m(st_lddp(loc_addr(l)));
76 /* LOF f: Load offsetted (top of stack + f yield address) */
77 register ptr p = dppop();
79 LOG(("@L6 DoLOF(%ld)", l));
81 pushw_m(p + arg_f(l));
87 /* LAL l: Load address of local or parameter */
89 LOG(("@L6 DoLAL(%ld)", l));
96 register unsigned long arg;
98 /* LAE g: Load address of external */
99 register ptr p = i2p(arg);
101 LOG(("@L6 DoLAE(%lu)", p));
107 register unsigned long l;
109 /* LXL n: Load lexical (address of LB n static levels back) */
112 LOG(("@L6 DoLXL(%lu)", l));
120 register unsigned long l;
122 /* LXA n: Load lexical (address of AB n static levels back) */
125 LOG(("@L6 DoLXA(%lu)", l));
135 /* LOI o: Load indirect o bytes (address is popped from the stack) */
136 register ptr p = dppop();
138 LOG(("@L6 DoLOI(%ld)", l));
147 /* LOS w: Load indirect, w-byte integer on top of stack gives object size */
150 LOG(("@L6 DoLOS(%ld)", l));
161 /* LDL l: Load double local or parameter (two consecutive words are stacked) */
163 LOG(("@L6 DoLDL(%ld)", l));
166 push_st(loc_addr(l), dwsize);
172 /* LDE g: Load double external (two consecutive externals are stacked) */
173 register ptr p = i2p(arg);
175 LOG(("@L6 DoLDE(%lu)", p));
177 push_m(arg_g(p), dwsize);
183 /* LDF f: Load double offsetted (top of stack + f yield address) */
184 register ptr p = dppop();
186 LOG(("@L6 DoLDF(%ld)", l));
188 push_m(p + arg_f(l), dwsize);
194 /* LPI p: Load procedure identifier */
196 LOG(("@L6 DoLPI(%ld)", pi));
198 npush(arg_p(pi), psize);
201 PRIVATE ptr lexback_LB(n)
204 /* LB n static levels back */
205 register ptr lb = LB;
208 lb = st_lddp(lb + rsbsize);