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
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 \
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
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;
}
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
--- /dev/null
+/* Hexadecimal Floating Point insns
+
+ HFP is generally not supported with very few exceptions.
+
+ Carved out of bfp-2.c with no modifications. */
+
+#include <stdio.h>
+
+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;
+}
+
--- /dev/null
+lder 321.500000 -> 43a0c00000000000
+lder -8388607.000000 -> cafffffe00000000
+lde -321.500000 -> c3a0c00000000000
+lde 8388607.000000 -> 4afffffe00000000