commit 83dd0b190d18e203ec666947ba8e1c1cd8ff2548
parent a99cc4dcc0ec08b65562948bec3aa57cbb70b9bd
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Mon, 18 Dec 2017 13:50:54 +0000
[as-z80] Add bit manipulation group
Diffstat:
5 files changed, 53 insertions(+), 0 deletions(-)
diff --git a/as/target/gen.awk b/as/target/gen.awk
@@ -75,6 +75,8 @@ function str2args(s, args, i, out, n)
out = out "AIMM32"
} else if (match(a, /^imm64/)) {
out = out "AIMM64"
+ } else if (match(a, /^imm3/)) {
+ out = out "AIMM3"
} else if (match(a, /^\(IY\+n\)/)) {
out = out "AINDEX_IY"
} else if (match(a, /^\(IX\+n\)/)) {
diff --git a/as/target/x80/ins.c b/as/target/x80/ins.c
@@ -338,3 +338,31 @@ im(Op *op, Node **args)
/* TODO */
abort();
}
+
+void
+r_bit(Op *op, Node **args)
+{
+ /* TODO */
+ abort();
+}
+
+void
+r_idx_bit(Op *op, Node **args)
+{
+ /* TODO */
+ abort();
+}
+
+void
+bit(Op *op, Node **args)
+{
+ /* TODO */
+ abort();
+}
+
+void
+idx_bit(Op *op, Node **args)
+{
+ /* TODO */
+ abort();
+}
diff --git a/as/target/x80/proc.h b/as/target/x80/proc.h
@@ -44,6 +44,8 @@ enum args {
AINDER_DE, /* (DE) */
AINDER_BC, /* (BC) */
AINDER_SP, /* (SP) */
+
+ AIMM3, /* 3 bit immediate */
};
extern int rclass(int reg);
diff --git a/as/target/x80/x80.dat b/as/target/x80/x80.dat
@@ -300,3 +300,23 @@ SRL (IX+n) 4 0xdd,0xcb,0x3e idx Z80,R800
SRL (IY+n) 4 0xfd,0xcb,0x3e idx Z80,R800
SRL (IX+n),r 4 0xdd,0xcb,0,0x38 idx_r8 Z80,R800
SRL (IY+n),r 4 0xfd,0xcb,0,0x38 idx_r8 Z80,R800
+
+# Bit manipulation group
+BIT imm3,r 2 0xcb,0x40 r_bit Z80,R800
+BIT imm3,(HL) 2 0xcb,0x46 bit Z80,R800
+BIT imm3,(IX+n) 4 0xdd,0xcb,0,0x46 idx_bit Z80,R800
+BIT imm3,(IY+n) 4 0xfd,0xcb,0,0x46 idx_bit Z80,R800
+
+SET imm3,r 2 0xcb,0xc0 r_bit Z80,R800
+SET imm3,(HL) 2 0xcb,0xc6 bit Z80,R800
+SET imm3,(IX+n) 4 0xdd,0xcb,0,0xc6 idx_bit Z80,R800
+SET imm3,(IY+n) 4 0xfd,0xcb,0,0xc6 idx_bit Z80,R800
+SET imm3,(IX+n),r 4 0xdd,0xcb,0,0xc0 r_idx_bit Z80,R800
+SET imm3,(IY+n),r 4 0xfd,0xcb,0,0xc0 r_idx_bit Z80,R800
+
+RES imm3,r 2 0xcb,0x80 r_bit Z80,R800
+RES imm3,(HL) 2 0xcb,0x86 bit Z80,R800
+RES imm3,(IX+n) 4 0xdd,0xcb,0,0x86 idx_bit Z80,R800
+RES imm3,(IY+n) 4 0xfd,0xcb,0,0x86 idx_bit Z80,R800
+RES imm3,(IX+n),r 4 0xdd,0xcb,0,0x80 r_idx_bit Z80,R800
+RES imm3,(IY+n),r 4 0xfd,0xcb,0,0x80 r_idx_bit Z80,R800
diff --git a/as/target/z80/proc.c b/as/target/z80/proc.c
@@ -133,6 +133,7 @@ match(Op *op, Node **args)
if (np->left->left->sym->argtype != arg)
return 0;
break;
+ case AIMM3:
case AIMM8:
case AIMM16:
case AIMM32: