1# MIPS simulator testsuite FPU utility functions. 2# Copyright (C) 2004-2023 Free Software Foundation, Inc. 3# Contributed by Chris Demetriou of Broadcom Corporation. 4# 5# This file is part of the GNU simulators. 6# 7# This program is free software; you can redistribute it and/or modify 8# it under the terms of the GNU General Public License as published by 9# the Free Software Foundation; either version 3 of the License, or 10# (at your option) any later version. 11# 12# This program is distributed in the hope that it will be useful, 13# but WITHOUT ANY WARRANTY; without even the implied warranty of 14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15# GNU General Public License for more details. 16# 17# You should have received a copy of the GNU General Public License 18# along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 .macro enable_fpu fr 21 mfc0 $20, $12 22 or $20, $20, (1 << 29) | (\fr << 26) 23 mtc0 $20, $20 24 .endm 25 26 ### 27 ### Data movement macros 28 ### 29 30 .macro ld_fp_df r, v 31 .data 321: .double \v 33 .previous 34 ldc1 \r, 1b 35 .endm 36 37 .macro ld_fp_di r, v 38 .data 391: .dword \v 40 .previous 41 ldc1 \r, 1b 42 .endm 43 44 .macro ld_fp_sf r, v 45 .data 461: .float \v 47 .previous 48 lwc1 \r, 1b 49 .endm 50 51 .macro ld_fp_si r, v 52 .data 531: .word \v 54 .previous 55 lwc1 \r, 1b 56 .endm 57 58 59 ### 60 ### FP condition code manipulation macros 61 ### 62 63 .macro clrset_fp_cc clr, set 64 cfc1 $20, $31 65 or $20, $20, (((\clr & 0xfe) << 24) | ((\clr & 0x01) << 23)) 66 xor $20, $20, (((\clr & 0xfe) << 24) | ((\clr & 0x01) << 23)) 67 or $20, $20, (((\set & 0xfe) << 24) | ((\set & 0x01) << 23)) 68 ctc1 $20, $31 69 .endm 70 71 .macro clr_fp_cc clr 72 clrset_fp_cc \clr, 0 73 .endm 74 75 .macro set_fp_cc set 76 clrset_fp_cc 0, \set 77 .endm 78 79 .macro get_fp_cc r 80 .set push 81 .set noat 82 cfc1 $1, $31 83 srl $1, $1, 23 84 andi \r, $1, 0x1fc 85 andi $1, $1, 0x1 86 srl \r, \r, 1 87 or \r, \r, $1 88 .set pop 89 .endm 90 91 .macro ck_fp_cc v 92 get_fp_cc $20 93 xori $20, $20, \v 94 bnez $20, _fail 95 nop 96 .endm 97 98 .macro ckm_fp_cc v, mask 99 get_fp_cc $20 100 xori $20, $20, \v 101 andi $20, $20, \mask 102 bnez $20, _fail 103 nop 104 .endm 105