4
0
mirror of git://sourceware.org/git/newlib-cygwin.git synced 2025-02-11 19:49:15 +08:00

2001-07-07 Ben Elliston <bje@redhat.com>

* m88k.h: Clean up and reformat. Remove unused code.
This commit is contained in:
Ben Elliston 2001-07-06 22:14:07 +00:00
parent a761b473ad
commit 6e06cb0d32
2 changed files with 297 additions and 279 deletions

View File

@ -1,3 +1,7 @@
2001-07-07 Ben Elliston <bje@redhat.com>
* m88k.h: Clean up and reformat. Remove unused code.
2001-06-14 Geoffrey Keating <geoffk@redhat.com> 2001-06-14 Geoffrey Keating <geoffk@redhat.com>
* cgen.h (cgen_keyword): Add nonalpha_chars field. * cgen.h (cgen_keyword): Add nonalpha_chars field.

View File

@ -1,5 +1,5 @@
/* Table of opcodes for the motorola 88k family. /* Table of opcodes for the Motorola M88k family.
Copyright 1989, 1990, 1991, 1993 Free Software Foundation, Inc. Copyright 1989, 1990, 1991, 1993, 2001 Free Software Foundation, Inc.
This file is part of GDB and GAS. This file is part of GDB and GAS.
@ -34,22 +34,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
* pointer to the next instruction in the linked list. These pointers * pointer to the next instruction in the linked list. These pointers
* are initialized by init_disasm(). * are initialized by init_disasm().
* *
* Structure Format
*
* struct INSTAB {
* UPINT opcode;
* char *mnemonic;
* struct OPSPEC op1,op2,op3;
* struct SIM_FLAGS flgs;
* struct INSTAB *next;
* }
*
* struct OPSPEC {
* UPINT offset:5;
* UPINT width:6;
* UPINT type:5;
* }
*
* Revision History * Revision History
* *
* Revision 1.0 11/08/85 Creation date * Revision 1.0 11/08/85 Creation date
@ -61,54 +45,52 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include <stdio.h> #include <stdio.h>
/* Define the number of bits in the primary opcode field of the instruction,
the destination field, the source 1 and source 2 fields. */
/* /* Size of opcode field. */
* This file contains the structures and constants needed to build the M88000 #define OP 8
* simulator. It is the main include file, containing all the
* structures, macros and definitions except for the floating point
* instruction set.
*/
/* /* Size of destination. */
* The following flag informs the Simulator as to what type of byte ordering #define DEST 6
* will be used. For instance, a BOFLAG = 1 indicates a DEC VAX and IBM type
* of ordering shall be used.
*/
/* # define BOFLAG 1 */ /* BYTE ORDERING FLAG */ /* Size of source1. */
#define SOURCE1 6
/* define the number of bits in the primary opcode field of the instruction, /* Size of source2. */
* the destination field, the source 1 and source 2 fields. #define SOURCE2 6
*/
# define OP 8 /* size of opcode field */
# define DEST 6 /* size of destination */
# define SOURCE1 6 /* size of source1 */
# define SOURCE2 6 /* size of source2 */
# define REGs 32 /* number of registers */ /* Number of registers. */
#define REGs 32
/* Type definitions. */
typedef unsigned int UINT;
#define WORD long #define WORD long
#define FLAG unsigned #define FLAG unsigned
#define STATE short #define STATE short
# define TRUE 1
# define FALSE 0
# define READ 0
# define WRITE 1
/* The next four equates define the priorities that the various classes /* The next four equates define the priorities that the various classes
* of instructions have regarding writing results back into registers and * of instructions have regarding writing results back into registers and
* signalling exceptions. * signalling exceptions. */
*/
/* PMEM is also defined in <sys/param.h> on Delta 88's. Sigh! */ /* PMEM is also defined in <sys/param.h> on Delta 88's. Sigh! */
#undef PMEM #undef PMEM
# define PINT 0 /* Integer Priority */ /* Integer priority. */
# define PFLT 1 /* Floating Point Priority */ #define PINT 0
# define PMEM 2 /* Memory Priority */
# define NA 3 /* Not Applicable, instruction doesnt write to regs */ /* Floating point priority. */
# define HIPRI 3 /* highest of these priorities */ #define PFLT 1
/* Memory priority. */
#define PMEM 2
/* Not applicable, instruction doesn't write to regs. */
#define NA 3
/* Highest of these priorities. */
#define HIPRI 3
/* The instruction registers are an artificial mechanism to speed up /* The instruction registers are an artificial mechanism to speed up
* simulator execution. In the real processor, an instruction register * simulator execution. In the real processor, an instruction register
@ -122,91 +104,131 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
* Yes this wastes memory, but it executes much quicker. * Yes this wastes memory, but it executes much quicker.
*/ */
struct IR_FIELDS { struct IR_FIELDS
{
unsigned op:OP, unsigned op:OP,
dest: DEST, dest: DEST,
src1: SOURCE1, src1: SOURCE1,
src2: SOURCE2; src2: SOURCE2;
int ltncy, int ltncy,
extime, extime,
wb_pri; /* writeback priority */ /* Writeback priority. */
unsigned imm_flags:2,/* immediate size */ wb_pri;
rs1_used:1, /* register source 1 used */ /* Immediate size. */
rs2_used:1, /* register source 2 used */ unsigned imm_flags:2,
rsd_used:1, /* register source/dest. used */ /* Register source 1 used. */
c_flag:1, /* complement */ rs1_used:1,
u_flag:1, /* upper half word */ /* Register source 2 used. */
n_flag:1, /* execute next */ rs2_used:1,
wb_flag:1, /* uses writeback slot */ /* Register source/dest. used. */
dest_64:1, /* dest size */ rsd_used:1,
s1_64:1, /* source 1 size */ /* Complement. */
s2_64:1, /* source 2 size */ c_flag:1,
scale_flag:1, /* scaled register */ /* Upper half word. */
u_flag:1,
/* Execute next. */
n_flag:1,
/* Uses writeback slot. */
wb_flag:1,
/* Dest size. */
dest_64:1,
/* Source 1 size. */
s1_64:1,
/* Source 2 size. */
s2_64:1,
scale_flag:1,
/* Scaled register. */
brk_flg:1; brk_flg:1;
}; };
struct mem_segs { struct mem_segs
struct mem_wrd *seg; /* pointer (returned by calloc) to segment */ {
unsigned long baseaddr; /* base load address from file headers */ /* Pointer (returned by calloc) to segment. */
unsigned long endaddr; /* Ending address of segment */ struct mem_wrd *seg;
int flags; /* segment control flags (none defined 12/5/86) */
/* Base load address from file headers. */
unsigned long baseaddr;
/* Ending address of segment. */
unsigned long endaddr;
/* Segment control flags (none defined). */
int flags;
}; };
#define MAXSEGS (10) /* max number of segment allowed */ #define MAXSEGS (10) /* max number of segment allowed */
#define MEMSEGSIZE (sizeof(struct mem_segs))/* size of mem_segs structure */ #define MEMSEGSIZE (sizeof(struct mem_segs))/* size of mem_segs structure */
#if 0
#define BRK_RD (0x01) /* break on memory read */ #define BRK_RD (0x01) /* break on memory read */
#define BRK_WR (0x02) /* break on memory write */ #define BRK_WR (0x02) /* break on memory write */
#define BRK_EXEC (0x04) /* break on execution */ #define BRK_EXEC (0x04) /* break on execution */
#define BRK_CNT (0x08) /* break on terminal count */ #define BRK_CNT (0x08) /* break on terminal count */
#endif
struct mem_wrd
struct mem_wrd { {
struct IR_FIELDS opcode; /* simulator instruction break down */ /* Simulator instruction break down. */
struct IR_FIELDS opcode;
union { union {
unsigned long l; /* memory element break down */ /* Memory element break down. */
unsigned long l;
unsigned short s[2]; unsigned short s[2];
unsigned char c[4]; unsigned char c[4];
} mem; } mem;
}; };
#define MEMWRDSIZE (sizeof(struct mem_wrd)) /* size of each 32 bit memory model */ /* Size of each 32 bit memory model. */
#define MEMWRDSIZE (sizeof (struct mem_wrd))
/* External declarations */
extern struct mem_segs memory[]; extern struct mem_segs memory[];
extern struct PROCESSOR m78000; extern struct PROCESSOR m78000;
struct PROCESSOR { struct PROCESSOR
{
unsigned WORD unsigned WORD
ip, /* execute instruction pointer */ /* Execute instruction pointer. */
vbr, /* vector base register */ ip,
psr; /* processor status register */ /* Vector base register. */
vbr,
/* Processor status register. */
psr;
WORD S1bus, /* source 1 */ /* Source 1. */
S2bus, /* source 2 */ WORD S1bus,
Dbus, /* destination */ /* Source 2. */
DAbus, /* data address bus */ S2bus,
/* Destination. */
Dbus,
/* Data address bus. */
DAbus,
ALU, ALU,
Regs[REGs], /* data registers */ /* Data registers. */
time_left[REGs], /* max clocks before reg is available */ Regs[REGs],
wb_pri[REGs], /* writeback priority of reg */ /* Max clocks before reg is available. */
SFU0_regs[REGs], /* integer unit control regs */ time_left[REGs],
SFU1_regs[REGs], /* floating point control regs */ /* Writeback priority of reg. */
wb_pri[REGs],
/* Integer unit control regs. */
SFU0_regs[REGs],
/* Floating point control regs. */
SFU1_regs[REGs],
Scoreboard[REGs], Scoreboard[REGs],
Vbr; Vbr;
unsigned WORD scoreboard, unsigned WORD scoreboard,
Psw, Psw,
Tpsw; Tpsw;
FLAG jump_pending:1; /* waiting for a jump instr. */ /* Waiting for a jump instruction. */
FLAG jump_pending:1;
}; };
# define i26bit 1 /* size of immediate field */ /* Size of immediate field. */
#define i26bit 1
#define i16bit 2 #define i16bit 2
#define i10bit 3 #define i10bit 3
/* Definitions for fields in psr */ /* Definitions for fields in psr. */
#define mode 31 #define mode 31
#define rbo 30 #define rbo 30
@ -225,17 +247,7 @@ struct PROCESSOR {
#define trm 1 #define trm 1
#define ovfm 0 #define ovfm 0
#define MODEMASK (1<<(mode-1)) /* The 1 clock operations. */
# define SILENT 0 /* simulate without output to crt */
# define VERBOSE 1 /* simulate in verbose mode */
# define PR_INSTR 2 /* only print instructions */
# define RESET 16 /* reset phase */
# define PHASE1 0 /* data path phases */
# define PHASE2 1
/* the 1 clock operations */
#define ADDU 1 #define ADDU 1
#define ADDC 2 #define ADDC 2
@ -252,7 +264,7 @@ struct PROCESSOR {
#define XOR ADD+7 #define XOR ADD+7
#define CMP ADD+8 #define CMP ADD+8
/* the LOADS */ /* Loads. */
#define LDAB CMP+1 #define LDAB CMP+1
#define LDAH CMP+2 #define LDAH CMP+2
@ -266,19 +278,20 @@ struct PROCESSOR {
#define LDBU LDAD+5 #define LDBU LDAD+5
#define LDHU LDAD+6 #define LDHU LDAD+6
/* the STORES */ /* Stores. */
#define STB LDHU+1 #define STB LDHU+1
#define STH LDHU+2 #define STH LDHU+2
#define ST LDHU+3 #define ST LDHU+3
#define STD LDHU+4 #define STD LDHU+4
/* the exchange */ /* Exchange. */
#define XMEMBU LDHU+5 #define XMEMBU LDHU+5
#define XMEM LDHU+6 #define XMEM LDHU+6
/* the branches */ /* Branches. */
#define JSR STD+1 #define JSR STD+1
#define BSR STD+2 #define BSR STD+2
#define BR STD+3 #define BR STD+3
@ -288,14 +301,16 @@ struct PROCESSOR {
#define RTN STD+7 #define RTN STD+7
#define BCND STD+8 #define BCND STD+8
/* the TRAPS */ /* Traps. */
#define TB1 BCND+1 #define TB1 BCND+1
#define TB0 BCND+2 #define TB0 BCND+2
#define TCND BCND+3 #define TCND BCND+3
#define RTE BCND+4 #define RTE BCND+4
#define TBND BCND+5 #define TBND BCND+5
/* the MISC instructions */ /* Misc. */
#define MUL TBND + 1 #define MUL TBND + 1
#define DIV MUL +2 #define DIV MUL +2
#define DIVU MUL +3 #define DIVU MUL +3
@ -309,7 +324,7 @@ struct PROCESSOR {
#define MAK MUL +11 #define MAK MUL +11
#define ROT MUL +12 #define ROT MUL +12
/* control register manipulations */ /* Control register manipulations. */
#define LDCR ROT +1 #define LDCR ROT +1
#define STCR ROT +2 #define STCR ROT +2
@ -319,10 +334,9 @@ struct PROCESSOR {
#define FSTCR ROT +5 #define FSTCR ROT +5
#define FXCR ROT +6 #define FXCR ROT +6
#define NOP XCR +1 #define NOP XCR +1
/* floating point instructions */ /* Floating point instructions. */
#define FADD NOP +1 #define FADD NOP +1
#define FSUB NOP +2 #define FSUB NOP +2
@ -339,14 +353,18 @@ struct PROCESSOR {
#define FSTC NOP +13 #define FSTC NOP +13
#define FXC NOP +14 #define FXC NOP +14
# define UEXT(src,off,wid) ((((unsigned int)(src))>>(off)) & ((1<<(wid)) - 1)) #define UEXT(src,off,wid) \
# define SEXT(src,off,wid) (((((int)(src))<<(32-((off)+(wid)))) >>(32-(wid))) ) ((((unsigned int)(src)) >> (off)) & ((1 << (wid)) - 1))
#define SEXT(src,off,wid) \
(((((int)(src))<<(32 - ((off) + (wid)))) >>(32 - (wid))) )
#define MAKE(src,off,wid) \ #define MAKE(src,off,wid) \
((((unsigned int)(src)) & ((1 << (wid)) - 1)) << (off)) ((((unsigned int)(src)) & ((1 << (wid)) - 1)) << (off))
#define opword(n) (unsigned long) (memaddr->mem.l) #define opword(n) (unsigned long) (memaddr->mem.l)
/* Constants and Masks */ /* Constants and masks. */
#define SFU0 0x80000000 #define SFU0 0x80000000
#define SFU1 0x84000000 #define SFU1 0x84000000
@ -360,64 +378,60 @@ struct PROCESSOR {
#define CTRL 0x0000f000 #define CTRL 0x0000f000
#define CTRLMASK 0xfc00f800 #define CTRLMASK 0xfc00f800
/* Operands types */ /* Operands types. */
enum operand_type { enum operand_type
{
HEX = 1, HEX = 1,
REG = 2, REG = 2,
CONT = 3, CONT = 3,
IND = 3, IND = 3,
BF = 4, BF = 4,
REGSC = 5 /* scaled register */, /* Scaled register. */
CRREG = 6 /* control register */, REGSC = 5,
FCRREG = 7 /* floating point control register */, /* Control register. */
CRREG = 6,
/* Floating point control register. */
FCRREG = 7,
PCREL = 8, PCREL = 8,
CONDMASK = 9, CONDMASK = 9,
XREG = 10, /* extended register */ /* Extended register. */
DEC = 11, /* decimal */ XREG = 10,
/* Decimal. */
DEC = 11
}; };
/* Hashing Specification */ /* Hashing specification. */
#define HASHVAL 79 #define HASHVAL 79
/* Type definitions */ /* Structure templates. */
typedef unsigned int UINT; typedef struct
{
/* Structure templates */
#if never
typedef struct {
unsigned int offset:5;
unsigned int width:6;
unsigned int type:5;
} OPSPEC;
#endif
typedef struct {
unsigned int offset; unsigned int offset;
unsigned int width; unsigned int width;
enum operand_type type; enum operand_type type;
} OPSPEC; } OPSPEC;
struct SIM_FLAGS { struct SIM_FLAGS
int ltncy, /* latency (max number of clocks needed to execute) */ {
extime, /* execution time (min number of clocks needed to execute) */ int ltncy, /* latency (max number of clocks needed to execute). */
wb_pri; /* writeback slot priority */ extime, /* execution time (min number of clocks needed to execute). */
unsigned op:OP, /* simulator version of opcode */ wb_pri; /* writeback slot priority. */
imm_flags:2, /* 10,16 or 26 bit immediate flags */ unsigned op:OP, /* simulator version of opcode. */
rs1_used:1, /* register source 1 used */ imm_flags:2, /* 10,16 or 26 bit immediate flags. */
rs2_used:1, /* register source 2 used */ rs1_used:1, /* register source 1 used. */
rsd_used:1, /* register source/dest used */ rs2_used:1, /* register source 2 used. */
c_flag:1, /* complement */ rsd_used:1, /* register source/dest used. */
u_flag:1, /* upper half word */ c_flag:1, /* complement. */
n_flag:1, /* execute next */ u_flag:1, /* upper half word. */
wb_flag:1, /* uses writeback slot */ n_flag:1, /* execute next. */
dest_64:1, /* double precision dest */ wb_flag:1, /* uses writeback slot. */
s1_64:1, /* double precision source 1 */ dest_64:1, /* double precision dest. */
s2_64:1, /* double precision source 2 */ s1_64:1, /* double precision source 1. */
scale_flag:1; /* register is scaled */ s2_64:1, /* double precision source 2. */
scale_flag:1; /* register is scaled. */
}; };
typedef struct INSTRUCTAB { typedef struct INSTRUCTAB {