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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.2/] [sim/] [testsuite/] [sim/] [mips/] [utils-fpu.inc] - Rev 330

Compare with Previous | Blame | View Log

# MIPS simulator testsuite FPU utility functions.
# Copyright (C) 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
# Contributed by Chris Demetriou of Broadcom Corporation.
#
# 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/>.  */

        .macro  enable_fpu fr
        mfc0    $20, $12
        or      $20, $20, (1 << 29) | (\fr << 26)
        mtc0    $20, $20
        .endm

        ###
        ### Data movement macros
        ###

        .macro ld_fp_df r, v
        .data
1:      .double \v
        .previous
        ldc1    \r, 1b
        .endm

        .macro ld_fp_di r, v
        .data
1:      .dword  \v
        .previous
        ldc1    \r, 1b
        .endm

        .macro ld_fp_sf r, v
        .data
1:      .float  \v
        .previous
        lwc1    \r, 1b
        .endm

        .macro ld_fp_si r, v
        .data
1:      .word   \v
        .previous
        lwc1    \r, 1b
        .endm


        ###
        ### FP condition code manipulation macros
        ###

        .macro clrset_fp_cc clr, set
        cfc1    $20, $31        
        or      $20, $20, (((\clr & 0xfe) << 24) | ((\clr & 0x01) << 23))
        xor     $20, $20, (((\clr & 0xfe) << 24) | ((\clr & 0x01) << 23))
        or      $20, $20, (((\set & 0xfe) << 24) | ((\set & 0x01) << 23))
        ctc1    $20, $31
        .endm

        .macro clr_fp_cc clr
        clrset_fp_cc \clr, 0
        .endm

        .macro set_fp_cc set
        clrset_fp_cc 0, \set
        .endm

        .macro get_fp_cc r
        .set push
        .set noat
        cfc1    $1, $31
        srl     $1, $1, 23
        andi    \r, $1, 0x1fc
        andi    $1, $1, 0x1
        srl     \r, \r, 1
        or      \r, \r, $1
        .set pop
        .endm

        .macro ck_fp_cc v
        get_fp_cc $20
        xori    $20, $20, \v
        bnez    $20, _fail
         nop
        .endm

        .macro ckm_fp_cc v, mask
        get_fp_cc $20
        xori    $20, $20, \v
        andi    $20, $20, \mask
        bnez    $20, _fail
         nop
        .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.