/*
 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
 * See the copyright notice in the ACK home directory, in the file "Copyright".
 */
/* $Id$ */
#ifndef INSTRUCT_H_
#define INSTRUCT_H_

#ifndef _COST_
#include "cost.h"
#endif

#define AD_RO 01	/* Read only operand */
#define AD_WO 02	/* Write only operand */	
#define AD_RW 03	/* Read-write operand */
#define AD_RWMASK 03	/* Mask to select these possiblities */

#define AD_CC 04	/* Condition codes set to this one */

typedef struct operand {
	struct operand *o_next;
	short		o_setno;
	short		o_adorn;
} operand;

typedef struct instruction {
	char		*i_name;
	short	 	 i_asname;
	short	 	 i_nops;
	operand 	*i_oplist;
	struct varinfo	*i_erases;
	cost_t   	 i_cost;
} instr_t,*instr_p;

extern instr_t l_instr[];

/*
 * The read only information on the operands is not used at the moment.
 * Predicted future use:
 * When using :ro data it is possible to use a register in its stead
 * if it contains the same information and is allowed as an operand
 * in this place. Too difficult for now.
 */
struct varinfo;

struct varinfo *gen_inst(char *ident, int star);

#endif /* INSTRUCT_H_ */
