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

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gdb-7.2/] [gdb-7.2-or32-1.0rc1/] [sim/] [microblaze/] [microblaze.isa] - Diff between revs 330 and 341

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

Rev 330 Rev 341
/* Copyright 2009, 2010 Free Software Foundation, Inc.
/* Copyright 2009, 2010 Free Software Foundation, Inc.
   This file is part of the Xilinx MicroBlaze simulator.
   This file is part of the Xilinx MicroBlaze simulator.
   This library is free software; you can redistribute it and/or modify
   This library is 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 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
   This program is distributed in the hope that it will be useful,
   This program is 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 this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */
   MA 02110-1301, USA.  */
/*
/*
 *  MICROBLAZE Instruction Set Architecture
 *  MICROBLAZE Instruction Set Architecture
 *
 *
 *  INSTRUCTION(NAME,
 *  INSTRUCTION(NAME,
 *              OPCODE,
 *              OPCODE,
 *              TYPE,
 *              TYPE,
 *              SEMANTICS)
 *              SEMANTICS)
 *
 *
 */
 */
INSTRUCTION(add,
INSTRUCTION(add,
            0x00,
            0x00,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            CARRY = C_calc(RA, RB, 0);
            CARRY = C_calc(RA, RB, 0);
            RD = RA + RB;
            RD = RA + RB;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsub,
INSTRUCTION(rsub,
            0x01,
            0x01,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            CARRY = C_calc(RB, ~RA, 1);
            CARRY = C_calc(RB, ~RA, 1);
            RD = RB + ~RA + 1;
            RD = RB + ~RA + 1;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(addc,
INSTRUCTION(addc,
            0x02,
            0x02,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            CARRY = C_calc(RA, RB, C_rd);
            CARRY = C_calc(RA, RB, C_rd);
            RD = RA + RB + C_rd;
            RD = RA + RB + C_rd;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsubc,
INSTRUCTION(rsubc,
            0x03,
            0x03,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            CARRY = C_calc(RB, ~RA, C_rd);
            CARRY = C_calc(RB, ~RA, C_rd);
            RD = RB + ~RA + C_rd;
            RD = RB + ~RA + C_rd;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(addk,
INSTRUCTION(addk,
            0x04,
            0x04,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RA + RB;
            RD = RA + RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsubk,
INSTRUCTION(rsubk,
            0x05,
            0x05,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RB + ~RA + 1;
            RD = RB + ~RA + 1;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(cmp,
INSTRUCTION(cmp,
            0x05,
            0x05,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            {
            {
              int tmp_reg = RB + ~RA + 1;
              int tmp_reg = RB + ~RA + 1;
              if ((RB & 0x80000000) ^ (RA & 0x80000000)) {
              if ((RB & 0x80000000) ^ (RA & 0x80000000)) {
                tmp_reg = ((tmp_reg & 0x7fffffff) | (RB & 0x80000000));
                tmp_reg = ((tmp_reg & 0x7fffffff) | (RB & 0x80000000));
              }
              }
              RD = tmp_reg;
              RD = tmp_reg;
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(cmpu,
INSTRUCTION(cmpu,
            0x05,
            0x05,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            {
            {
              int tmp_reg = RB + ~RA + 1;
              int tmp_reg = RB + ~RA + 1;
              if ((RB & 0x80000000) ^ (RA & 0x80000000)) {
              if ((RB & 0x80000000) ^ (RA & 0x80000000)) {
                tmp_reg = ((tmp_reg & 0x7fffffff) | (RA & 0x80000000));
                tmp_reg = ((tmp_reg & 0x7fffffff) | (RA & 0x80000000));
              }
              }
              RD = tmp_reg;
              RD = tmp_reg;
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(addkc,
INSTRUCTION(addkc,
            0x06,
            0x06,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RA + RB + C_rd;
            RD = RA + RB + C_rd;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsubkc,
INSTRUCTION(rsubkc,
            0x07,
            0x07,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RB + ~RA + C_rd;
            RD = RB + ~RA + C_rd;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(addi,
INSTRUCTION(addi,
            0x08,
            0x08,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            CARRY = C_calc(RA, IMM, 0);
            CARRY = C_calc(RA, IMM, 0);
            RD = RA + IMM;
            RD = RA + IMM;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsubi,
INSTRUCTION(rsubi,
            0x09,
            0x09,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            CARRY = C_calc(IMM, ~RA, 1);
            CARRY = C_calc(IMM, ~RA, 1);
            RD = IMM + ~RA + 1;
            RD = IMM + ~RA + 1;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(addic,
INSTRUCTION(addic,
            0x0A,
            0x0A,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            CARRY = C_calc(RA, IMM, C_rd);
            CARRY = C_calc(RA, IMM, C_rd);
            RD = RA + IMM + C_rd;
            RD = RA + IMM + C_rd;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsubic,
INSTRUCTION(rsubic,
            0x0B,
            0x0B,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            CARRY = C_calc(IMM, ~RA, C_rd);
            CARRY = C_calc(IMM, ~RA, C_rd);
            RD = IMM + ~RA + C_rd;
            RD = IMM + ~RA + C_rd;
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(addik,
INSTRUCTION(addik,
            0x0C,
            0x0C,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = RA + IMM;
            RD = RA + IMM;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsubik,
INSTRUCTION(rsubik,
            0x0D,
            0x0D,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = IMM + ~RA + 1;
            RD = IMM + ~RA + 1;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(addikc,
INSTRUCTION(addikc,
            0x0E,
            0x0E,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = RA + IMM + C_rd;
            RD = RA + IMM + C_rd;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rsubikc,
INSTRUCTION(rsubikc,
            0x0F,
            0x0F,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = IMM + ~RA + C_rd;
            RD = IMM + ~RA + C_rd;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(mul,
INSTRUCTION(mul,
            0x10,
            0x10,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RA * RB;
            RD = RA * RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(bsrl,
INSTRUCTION(bsrl,
            0x11,
            0x11,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (uword)RA >> RB;
            RD = (uword)RA >> RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(bsra,
INSTRUCTION(bsra,
            0x11,
            0x11,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (word)RA >> RB;
            RD = (word)RA >> RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(bsll,
INSTRUCTION(bsll,
            0x11,
            0x11,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (uword)RA << RB;
            RD = (uword)RA << RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(idiv,
INSTRUCTION(idiv,
            0x12,
            0x12,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (word) RB / (word) RA;
            RD = (word) RB / (word) RA;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(idivu,
INSTRUCTION(idivu,
            0x12,
            0x12,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (uword) RB / (uword) RA;
            RD = (uword) RB / (uword) RA;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(muli,
INSTRUCTION(muli,
            0x18,
            0x18,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = RA * IMM;
            RD = RA * IMM;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(bsrli,
INSTRUCTION(bsrli,
            0x19,
            0x19,
            INST_TYPE_RD_RA_IMM5,
            INST_TYPE_RD_RA_IMM5,
            RD = (uword)RA >> (IMM & 0x1F);
            RD = (uword)RA >> (IMM & 0x1F);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(bsrai,
INSTRUCTION(bsrai,
            0x19,
            0x19,
            INST_TYPE_RD_RA_IMM5,
            INST_TYPE_RD_RA_IMM5,
            RD = (word)RA >> (IMM & 0x1F);
            RD = (word)RA >> (IMM & 0x1F);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(bslli,
INSTRUCTION(bslli,
            0x19,
            0x19,
            INST_TYPE_RD_RA_IMM5,
            INST_TYPE_RD_RA_IMM5,
            RD = (uword)RA << (IMM & 0x1F);
            RD = (uword)RA << (IMM & 0x1F);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(get,
INSTRUCTION(get,
            0x1b,
            0x1b,
            INST_TYPE_RD_IMM12,
            INST_TYPE_RD_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(put,
INSTRUCTION(put,
            0x1b,
            0x1b,
            INST_TYPE_R1_IMM12,
            INST_TYPE_R1_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(nget,
INSTRUCTION(nget,
            0x1b,
            0x1b,
            INST_TYPE_RD_IMM12,
            INST_TYPE_RD_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(nput,
INSTRUCTION(nput,
            0x1b,
            0x1b,
            INST_TYPE_R1_IMM12,
            INST_TYPE_R1_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(cget,
INSTRUCTION(cget,
            0x1b,
            0x1b,
            INST_TYPE_RD_IMM12,
            INST_TYPE_RD_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(cput,
INSTRUCTION(cput,
            0x1b,
            0x1b,
            INST_TYPE_R1_IMM12,
            INST_TYPE_R1_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(ncget,
INSTRUCTION(ncget,
            0x1b,
            0x1b,
            INST_TYPE_RD_IMM12,
            INST_TYPE_RD_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(ncput,
INSTRUCTION(ncput,
            0x1b,
            0x1b,
            INST_TYPE_R1_IMM12,
            INST_TYPE_R1_IMM12,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(or,
INSTRUCTION(or,
            0x20,
            0x20,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RA | RB;
            RD = RA | RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(and,
INSTRUCTION(and,
            0x21,
            0x21,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RA & RB;
            RD = RA & RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(xor,
INSTRUCTION(xor,
            0x22,
            0x22,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RA ^ RB;
            RD = RA ^ RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(andn,
INSTRUCTION(andn,
            0x23,
            0x23,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = RA & ~RB;
            RD = RA & ~RB;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(sra,
INSTRUCTION(sra,
            0x24,
            0x24,
            INST_TYPE_RD_RA,
            INST_TYPE_RD_RA,
            CARRY = (RA & 0x1);
            CARRY = (RA & 0x1);
            RD = (int) (RA >> 1);
            RD = (int) (RA >> 1);
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(src,
INSTRUCTION(src,
            0x24,
            0x24,
            INST_TYPE_RD_RA,
            INST_TYPE_RD_RA,
            CARRY = (RA & 0x1);
            CARRY = (RA & 0x1);
            RD = ((((int) (RA >> 1)) & 0x7FFFFFFF) | (uword)(C_rd << 31));
            RD = ((((int) (RA >> 1)) & 0x7FFFFFFF) | (uword)(C_rd << 31));
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(srl,
INSTRUCTION(srl,
            0x24,
            0x24,
            INST_TYPE_RD_RA,
            INST_TYPE_RD_RA,
            CARRY = (RA & 0x1);
            CARRY = (RA & 0x1);
            RD = (uword) ((RA >> 1) & 0x7FFFFFFF);
            RD = (uword) ((RA >> 1) & 0x7FFFFFFF);
            C_wr(CARRY);
            C_wr(CARRY);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(sext8,
INSTRUCTION(sext8,
            0x24,
            0x24,
            INST_TYPE_RD_RA,
            INST_TYPE_RD_RA,
            RD = MICROBLAZE_SEXT8(RA);
            RD = MICROBLAZE_SEXT8(RA);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(sext16,
INSTRUCTION(sext16,
            0x24,
            0x24,
            INST_TYPE_RD_RA,
            INST_TYPE_RD_RA,
            RD = MICROBLAZE_SEXT16(RA);
            RD = MICROBLAZE_SEXT16(RA);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(wdc,
INSTRUCTION(wdc,
            0x24,
            0x24,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(wic,
INSTRUCTION(wic,
            0x24,
            0x24,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(mts,
INSTRUCTION(mts,
            0x25,
            0x25,
            INST_TYPE_SA_RA,
            INST_TYPE_SA_RA,
            SA = RA;
            SA = RA;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(mfs,
INSTRUCTION(mfs,
            0x25,
            0x25,
            INST_TYPE_RD_SA,
            INST_TYPE_RD_SA,
            RD = SA;
            RD = SA;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(br,
INSTRUCTION(br,
            0x26,
            0x26,
            INST_TYPE_RB,
            INST_TYPE_RB,
            PC += RB;
            PC += RB;
            BRANCH)
            BRANCH)
INSTRUCTION(brd,
INSTRUCTION(brd,
            0x26,
            0x26,
            INST_TYPE_RB,
            INST_TYPE_RB,
            PC += RB;
            PC += RB;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(brld,
INSTRUCTION(brld,
            0x26,
            0x26,
            INST_TYPE_RD_RB,
            INST_TYPE_RD_RB,
            RD = PC;
            RD = PC;
            PC += RB;
            PC += RB;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bra,
INSTRUCTION(bra,
            0x26,
            0x26,
            INST_TYPE_RB,
            INST_TYPE_RB,
            PC = RB;
            PC = RB;
            BRANCH)
            BRANCH)
INSTRUCTION(brad,
INSTRUCTION(brad,
            0x26,
            0x26,
            INST_TYPE_RB,
            INST_TYPE_RB,
            PC = RB;
            PC = RB;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(brald,
INSTRUCTION(brald,
            0x26,
            0x26,
            INST_TYPE_RD_RB,
            INST_TYPE_RD_RB,
            RD = PC;
            RD = PC;
            PC = RB;
            PC = RB;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(microblaze_brk,
INSTRUCTION(microblaze_brk,
            0x26,
            0x26,
            INST_TYPE_RD_RB,
            INST_TYPE_RD_RB,
            RD = PC;
            RD = PC;
            PC = RB;
            PC = RB;
            MSR = MSR | BIP_MASK;
            MSR = MSR | BIP_MASK;
            BRANCH)
            BRANCH)
INSTRUCTION(beq,
INSTRUCTION(beq,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA == 0) {
            if (RA == 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(beqd,
INSTRUCTION(beqd,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA == 0) {
            if (RA == 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bne,
INSTRUCTION(bne,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA != 0) {
            if (RA != 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bned,
INSTRUCTION(bned,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA != 0) {
            if (RA != 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(blt,
INSTRUCTION(blt,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA < 0) {
            if (RA < 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bltd,
INSTRUCTION(bltd,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA < 0) {
            if (RA < 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(ble,
INSTRUCTION(ble,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA <= 0) {
            if (RA <= 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bled,
INSTRUCTION(bled,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA <= 0) {
            if (RA <= 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bgt,
INSTRUCTION(bgt,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA > 0) {
            if (RA > 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bgtd,
INSTRUCTION(bgtd,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA > 0) {
            if (RA > 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bge,
INSTRUCTION(bge,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA >= 0) {
            if (RA >= 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bged,
INSTRUCTION(bged,
            0x27,
            0x27,
            INST_TYPE_RA_RB,
            INST_TYPE_RA_RB,
            if (RA >= 0) {
            if (RA >= 0) {
              PC += RB;
              PC += RB;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(ori,
INSTRUCTION(ori,
            0x28,
            0x28,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = RA | IMM;
            RD = RA | IMM;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(andi,
INSTRUCTION(andi,
            0x29,
            0x29,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = RA & IMM;
            RD = RA & IMM;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(xori,
INSTRUCTION(xori,
            0x2A,
            0x2A,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = RA ^ IMM;
            RD = RA ^ IMM;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(andni,
INSTRUCTION(andni,
            0x2B,
            0x2B,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = RA & ~IMM;
            RD = RA & ~IMM;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(imm,
INSTRUCTION(imm,
            0x2C,
            0x2C,
            INST_TYPE_IMM,
            INST_TYPE_IMM,
            IMM_H = IMM_L;
            IMM_H = IMM_L;
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(rtsd,
INSTRUCTION(rtsd,
            0x2D,
            0x2D,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            PC = RA + IMM;
            PC = RA + IMM;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(rtid,
INSTRUCTION(rtid,
            0x2D,
            0x2D,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            PC = RA + IMM;
            PC = RA + IMM;
            MSR = MSR | INTR_EN_MASK;
            MSR = MSR | INTR_EN_MASK;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(rtbd,
INSTRUCTION(rtbd,
            0x2D,
            0x2D,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            PC = RA + IMM;
            PC = RA + IMM;
            MSR = MSR & ~BIP_MASK;
            MSR = MSR & ~BIP_MASK;
            BRANCH;
            BRANCH;
            DELAY_SLOT;)
            DELAY_SLOT;)
INSTRUCTION(bri,
INSTRUCTION(bri,
            0x2E,
            0x2E,
            INST_TYPE_IMM,
            INST_TYPE_IMM,
            PC += IMM;
            PC += IMM;
            BRANCH)
            BRANCH)
INSTRUCTION(brid,
INSTRUCTION(brid,
            0x2E,
            0x2E,
            INST_TYPE_IMM,
            INST_TYPE_IMM,
            PC += IMM;
            PC += IMM;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(brlid,
INSTRUCTION(brlid,
            0x2E,
            0x2E,
            INST_TYPE_RD_IMM,
            INST_TYPE_RD_IMM,
            RD = PC;
            RD = PC;
            PC += IMM;
            PC += IMM;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(brai,
INSTRUCTION(brai,
            0x2E,
            0x2E,
            INST_TYPE_IMM,
            INST_TYPE_IMM,
            PC = IMM;
            PC = IMM;
            BRANCH)
            BRANCH)
INSTRUCTION(braid,
INSTRUCTION(braid,
            0x2E,
            0x2E,
            INST_TYPE_IMM,
            INST_TYPE_IMM,
            PC = IMM;
            PC = IMM;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bralid,
INSTRUCTION(bralid,
            0x2E,
            0x2E,
            INST_TYPE_RD_IMM,
            INST_TYPE_RD_IMM,
            RD = PC;
            RD = PC;
            PC = IMM;
            PC = IMM;
            BRANCH;
            BRANCH;
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(brki,
INSTRUCTION(brki,
            0x2E,
            0x2E,
            INST_TYPE_RD_IMM,
            INST_TYPE_RD_IMM,
            RD = PC;
            RD = PC;
            PC = IMM;
            PC = IMM;
            MSR = MSR | BIP_MASK;
            MSR = MSR | BIP_MASK;
            BRANCH)
            BRANCH)
INSTRUCTION(beqi,
INSTRUCTION(beqi,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA == 0) {
            if (RA == 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(beqid,
INSTRUCTION(beqid,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA == 0) {
            if (RA == 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bnei,
INSTRUCTION(bnei,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA != 0) {
            if (RA != 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bneid,
INSTRUCTION(bneid,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA != 0) {
            if (RA != 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(blti,
INSTRUCTION(blti,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA < 0) {
            if (RA < 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bltid,
INSTRUCTION(bltid,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA < 0) {
            if (RA < 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(blei,
INSTRUCTION(blei,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA <= 0) {
            if (RA <= 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bleid,
INSTRUCTION(bleid,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA <= 0) {
            if (RA <= 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bgti,
INSTRUCTION(bgti,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA > 0) {
            if (RA > 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bgtid,
INSTRUCTION(bgtid,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA > 0) {
            if (RA > 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(bgei,
INSTRUCTION(bgei,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA >= 0) {
            if (RA >= 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            })
            })
INSTRUCTION(bgeid,
INSTRUCTION(bgeid,
            0x2F,
            0x2F,
            INST_TYPE_RA_IMM,
            INST_TYPE_RA_IMM,
            if (RA >= 0) {
            if (RA >= 0) {
              PC += IMM;
              PC += IMM;
              BRANCH;
              BRANCH;
            } else {
            } else {
              PC += INST_SIZE;
              PC += INST_SIZE;
            }
            }
            DELAY_SLOT)
            DELAY_SLOT)
INSTRUCTION(lbu,
INSTRUCTION(lbu,
            0x30,
            0x30,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (MEM_RD_UBYTE(RA + RB));
            RD = (MEM_RD_UBYTE(RA + RB));
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(lhu,
INSTRUCTION(lhu,
            0x31,
            0x31,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (MEM_RD_UHALF((RA + RB) & ~0x1));
            RD = (MEM_RD_UHALF((RA + RB) & ~0x1));
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(lw,
INSTRUCTION(lw,
            0x32,
            0x32,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            RD = (MEM_RD_WORD((RA + RB) & ~0x3));
            RD = (MEM_RD_WORD((RA + RB) & ~0x3));
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(sb,
INSTRUCTION(sb,
            0x34,
            0x34,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            MEM_WR_BYTE(RA + RB, RD);
            MEM_WR_BYTE(RA + RB, RD);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(sh,
INSTRUCTION(sh,
            0x35,
            0x35,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            MEM_WR_HALF((RA + RB) & ~0x1, RD);
            MEM_WR_HALF((RA + RB) & ~0x1, RD);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(sw,
INSTRUCTION(sw,
            0x36,
            0x36,
            INST_TYPE_RD_RA_RB,
            INST_TYPE_RD_RA_RB,
            MEM_WR_WORD((RA + RB) & ~0x3, RD);
            MEM_WR_WORD((RA + RB) & ~0x3, RD);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(lbui,
INSTRUCTION(lbui,
            0x38,
            0x38,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = (MEM_RD_UBYTE(RA + IMM));
            RD = (MEM_RD_UBYTE(RA + IMM));
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(lhui,
INSTRUCTION(lhui,
            0x39,
            0x39,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = (MEM_RD_UHALF((RA+IMM) & ~0x1));
            RD = (MEM_RD_UHALF((RA+IMM) & ~0x1));
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(lwi,
INSTRUCTION(lwi,
            0x3A,
            0x3A,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            RD = (MEM_RD_WORD((RA+IMM) & ~0x3));
            RD = (MEM_RD_WORD((RA+IMM) & ~0x3));
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(sbi,
INSTRUCTION(sbi,
            0x3C,
            0x3C,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            MEM_WR_BYTE(RA + IMM, RD);
            MEM_WR_BYTE(RA + IMM, RD);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(shi,
INSTRUCTION(shi,
            0x3D,
            0x3D,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            MEM_WR_HALF((RA + IMM) & ~0x1, RD);
            MEM_WR_HALF((RA + IMM) & ~0x1, RD);
            PC += INST_SIZE)
            PC += INST_SIZE)
INSTRUCTION(swi,
INSTRUCTION(swi,
            0x3E,
            0x3E,
            INST_TYPE_RD_RA_IMM,
            INST_TYPE_RD_RA_IMM,
            MEM_WR_WORD((RA + IMM) & ~0x3, RD);
            MEM_WR_WORD((RA + IMM) & ~0x3, RD);
            PC += INST_SIZE)
            PC += INST_SIZE)
 
 

powered by: WebSVN 2.1.0

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