|
|
1.1 root 1: /*
2: * The functions in this file
3: * handle the management of address fields
4: * in the intermediate file. It converts the tree
5: * like items into `afield' structures.
6: */
7: #ifdef vax
8: #include "INC$LIB:cc2.h"
9: #else
10: #include "cc2.h"
11: #endif
12:
13: /*
14: * Read in an address field. The style
15: * of the address is determined by flag bits that
16: * hide in the address mode. These bits are cleared away
17: * when the mode is actually stored in the afield.
18: */
19: getfield(opcode, afp)
20: register AFIELD *afp;
21: {
22: register int mode;
23:
24: mode = iget();
25: afp->a_mode = mode & (A_PREFX|A_AMOD|A_REGM);
26: afp->a_sp = NULL;
27: afp->a_value = 0;
28: if ((mode&A_OFFS) != 0)
29: afp->a_value = iget();
30: if ((mode&A_LID) != 0)
31: afp->a_sp = llookup(iget(), 0);
32: else if ((mode&A_GID) != 0) {
33: sget(id, NCSYMB);
34: afp->a_sp = glookup(id, 0);
35: }
36: }
37:
38: /*
39: * Unassemble an address field.
40: * Output the unassembly to the output file
41: * in intermediate file format.
42: */
43: genfield(afp, flag)
44: register AFIELD *afp;
45: {
46: register SYM *sp;
47: register int mode;
48:
49: mode = afp->a_mode;
50: if (afp->a_value != 0 || (mode&A_AMOD)==A_IMM)
51: mode |= A_OFFS;
52: if ((sp = afp->a_sp) != NULL) {
53: if ((sp->s_flag&S_LABNO) != 0)
54: mode |= A_LID;
55: else
56: mode |= A_GID;
57: }
58: iput(mode);
59: if ((mode&A_OFFS) != 0)
60: iput(afp->a_value);
61: if ((mode&A_LID) != 0)
62: iput(sp->s_labno);
63: else if ((mode&A_GID) != 0)
64: sput(sp->s_id);
65: }
66:
67: /*
68: * Compare the address field parts of
69: * two instructions.
70: */
71: cmpfield(ip1, ip2)
72: INS *ip1, *ip2;
73: {
74: register AFIELD *afp1, *afp2;
75: register int n;
76:
77: if ((n = ip1->i_naddr) != 0) {
78: afp1 = &ip1->i_af[0];
79: afp2 = &ip2->i_af[0];
80: do {
81: if (afp1->a_mode != afp2->a_mode
82: || afp1->a_sp != afp2->a_sp
83: || afp1->a_value != afp2->a_value)
84: return (0);
85: ++afp1;
86: ++afp2;
87: } while (--n);
88: }
89: return (1);
90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.