ack/mach/i80/as/mach4.c
1985-06-10 16:05:04 +00:00

98 lines
1.6 KiB
C

#define RCSID4 "$Header$"
/*
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
*
* This product is part of the Amsterdam Compiler Kit.
*
* Permission to use, sell, duplicate or disclose this software must be
* obtained in writing. Requests for such permissions may be sent to
*
* Dr. Andrew S. Tanenbaum
* Wiskundig Seminarium
* Vrije Universiteit
* Postbox 7161
* 1007 MC Amsterdam
* The Netherlands
*
*/
/*
* Intel 8080 parsing rules
*/
operation
: NOOPOP
{ emit1($1);}
|
D8OP expr
{ emit1($1);
#ifdef RELOCATION
newrelo($2.typ, RELO1);
#endif
emit1($2.val);
}
|
D16OP expr
{ emit1($1);
#ifdef RELOCATION
newrelo($2.typ, RELO2);
#endif
emit2($2.val);
}
|
R16OP r16
{ emit1($1 | ($2 << 3));}
|
MOV r8 ',' r8
{ if ($2 == M && $4 == M)
serror("register error");
emit1($1 | ($2 << 3) | $4);
}
|
MVI r8 ',' expr
{ emit1($1 | ($2 << 3));
#ifdef RELOCATION
newrelo($4.typ, RELO1);
#endif
emit1($4.val);
}
|
LXI r16 ',' expr
{ emit1($1 | ($2 << 3));
#ifdef RELOCATION
newrelo($4.typ, RELO2);
#endif
emit2($4.val);
}
|
SRCOP r8
{ emit1($1 | $2);}
|
DSTOP r8
{ emit1($1 | ($2 << 3));}
|
RST absexp
{ fit(fit3($2));
emit1($1 | (low3($2) << 3));
}
|
STLDAX r16
{
if ($2 != B && $2 != D)
serror("register error");
emit1($1 | (($2 & 02) << 3));
}
;
r16 : REG
{ if ($1 & ~06)
serror("register error");
$$ = $1 & 06;
}
;
r8 : REG
{ if (($1 & ~07) != 0)
serror("register error");
$$ = $1 & 07;
}
;