Pristine Ack-5.5
[Ack-5.5.git] / mach / s2650 / as / mach4.c
1 #define RCSID4 "$Id: mach4.c,v 3.3 1994/06/24 13:34:00 ceriel Exp $"
2
3 /*
4  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
5  * See the copyright notice in the ACK home directory, in the file "Copyright".
6  *
7  */
8
9 /*      Author: Leo van Moergestel      */
10
11 /*
12  * Signetics 2650 parsing rules
13  */
14 operation:
15                 NOOP
16                         {       emit1($1);}
17         |
18                 ZERO ',' REG
19                         {       emit1($1 | $3); }
20         |
21                 IMMED ',' REG expr
22                         {       emit1($1 | $3); page();
23 #ifdef RELOCATION
24                                 newrelo($4.typ, RELO1);
25 #endif
26                                 emit1($4.val);
27                         }
28         |
29                 REL ',' REG expr
30                         {       emit1($1 | $3); rela($4, 0);}
31         |
32                 REL ',' REG '*' expr
33                         {       emit1($1 | $3); rela($5, 0x80);}
34         |
35                 ZEROX ',' REG
36                         {       if ($3 == R0)
37                                         serror("register error");
38                                 emit1($1 | $3);
39                         }
40         |
41                 ABSO ',' REG param
42                         {       emit1($1 | $3);
43                                 absoa(par_exp, p_indexed, p_indirect);
44                         }
45         |
46                 PSWM expr
47                         {       emit1($1); page();
48 #ifdef RELOCATION
49                                 newrelo($2.typ, RELO1);
50 #endif
51                                 emit1($2.val);
52                         }
53         |
54                 RET ',' CC
55                         {       emit1($1 | $3);}
56         |
57                 BRANCR  ',' CC expr
58                         {       emit1($1 | $3); rela($4, 0);}
59         |
60                 BRANCR  ',' CC '*' expr
61                         {       emit1($1 | $3); rela($5, 0x80);}
62         |
63                 BRANCRX ',' CC expr
64                         {       if($3 == 3)
65                                         serror("wrong condition");
66                                 emit1($1 | $3); rela($4, 0);}
67         |
68                 BRANCRX ',' CC '*' expr
69                         {       if($3 == 3)
70                                         serror("wrong condition");
71                                 emit1($1 | $3); rela($5, 0x80);}
72         |
73                 BRANCA ',' CC expr
74                         {       emit1($1 | $3); absob($4, 0);}
75         |
76                 BRANCA ',' CC '*' expr
77                         {       emit1($1 | $3); absob($5, 0x8000);}
78         |
79                 BRANCAX ',' CC expr
80                         {       if($3 == 3)
81                                         serror("wrong condition");
82                                 emit1($1 | $3); absob($4, 0);}
83         |
84                 BRANCAX ',' CC '*' expr
85                         {       if($3 == 3)
86                                         serror("wrong condition");
87                                 emit1($1 | $3); absob($5, 0x8000);}
88         |
89                 BRANRA ',' REG expr
90                         {       emit1($1 | $3); absob($4, 0);}
91         |
92                 BRANRA ',' REG '*' expr
93                         {       emit1($1 | $3); absob($5, 0x8000);}
94         |
95                 ZBRR    expr
96                         {       emit1($1); rela($2, 0);}
97         |
98                 ZBRR '*' expr
99                         {       emit1($1); rela($3, 0x80);}
100         |
101                 BXSA    expr
102                         {       emit1($1); absob($2, 0);}
103         |
104                 BXSA '*' expr
105                         {       emit1($1); absob($3, 0x8000);}
106         ;
107
108 param:
109                 indir_opt
110                         {       p_indexed = 0;}
111         |
112                 indir_opt ',' INDE
113                         {       p_indexed = 0x6000;}
114         |
115                 indir_opt ',' '+'
116                         {       p_indexed = 0x2000;}
117         |
118                 indir_opt ',' '-'
119                         {       p_indexed = 0x4000;}
120         ;
121
122 indir_opt:
123                 expr
124                         {       par_exp = $1; p_indirect = 0;}
125         |
126                 '*' expr
127                         {       par_exp = $2; p_indirect = 0x8000;}
128         ;