155 lines
2.9 KiB
C
155 lines
2.9 KiB
C
#define RCSID4 "$Id$"
|
|
|
|
/*
|
|
* (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(OPLDF | ($4 << 6) | $2); op2($2);}
|
|
| MOVF fregister ',' fopr1
|
|
{ emit2(OPSTF | ($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
|
|
;
|