Pristine Ack-5.5
[Ack-5.5.git] / mach / pdp / as / mach4.c
1 #define RCSID4 "$Id: mach4.c,v 1.5 1994/06/24 13:11:22 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 /*
10  * PDP 11 dependent yacc table
11  */
12
13 operation
14         : OP_SO opr1
15                 { emit2( $1 | $2 ); op1($2); }
16         | OP_DO opr1 ',' opr2
17                 { emit2( $1 | ($2 << 6) | $4); op1($2); op2($4);}
18         | OP_R_SO REG ',' opr1
19                 { emit2( $1 | ($2 << 6) | $4); op1($4); }
20         | BR expr
21                 { branch( $1, $2); }
22         | EJMP expr
23                 { ejump( $1, $2); }
24         | JMP opr1
25                 { jump( $1, $2); }
26         | JSR REG ',' opr1
27                 { emit2( $1 | ($2 << 6) | $4); op1($4); }
28         | RTS REG
29                 { emit2($1 | $2); }
30         | MARK absexp
31                 { fit(fit6($2)); emit2($1 | $2); }
32         | SOB REG ',' expr
33                 { sob($2, $4); }
34         | SPL absexp
35                 { fit(fit3($2)); emit2( $1 | $2 ); }
36         | TRAP absexp
37                 { fit(fit8($2)); emit2( $1 | $2 ); }
38         | OP_NO
39                 {emit2($1); }
40         | clcc
41                 { emit2($1); }
42         | secc
43                 { emit2($1); }
44         | OP_SO_R opr1 ',' REG
45                 { emit2( $1 | ($4 << 6) | $2); op1($2); }
46         | MFP opr1
47                 { emit2( $1 | $2); op1($2); }
48         | FOP_FSO_FR fopr1 ',' fregister
49                 {emit2($1 | ($4 << 6) | $2); op1($2); }
50         | FOP_FSO fopr1
51                 { emit2( $1 | $2); op1($2); }
52         | FOP_SO opr1
53                 { emit2( $1 | $2); op1($2); }
54         | MOVF fop2 ',' fregister
55                 { emit2(OPLDF | ($4 << 6) | $2); op2($2);}
56         | MOVF fregister ',' fopr1
57                 { emit2(OPSTF | ($2 << 6) | $4); op1($4); }
58         | FOP_SO_FR opr1 ',' fregister
59                 { emit2($1 | ($4 << 6) | $2); op1($2); }
60         | FOP_FR_SO fregister ',' opr1
61                 { emit2($1 | ($2 << 6) | $4); op1($4); }
62         | FOP_FR_FSO fregister ',' fopr1
63                 { emit2($1 | ($2 << 6) | $4); op1($4); }
64         ;
65 clcc
66         : CLEARCC
67         | clcc '|' CLEARCC
68                 { $$ = ( $1 | $3 ); }
69         ;
70 secc
71         : SETCC
72         | secc '|' SETCC
73                 { $$ = ( $1 | $3 ); }
74         ;
75 opr1
76         : opr2
77                 { $$ = $1;
78                   exp_1 = exp_2;
79                   RELOMOVE(rel_1, rel_2);
80                   im1flag = im2flag;
81                   im2flag=0;
82                 }
83         ;
84 opr2
85         : REG
86         | op2
87         ;
88 op2
89         : ari
90                 { $$ = ( RDEFMODE | $1); }
91         | '*' REG
92                 { $$ = ( RDEFMODE | $2); }
93         | ainc
94                 { $$ = ( AIMODE | $1 ); }
95         | adec
96                 { $$ = ( ADMODE | $1 ); }
97         | expr ari
98                 { exp_2 = $1; $$ = ( INDMODE | $2); im2flag = 1;
99                   RELOMOVE(rel_2, relonami);
100                 }
101         | '*' expr ari
102                 { exp_2 = $2; $$ = ( INDDEFMODE | $3); im2flag = 1;
103                   RELOMOVE(rel_2, relonami);
104                 }
105         | '*' ainc
106                 { $$ = ( AIDEFMODE | $2 ); }
107         | '*' adec
108                 { $$ = ( ADDEFMODE | $2 ); }
109         | expr
110                 { exp_2 = $1; $$ = (INDMODE | 07); im2flag = 1; 
111                   RELOMOVE(rel_2, relonami);
112                 }
113         | '$' expr
114                 { exp_2 =$2; $$ = ( AIMODE | 07); im2flag = 1; 
115                   RELOMOVE(rel_2, relonami);
116                 }
117         | '*' '$' expr
118                 { exp_2 = $3; $$ = ( AIDEFMODE | 07 ); im2flag = 1; 
119                   RELOMOVE(rel_2, relonami);
120                 }
121         | '*' expr
122                 { exp_2 = $2; $$ = ( INDDEFMODE | 07 ); im2flag = 1; 
123                   RELOMOVE(rel_2, relonami);
124                 }
125         ;
126 fopr1
127         : fopr2
128                 { $$ = $1; exp_1 = exp_2; im1flag = im2flag; im2flag=0;
129                   RELOMOVE(rel_1, rel_2);
130                 }
131         ;
132 fopr2
133         : fregister
134         | fop2
135         ;
136 fop2
137         : FRSP
138         | op2
139         ;
140 ari
141         : '(' REG ')'
142                 { $$ = $2; }
143         ;
144 ainc
145         : ari '+'
146         ;
147 adec
148         : '-' ari
149                 { $$ = $2; }
150         ;
151 fregister
152         : FREG
153         | REG
154         ;