OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.24/] [sim/] [instr.h] - Diff between revs 8 and 211

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 8 Rev 211
/*
/*
 * instr.h -- instruction encoding
 * instr.h -- instruction encoding
 */
 */
 
 
 
 
#ifndef _INSTR_H_
#ifndef _INSTR_H_
#define _INSTR_H_
#define _INSTR_H_
 
 
 
 
#define FORMAT_N        0        /* no operands */
#define FORMAT_N        0        /* no operands */
#define FORMAT_RH       1       /* one register and a half operand */
#define FORMAT_RH       1       /* one register and a half operand */
#define FORMAT_RHH      2       /* one register and a half operand */
#define FORMAT_RHH      2       /* one register and a half operand */
                                /* ATTENTION: high-order 16 bits encoded */
                                /* ATTENTION: high-order 16 bits encoded */
#define FORMAT_RRH      3       /* two registers and a half operand */
#define FORMAT_RRH      3       /* two registers and a half operand */
#define FORMAT_RRS      4       /* two registers and a signed half operand */
#define FORMAT_RRS      4       /* two registers and a signed half operand */
#define FORMAT_RRR      5       /* three register operands */
#define FORMAT_RRR      5       /* three register operands */
#define FORMAT_RRX      6       /* either FORMAT_RRR or FORMAT_RRH */
#define FORMAT_RRX      6       /* either FORMAT_RRR or FORMAT_RRH */
#define FORMAT_RRY      7       /* either FORMAT_RRR or FORMAT_RRS */
#define FORMAT_RRY      7       /* either FORMAT_RRR or FORMAT_RRS */
#define FORMAT_RRB      8       /* two registers and a 16 bit signed
#define FORMAT_RRB      8       /* two registers and a 16 bit signed
                                   offset operand */
                                   offset operand */
#define FORMAT_J        9       /* no registers and a 26 bit signed
#define FORMAT_J        9       /* no registers and a 26 bit signed
                                   offset operand */
                                   offset operand */
#define FORMAT_JR       10      /* one register operand */
#define FORMAT_JR       10      /* one register operand */
 
 
 
 
#define MASK(n)         ((((Word) 1) << n) - 1)
#define MASK(n)         ((((Word) 1) << n) - 1)
#define SIGN(n)         (((Word) 1) << (n - 1))
#define SIGN(n)         (((Word) 1) << (n - 1))
#define ZEXT16(x)       (((Word) (x)) & MASK(16))
#define ZEXT16(x)       (((Word) (x)) & MASK(16))
#define SEXT16(x)       (((Word) (x)) & SIGN(16) ? \
#define SEXT16(x)       (((Word) (x)) & SIGN(16) ? \
                         (((Word) (x)) | ~MASK(16)) : \
                         (((Word) (x)) | ~MASK(16)) : \
                         (((Word) (x)) & MASK(16)))
                         (((Word) (x)) & MASK(16)))
#define SEXT26(x)       (((Word) (x)) & SIGN(26) ? \
#define SEXT26(x)       (((Word) (x)) & SIGN(26) ? \
                         (((Word) (x)) | ~MASK(26)) : \
                         (((Word) (x)) | ~MASK(26)) : \
                         (((Word) (x)) & MASK(26)))
                         (((Word) (x)) & MASK(26)))
 
 
 
 
#define OP_ADD          0x00
#define OP_ADD          0x00
#define OP_ADDI         0x01
#define OP_ADDI         0x01
#define OP_SUB          0x02
#define OP_SUB          0x02
#define OP_SUBI         0x03
#define OP_SUBI         0x03
 
 
#define OP_MUL          0x04
#define OP_MUL          0x04
#define OP_MULI         0x05
#define OP_MULI         0x05
#define OP_MULU         0x06
#define OP_MULU         0x06
#define OP_MULUI        0x07
#define OP_MULUI        0x07
#define OP_DIV          0x08
#define OP_DIV          0x08
#define OP_DIVI         0x09
#define OP_DIVI         0x09
#define OP_DIVU         0x0A
#define OP_DIVU         0x0A
#define OP_DIVUI        0x0B
#define OP_DIVUI        0x0B
#define OP_REM          0x0C
#define OP_REM          0x0C
#define OP_REMI         0x0D
#define OP_REMI         0x0D
#define OP_REMU         0x0E
#define OP_REMU         0x0E
#define OP_REMUI        0x0F
#define OP_REMUI        0x0F
 
 
#define OP_AND          0x10
#define OP_AND          0x10
#define OP_ANDI         0x11
#define OP_ANDI         0x11
#define OP_OR           0x12
#define OP_OR           0x12
#define OP_ORI          0x13
#define OP_ORI          0x13
#define OP_XOR          0x14
#define OP_XOR          0x14
#define OP_XORI         0x15
#define OP_XORI         0x15
#define OP_XNOR         0x16
#define OP_XNOR         0x16
#define OP_XNORI        0x17
#define OP_XNORI        0x17
 
 
#define OP_SLL          0x18
#define OP_SLL          0x18
#define OP_SLLI         0x19
#define OP_SLLI         0x19
#define OP_SLR          0x1A
#define OP_SLR          0x1A
#define OP_SLRI         0x1B
#define OP_SLRI         0x1B
#define OP_SAR          0x1C
#define OP_SAR          0x1C
#define OP_SARI         0x1D
#define OP_SARI         0x1D
 
 
#define OP_LDHI         0x1F
#define OP_LDHI         0x1F
 
 
#define OP_BEQ          0x20
#define OP_BEQ          0x20
#define OP_BNE          0x21
#define OP_BNE          0x21
#define OP_BLE          0x22
#define OP_BLE          0x22
#define OP_BLEU         0x23
#define OP_BLEU         0x23
#define OP_BLT          0x24
#define OP_BLT          0x24
#define OP_BLTU         0x25
#define OP_BLTU         0x25
#define OP_BGE          0x26
#define OP_BGE          0x26
#define OP_BGEU         0x27
#define OP_BGEU         0x27
#define OP_BGT          0x28
#define OP_BGT          0x28
#define OP_BGTU         0x29
#define OP_BGTU         0x29
 
 
#define OP_J            0x2A
#define OP_J            0x2A
#define OP_JR           0x2B
#define OP_JR           0x2B
#define OP_JAL          0x2C
#define OP_JAL          0x2C
#define OP_JALR         0x2D
#define OP_JALR         0x2D
 
 
#define OP_TRAP         0x2E
#define OP_TRAP         0x2E
#define OP_RFX          0x2F
#define OP_RFX          0x2F
 
 
#define OP_LDW          0x30
#define OP_LDW          0x30
#define OP_LDH          0x31
#define OP_LDH          0x31
#define OP_LDHU         0x32
#define OP_LDHU         0x32
#define OP_LDB          0x33
#define OP_LDB          0x33
#define OP_LDBU         0x34
#define OP_LDBU         0x34
 
 
#define OP_STW          0x35
#define OP_STW          0x35
#define OP_STH          0x36
#define OP_STH          0x36
#define OP_STB          0x37
#define OP_STB          0x37
 
 
#define OP_MVFS         0x38
#define OP_MVFS         0x38
#define OP_MVTS         0x39
#define OP_MVTS         0x39
#define OP_TBS          0x3A
#define OP_TBS          0x3A
#define OP_TBWR         0x3B
#define OP_TBWR         0x3B
#define OP_TBRI         0x3C
#define OP_TBRI         0x3C
#define OP_TBWI         0x3D
#define OP_TBWI         0x3D
 
 
 
 
typedef struct {
typedef struct {
  char *name;
  char *name;
  int format;
  int format;
  Byte opcode;
  Byte opcode;
} Instr;
} Instr;
 
 
 
 
extern Instr instrTbl[];
extern Instr instrTbl[];
extern Instr *instrCodeTbl[];
extern Instr *instrCodeTbl[];
 
 
 
 
void initInstrTable(void);
void initInstrTable(void);
Instr *lookupInstr(char *name);
Instr *lookupInstr(char *name);
 
 
 
 
#endif /* _INSTR_H_ */
#endif /* _INSTR_H_ */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.