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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [include/] [opcode/] [arm.h] - Diff between revs 107 and 1765

Only display areas with differences | Details | Blame | View Log

Rev 107 Rev 1765
/* ARM opcode list.
/* ARM opcode list.
   Copyright (C) 1989, Free Software Foundation, Inc.
   Copyright (C) 1989, Free Software Foundation, Inc.
 
 
This file is part of GDB and GAS.
This file is part of GDB and GAS.
 
 
GDB and GAS are free software; you can redistribute it and/or modify
GDB and GAS are free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 1, or (at your option)
the Free Software Foundation; either version 1, or (at your option)
any later version.
any later version.
 
 
GDB and GAS are distributed in the hope that it will be useful,
GDB and GAS are distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
GNU General Public License for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with GDB or GAS; see the file COPYING.  If not, write to
along with GDB or GAS; see the file COPYING.  If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 
/* types of instruction (encoded in bits 26 and 27 of the instruction) */
/* types of instruction (encoded in bits 26 and 27 of the instruction) */
 
 
#define TYPE_ARITHMETIC         0
#define TYPE_ARITHMETIC         0
#define TYPE_LDR_STR            1
#define TYPE_LDR_STR            1
#define TYPE_BLOCK_BRANCH       2
#define TYPE_BLOCK_BRANCH       2
#define TYPE_SWI                3
#define TYPE_SWI                3
 
 
/* bit 25 decides whether an instruction is a block move or a branch */
/* bit 25 decides whether an instruction is a block move or a branch */
#define SUBTYPE_BLOCK           0
#define SUBTYPE_BLOCK           0
#define SUBTYPE_BRANCH          1
#define SUBTYPE_BRANCH          1
 
 
/* codes to distinguish the arithmetic instructions */
/* codes to distinguish the arithmetic instructions */
 
 
#define OPCODE_AND      0
#define OPCODE_AND      0
#define OPCODE_EOR      1
#define OPCODE_EOR      1
#define OPCODE_SUB      2
#define OPCODE_SUB      2
#define OPCODE_RSB      3
#define OPCODE_RSB      3
#define OPCODE_ADD      4
#define OPCODE_ADD      4
#define OPCODE_ADC      5
#define OPCODE_ADC      5
#define OPCODE_SBC      6
#define OPCODE_SBC      6
#define OPCODE_RSC      7
#define OPCODE_RSC      7
#define OPCODE_TST      8
#define OPCODE_TST      8
#define OPCODE_TEQ      9
#define OPCODE_TEQ      9
#define OPCODE_CMP      10
#define OPCODE_CMP      10
#define OPCODE_CMN      11
#define OPCODE_CMN      11
#define OPCODE_ORR      12
#define OPCODE_ORR      12
#define OPCODE_MOV      13
#define OPCODE_MOV      13
#define OPCODE_BIC      14
#define OPCODE_BIC      14
#define OPCODE_MVN      15
#define OPCODE_MVN      15
 
 
/* condition codes */
/* condition codes */
 
 
#define COND_EQ         0
#define COND_EQ         0
#define COND_NE         1
#define COND_NE         1
#define COND_CS         2
#define COND_CS         2
#define COND_CC         3
#define COND_CC         3
#define COND_MI         4
#define COND_MI         4
#define COND_PL         5
#define COND_PL         5
#define COND_VS         6
#define COND_VS         6
#define COND_VC         7
#define COND_VC         7
#define COND_HI         8
#define COND_HI         8
#define COND_LS         9
#define COND_LS         9
#define COND_GE         10
#define COND_GE         10
#define COND_LT         11
#define COND_LT         11
#define COND_GT         12
#define COND_GT         12
#define COND_LE         13
#define COND_LE         13
#define COND_AL         14
#define COND_AL         14
#define COND_NV         15
#define COND_NV         15
 
 
/* Describes the format of an ARM machine instruction */
/* Describes the format of an ARM machine instruction */
 
 
struct generic_fmt {
struct generic_fmt {
    unsigned rest       :25;    /* the rest of the instruction */
    unsigned rest       :25;    /* the rest of the instruction */
    unsigned subtype    :1;     /* used to decide between block and branch */
    unsigned subtype    :1;     /* used to decide between block and branch */
    unsigned type       :2;     /* one of TYPE_* */
    unsigned type       :2;     /* one of TYPE_* */
    unsigned cond       :4;     /* one of COND_* defined above */
    unsigned cond       :4;     /* one of COND_* defined above */
};
};
 
 
struct arith_fmt {
struct arith_fmt {
    unsigned operand2   :12;    /* #nn or rn or rn shift #m or rn shift rm */
    unsigned operand2   :12;    /* #nn or rn or rn shift #m or rn shift rm */
    unsigned dest       :4;     /* place where the answer goes */
    unsigned dest       :4;     /* place where the answer goes */
    unsigned operand1   :4;     /* first operand to instruction */
    unsigned operand1   :4;     /* first operand to instruction */
    unsigned set        :1;     /* == 1 means set processor flags */
    unsigned set        :1;     /* == 1 means set processor flags */
    unsigned opcode     :4;     /* one of OPCODE_* defined above */
    unsigned opcode     :4;     /* one of OPCODE_* defined above */
    unsigned immed      :1;     /* operand2 is an immediate value */
    unsigned immed      :1;     /* operand2 is an immediate value */
    unsigned type       :2;     /* == TYPE_ARITHMETIC */
    unsigned type       :2;     /* == TYPE_ARITHMETIC */
    unsigned cond       :4;     /* one of COND_* defined above */
    unsigned cond       :4;     /* one of COND_* defined above */
};
};
 
 
struct ldr_str_fmt {
struct ldr_str_fmt {
    unsigned offset     :12;    /* #nn or rn or rn shift #m */
    unsigned offset     :12;    /* #nn or rn or rn shift #m */
    unsigned reg        :4;     /* destination for LDR, source for STR */
    unsigned reg        :4;     /* destination for LDR, source for STR */
    unsigned base       :4;     /* base register */
    unsigned base       :4;     /* base register */
    unsigned is_load    :1;     /* == 1 for LDR */
    unsigned is_load    :1;     /* == 1 for LDR */
    unsigned writeback  :1;     /* == 1 means write back (base+offset) into base */
    unsigned writeback  :1;     /* == 1 means write back (base+offset) into base */
    unsigned byte       :1;     /* == 1 means byte access else word */
    unsigned byte       :1;     /* == 1 means byte access else word */
    unsigned up         :1;     /* == 1 means add offset else subtract it */
    unsigned up         :1;     /* == 1 means add offset else subtract it */
    unsigned pre_index  :1;     /* == 1 means [a,b] form else [a],b form */
    unsigned pre_index  :1;     /* == 1 means [a,b] form else [a],b form */
    unsigned immed      :1;     /* == 0 means immediate offset */
    unsigned immed      :1;     /* == 0 means immediate offset */
    unsigned type       :2;     /* == TYPE_LDR_STR */
    unsigned type       :2;     /* == TYPE_LDR_STR */
    unsigned cond       :4;     /* one of COND_* defined above */
    unsigned cond       :4;     /* one of COND_* defined above */
};
};
 
 
struct block_fmt {
struct block_fmt {
    unsigned mask       :16;    /* register mask */
    unsigned mask       :16;    /* register mask */
    unsigned base       :4;     /* register used as base of move */
    unsigned base       :4;     /* register used as base of move */
    unsigned is_load    :1;     /* == 1 for LDM */
    unsigned is_load    :1;     /* == 1 for LDM */
    unsigned writeback  :1;     /* == 1 means update base after move */
    unsigned writeback  :1;     /* == 1 means update base after move */
    unsigned set        :1;     /* == 1 means set flags in pc if included in mask */
    unsigned set        :1;     /* == 1 means set flags in pc if included in mask */
    unsigned increment  :1;     /* == 1 means increment base register */
    unsigned increment  :1;     /* == 1 means increment base register */
    unsigned before     :1;     /* == 1 means inc/dec before each move */
    unsigned before     :1;     /* == 1 means inc/dec before each move */
    unsigned is_block   :1;     /* == SUBTYPE_BLOCK */
    unsigned is_block   :1;     /* == SUBTYPE_BLOCK */
    unsigned type       :2;     /* == TYPE_BLOCK_BRANCH */
    unsigned type       :2;     /* == TYPE_BLOCK_BRANCH */
    unsigned cond       :4;     /* one of COND_* defined above */
    unsigned cond       :4;     /* one of COND_* defined above */
};
};
 
 
struct branch_fmt {
struct branch_fmt {
    unsigned dest       :24;    /* destination of the branch */
    unsigned dest       :24;    /* destination of the branch */
    unsigned link       :1;     /* branch with link (function call) */
    unsigned link       :1;     /* branch with link (function call) */
    unsigned is_branch  :1;     /* == SUBTYPE_BRANCH */
    unsigned is_branch  :1;     /* == SUBTYPE_BRANCH */
    unsigned type       :2;     /* == TYPE_BLOCK_BRANCH */
    unsigned type       :2;     /* == TYPE_BLOCK_BRANCH */
    unsigned cond       :4;     /* one of COND_* defined above */
    unsigned cond       :4;     /* one of COND_* defined above */
};
};
 
 
#define ROUND_N         0
#define ROUND_N         0
#define ROUND_P         1
#define ROUND_P         1
#define ROUND_M         2
#define ROUND_M         2
#define ROUND_Z         3
#define ROUND_Z         3
 
 
#define FLOAT2_MVF      0
#define FLOAT2_MVF      0
#define FLOAT2_MNF      1
#define FLOAT2_MNF      1
#define FLOAT2_ABS      2
#define FLOAT2_ABS      2
#define FLOAT2_RND      3
#define FLOAT2_RND      3
#define FLOAT2_SQT      4
#define FLOAT2_SQT      4
#define FLOAT2_LOG      5
#define FLOAT2_LOG      5
#define FLOAT2_LGN      6
#define FLOAT2_LGN      6
#define FLOAT2_EXP      7
#define FLOAT2_EXP      7
#define FLOAT2_SIN      8
#define FLOAT2_SIN      8
#define FLOAT2_COS      9
#define FLOAT2_COS      9
#define FLOAT2_TAN      10
#define FLOAT2_TAN      10
#define FLOAT2_ASN      11
#define FLOAT2_ASN      11
#define FLOAT2_ACS      12
#define FLOAT2_ACS      12
#define FLOAT2_ATN      13
#define FLOAT2_ATN      13
 
 
#define FLOAT3_ADF      0
#define FLOAT3_ADF      0
#define FLOAT3_MUF      1
#define FLOAT3_MUF      1
#define FLOAT3_SUF      2
#define FLOAT3_SUF      2
#define FLOAT3_RSF      3
#define FLOAT3_RSF      3
#define FLOAT3_DVF      4
#define FLOAT3_DVF      4
#define FLOAT3_RDF      5
#define FLOAT3_RDF      5
#define FLOAT3_POW      6
#define FLOAT3_POW      6
#define FLOAT3_RPW      7
#define FLOAT3_RPW      7
#define FLOAT3_RMF      8
#define FLOAT3_RMF      8
#define FLOAT3_FML      9
#define FLOAT3_FML      9
#define FLOAT3_FDV      10
#define FLOAT3_FDV      10
#define FLOAT3_FRD      11
#define FLOAT3_FRD      11
#define FLOAT3_POL      12
#define FLOAT3_POL      12
 
 
struct float2_fmt {
struct float2_fmt {
    unsigned operand2   :3;     /* second operand */
    unsigned operand2   :3;     /* second operand */
    unsigned immed      :1;     /* == 1 if second operand is a constant */
    unsigned immed      :1;     /* == 1 if second operand is a constant */
    unsigned pad1       :1;     /* == 0 */
    unsigned pad1       :1;     /* == 0 */
    unsigned rounding   :2;     /* ROUND_* */
    unsigned rounding   :2;     /* ROUND_* */
    unsigned is_double  :1;     /* == 1 if precision is double (only if not extended) */
    unsigned is_double  :1;     /* == 1 if precision is double (only if not extended) */
    unsigned pad2       :4;     /* == 1 */
    unsigned pad2       :4;     /* == 1 */
    unsigned dest       :3;     /* destination */
    unsigned dest       :3;     /* destination */
    unsigned is_2_op    :1;     /* == 1 if 2 operand ins */
    unsigned is_2_op    :1;     /* == 1 if 2 operand ins */
    unsigned operand1   :3;     /* first operand (only of is_2_op == 0) */
    unsigned operand1   :3;     /* first operand (only of is_2_op == 0) */
    unsigned is_extended :1;    /* == 1 if precision is extended */
    unsigned is_extended :1;    /* == 1 if precision is extended */
    unsigned opcode     :4;     /* FLOAT2_* or FLOAT3_* depending on is_2_op */
    unsigned opcode     :4;     /* FLOAT2_* or FLOAT3_* depending on is_2_op */
    unsigned must_be_2  :2;     /* == 2 */
    unsigned must_be_2  :2;     /* == 2 */
    unsigned type       :2;     /* == TYPE_SWI */
    unsigned type       :2;     /* == TYPE_SWI */
    unsigned cond       :4;     /* COND_* */
    unsigned cond       :4;     /* COND_* */
};
};
 
 
struct swi_fmt {
struct swi_fmt {
    unsigned argument   :24;    /* argument to SWI (syscall number) */
    unsigned argument   :24;    /* argument to SWI (syscall number) */
    unsigned must_be_3  :2;     /* == 3 */
    unsigned must_be_3  :2;     /* == 3 */
    unsigned type       :2;     /* == TYPE_SWI */
    unsigned type       :2;     /* == TYPE_SWI */
    unsigned cond       :4;     /* one of COND_* defined above */
    unsigned cond       :4;     /* one of COND_* defined above */
};
};
 
 
union insn_fmt {
union insn_fmt {
    struct generic_fmt  generic;
    struct generic_fmt  generic;
    struct arith_fmt    arith;
    struct arith_fmt    arith;
    struct ldr_str_fmt  ldr_str;
    struct ldr_str_fmt  ldr_str;
    struct block_fmt    block;
    struct block_fmt    block;
    struct branch_fmt   branch;
    struct branch_fmt   branch;
    struct swi_fmt      swi;
    struct swi_fmt      swi;
    unsigned long       ins;
    unsigned long       ins;
};
};
 
 
struct opcode {
struct opcode {
    unsigned long value, mask;  /* recognise instruction if (op&mask)==value */
    unsigned long value, mask;  /* recognise instruction if (op&mask)==value */
    char *assembler;            /* how to disassemble this instruction */
    char *assembler;            /* how to disassemble this instruction */
};
};
 
 
/* format of the assembler string :
/* format of the assembler string :
 
 
   %%                   %
   %%                   %
   %<bitfield>d         print the bitfield in decimal
   %<bitfield>d         print the bitfield in decimal
   %<bitfield>x         print the bitfield in hex
   %<bitfield>x         print the bitfield in hex
   %<bitfield>r         print as an ARM register
   %<bitfield>r         print as an ARM register
   %<bitfield>f         print a floating point constant if >7 else an fp register
   %<bitfield>f         print a floating point constant if >7 else an fp register
   %c                   print condition code (always bits 28-31)
   %c                   print condition code (always bits 28-31)
   %P                   print floating point precision in arithmetic insn
   %P                   print floating point precision in arithmetic insn
   %Q                   print floating point precision in ldf/stf insn
   %Q                   print floating point precision in ldf/stf insn
   %R                   print floating point rounding mode
   %R                   print floating point rounding mode
   %<bitnum>'c          print specified char iff bit is one
   %<bitnum>'c          print specified char iff bit is one
   %<bitnum>`c          print specified char iff bit is zero
   %<bitnum>`c          print specified char iff bit is zero
   %<bitnum>?ab         print a if bit is one else print b
   %<bitnum>?ab         print a if bit is one else print b
   %p                   print 'p' iff bits 12-15 are 15
   %p                   print 'p' iff bits 12-15 are 15
   %o                   print operand2 (immediate or register + shift)
   %o                   print operand2 (immediate or register + shift)
   %a                   print address for ldr/str instruction
   %a                   print address for ldr/str instruction
   %b                   print branch destination
   %b                   print branch destination
   %A                   print address for ldc/stc/ldf/stf instruction
   %A                   print address for ldc/stc/ldf/stf instruction
   %m                   print register mask for ldm/stm instruction
   %m                   print register mask for ldm/stm instruction
*/
*/
 
 
static struct opcode opcodes[] = {
static struct opcode opcodes[] = {
    /* ARM instructions */
    /* ARM instructions */
    0x00000090, 0x0fe000f0, "mul%20's %12-15r, %16-19r, %0-3r",
    0x00000090, 0x0fe000f0, "mul%20's %12-15r, %16-19r, %0-3r",
    0x00200090, 0x0fe000f0, "mla%20's %12-15r, %16-19r, %0-3r, %8-11r",
    0x00200090, 0x0fe000f0, "mla%20's %12-15r, %16-19r, %0-3r, %8-11r",
    0x00000000, 0x0de00000, "and%c%20's %12-15r, %16-19r, %o",
    0x00000000, 0x0de00000, "and%c%20's %12-15r, %16-19r, %o",
    0x00200000, 0x0de00000, "eor%c%20's %12-15r, %16-19r, %o",
    0x00200000, 0x0de00000, "eor%c%20's %12-15r, %16-19r, %o",
    0x00400000, 0x0de00000, "sub%c%20's %12-15r, %16-19r, %o",
    0x00400000, 0x0de00000, "sub%c%20's %12-15r, %16-19r, %o",
    0x00600000, 0x0de00000, "rsb%c%20's %12-15r, %16-19r, %o",
    0x00600000, 0x0de00000, "rsb%c%20's %12-15r, %16-19r, %o",
    0x00800000, 0x0de00000, "add%c%20's %12-15r, %16-19r, %o",
    0x00800000, 0x0de00000, "add%c%20's %12-15r, %16-19r, %o",
    0x00a00000, 0x0de00000, "adc%c%20's %12-15r, %16-19r, %o",
    0x00a00000, 0x0de00000, "adc%c%20's %12-15r, %16-19r, %o",
    0x00c00000, 0x0de00000, "sbc%c%20's %12-15r, %16-19r, %o",
    0x00c00000, 0x0de00000, "sbc%c%20's %12-15r, %16-19r, %o",
    0x00e00000, 0x0de00000, "rsc%c%20's %12-15r, %16-19r, %o",
    0x00e00000, 0x0de00000, "rsc%c%20's %12-15r, %16-19r, %o",
    0x01000000, 0x0de00000, "tst%c%p %16-19r, %o",
    0x01000000, 0x0de00000, "tst%c%p %16-19r, %o",
    0x01200000, 0x0de00000, "teq%c%p %16-19r, %o",
    0x01200000, 0x0de00000, "teq%c%p %16-19r, %o",
    0x01400000, 0x0de00000, "cmp%c%p %16-19r, %o",
    0x01400000, 0x0de00000, "cmp%c%p %16-19r, %o",
    0x01600000, 0x0de00000, "cmn%c%p %16-19r, %o",
    0x01600000, 0x0de00000, "cmn%c%p %16-19r, %o",
    0x01800000, 0x0de00000, "orr%c%20's %12-15r, %16-19r, %o",
    0x01800000, 0x0de00000, "orr%c%20's %12-15r, %16-19r, %o",
    0x01a00000, 0x0de00000, "mov%c%20's %12-15r, %o",
    0x01a00000, 0x0de00000, "mov%c%20's %12-15r, %o",
    0x01c00000, 0x0de00000, "bic%c%20's %12-15r, %16-19r, %o",
    0x01c00000, 0x0de00000, "bic%c%20's %12-15r, %16-19r, %o",
    0x01e00000, 0x0de00000, "mvn%c%20's %12-15r, %o",
    0x01e00000, 0x0de00000, "mvn%c%20's %12-15r, %o",
    0x04000000, 0x0c100000, "str%c%22'b %12-15r, %a",
    0x04000000, 0x0c100000, "str%c%22'b %12-15r, %a",
    0x04100000, 0x0c100000, "ldr%c%22'b %12-15r, %a",
    0x04100000, 0x0c100000, "ldr%c%22'b %12-15r, %a",
    0x08000000, 0x0e100000, "stm%c%23?id%24?ba %16-19r%22`!, %m",
    0x08000000, 0x0e100000, "stm%c%23?id%24?ba %16-19r%22`!, %m",
    0x08100000, 0x0e100000, "ldm%c%23?id%24?ba %16-19r%22`!, %m%22'^",
    0x08100000, 0x0e100000, "ldm%c%23?id%24?ba %16-19r%22`!, %m%22'^",
    0x0a000000, 0x0e000000, "b%c%24'l %b",
    0x0a000000, 0x0e000000, "b%c%24'l %b",
    0x0f000000, 0x0f000000, "swi%c %0-23x",
    0x0f000000, 0x0f000000, "swi%c %0-23x",
    /* Floating point coprocessor instructions */
    /* Floating point coprocessor instructions */
    0x0e000100, 0x0ff08f10, "adf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e000100, 0x0ff08f10, "adf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e100100, 0x0ff08f10, "muf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e100100, 0x0ff08f10, "muf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e200100, 0x0ff08f10, "suf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e200100, 0x0ff08f10, "suf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e300100, 0x0ff08f10, "rsf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e300100, 0x0ff08f10, "rsf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e400100, 0x0ff08f10, "dvf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e400100, 0x0ff08f10, "dvf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e500100, 0x0ff08f10, "rdf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e500100, 0x0ff08f10, "rdf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e600100, 0x0ff08f10, "pow%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e600100, 0x0ff08f10, "pow%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e700100, 0x0ff08f10, "rpw%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e700100, 0x0ff08f10, "rpw%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e800100, 0x0ff08f10, "rmf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e800100, 0x0ff08f10, "rmf%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e900100, 0x0ff08f10, "fml%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e900100, 0x0ff08f10, "fml%c%P%R %12-14f, %16-18f, %0-3f",
    0x0ea00100, 0x0ff08f10, "fdv%c%P%R %12-14f, %16-18f, %0-3f",
    0x0ea00100, 0x0ff08f10, "fdv%c%P%R %12-14f, %16-18f, %0-3f",
    0x0eb00100, 0x0ff08f10, "frd%c%P%R %12-14f, %16-18f, %0-3f",
    0x0eb00100, 0x0ff08f10, "frd%c%P%R %12-14f, %16-18f, %0-3f",
    0x0ec00100, 0x0ff08f10, "pol%c%P%R %12-14f, %16-18f, %0-3f",
    0x0ec00100, 0x0ff08f10, "pol%c%P%R %12-14f, %16-18f, %0-3f",
    0x0e008100, 0x0ff08f10, "mvf%c%P%R %12-14f, %0-3f",
    0x0e008100, 0x0ff08f10, "mvf%c%P%R %12-14f, %0-3f",
    0x0e108100, 0x0ff08f10, "mnf%c%P%R %12-14f, %0-3f",
    0x0e108100, 0x0ff08f10, "mnf%c%P%R %12-14f, %0-3f",
    0x0e208100, 0x0ff08f10, "abs%c%P%R %12-14f, %0-3f",
    0x0e208100, 0x0ff08f10, "abs%c%P%R %12-14f, %0-3f",
    0x0e308100, 0x0ff08f10, "rnd%c%P%R %12-14f, %0-3f",
    0x0e308100, 0x0ff08f10, "rnd%c%P%R %12-14f, %0-3f",
    0x0e408100, 0x0ff08f10, "sqt%c%P%R %12-14f, %0-3f",
    0x0e408100, 0x0ff08f10, "sqt%c%P%R %12-14f, %0-3f",
    0x0e508100, 0x0ff08f10, "log%c%P%R %12-14f, %0-3f",
    0x0e508100, 0x0ff08f10, "log%c%P%R %12-14f, %0-3f",
    0x0e608100, 0x0ff08f10, "lgn%c%P%R %12-14f, %0-3f",
    0x0e608100, 0x0ff08f10, "lgn%c%P%R %12-14f, %0-3f",
    0x0e708100, 0x0ff08f10, "exp%c%P%R %12-14f, %0-3f",
    0x0e708100, 0x0ff08f10, "exp%c%P%R %12-14f, %0-3f",
    0x0e808100, 0x0ff08f10, "sin%c%P%R %12-14f, %0-3f",
    0x0e808100, 0x0ff08f10, "sin%c%P%R %12-14f, %0-3f",
    0x0e908100, 0x0ff08f10, "cos%c%P%R %12-14f, %0-3f",
    0x0e908100, 0x0ff08f10, "cos%c%P%R %12-14f, %0-3f",
    0x0ea08100, 0x0ff08f10, "tan%c%P%R %12-14f, %0-3f",
    0x0ea08100, 0x0ff08f10, "tan%c%P%R %12-14f, %0-3f",
    0x0eb08100, 0x0ff08f10, "asn%c%P%R %12-14f, %0-3f",
    0x0eb08100, 0x0ff08f10, "asn%c%P%R %12-14f, %0-3f",
    0x0ec08100, 0x0ff08f10, "acs%c%P%R %12-14f, %0-3f",
    0x0ec08100, 0x0ff08f10, "acs%c%P%R %12-14f, %0-3f",
    0x0ed08100, 0x0ff08f10, "atn%c%P%R %12-14f, %0-3f",
    0x0ed08100, 0x0ff08f10, "atn%c%P%R %12-14f, %0-3f",
    0x0e000110, 0x0ff00f1f, "flt%c%P%R %16-18f, %12-15r",
    0x0e000110, 0x0ff00f1f, "flt%c%P%R %16-18f, %12-15r",
    0x0e100110, 0x0fff0f98, "fix%c%R %12-15r, %0-2f",
    0x0e100110, 0x0fff0f98, "fix%c%R %12-15r, %0-2f",
    0x0e200110, 0x0fff0fff, "wfs%c %12-15r",
    0x0e200110, 0x0fff0fff, "wfs%c %12-15r",
    0x0e300110, 0x0fff0fff, "rfs%c %12-15r",
    0x0e300110, 0x0fff0fff, "rfs%c %12-15r",
    0x0e400110, 0x0fff0fff, "wfc%c %12-15r",
    0x0e400110, 0x0fff0fff, "wfc%c %12-15r",
    0x0e500110, 0x0fff0fff, "rfc%c %12-15r",
    0x0e500110, 0x0fff0fff, "rfc%c %12-15r",
    0x0e90f110, 0x0ff8fff0, "cmf%c %16-18f, %0-3f",
    0x0e90f110, 0x0ff8fff0, "cmf%c %16-18f, %0-3f",
    0x0eb0f110, 0x0ff8fff0, "cnf%c %16-18f, %0-3f",
    0x0eb0f110, 0x0ff8fff0, "cnf%c %16-18f, %0-3f",
    0x0ed0f110, 0x0ff8fff0, "cmfe%c %16-18f, %0-3f",
    0x0ed0f110, 0x0ff8fff0, "cmfe%c %16-18f, %0-3f",
    0x0ef0f110, 0x0ff8fff0, "cnfe%c %16-18f, %0-3f",
    0x0ef0f110, 0x0ff8fff0, "cnfe%c %16-18f, %0-3f",
    0x0c000100, 0x0e100f00, "stf%c%Q %12-14f, %A",
    0x0c000100, 0x0e100f00, "stf%c%Q %12-14f, %A",
    0x0c100100, 0x0e100f00, "ldf%c%Q %12-14f, %A",
    0x0c100100, 0x0e100f00, "ldf%c%Q %12-14f, %A",
    /* Generic coprocessor instructions */
    /* Generic coprocessor instructions */
    0x0e000000, 0x0f000010, "cdp%c %8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}",
    0x0e000000, 0x0f000010, "cdp%c %8-11d, %20-23d, cr%12-15d, cr%16-19d, cr%0-3d, {%5-7d}",
    0x0e000010, 0x0f100010, "mrc%c %8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}",
    0x0e000010, 0x0f100010, "mrc%c %8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}",
    0x0e100010, 0x0f100010, "mcr%c %8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}",
    0x0e100010, 0x0f100010, "mcr%c %8-11d, %21-23d, %12-15r, cr%16-19d, cr%0-3d, {%5-7d}",
    0x0c000000, 0x0e100000, "stc%c%22`l %8-11d, cr%12-15d, %A",
    0x0c000000, 0x0e100000, "stc%c%22`l %8-11d, cr%12-15d, %A",
    0x0c100000, 0x0e100000, "ldc%c%22`l %8-11d, cr%12-15d, %A",
    0x0c100000, 0x0e100000, "ldc%c%22`l %8-11d, cr%12-15d, %A",
    /* the rest */
    /* the rest */
    0x00000000, 0x00000000, "undefined instruction %0-31x",
    0x00000000, 0x00000000, "undefined instruction %0-31x",
};
};
#define N_OPCODES       (sizeof opcodes / sizeof opcodes[0])
#define N_OPCODES       (sizeof opcodes / sizeof opcodes[0])
 
 

powered by: WebSVN 2.1.0

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