Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
0620228c
Commit
0620228c
authored
26 years ago
by
Jeff Law
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
New test from HJ.
From-SVN: r19326
parent
f77cc4cc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
76 additions
and
0 deletions
+76
-0
gcc/testsuite/gcc.dg/980414-1.c
+76
-0
No files found.
gcc/testsuite/gcc.dg/980414-1.c
0 → 100644
View file @
0620228c
/* Test double on x86. */
/* { dg-do run { target i?86-*-* } } */
/* { dg-options -O2 } */
static
__inline
double
mypow
(
double
__x
,
double
__y
)
{
register
double
__value
,
__exponent
;
long
__p
=
(
long
)
__y
;
if
(
__y
==
(
double
)
__p
)
{
double
__r
=
1
.
0
;
if
(
__p
==
0
)
return
1
.
0
;
if
(
__p
<
0
)
{
__p
=
-
__p
;
__x
=
1
.
0
/
__x
;
}
while
(
1
)
{
if
(
__p
&
1
)
__r
*=
__x
;
__p
>>=
1
;
if
(
__p
==
0
)
return
__r
;
__x
*=
__x
;
}
}
__asm
__volatile__
(
"fmul %%st(1) # y * log2(x)
\n\t
"
"fstl %%st(1)
\n\t
"
"frndint # int(y * log2(x))
\n\t
"
"fxch
\n\t
"
"fsub %%st(1) # fract(y * log2(x))
\n\t
"
"f2xm1 # 2^(fract(y * log2(x))) - 1
\n\t
"
:
"=t"
(
__value
),
"=u"
(
__exponent
)
:
"0"
(
__x
),
"1"
(
__y
));
__value
+=
1
.
0
;
__asm
__volatile__
(
"fscale"
:
"=t"
(
__value
)
:
"0"
(
__value
),
"u"
(
__exponent
));
return
__value
;
}
const
double
E1
=
2
.
71828182845904523536028747135
;
double
fact
(
double
x
)
{
double
corr
;
corr
=
1
.
0
;
return
corr
*
mypow
(
x
/
E1
,
x
);
}
int
main
()
{
double
y
,
z
;
y
=
fact
(
46
.
2
);
z
=
mypow
(
46
.
2
/
E1
,
46
.
2
);
#if 0
printf ("%26.19e, %26.19e\n", y, z);
#endif
if
(
y
>
z
)
y
-=
z
;
else
y
=
z
-
y
;
y
/=
z
;
if
(
y
>
0
.
1
)
abort
();
return
0
;
}
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment