This adds powerpc version of fptest.h. It just stores and loads the raw
integer into/from FPU registers without converting to proper IEEE form.
Converting would have added unneccessary complexity. As a side note, the
ppc barfs on the test with "1000 != 10". :I
-- hl
diff -Nru xenomai.orig/include/asm-powerpc/fptest.h
xenomai/include/asm-powerpc/fptest.h
--- xenomai.orig/include/asm-powerpc/fptest.h 2006-06-10 10:29:29.335736000
+0000
+++ xenomai/include/asm-powerpc/fptest.h 2006-06-10 16:12:09.395132000
+0000
@@ -10,11 +10,94 @@
static inline void fp_regs_set(unsigned val)
{
+ uint64_t fpval = val;
+ __asm__ __volatile__("lfd 0, %0\n"
+ " fmr 1, 0\n"
+ " fmr 2, 0\n"
+ " fmr 3, 0\n"
+ " fmr 4, 0\n"
+ " fmr 5, 0\n"
+ " fmr 6, 0\n"
+ " fmr 7, 0\n"
+ " fmr 8, 0\n"
+ " fmr 9, 0\n"
+ " fmr 10, 0\n"
+ " fmr 11, 0\n"
+ " fmr 12, 0\n"
+ " fmr 13, 0\n"
+ " fmr 14, 0\n"
+ " fmr 15, 0\n"
+ " fmr 16, 0\n"
+ " fmr 17, 0\n"
+ " fmr 18, 0\n"
+ " fmr 19, 0\n"
+ " fmr 20, 0\n"
+ " fmr 21, 0\n"
+ " fmr 22, 0\n"
+ " fmr 23, 0\n"
+ " fmr 24, 0\n"
+ " fmr 25, 0\n"
+ " fmr 26, 0\n"
+ " fmr 27, 0\n"
+ " fmr 28, 0\n"
+ " fmr 29, 0\n"
+ " fmr 30, 0\n"
+ " fmr 31, 0\n"
+ :
+ : "m" (fpval));
}
+#define FPTEST_REGVAL(n) { \
+ uint64_t t; \
+ __asm__ __volatile__(" stfd " #n ", %0" : "=m" (t)); \
+ e[n] = (unsigned)t; \
+ }
+
static inline int fp_regs_check(unsigned val)
{
- return 0;
+ unsigned i, failed = 0;
+ uint32_t e[32];
+
+ FPTEST_REGVAL(0);
+ FPTEST_REGVAL(1);
+ FPTEST_REGVAL(2);
+ FPTEST_REGVAL(3);
+ FPTEST_REGVAL(4);
+ FPTEST_REGVAL(5);
+ FPTEST_REGVAL(6);
+ FPTEST_REGVAL(7);
+ FPTEST_REGVAL(8);
+ FPTEST_REGVAL(9);
+ FPTEST_REGVAL(10);
+ FPTEST_REGVAL(11);
+ FPTEST_REGVAL(12);
+ FPTEST_REGVAL(13);
+ FPTEST_REGVAL(14);
+ FPTEST_REGVAL(15);
+ FPTEST_REGVAL(16);
+ FPTEST_REGVAL(17);
+ FPTEST_REGVAL(18);
+ FPTEST_REGVAL(19);
+ FPTEST_REGVAL(20);
+ FPTEST_REGVAL(21);
+ FPTEST_REGVAL(22);
+ FPTEST_REGVAL(23);
+ FPTEST_REGVAL(24);
+ FPTEST_REGVAL(25);
+ FPTEST_REGVAL(26);
+ FPTEST_REGVAL(27);
+ FPTEST_REGVAL(28);
+ FPTEST_REGVAL(29);
+ FPTEST_REGVAL(30);
+ FPTEST_REGVAL(31);
+
+ for (i = 0; i < 32; i++)
+ if (e[i] != val) {
+ printk("r%d: %u != %u\n", i, e[i], val);
+ failed = 1;
+ }
+
+ return failed;
}
#endif /* FPTEST_H */
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core