txvu.h renamed to dvp.h

This commit is contained in:
Doug Evans 1998-01-28 17:54:38 +00:00
parent 1adee2cc07
commit fa5dd27d09
3 changed files with 3 additions and 358 deletions

View File

@ -31,7 +31,7 @@ else
lose_these_too="${tic80_files} ${lose_these_too}"
fi
sky_files="txvu.h"
sky_files="dvp.h"
if ( echo $* | grep keep\-sky > /dev/null ) ; then
keep_these_too="${sky_files} ${keep_these_too}"

View File

@ -1,15 +1,7 @@
start-sanitize-sky
Tue Jan 27 14:01:16 1998 Doug Evans <devans@seba.cygnus.com>
Wed Jan 28 09:52:31 1998 Doug Evans <devans@canuck.cygnus.com>
* txvu.h (txvu_{opcode,operand}): New typedefs.
(txvu_operand): Add opcode,operand,mods arguments consistently to
each of the parse/insert/extract/print routines.
Mon Jan 26 16:19:01 1998 Doug Evans <devans@seba.cygnus.com>
* txvu.h (txvu_opcode): insert/extract/print take pointer to
instruction rather than instruction itself. Result of insert is
`void'. Add decls for dma, pke, gpuif support.
* dvp.h: New file.
end-sanitize-sky
Thu Jan 22 17:54:56 1998 Nick Clifton <nickc@cygnus.com>
@ -33,12 +25,6 @@ Mon Jan 12 11:37:36 1998 Doug Evans <devans@seba.cygnus.com>
(CGEN_{SYNTAX,FORMAT}): New types.
(cgen_insn): Format and syntax separated from each other.
start-sanitize-sky
Mon Jan 5 13:33:21 1998 Doug Evans <devans@seba.cygnus.com>
* txvu.h: New file
end-sanitize-sky
start-sanitize-d30v
Tue Dec 16 15:15:52 1997 Michael Meissner <meissner@cygnus.com>

View File

@ -1,341 +0,0 @@
/* Opcode table for the TXVU.
Copyright 1998 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler, GDB, the GNU debugger, and
the GNU Binutils.
GAS/GDB is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GAS/GDB is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GAS or GDB; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Type to denote a TXVU instruction (at least a 32 bit unsigned int). */
typedef unsigned int TXVU_INSN;
/* Maximum number of operands and syntax chars an instruction can have. */
#define TXVU_MAX_OPERANDS 16
typedef struct txvu_opcode {
char *mnemonic;
/* The value stored is 128 + operand number.
This allows ASCII chars to go here as well. */
unsigned char syntax[TXVU_MAX_OPERANDS];
TXVU_INSN mask, value; /* recognize insn if (op&mask)==value */
int flags; /* various flag bits */
/* Values for `flags'. */
/* This insn is a conditional branch. */
#define TXVU_OPCODE_COND_BRANCH 1
/* These values are used to optimize assembly and disassembly. Each insn is
on a list of related insns (same first letter for assembly, same insn code
for disassembly). */
/* FIXME: May wish to move this to separate table. */
struct txvu_opcode *next_asm; /* Next instruction to try during assembly. */
struct txvu_opcode *next_dis; /* Next instruction to try during disassembly. */
/* Macros to create the hash values for the lists. */
#define TXVU_HASH_UPPER_OPCODE(string) \
(tolower ((string)[0]) >= 'a' && tolower ((string)[0]) <= 'z' \
? tolower ((string)[0]) - 'a' : 26)
#define TXVU_HASH_LOWER_OPCODE(string) \
(tolower ((string)[0]) >= 'a' && tolower ((string)[0]) <= 'z' \
? tolower ((string)[0]) - 'a' : 26)
/* ??? The icode hashing is very simplistic.
upper: bits 0x3c, can't use lower two bits because of bc field
lower: upper 6 bits */
#define TXVU_ICODE_HASH_SIZE 6 /* bits */
#define TXVU_HASH_UPPER_ICODE(insn) \
((insn) & 0x3c)
#define TXVU_HASH_LOWER_ICODE(insn) \
((((insn) & 0xfc) >> 26) & 0x3f)
/* Macros to access `next_asm', `next_dis' so users needn't care about the
underlying mechanism. */
#define TXVU_OPCODE_NEXT_ASM(op) ((op)->next_asm)
#define TXVU_OPCODE_NEXT_DIS(op) ((op)->next_dis)
} txvu_opcode;
/* The operand table. */
typedef struct txvu_operand {
/* The number of bits in the operand (may be unused for a modifier). */
unsigned char bits;
/* How far the operand is left shifted in the instruction, or
the modifier's flag bit (may be unused for a modifier). */
unsigned char shift;
/* Various flag bits. */
int flags;
/* Values for `flags'. */
/* This operand is a suffix to the opcode. */
#define TXVU_OPERAND_SUFFIX 1
/* This operand is a relative branch displacement. The disassembler
prints these symbolically if possible. */
#define TXVU_OPERAND_RELATIVE_BRANCH 2
/* This operand is an absolute branch address. The disassembler
prints these symbolically if possible. */
#define TXVU_OPERAND_ABSOLUTE_BRANCH 4
/* This operand is an address. The disassembler
prints these symbolically if possible. */
#define TXVU_OPERAND_ADDRESS 8
/* This operand takes signed values (default is unsigned).
The default was chosen to be unsigned as most fields are unsigned
(e.g. registers). */
#define TXVU_OPERAND_SIGNED 0x10
/* This operand takes signed values, but also accepts a full positive
range of values. That is, if bits is 16, it takes any value from
-0x8000 to 0xffff. */
#define TXVU_OPERAND_SIGNOPT 0x20
/* This operand should be regarded as a negative number for the
purposes of overflow checking (i.e., the normal most negative
number is disallowed and one more than the normal most positive
number is allowed). This flag will only be set for a signed
operand. */
#define TXVU_OPERAND_NEGATIVE 0x40
/* This operand doesn't really exist. The program uses these operands
in special ways by creating insertion or extraction functions to have
arbitrary processing performed during assembly/disassemble.
Parse and print routines are ignored for FAKE operands. */
#define TXVU_OPERAND_FAKE 0x80
/*
This operand can be either an asterisk or an expression...TODO */
#define TXVU_OPERAND_DMA_COUNT 0x100
/* Modifier values. */
/* A dot is required before a suffix. e.g. .le */
#define TXVU_MOD_DOT 0x1000
/* Sum of all TXVU_MOD_XXX bits. */
#define TXVU_MOD_BITS 0x7000
/* Non-zero if the operand type is really a modifier. */
#define TXVU_MOD_P(X) ((X) & TXVU_MOD_BITS)
/* Parse function. This is used by the assembler.
MODS is a list of modifiers preceding the operand in the syntax string.
If the operand cannot be parsed an error message is stored in ERRMSG,
otherwise ERRMSG is unchanged. */
long (*parse) PARAMS ((const struct txvu_opcode *opcode,
const struct txvu_operand *operand,
int mods, char **str, const char **errmsg));
/* Insertion function. This is used by the assembler. To insert an
operand value into an instruction, check this field.
If it is NULL, execute
i |= (p & ((1 << o->bits) - 1)) << o->shift;
(I is the instruction which we are filling in, O is a pointer to
this structure, and OP is the opcode value; this assumes twos
complement arithmetic).
If this field is not NULL, then simply call it with the
instruction and the operand value. It will overwrite the appropriate
bits of the instruction with the operand's value.
MODS is a list of modifiers preceding the operand in the syntax string.
If the ERRMSG argument is not NULL, then if the operand value is illegal,
*ERRMSG will be set to a warning string (the operand will be inserted in
any case). If the operand value is legal, *ERRMSG will be unchanged.
OPCODE may be NULL, in which case the value isn't known. This happens
when applying fixups. */
void (*insert) PARAMS ((const struct txvu_opcode *opcode,
const struct txvu_operand *operand,
int mods, TXVU_INSN *insn,
long value, const char **errmsg));
/* Extraction function. This is used by the disassembler. To
extract this operand type from an instruction, check this field.
If it is NULL, compute
op = ((i) >> o->shift) & ((1 << o->bits) - 1);
if ((o->flags & TXVU_OPERAND_SIGNED) != 0
&& (op & (1 << (o->bits - 1))) != 0)
op -= 1 << o->bits;
(I is the instruction, O is a pointer to this structure, and OP
is the result; this assumes twos complement arithmetic).
If this field is not NULL, then simply call it with the
instruction value. It will return the value of the operand. If
the INVALID argument is not NULL, *INVALID will be set to
non-zero if this operand type can not actually be extracted from
this operand (i.e., the instruction does not match). If the
operand is valid, *INVALID will not be changed.
MODS is a list of modifiers preceding the operand in the syntax string.
INSN is a pointer to one or two `TXVU_INSN's. The first element is
the insn, the second is an immediate constant if present.
FIXME: just thrown in here for now.
*/
long (*extract) PARAMS ((const struct txvu_opcode *opcode,
const struct txvu_operand *operand,
int mods, TXVU_INSN *insn, int *pinvalid));
/* Print function. This is used by the disassembler. */
void (*print) PARAMS ((const struct txvu_opcode *opcode,
const struct txvu_operand *operand,
int mods, TXVU_INSN *insn,
disassemble_info *info, long value));
} txvu_operand;
/* Given an operand entry, return the table index. */
#define TXVU_OPERAND_INDEX(op) ((op) - 128)
/* VU support. */
/* Positions, masks, and values of various fields used in multiple places
(the opcode table, the disassembler, GAS). */
#define TXVU_SHIFT_DEST 21
#define TXVU_SHIFT_TREG 16
#define TXVU_SHIFT_SREG 11
#define TXVU_SHIFT_DREG 6
#define TXVU_MASK_REG 31
/* Bits for multiple dest choices. */
#define TXVU_DEST_X 8
#define TXVU_DEST_Y 4
#define TXVU_DEST_Z 2
#define TXVU_DEST_W 1
/* Values for a single dest choice. */
#define TXVU_SDEST_X 0
#define TXVU_SDEST_Y 1
#define TXVU_SDEST_Z 2
#define TXVU_SDEST_W 3
extern const txvu_operand txvu_operands[];
extern /*const*/ txvu_opcode txvu_upper_opcodes[];
extern /*const*/ txvu_opcode txvu_lower_opcodes[];
extern const int txvu_upper_opcodes_count;
extern const int txvu_lower_opcodes_count;
const txvu_opcode *txvu_upper_opcode_lookup_asm PARAMS ((const char *));
const txvu_opcode *txvu_lower_opcode_lookup_asm PARAMS ((const char *));
const txvu_opcode *txvu_upper_opcode_lookup_dis PARAMS ((unsigned int));
const txvu_opcode *txvu_lower_opcode_lookup_dis PARAMS ((unsigned int));
/* PKE support. */
/* PKE opcode flags.
The usage here is a bit wasteful of bits, but there's enough bits
and we can always make better usage later. */
/* 2 word instruction */
#define PKE_OPCODE_LEN2 1
/* 5 word instruction */
#define PKE_OPCODE_LEN5 2
/* variable length instruction */
#define PKE_OPCODE_LENVAR 4
/* the mpg instruction */
#define PKE_OPCODE_MPG 8
/* the direct instruction */
#define PKE_OPCODE_DIRECT 16
/* the directhl instruction */
#define PKE_OPCODE_DIRECTHL 32
/* the unpack instruction */
#define PKE_OPCODE_UNPACK 64
/* Instruction flag bits. M,R are only applicable to `unpack'. */
#define PKE_FLAG_I 1
#define PKE_FLAG_M 2
#define PKE_FLAG_R 4
/* The "mode" operand of the "stmod" insn. */
#define PKE_MODE_DIRECT 0
#define PKE_MODE_ADD 1
#define PKE_MODE_ADDROW 2
/* Unpack types. */
#define PKE_UNPACK_S_32 0
#define PKE_UNPACK_S_16 1
#define PKE_UNPACK_S_8 2
#define PKE_UNPACK_V2_32 4
#define PKE_UNPACK_V2_16 5
#define PKE_UNPACK_V2_8 6
#define PKE_UNPACK_V3_32 8
#define PKE_UNPACK_V3_16 9
#define PKE_UNPACK_V3_8 10
#define PKE_UNPACK_V4_32 12
#define PKE_UNPACK_V4_16 13
#define PKE_UNPACK_V4_8 14
#define PKE_UNPACK_V4_5 15
extern const txvu_operand pke_operands[];
extern /*const*/ txvu_opcode pke_opcodes[];
extern const int pke_opcodes_count;
const txvu_opcode *pke_opcode_lookup_asm PARAMS ((const char *));
const txvu_opcode *pke_opcode_lookup_dis PARAMS ((unsigned int));
/* Return non-zero if the just parsed pke insn has variable length. */
int pke_varlen_p PARAMS ((void));
/* Return length, in 32 bit words, of just parsed pke insn,
or 0 if unknown. */
int pke_len PARAMS ((void));
/* DMA support. */
/* DMA instruction flags. */
#define DMA_FLAG_PCE0 1
#define DMA_FLAG_PCE1 2
#define DMA_FLAG_INT 4
#define DMA_FLAG_SPR 8
extern const txvu_operand dma_operands[];
extern /*const*/ txvu_opcode dma_opcodes[];
extern const int dma_opcodes_count;
const txvu_opcode *dma_opcode_lookup_asm PARAMS ((const char *));
const txvu_opcode *dma_opcode_lookup_dis PARAMS ((unsigned int));
int txvu_dma_operand_count PARAMS((int));
/* GPUIF support. */
typedef enum {
GPUIF_REG_PRIM = 0,
GPUIF_REG_RGBAQ = 1,
GPUIF_REG_ST = 2,
GPUIF_REG_UV = 3,
GPUIF_REG_XYZF2 = 4,
GPUIF_REG_TEXCLUT_1 = 6,
GPUIF_REG_TEXCLUT_2 = 7,
GPUIF_REG_TEX0_1 = 8,
GPUIF_REG_TEX0_2 = 9,
GPUIF_REG_TEX1_1 = 10,
GPUIF_REG_TEX1_2 = 11,
GPUIF_REG_XYZF3 = 12,
GPUIF_REG_PRMODE = 13,
GPUIF_REG_A_D = 14,
GPUIF_REG_NOP = 15
} gpuif_reg;
extern const txvu_operand gpuif_operands[];
extern /*const*/ txvu_opcode gpuif_opcodes[];
extern const int gpuif_opcodes_count;
const txvu_opcode *gpuif_opcode_lookup_asm PARAMS ((const char *));
const txvu_opcode *gpuif_opcode_lookup_dis PARAMS ((unsigned int));
/* Utility fns in txvu-opc.c. */
void txvu_opcode_init_tables PARAMS ((int));
void txvu_opcode_init_parse PARAMS ((void));
void txvu_opcode_init_print PARAMS ((void));