ack/mach/i80/top/table
David Given 88fd7b3cdc Add a 'kill' pseudoinstruction to the 8080 assembler, which marks when the code
generator is finished with a register; use this to create some more effective
peephole optimiser rules.
2019-03-08 23:06:34 +01:00

63 lines
2.1 KiB
Plaintext

/* 8080 desciptor table for ACK target optimizer */
MAXOP 2;
%%;
X, Y, Z { TRUE };
%%;
mvi X, Y : mov X, Z -> mov X, Z ;
xchg : inx h : xchg -> inx d ;
xchg : inx d : xchg -> inx h ;
adi 0 -> xra a ;
ori 0 -> ora a ;
xri 0 -> ora a ;
adi 0 -> ora a ;
sui 0 -> ora a ;
cpi 0 -> ora a ;
call X : ret -> jmp X ;
push h : lxi h, X : pop d -> lxi d, X : xchg ;
push d : lxi d, X : pop h -> lxi h, X : xchg ;
push h : lhld X : pop d -> xchg : lhld X ;
X -1 -> X 255 ;
X -2 -> X 254 ;
X -3 -> X 253 ;
X -4 -> X 252 ;
mov a, X : adi -4 : mov X, a : kill a -> dcr X : dcr X : dcr X : dcr X;
mov a, X : adi -3 : mov X, a : kill a -> dcr X : dcr X : dcr X ;
mov a, X : adi -2 : mov X, a : kill a -> dcr X : dcr X ;
mov a, X : adi -1 : mov X, a : kill a -> dcr X ;
mov a, X : adi 0 : mov X, a : kill a -> ;
mov a, X : adi 1 : mov X, a : kill a -> inr X ;
mov a, X : adi 2 : mov X, a : kill a -> inr X : inr X ;
mov a, X : adi 3 : mov X, a : kill a -> inr X : inr X : inr X ;
mov a, X : adi 4 : mov X, a : kill a -> inr X : inr X : inr X : inr X;
mov a, X : sbi -4 : mov X, a : kill a -> inr X : inr X : inr X : inr X;
mov a, X : sbi -3 : mov X, a : kill a -> inr X : inr X : inr X ;
mov a, X : sbi -2 : mov X, a : kill a -> inr X : inr X ;
mov a, X : sbi -1 : mov X, a : kill a -> inr X ;
mov a, X : sbi 0 : mov X, a : kill a -> ;
mov a, X : sbi 1 : mov X, a : kill a -> dcr X ;
mov a, X : sbi 2 : mov X, a : kill a -> dcr X : dcr X ;
mov a, X : sbi 3 : mov X, a : kill a -> dcr X : dcr X : dcr X ;
mov a, X : sbi 4 : mov X, a : kill a -> dcr X : dcr X : dcr X : dcr X ;
mov a, X : ani 0 : mov X, a : kill a -> mvi X, 0 ;
mov a, X : ani 255 : mov X, a : kill a -> ;
mov a, X : ori 0 : mov X, a : kill a -> ;
mov a, X : ori 255 : mov X, a : kill a -> mvi X, 255 ;
mov a, X : xri 0 : mov X, a : kill a -> ;
%%;