shithub: scc

Download patch

ref: 1ac5e0b7e3590708e5e2adb967bb66160027b44c
parent: 3035e9988fe30cd88f64c070e7b3d80a4b2c7fd5
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Thu Dec 28 11:46:17 EST 2017

[as-z80] Add alu16() function

This function integrates several small functions and have a better
semantic meaning than them.

--- a/as/target/x80/ins.c
+++ b/as/target/x80/ins.c
@@ -280,26 +280,6 @@
 }
 
 void
-r16_xx(Op *op, Node **args)
-{
-	Node *par;
-	unsigned char buf[4];
-	int n = op->size;
-
-	par = args[0];
-	memcpy(buf, op->bytes, n);
-	buf[n-1] |= reg2int(par->sym->argtype) << 4;
-	emit(buf, n);
-}
-
-void
-xx_r16(Op *op, Node **args)
-{
-	args[0] = args[1];
-	r16_xx(op, args);
-}
-
-void
 r16_imm16(Op *op, Node **args)
 {
 	Node *par1, *par2;
@@ -334,7 +314,29 @@
 }
 
 void
-alu(Op *op, Node **args)
+alu16(Op *op, Node **args)
+{
+	Node *par;
+	int n = op->size;
+	unsigned val;
+	unsigned char buf[4];
+
+	par = (args[1]) ? args[1] : args[0];
+	val = reg2int(par->sym->argtype);
+	memcpy(buf, op->bytes, n);
+	buf[n-1] |= val << 4;
+	emit(buf, n);
+}
+
+void
+ld16(Op *op, Node **args)
+{
+	if (!args[1])
+		alu16(op, args);
+}
+
+void
+alu8(Op *op, Node **args)
 {
 	Node *par = args[1];
 	unsigned char buf[4];
--- a/as/target/x80/x80.dat
+++ b/as/target/x80/x80.dat
@@ -98,106 +98,106 @@
 LD	SP,IX	2	0xdd,0xf9	noargs	Z80,R800
 LD	SP,IY	2	0xfd,0xf9	noargs	Z80,R800
 
-PUSH	qq	1	0xc5	r16_xx	Z80,R800,GB80
-PUSH	IX	2	0xdd,0xe5	noargs	Z80,R800
-PUSH	IY	2	0xfd,0xe5	noargs	Z80,R800
-POP	qq	1	0xc1	r16_xx	Z80,R800,GB80
-POP	IX	2	0xdd,0xe1	noargs	Z80,R800
-POP	IY	2	0xfd,0xe1	noargs	Z80,R800
+PUSH	qq	1	0xc5	ld16	Z80,R800,GB80
+PUSH	IX	2	0xdd,0xe5	ld16	Z80,R800
+PUSH	IY	2	0xfd,0xe5	ld16	Z80,R800
+POP	qq	1	0xc1	ld16	Z80,R800,GB80
+POP	IX	2	0xdd,0xe1	ld16	Z80,R800
+POP	IY	2	0xfd,0xe1	ld16	Z80,R800
 
 # 8 bit ALU group
-ADD	A,r	1	0x80	alu	Z80,R800,GB80
-ADD	A,p	2	0xdd,0x80	alu	Z80,R800
-ADD	A,q	2	0xfd,0x80	alu	Z80,R800
-ADD	A,imm8	2	0xc6	alu	Z80,R800,GB80
-ADD	A,(HL)	1	0x86	alu	Z80,R800,GB80
-ADD	A,(IX+n)	3	0xdd,0x86	alu	Z80,R800
-ADD	A,(IY+n)	3	0xfd,0x86	alu	Z80,R800
+ADD	A,r	1	0x80	alu8	Z80,R800,GB80
+ADD	A,p	2	0xdd,0x80	alu8	Z80,R800
+ADD	A,q	2	0xfd,0x80	alu8	Z80,R800
+ADD	A,imm8	2	0xc6	alu8	Z80,R800,GB80
+ADD	A,(HL)	1	0x86	alu8	Z80,R800,GB80
+ADD	A,(IX+n)	3	0xdd,0x86	alu8	Z80,R800
+ADD	A,(IY+n)	3	0xfd,0x86	alu8	Z80,R800
 
-ADC	A,r	1	0x88	alu	Z80,R800,GB80
-ADC	A,p	2	0xdd,0x88	alu	Z80,R800
-ADC	A,q	2	0xfd,0x88	alu	Z80,R800
-ADC	A,imm8	2	0xce	alu	Z80,R800,GB80
-ADC	A,(HL)	1	0x8e	alu	Z80,R800,GB80
-ADC	A,(IX+n)	3	0xdd,0x8e	alu	Z80,R800
-ADC	A,(IY+n)	3	0xfd,0x8e	alu	Z80,R800
+ADC	A,r	1	0x88	alu8	Z80,R800,GB80
+ADC	A,p	2	0xdd,0x88	alu8	Z80,R800
+ADC	A,q	2	0xfd,0x88	alu8	Z80,R800
+ADC	A,imm8	2	0xce	alu8	Z80,R800,GB80
+ADC	A,(HL)	1	0x8e	alu8	Z80,R800,GB80
+ADC	A,(IX+n)	3	0xdd,0x8e	alu8	Z80,R800
+ADC	A,(IY+n)	3	0xfd,0x8e	alu8	Z80,R800
 
-SUB	A,r	1	0x90	alu	Z80,R800,GB80
-SUB	A,p	2	0xdd,0x90	alu	Z80,R800
-SUB	A,q	2	0xfd,0x90	alu	Z80,R800
-SUB	A,imm8	2	0xd6	alu	Z80,R800,GB80
-SUB	A,(HL)	1	0x96	alu	Z80,R800,GB80
-SUB	A,(IX+n)	3	0xdd,0x96	alu	Z80,R800
-SUB	A,(IY+n)	3	0xfd,0x96	alu	Z80,R800
+SUB	A,r	1	0x90	alu8	Z80,R800,GB80
+SUB	A,p	2	0xdd,0x90	alu8	Z80,R800
+SUB	A,q	2	0xfd,0x90	alu8	Z80,R800
+SUB	A,imm8	2	0xd6	alu8	Z80,R800,GB80
+SUB	A,(HL)	1	0x96	alu8	Z80,R800,GB80
+SUB	A,(IX+n)	3	0xdd,0x96	alu8	Z80,R800
+SUB	A,(IY+n)	3	0xfd,0x96	alu8	Z80,R800
 
-SBC	A,r	1	0x98	alu	Z80,R800,GB80
-SBC	A,p	2	0xdd,0x98	alu	Z80,R800
-SBC	A,q	2	0xfd,0x98	alu	Z80,R800
-SBC	A,imm8	2	0xde	alu	Z80,R800,GB80
-SBC	A,(HL)	1	0x9e	alu	Z80,R800,GB80
-SBC	A,(IX+n)	3	0xdd,0x9e	alu	Z80,R800
-SBC	A,(IY+n)	3	0xfd,0x9e	alu	Z80,R800
+SBC	A,r	1	0x98	alu8	Z80,R800,GB80
+SBC	A,p	2	0xdd,0x98	alu8	Z80,R800
+SBC	A,q	2	0xfd,0x98	alu8	Z80,R800
+SBC	A,imm8	2	0xde	alu8	Z80,R800,GB80
+SBC	A,(HL)	1	0x9e	alu8	Z80,R800,GB80
+SBC	A,(IX+n)	3	0xdd,0x9e	alu8	Z80,R800
+SBC	A,(IY+n)	3	0xfd,0x9e	alu8	Z80,R800
 
-AND	A,r	1	0xa0	alu	Z80,R800,GB80
-AND	A,p	2	0xdd,0xa0	alu	Z80,R800
-AND	A,q	2	0xfd,0xa0	alu	Z80,R800
-AND	A,imm8	2	0xe6	alu	Z80,R800,GB80
-AND	A,(HL)	1	0xa6	alu	Z80,R800,GB80
-AND	A,(IX+n)	3	0xdd,0xa6	alu	Z80,R800
-AND	A,(IY+n)	3	0xfd,0xa6	alu	Z80,R800
+AND	A,r	1	0xa0	alu8	Z80,R800,GB80
+AND	A,p	2	0xdd,0xa0	alu8	Z80,R800
+AND	A,q	2	0xfd,0xa0	alu8	Z80,R800
+AND	A,imm8	2	0xe6	alu8	Z80,R800,GB80
+AND	A,(HL)	1	0xa6	alu8	Z80,R800,GB80
+AND	A,(IX+n)	3	0xdd,0xa6	alu8	Z80,R800
+AND	A,(IY+n)	3	0xfd,0xa6	alu8	Z80,R800
 
-OR	A,r	1	0xb0	alu	Z80,R800,GB80
-OR	A,p	2	0xdd,0xb0	alu	Z80,R800
-OR	A,q	2	0xfd,0xb0	alu	Z80,R800
-OR	A,imm8	2	0xf6	alu	Z80,R800,GB80
-OR	A,(HL)	1	0xb6	alu	Z80,R800,GB80
-OR	A,(IX+n)	3	0xdd,0xb6	alu	Z80,R800
-OR	A,(IY+n)	3	0xfd,0xb6	alu	Z80,R800
+OR	A,r	1	0xb0	alu8	Z80,R800,GB80
+OR	A,p	2	0xdd,0xb0	alu8	Z80,R800
+OR	A,q	2	0xfd,0xb0	alu8	Z80,R800
+OR	A,imm8	2	0xf6	alu8	Z80,R800,GB80
+OR	A,(HL)	1	0xb6	alu8	Z80,R800,GB80
+OR	A,(IX+n)	3	0xdd,0xb6	alu8	Z80,R800
+OR	A,(IY+n)	3	0xfd,0xb6	alu8	Z80,R800
 
-XOR	A,r	1	0xa8	alu	Z80,R800,GB80
-XOR	A,p	2	0xdd,0xa8	alu	Z80,R800
-XOR	A,q	2	0xfd,0xa8	alu	Z80,R800
-XOR	A,imm8	2	0xee	alu	Z80,R800,GB80
-XOR	A,(HL)	1	0xae	alu	Z80,R800,GB80
-XOR	A,(IX+n)	3	0xdd,0xae	alu	Z80,R800
-XOR	A,(IY+n)	3	0xfd,0xae	alu	Z80,R800
+XOR	A,r	1	0xa8	alu8	Z80,R800,GB80
+XOR	A,p	2	0xdd,0xa8	alu8	Z80,R800
+XOR	A,q	2	0xfd,0xa8	alu8	Z80,R800
+XOR	A,imm8	2	0xee	alu8	Z80,R800,GB80
+XOR	A,(HL)	1	0xae	alu8	Z80,R800,GB80
+XOR	A,(IX+n)	3	0xdd,0xae	alu8	Z80,R800
+XOR	A,(IY+n)	3	0xfd,0xae	alu8	Z80,R800
 
-CP	A,r	1	0xb8	alu	Z80,R800,GB80
-CP	A,p	2	0xdd,0xb8	alu	Z80,R800
-CP	A,q	2	0xfd,0xb8	alu	Z80,R800
-CP	A,imm8	2	0xfe	alu	Z80,R800,GB80
-CP	A,(HL)	1	0xbe	alu	Z80,R800,GB80
-CP	A,(IX+n)	3	0xdd,0xbe	alu	Z80,R800
-CP	A,(IY+n)	3	0xfd,0xbe	alu	Z80,R800
+CP	A,r	1	0xb8	alu8	Z80,R800,GB80
+CP	A,p	2	0xdd,0xb8	alu8	Z80,R800
+CP	A,q	2	0xfd,0xb8	alu8	Z80,R800
+CP	A,imm8	2	0xfe	alu8	Z80,R800,GB80
+CP	A,(HL)	1	0xbe	alu8	Z80,R800,GB80
+CP	A,(IX+n)	3	0xdd,0xbe	alu8	Z80,R800
+CP	A,(IY+n)	3	0xfd,0xbe	alu8	Z80,R800
 
-INC	r	1	0x04	alu	Z80,R800,GB80
-INC	p	2	0xdd,0x04	alu	Z80,R800
-INC	q	2	0xfd,0x04	alu	Z80,R800
-INC	(HL)	1	0x34	alu	Z80,R800,GB80
-INC	(IX+n)	3	0xdd,0x34	alu	Z80,R800
-INC	(IY+n)	3	0xfd,0x34	alu	Z80,R800
+INC	r	1	0x04	alu8	Z80,R800,GB80
+INC	p	2	0xdd,0x04	alu8	Z80,R800
+INC	q	2	0xfd,0x04	alu8	Z80,R800
+INC	(HL)	1	0x34	alu8	Z80,R800,GB80
+INC	(IX+n)	3	0xdd,0x34	alu8	Z80,R800
+INC	(IY+n)	3	0xfd,0x34	alu8	Z80,R800
 
-DEC	r	1	0x05	alu	Z80,R800,GB80
-DEC	p	2	0xdd,0x05	alu	Z80,R800
-DEC	q	2	0xfd,0x05	alu	Z80,R800
-DEC	(HL)	1	0x35	alu	Z80,R800,GB80
-DEC	(IX+n)	3	0xdd,0x35	alu	Z80,R800
-DEC	(IY+n)	3	0xfd,0x35	alu	Z80,R800
+DEC	r	1	0x05	alu8	Z80,R800,GB80
+DEC	p	2	0xdd,0x05	alu8	Z80,R800
+DEC	q	2	0xfd,0x05	alu8	Z80,R800
+DEC	(HL)	1	0x35	alu8	Z80,R800,GB80
+DEC	(IX+n)	3	0xdd,0x35	alu8	Z80,R800
+DEC	(IY+n)	3	0xfd,0x35	alu8	Z80,R800
 
 # 16 bit ALU group
-ADD	HL,dd	1	0x09	xx_r16	Z80,R800,GB80
-ADC	HL,dd	2	0xed,0x4a	xx_r16	Z80,R800
-SBC	HL,dd	2	0xed,0x42	xx_r16	Z80,R800
-ADD	IX,pp	2	0xdd,0x09	xx_r16	Z80,R800
-ADD	IY,rr	2	0xfd,0x09	xx_r16	Z80,R800
+ADD	HL,dd	1	0x09	alu16	Z80,R800,GB80
+ADC	HL,dd	2	0xed,0x4a	alu16	Z80,R800
+SBC	HL,dd	2	0xed,0x42	alu16	Z80,R800
+ADD	IX,pp	2	0xdd,0x09	alu16	Z80,R800
+ADD	IY,rr	2	0xfd,0x09	alu16	Z80,R800
 
-INC	dd	1	0x03	r16_xx	Z80,R800,GB80
-INC	IX	2	0xdd,0x23	noargs	Z80,R800
-INC	IY	2	0xfd,0x23	noargs	Z80,R800
+INC	dd	1	0x03	alu16	Z80,R800,GB80
+INC	IX	2	0xdd,0x23	alu16	Z80,R800
+INC	IY	2	0xfd,0x23	alu16	Z80,R800
 
-DEC	dd	1	0x0b	r16_xx	Z80,R800,GB80
-DEC	IX	2	0xdd,0x2b	noargs	Z80,R800
-DEC	IY	2	0xfd,0x2b	noargs	Z80,R800
+DEC	dd	1	0x0b	alu16	Z80,R800,GB80
+DEC	IX	2	0xdd,0x2b	alu16	Z80,R800
+DEC	IY	2	0xfd,0x2b	alu16	Z80,R800
 
 # General purpose arithmetic and CPU control group
 DAA	none	1	0x27	noargs	Z80,R800,GB80