Pristine Ack-5.5
[Ack-5.5.git] / mach / z8000 / as / mach1.c
1 /*
2  * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3  * See the copyright notice in the ACK home directory, in the file "Copyright".
4  */
5 #define RCSID1 "$Id: mach1.c,v 0.3 1994/06/24 13:56:14 ceriel Exp $"
6
7 /*
8 ** Zilog z8000 machine dependent C declarations
9 */
10 #define REG     1
11 #define IM      2
12 #define IR      4
13 #define DA      8
14 #define X       16
15 #define RA      32
16 #define BA      64
17 #define BX      128
18
19 #define TYPE_11a23      IR | DA | X
20 #define TYPE_11b23      REG | IR | DA | X
21 #define TYPE_12         REG | IR | DA | X
22 #define TYPE_1263       REG | IR | DA | X
23 #define TYPE_jp         IR | DA | X
24 #define TYPE_21a        REG | IR | DA | X
25 #define TYPE_21b        REG
26 #define TYPE_2151       REG | IM | IR | DA | X
27 #define TYPE_pop        REG | IR | DA | X
28 #define TYPE_push       REG | IM | IR | DA | X
29 #define TYPE_ldm        IR | DA | X
30 #define TYPE_ld         IR | DA | X
31
32 #define DST     0
33 #define SRC     1
34
35 #define DJNZ_   0xF000
36 #define JR_     0xE000
37 #define CALR_   0xD000
38
39 #define low3(z)         ( ((short) z) & 07 )
40 #define low4(z)         ( ((short) z) & 017 )
41 #define low5(z)         ( ((short) z) & 037 )
42 #define low7(z)         ( ((short) z) & 0177 )
43 #define low8(z)         ( ((short) z) & 0377 )
44 #define low11(z)        ( ((short) z) & 03777 )
45 #define low12(z)        ( ((short) z) & 07777 )
46 #define low15(z)        ( ((short) z) & 077777 )
47 #define fit3(z)         ( low3(z) == (z) )
48 #define fit4(z)         ( low4(z) == (z) )
49 #define fit5(z)         ( low5(z) == (z) )
50 #define fit7(z)         ( low7(z) == (z) )
51 #define fit8(z)         ( low8(z) == (z) )
52 #define fits8(z)        ( low7(z) == (z) || low7(-z-1) == (-z-1) )
53 #define fits12(z)       ( low11(z) == (z) || low11(-z-1) == (-z-1) )
54 #define fits16(z)       ( low15(z) == (z) || low15(-z-1) == (-z-1) )
55
56 #define bitset(x,b)     ( ((int) x) & ((int) 1<<b) ) /*bit b set in x?*/
57
58 typedef struct address  ATYPE;
59
60 struct address
61 {       short   seg;
62         short   off;
63 };
64
65 extern expr_t   displ;  /* never more than 16 bits */
66 extern short    index;  /* never more than 16 bits */
67 extern short    mode;
68 #ifndef extern
69 extern short    modetbl[ 5 ];
70 #else
71 short modetbl[5] = { 8, 0, 0, 4, 4 };
72               /* Modes for REG, IM, IR, DA, X.  e.g. modetbl[ 2log REG ]
73               ** is the mode if operand is of type REG.
74               ** No entries for RA, BA and BX are needed.
75               */
76 #endif
77 extern short    operand;
78 extern short    oprtype[ 2 ];
79 extern expr_t   addr_inf;       /* .val (address) up to 23 bits! */
80 extern expr_t   immed;
81
82 #define regerr()        serror("register error")