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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [sim/] [testsuite/] [sim/] [mips/] [utils-dsp.inc] - Rev 227

Compare with Previous | Blame | View Log

# MIPS DSP ASE simulator testsuite utility functions.
# Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
# Contributed by MIPS Technologies, Inc.  Written by Chao-ying Fu.
#
# This file is part of the GNU simulators.
#
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.  */

# $4, $5, $6, $7, $ac0, $ac1, $ac2, $ac3 are used as temps by the macros
# defined here.

        # If a != b, jump to _fail.
        # Otherwise, fall through.
        .macro dsp_assert a, b
        beq     \a, \b, 1f
        nop
        j       _fail
        nop
1: 
        .endm

        # Set dsp control register <= crin
        # Check if d == (inst ?, s, t)
        # Check if crout == dsp control register
        .macro dspck_dstio inst, d, s, t, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \s
        li      $5, \t
        \inst   $6, $4, $5
        li      $7, \d
        dsp_assert      $6, $7
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # (inst s, t)
        # Check if crout == dsp control register
        .macro dspck_stio inst, s, t, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \s
        li      $5, \t
        \inst   $4, $5
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Check if d == (inst ?, s, t)
        .macro dspck_dsti inst, d, s, t, crin
        li      $4, \crin
        wrdsp   $4
        li      $4, \s
        li      $5, \t
        \inst   $6, $4, $5
        li      $7, \d
        dsp_assert      $6, $7
        .endm

        # Set dsp control register <= crin
        # Check if tou == (inst tin, s)
        .macro dspck_tsi inst, tou, tin, s, crin
        li      $4, \crin
        wrdsp   $4
        li      $4, \s
        li      $5, \tin
        \inst   $5, $4
        li      $6, \tou
        dsp_assert      $5, $6
        .endm

        # Set dsp control register <= crin
        # Check if d == (inst ?, imm)
        # Check if crout == dsp control register
        .macro dspck_dIio inst, d, imm, crin, crout
        li      $4, \crin
        wrdsp   $4
        \inst   $5, \imm
        li      $6, \d
        dsp_assert      $5, $6
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Check if d == (inst ?, s)
        # Check if crout == dsp control register
        .macro dspck_dsio inst, d, s, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \s
        \inst   $6, $4
        li      $7, \d
        dsp_assert      $6, $7
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Check if d == (inst ?, t, sa)
        # Check if crout == dsp control register
        .macro dspck_dtsaio inst, d, t, sa, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \t
        \inst   $6, $4, \sa
        li      $7, \d
        dsp_assert      $6, $7
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Check if d == (inst ?, t, sa)
        .macro dspck_dtsai inst, d, t, sa, crin
        li      $4, \crin
        wrdsp   $4
        li      $4, \t
        \inst   $6, $4, \sa
        li      $7, \d
        dsp_assert      $6, $7
        .endm

        # Set dsp control register <= crin
        # Set $ac3 <= {hiin, loin}
        # (inst $ac3, s, t)
        # Check if {hiou, loou} == $ac3
        # Check if (crout & 0x80000) == (dsp control register & 0x80000)
        .macro dspck_astio inst, hiin, loin, hiou, loou, s, t, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \hiin
        mthi    $4, $ac3
        li      $4, \loin
        mtlo    $4, $ac3
        li      $4, \s
        li      $5, \t
        \inst   $ac3, $4, $5
        li      $4, \hiou
        mfhi    $5, $ac3
        dsp_assert      $4, $5
        li      $4, \loou
        mflo    $5, $ac3
        dsp_assert      $4, $5
        li      $4, \crout
        and     $4, $4, 0x80000
        rddsp   $5
        and     $5, $5, 0x80000
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Set $ac1 <= {hi, lo}
        # Check if t == (inst ? $ac1, sa)
        # Check if crout == dsp control register
        .macro dspck_atsaio inst, hi, lo, t, sa, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac1
        li      $4, \lo
        mtlo    $4, $ac1
        \inst   $5, $ac1, \sa
        li      $6, \t
        dsp_assert      $5, $6
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Set acc <= {hiin, loin}
        # (inst acc, s, t)
        # Check if {hiou, loou} == acc
        # Check if (crout & 0x80000) == (dsp control register & 0x80000)
        .macro dspckacc_astio inst, acc, hiin, loin, hiou, loou, s, t, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \hiin
        mthi    $4, \acc
        li      $4, \loin
        mtlo    $4, \acc
        li      $4, \s
        li      $5, \t
        \inst   \acc, $4, $5
        li      $4, \hiou
        mfhi    $5, \acc
        dsp_assert      $4, $5
        li      $4, \loou
        mflo    $5, \acc
        dsp_assert      $4, $5
        li      $4, \crout
        and     $4, $4, 0x80000
        rddsp   $5
        and     $5, $5, 0x80000
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Set $ac1 <= {hi, lo}
        # Check if t == (inst ? $ac1, s)
        # Check if crout == dsp control register
        .macro dspck_atsio inst, hi, lo, t, s, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac1
        li      $4, \lo
        mtlo    $4, $ac1
        li      $4, \s
        \inst   $5, $ac1, $4
        li      $6, \t
        dsp_assert      $5, $6
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= (crin & crinmask)
        # Set $ac2 <= {hi, lo}
        # Check if t == (inst ? $ac2, size)
        # Check if (crout & croutmask) == (dsp control register & croutmask)
        .macro dspck_tasiimom inst, hi, lo, t, size, crin, crinmask, crout, croutmask
        li      $4, \crin
        and     $4, \crinmask
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac2
        li      $4, \lo
        mtlo    $4, $ac2
        \inst   $5, $ac2, \size
        li      $6, \t
        dsp_assert      $5, $6
        li      $4, \crout
        and     $4, \croutmask
        rddsp   $5
        and     $5, \croutmask
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= (crin & crinmask)
        # Set $ac2 <= {hi, lo}
        # Check if t == (inst ? $ac2, size)
        .macro dspck_tasiim inst, hi, lo, t, size, crin, crinmask
        li      $4, \crin
        and     $4, \crinmask
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac2
        li      $4, \lo
        mtlo    $4, $ac2
        \inst   $5, $ac2, \size
        li      $6, \t
        dsp_assert      $5, $6
        .endm

        # Set dsp control register <= (crin & crinmask)
        # Set $ac2 <= {hi, lo}
        # Check if t == (inst ? $ac2, s)
        # Check if (crout & croutmask) == (dsp control register & croutmask)
        .macro dspck_tasimom inst, hi, lo, t, s, crin, crinmask, crout, croutmask
        li      $4, \crin
        and     $4, \crinmask
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac2
        li      $4, \lo
        mtlo    $4, $ac2
        li      $4, \s
        \inst   $5, $ac2, $4
        li      $6, \t
        dsp_assert      $5, $6
        li      $4, \crout
        and     $4, \croutmask
        rddsp   $5
        and     $5, \croutmask
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= (crin & crinmask)
        # Set $ac2 <= {hi, lo}
        # Check if t == (inst ? $ac2, s)
        .macro dspck_tasim inst, hi, lo, t, s, crin, crinmask
        li      $4, \crin
        and     $4, \crinmask
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac2
        li      $4, \lo
        mtlo    $4, $ac2
        li      $4, \s
        \inst   $5, $ac2, $4
        li      $6, \t
        dsp_assert      $5, $6
        .endm

        # Set dsp control register <= crin
        # Set $ac0 <= {hi, lo}
        # (inst $ac0, shift)
        # Check if $ac0 == {hio, loo}
        # Check if crout == dsp control register
        .macro dspck_asaio inst, hi, lo, hio, loo, shift, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac0
        li      $4, \lo
        mtlo    $4, $ac0
        \inst   $ac0, \shift
        mfhi    $5, $ac0
        li      $6, \hio
        dsp_assert      $5, $6
        mflo    $5, $ac0
        li      $6, \loo
        dsp_assert      $5, $6
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Set $ac0 <= {hi, lo}
        # (inst $ac0, s)
        # Check if $ac0 == {hio, loo}
        # Check if crout == dsp control register
        .macro dspck_asio inst, hi, lo, hio, loo, s, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac0
        li      $4, \lo
        mtlo    $4, $ac0
        li      $4, \s
        \inst   $ac0, $4
        mfhi    $5, $ac0
        li      $6, \hio
        dsp_assert      $5, $6
        mflo    $5, $ac0
        li      $6, \loo
        dsp_assert      $5, $6
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # Set $ac3 <= {hi, lo}
        # Check if s == (inst ? $ac3)
        # Check if $ac3 == {hio, loo}
        # Check if crout == dsp control register
        .macro dspck_saio inst, hi, lo, hio, loo, s, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $4, \hi
        mthi    $4, $ac3
        li      $4, \lo
        mtlo    $4, $ac3
        li      $5, \s
        \inst   $5, $ac3
        mfhi    $5, $ac3
        li      $6, \hio
        dsp_assert      $5, $6
        mflo    $5, $ac3
        li      $6, \loo
        dsp_assert      $5, $6
        li      $4, \crout
        rddsp   $5
        dsp_assert      $4, $5
        .endm

        # Set dsp control register <= crin
        # (wrdsp s, m)
        # Check if crout == dsp control register
        .macro dspck_wrdsp s, m, crin, crout
        li      $4, \crin
        wrdsp   $4
        li      $5, \s
        wrdsp   $5, \m
        li      $6, \crout
        rddsp   $7
        dsp_assert      $6, $7
        .endm

        # Set dsp control register <= crin
        # Check if d == (rddsp ?, m)
        .macro dspck_rddsp d, m, crin
        li      $4, \crin
        wrdsp   $4
        rddsp   $5, \m
        li      $6, \d
        dsp_assert      $5, $6
        .endm

        # Check if d == (inst i(b))
        .macro dspck_load inst, d, i, b
        li      $4, \i
        la      $5, \b
        \inst   $6, $4($5)
        li      $7, \d
        dsp_assert      $6, $7
        .endm

        # Set dsp control register <= crin
        # Check if bposge32 is taken or not as expected in r
        # (1 => taken, 0 => not taken)
        .macro dspck_bposge32 crin, r
        li      $4, \crin
        wrdsp   $4
        li      $5, 1
        bposge32        1f
        nop
        li      $5, 0
1:
        li      $6, \r
        dsp_assert      $5, $6
        .endm

        # Check if tou == (inst tin, s)
        .macro dspck_tsimm inst, tou, tin, s, sa
        li      $4, \s
        li      $5, \tin
        \inst   $5, $4, \sa
        li      $6, \tou
        dsp_assert      $5, $6
        .endm

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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