From: Florian Krohm Date: Sun, 21 Sep 2025 21:03:55 +0000 (+0000) Subject: s390: New testcase none/tests/s390x/hfp X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=78f1569e2235796256742d7c75763034677065af;p=thirdparty%2Fvalgrind.git s390: New testcase none/tests/s390x/hfp Containing the very few needed hexadecimal floating point insns. Carved out of none/tests/s390x/bfp-2 Part of fixing https://bugs.kde.org/show_bug.cgi?id=509572 --- diff --git a/none/tests/s390x/Makefile.am b/none/tests/s390x/Makefile.am index 98ef178e7..c1909da39 100644 --- a/none/tests/s390x/Makefile.am +++ b/none/tests/s390x/Makefile.am @@ -22,7 +22,7 @@ INSN_TESTS = clc clcle cvb cvd icm lpr tcxb lam_stam xc mvst add sub mul \ vector_float add-z14 sub-z14 mul-z14 bic \ misc3 vec2 vec2_float \ dfp-1 dfp-2 dfp-3 dfp-4 dfpconv dfpext dfptest pfpo srnmt \ - fpext fixbr + fpext fixbr hfp check_PROGRAMS = $(INSN_TESTS) \ allexec \ diff --git a/none/tests/s390x/bfp-2.c b/none/tests/s390x/bfp-2.c index 73349eddd..b8109ba88 100644 --- a/none/tests/s390x/bfp-2.c +++ b/none/tests/s390x/bfp-2.c @@ -71,26 +71,6 @@ void lcdbr(double in) printf("lcdbr %f -> %f\n", in, out); } -void lder(double prev, float in) -{ - unsigned long out; - - __asm__ volatile("lder %[prev],%[in]\n\t" - "std %[prev],%[out]" : - [out]"=R"(out) : [prev]"f"(prev), [in]"f"(in)); - printf("lder %f -> %lx\n", in, out); -} - -void lde(double prev, float in) -{ - unsigned long out; - - __asm__ volatile("lde %[prev],%[in]\n\t" - "std %[prev],%[out]" : - [out]"=R"(out) : [prev]"f"(prev), [in]"R"(in)); - printf("lde %f -> %lx\n", in, out); -} - int main(void) { // square root @@ -118,11 +98,5 @@ int main(void) lcdbr(-17.5); // 8 byte values lcdbr(234.5); // 8 byte values - // load lengthened - lder(0.2, 321.5f); - lder(0.9, -8388607.f); - lde(0.2, -321.5f); - lde(0.9, 8388607.f); - return 0; } diff --git a/none/tests/s390x/bfp-2.stdout.exp b/none/tests/s390x/bfp-2.stdout.exp index b1bc484c5..074180a27 100644 --- a/none/tests/s390x/bfp-2.stdout.exp +++ b/none/tests/s390x/bfp-2.stdout.exp @@ -12,7 +12,3 @@ lcebr -23.500000 -> 23.500000 lcebr 123.500000 -> -123.500000 lcdbr -17.500000 -> 17.500000 lcdbr 234.500000 -> -234.500000 -lder 321.500000 -> 43a0c00000000000 -lder -8388607.000000 -> cafffffe00000000 -lde -321.500000 -> c3a0c00000000000 -lde 8388607.000000 -> 4afffffe00000000 diff --git a/none/tests/s390x/hfp.c b/none/tests/s390x/hfp.c new file mode 100644 index 000000000..73f70c37c --- /dev/null +++ b/none/tests/s390x/hfp.c @@ -0,0 +1,39 @@ +/* Hexadecimal Floating Point insns + + HFP is generally not supported with very few exceptions. + + Carved out of bfp-2.c with no modifications. */ + +#include + +void lder(double prev, float in) +{ + unsigned long out; + + __asm__ volatile("lder %[prev],%[in]\n\t" + "std %[prev],%[out]" : + [out]"=R"(out) : [prev]"f"(prev), [in]"f"(in)); + printf("lder %f -> %lx\n", in, out); +} + +void lde(double prev, float in) +{ + unsigned long out; + + __asm__ volatile("lde %[prev],%[in]\n\t" + "std %[prev],%[out]" : + [out]"=R"(out) : [prev]"f"(prev), [in]"R"(in)); + printf("lde %f -> %lx\n", in, out); +} + +int main(void) +{ + // load lengthened + lder(0.2, 321.5f); + lder(0.9, -8388607.f); + lde(0.2, -321.5f); + lde(0.9, 8388607.f); + + return 0; +} + diff --git a/none/tests/s390x/hfp.stderr.exp b/none/tests/s390x/hfp.stderr.exp new file mode 100644 index 000000000..139597f9c --- /dev/null +++ b/none/tests/s390x/hfp.stderr.exp @@ -0,0 +1,2 @@ + + diff --git a/none/tests/s390x/hfp.stdout.exp b/none/tests/s390x/hfp.stdout.exp new file mode 100644 index 000000000..2e3e77bb7 --- /dev/null +++ b/none/tests/s390x/hfp.stdout.exp @@ -0,0 +1,4 @@ +lder 321.500000 -> 43a0c00000000000 +lder -8388607.000000 -> cafffffe00000000 +lde -321.500000 -> c3a0c00000000000 +lde 8388607.000000 -> 4afffffe00000000 diff --git a/none/tests/s390x/hfp.vgtest b/none/tests/s390x/hfp.vgtest new file mode 100644 index 000000000..296bd099a --- /dev/null +++ b/none/tests/s390x/hfp.vgtest @@ -0,0 +1 @@ +prog: hfp