#define RCSID4 "$Header$" /* * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. * See the copyright notice in the ACK home directory, in the file "Copyright". * */ /* * PDP 11 dependent yacc table */ operation : OP_SO opr1 { emit2( $1 | $2 ); op1($2); } | OP_DO opr1 ',' opr2 { emit2( $1 | ($2 << 6) | $4); op1($2); op2($4);} | OP_R_SO REG ',' opr1 { emit2( $1 | ($2 << 6) | $4); op1($4); } | BR expr { branch( $1, $2); } | EJMP expr { ejump( $1, $2); } | JMP opr1 { jump( $1, $2); } | JSR REG ',' opr1 { emit2( $1 | ($2 << 6) | $4); op1($4); } | RTS REG { emit2($1 | $2); } | MARK absexp { fit(fit6($2)); emit2($1 | $2); } | SOB REG ',' expr { sob($2, $4); } | SPL absexp { fit(fit3($2)); emit2( $1 | $2 ); } | TRAP absexp { fit(fit8($2)); emit2( $1 | $2 ); } | OP_NO {emit2($1); } | clcc { emit2($1); } | secc { emit2($1); } | OP_SO_R opr1 ',' REG { emit2( $1 | ($4 << 6) | $2); op1($2); } | MFP opr1 { emit2( $1 | $2); op1($2); } | FOP_FSO_FR fopr1 ',' fregister {emit2($1 | ($4 << 6) | $2); op1($2); } | FOP_FSO fopr1 { emit2( $1 | $2); op1($2); } | FOP_SO opr1 { emit2( $1 | $2); op1($2); } | MOVF fop2 ',' fregister { emit2(OPSTF | ($4 << 6) | $2); op2($2);} | MOVF fregister ',' fopr1 { emit2(OPLDF | ($2 << 6) | $4); op1($4); } | FOP_SO_FR opr1 ',' fregister { emit2($1 | ($4 << 6) | $2); op1($2); } | FOP_FR_SO fregister ',' opr1 { emit2($1 | ($2 << 6) | $4); op1($4); } | FOP_FR_FSO fregister ',' fopr1 { emit2($1 | ($2 << 6) | $4); op1($4); } ; clcc : CLEARCC | clcc '|' CLEARCC { $$ = ( $1 | $3 ); } ; secc : SETCC | secc '|' SETCC { $$ = ( $1 | $3 ); } ; opr1 : opr2 { $$ = $1; exp_1 = exp_2; RELOMOVE(rel_1, rel_2); im1flag = im2flag; im2flag=0; } ; opr2 : REG | op2 ; op2 : ari { $$ = ( RDEFMODE | $1); } | '*' REG { $$ = ( RDEFMODE | $2); } | ainc { $$ = ( AIMODE | $1 ); } | adec { $$ = ( ADMODE | $1 ); } | expr ari { exp_2 = $1; $$ = ( INDMODE | $2); im2flag = 1; RELOMOVE(rel_2, relonami); } | '*' expr ari { exp_2 = $2; $$ = ( INDDEFMODE | $3); im2flag = 1; RELOMOVE(rel_2, relonami); } | '*' ainc { $$ = ( AIDEFMODE | $2 ); } | '*' adec { $$ = ( ADDEFMODE | $2 ); } | expr { exp_2 = $1; $$ = (INDMODE | 07); im2flag = 1; RELOMOVE(rel_2, relonami); } | '$' expr { exp_2 =$2; $$ = ( AIMODE | 07); im2flag = 1; RELOMOVE(rel_2, relonami); } | '*' '$' expr { exp_2 = $3; $$ = ( AIDEFMODE | 07 ); im2flag = 1; RELOMOVE(rel_2, relonami); } | '*' expr { exp_2 = $2; $$ = ( INDDEFMODE | 07 ); im2flag = 1; RELOMOVE(rel_2, relonami); } ; fopr1 : fopr2 { $$ = $1; exp_1 = exp_2; im1flag = im2flag; im2flag=0; RELOMOVE(rel_1, rel_2); } ; fopr2 : fregister | fop2 ; fop2 : FRSP | op2 ; ari : '(' REG ')' { $$ = $2; } ; ainc : ari '+' ; adec : '-' ari { $$ = $2; } ; fregister : FREG | REG ;