123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #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".
- *
- */
- /* Author: Leo van Moergestel */
- /*
- * Signetics 2650 parsing rules
- */
- operation:
- NOOP
- { emit1($1);}
- |
- ZERO ',' REG
- { emit1($1 | $3); }
- |
- IMMED ',' REG expr
- { emit1($1 | $3); page();
- #ifdef RELOCATION
- newrelo($4.typ, RELO1);
- #endif
- emit1($4.val);
- }
- |
- REL ',' REG expr
- { emit1($1 | $3); rela($4, 0);}
- |
- REL ',' REG '*' expr
- { emit1($1 | $3); rela($5, 0x80);}
- |
- ZEROX ',' REG
- { if ($3 == R0)
- serror("register error");
- emit1($1 | $3);
- }
- |
- ABSO ',' REG param
- { emit1($1 | $3);
- absoa(par_exp, p_indexed, p_indirect);
- }
- |
- PSWM expr
- { emit1($1); page();
- #ifdef RELOCATION
- newrelo($2.typ, RELO1);
- #endif
- emit1($2.val);
- }
- |
- RET ',' CC
- { emit1($1 | $3);}
- |
- BRANCR ',' CC expr
- { emit1($1 | $3); rela($4, 0);}
- |
- BRANCR ',' CC '*' expr
- { emit1($1 | $3); rela($5, 0x80);}
- |
- BRANCRX ',' CC expr
- { if($3 == 3)
- serror("wrong condition");
- emit1($1 | $3); rela($4, 0);}
- |
- BRANCRX ',' CC '*' expr
- { if($3 == 3)
- serror("wrong condition");
- emit1($1 | $3); rela($5, 0x80);}
- |
- BRANCA ',' CC expr
- { emit1($1 | $3); absob($4, 0);}
- |
- BRANCA ',' CC '*' expr
- { emit1($1 | $3); absob($5, 0x8000);}
- |
- BRANCAX ',' CC expr
- { if($3 == 3)
- serror("wrong condition");
- emit1($1 | $3); absob($4, 0);}
- |
- BRANCAX ',' CC '*' expr
- { if($3 == 3)
- serror("wrong condition");
- emit1($1 | $3); absob($5, 0x8000);}
- |
- BRANRA ',' REG expr
- { emit1($1 | $3); absob($4, 0);}
- |
- BRANRA ',' REG '*' expr
- { emit1($1 | $3); absob($5, 0x8000);}
- |
- ZBRR expr
- { emit1($1); rela($2, 0);}
- |
- ZBRR '*' expr
- { emit1($1); rela($3, 0x80);}
- |
- BXSA expr
- { emit1($1); absob($2, 0);}
- |
- BXSA '*' expr
- { emit1($1); absob($3, 0x8000);}
- ;
- param:
- indir_opt
- { p_indexed = 0;}
- |
- indir_opt ',' INDE
- { p_indexed = 0x6000;}
- |
- indir_opt ',' '+'
- { p_indexed = 0x2000;}
- |
- indir_opt ',' '-'
- { p_indexed = 0x4000;}
- ;
- indir_opt:
- expr
- { par_exp = $1; p_indirect = 0;}
- |
- '*' expr
- { par_exp = $2; p_indirect = 0x8000;}
- ;
|