Automatic date update in version.in
[binutils-gdb.git] / sim / testsuite / mips / utils-fpu.inc
blob3ba956dc0aff99eee7e6697847a6a74e885128ea
1 # MIPS simulator testsuite FPU utility functions.
2 # Copyright (C) 2004-2024 Free Software Foundation, Inc.
3 # Contributed by Chris Demetriou of Broadcom Corporation.
5 # This file is part of the GNU simulators.
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.
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.
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/>.  */
20         .macro  enable_fpu fr
21         mfc0    $20, $12
22         or      $20, $20, (1 << 29) | (\fr << 26)
23         mtc0    $20, $20
24         .endm
26         ###
27         ### Data movement macros
28         ###
30         .macro ld_fp_df r, v
31         .data
32 1:      .double \v
33         .previous
34         ldc1    \r, 1b
35         .endm
37         .macro ld_fp_di r, v
38         .data
39 1:      .dword  \v
40         .previous
41         ldc1    \r, 1b
42         .endm
44         .macro ld_fp_sf r, v
45         .data
46 1:      .float  \v
47         .previous
48         lwc1    \r, 1b
49         .endm
51         .macro ld_fp_si r, v
52         .data
53 1:      .word   \v
54         .previous
55         lwc1    \r, 1b
56         .endm
59         ###
60         ### FP condition code manipulation macros
61         ###
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
71         .macro clr_fp_cc clr
72         clrset_fp_cc \clr, 0
73         .endm
75         .macro set_fp_cc set
76         clrset_fp_cc 0, \set
77         .endm
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
91         .macro ck_fp_cc v
92         get_fp_cc $20
93         xori    $20, $20, \v
94         bnez    $20, _fail
95          nop
96         .endm
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