loongson buffer overflow
[binutils-gdb.git] / sim / testsuite / or1k / fpu-unordered.S
blob23f969f6867f83f4f13d13119b111f7acb9204f2
1 /* Tests some basic unordered fpu compare instructions.
3    Copyright (C) 2019-2024 Free Software Foundation, Inc.
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; either version 3 of the License, or
8    (at your option) any later version.
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
15    You should have received a copy of the GNU General Public License
16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18 # mach: or1k
19 # output: report(0x40490fd0);\n
20 # output: report(0x402df84d);\n
21 # output: report(0x7fc00000);\n
22 # output: \n
23 # output: report(0x00000001);\n
24 # output: \n
25 # output: report(0x00000000);\n
26 # output: \n
27 # output: report(0x00000001);\n
28 # output: \n
29 # output: report(0x00000001);\n
30 # output: \n
31 # output: exit(0)\n
33 #include "or1k-asm-test-helpers.h"
35         STANDARD_TEST_ENVIRONMENT
37         .section .data
38         .align 4
39         .type   pi, @object
40         .size   pi, 4
41 anchor:
42 pi:
43         .float  3.14159
45         .type   e, @object
46         .size   e, 4
48         .float  2.71828
50         .section .text
51 start_tests:
52         PUSH LINK_REGISTER_R9
54         /* Test unordered float comparisons.  Setting up:
55          *  r11      pointer to data
56          *  r12  pi  as float
57          *  r13  e   as float
58          *  r16  nan as float
59          */
60         l.movhi r11, ha(anchor)
61         l.addi  r11, r11, lo(anchor)
62         l.lwz   r12, 0(r11)
64         l.lwz   r13, 4(r11)
66         /* Make a NaN.  */
67         lf.sub.s r16, r13, r13
68         lf.div.s r16, r16, r16
70         /* Output to ensure we loaded it correctly.  */
71         REPORT_REG_TO_CONSOLE r12
72         REPORT_REG_TO_CONSOLE r13
73         REPORT_REG_TO_CONSOLE r16
74         PRINT_NEWLINE_TO_CONSOLE
76         lf.sfuge.s r12, r13
77         MOVE_FROM_SPR r2, SPR_SR
78         REPORT_BIT_TO_CONSOLE r2, SPR_SR_F
79         PRINT_NEWLINE_TO_CONSOLE
81         lf.sfun.s r12, r13
82         MOVE_FROM_SPR r2, SPR_SR
83         REPORT_BIT_TO_CONSOLE r2, SPR_SR_F
84         PRINT_NEWLINE_TO_CONSOLE
86         lf.sfun.s r12, r16
87         MOVE_FROM_SPR r2, SPR_SR
88         REPORT_BIT_TO_CONSOLE r2, SPR_SR_F
89         PRINT_NEWLINE_TO_CONSOLE
91         lf.sfueq.s r12, r12
92         MOVE_FROM_SPR r2, SPR_SR
93         REPORT_BIT_TO_CONSOLE r2, SPR_SR_F
94         PRINT_NEWLINE_TO_CONSOLE
96         POP LINK_REGISTER_R9
97         RETURN_TO_LINK_REGISTER_R9