mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
Fix from Andreas Arnez for bug 342841 s390x unrecognized instruction fiebra
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15406
This commit is contained in:
parent
5081761ce2
commit
b1b0ea7eae
1
NEWS
1
NEWS
@ -258,6 +258,7 @@ where XXXXXX is the bug number as listed below.
|
||||
349874 Fix typos in source code
|
||||
349828 memcpy intercepts memmove causing src/dst overlap error (ppc64 ld.so)
|
||||
349941 di_notify_mmap might create wrong start/size DebugInfoMapping
|
||||
342841 s390x unrecognized instruction fiebra
|
||||
n-i-bz Provide implementations of certain compiler builtins to support
|
||||
compilers who may not provide those
|
||||
n-i-bz Old STABS code is still being compiled, but never used. Remove it.
|
||||
|
||||
@ -44,6 +44,20 @@ do { \
|
||||
opcode, src, dst, cc, rtext(round)); \
|
||||
} while (0)
|
||||
|
||||
#define round_to_int(opcode,type,round,value) \
|
||||
do { \
|
||||
type src = value; \
|
||||
type dst; \
|
||||
\
|
||||
__asm__ volatile (opcode " %[dst]," #round ",%[src]\n\t" \
|
||||
: [dst] "=f"(dst) \
|
||||
: [src] "f"(src) \
|
||||
: ); \
|
||||
\
|
||||
printf("%s %.5f\t-> %g %s\n", \
|
||||
opcode, src, dst, rtext(round)); \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define cfebr(value, round) \
|
||||
convert_to_int("cfebr",float,int32_t,PRId32,round,value)
|
||||
@ -54,6 +68,11 @@ do { \
|
||||
#define cgdbr(value, round) \
|
||||
convert_to_int("cgdbr",double,int64_t,PRId64,round,value)
|
||||
|
||||
#define fiebr(value, round) \
|
||||
round_to_int("fiebr",float,round,value)
|
||||
#define fidbr(value, round) \
|
||||
round_to_int("fidbr",double,round,value)
|
||||
|
||||
void
|
||||
set_rounding_mode(unsigned mode)
|
||||
{
|
||||
@ -117,5 +136,25 @@ int main(void)
|
||||
cgdbr(dval[j], M3_BFP_ROUND_NEGINF);
|
||||
}
|
||||
|
||||
/* f32 -> f32, round to int */
|
||||
for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
|
||||
set_rounding_mode(FPC_BFP_ROUND_ZERO);
|
||||
fiebr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
|
||||
set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
|
||||
fiebr(dval[j], M3_BFP_ROUND_ZERO);
|
||||
fiebr(dval[j], M3_BFP_ROUND_POSINF);
|
||||
fiebr(dval[j], M3_BFP_ROUND_NEGINF);
|
||||
}
|
||||
|
||||
/* f64 -> f64, round to int */
|
||||
for (j = 0; j < sizeof dval / sizeof dval[0]; ++j) {
|
||||
set_rounding_mode(FPC_BFP_ROUND_ZERO);
|
||||
fidbr(dval[j], M3_BFP_ROUND_NEAREST_EVEN);
|
||||
set_rounding_mode(FPC_BFP_ROUND_NEAREST_EVEN);
|
||||
fidbr(dval[j], M3_BFP_ROUND_ZERO);
|
||||
fidbr(dval[j], M3_BFP_ROUND_POSINF);
|
||||
fidbr(dval[j], M3_BFP_ROUND_NEGINF);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -142,3 +142,75 @@ cgdbr 0.000000 -> 0 cc = 0 [-> nearest even]
|
||||
cgdbr 0.000000 -> 0 cc = 0 [-> 0]
|
||||
cgdbr 0.000000 -> 0 cc = 0 [-> +inf]
|
||||
cgdbr 0.000000 -> 0 cc = 0 [-> -inf]
|
||||
fiebr 1.25000 -> 1 [-> nearest even]
|
||||
fiebr 1.25000 -> 1 [-> 0]
|
||||
fiebr 1.25000 -> 2 [-> +inf]
|
||||
fiebr 1.25000 -> 1 [-> -inf]
|
||||
fiebr 1.50000 -> 2 [-> nearest even]
|
||||
fiebr 1.50000 -> 1 [-> 0]
|
||||
fiebr 1.50000 -> 2 [-> +inf]
|
||||
fiebr 1.50000 -> 1 [-> -inf]
|
||||
fiebr 2.50000 -> 2 [-> nearest even]
|
||||
fiebr 2.50000 -> 2 [-> 0]
|
||||
fiebr 2.50000 -> 3 [-> +inf]
|
||||
fiebr 2.50000 -> 2 [-> -inf]
|
||||
fiebr 1.75000 -> 2 [-> nearest even]
|
||||
fiebr 1.75000 -> 1 [-> 0]
|
||||
fiebr 1.75000 -> 2 [-> +inf]
|
||||
fiebr 1.75000 -> 1 [-> -inf]
|
||||
fiebr -1.25000 -> -1 [-> nearest even]
|
||||
fiebr -1.25000 -> -1 [-> 0]
|
||||
fiebr -1.25000 -> -1 [-> +inf]
|
||||
fiebr -1.25000 -> -2 [-> -inf]
|
||||
fiebr -1.50000 -> -2 [-> nearest even]
|
||||
fiebr -1.50000 -> -1 [-> 0]
|
||||
fiebr -1.50000 -> -1 [-> +inf]
|
||||
fiebr -1.50000 -> -2 [-> -inf]
|
||||
fiebr -2.50000 -> -2 [-> nearest even]
|
||||
fiebr -2.50000 -> -2 [-> 0]
|
||||
fiebr -2.50000 -> -2 [-> +inf]
|
||||
fiebr -2.50000 -> -3 [-> -inf]
|
||||
fiebr -1.75000 -> -2 [-> nearest even]
|
||||
fiebr -1.75000 -> -1 [-> 0]
|
||||
fiebr -1.75000 -> -1 [-> +inf]
|
||||
fiebr -1.75000 -> -2 [-> -inf]
|
||||
fiebr 0.00000 -> 0 [-> nearest even]
|
||||
fiebr 0.00000 -> 0 [-> 0]
|
||||
fiebr 0.00000 -> 0 [-> +inf]
|
||||
fiebr 0.00000 -> 0 [-> -inf]
|
||||
fidbr 1.25000 -> 1 [-> nearest even]
|
||||
fidbr 1.25000 -> 1 [-> 0]
|
||||
fidbr 1.25000 -> 2 [-> +inf]
|
||||
fidbr 1.25000 -> 1 [-> -inf]
|
||||
fidbr 1.50000 -> 2 [-> nearest even]
|
||||
fidbr 1.50000 -> 1 [-> 0]
|
||||
fidbr 1.50000 -> 2 [-> +inf]
|
||||
fidbr 1.50000 -> 1 [-> -inf]
|
||||
fidbr 2.50000 -> 2 [-> nearest even]
|
||||
fidbr 2.50000 -> 2 [-> 0]
|
||||
fidbr 2.50000 -> 3 [-> +inf]
|
||||
fidbr 2.50000 -> 2 [-> -inf]
|
||||
fidbr 1.75000 -> 2 [-> nearest even]
|
||||
fidbr 1.75000 -> 1 [-> 0]
|
||||
fidbr 1.75000 -> 2 [-> +inf]
|
||||
fidbr 1.75000 -> 1 [-> -inf]
|
||||
fidbr -1.25000 -> -1 [-> nearest even]
|
||||
fidbr -1.25000 -> -1 [-> 0]
|
||||
fidbr -1.25000 -> -1 [-> +inf]
|
||||
fidbr -1.25000 -> -2 [-> -inf]
|
||||
fidbr -1.50000 -> -2 [-> nearest even]
|
||||
fidbr -1.50000 -> -1 [-> 0]
|
||||
fidbr -1.50000 -> -1 [-> +inf]
|
||||
fidbr -1.50000 -> -2 [-> -inf]
|
||||
fidbr -2.50000 -> -2 [-> nearest even]
|
||||
fidbr -2.50000 -> -2 [-> 0]
|
||||
fidbr -2.50000 -> -2 [-> +inf]
|
||||
fidbr -2.50000 -> -3 [-> -inf]
|
||||
fidbr -1.75000 -> -2 [-> nearest even]
|
||||
fidbr -1.75000 -> -1 [-> 0]
|
||||
fidbr -1.75000 -> -1 [-> +inf]
|
||||
fidbr -1.75000 -> -2 [-> -inf]
|
||||
fidbr 0.00000 -> 0 [-> nearest even]
|
||||
fidbr 0.00000 -> 0 [-> 0]
|
||||
fidbr 0.00000 -> 0 [-> +inf]
|
||||
fidbr 0.00000 -> 0 [-> -inf]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user