jm-fp.stderr.exp jm-fp.stdout.exp jm-fp.vgtest \
jm-vmx.stderr.exp jm-vmx.stdout.exp jm-vmx.vgtest \
mftocrf.stderr.exp mftocrf.stdout.exp mftocrf.vgtest \
+ mcrfs.stderr.exp mcrfs.stdout.exp mcrfs.vgtest \
round.stderr.exp round.stdout.exp round.vgtest \
test_fx.stderr.exp test_fx.stdout.exp test_fx.vgtest \
test_gx.stderr.exp test_gx.stdout.exp test_gx.vgtest \
xlc_dbl_u32.stderr.exp xlc_dbl_u32.stdout.exp xlc_dbl_u32.vgtest
check_PROGRAMS = \
- ldstrev lsw jm-insns mftocrf round test_fx test_gx testVMX \
- twi xlc_dbl_u32
+ ldstrev lsw jm-insns mftocrf mcrfs round test_fx test_gx \
+ testVMX twi xlc_dbl_u32
AM_CFLAGS = $(WERROR) -Winline -Wall -Wshadow -g -I$(top_srcdir)/include \
@FLAG_M32@
--- /dev/null
+
+#include <stdio.h>
+
+typedef unsigned int UInt;
+
+void set_fpscr ( UInt x )
+{
+ UInt d[2];
+ d[0] = 0;
+ d[1] = x;
+ __asm__ __volatile__(
+ "lfd %%f0,0(%0)\n\t"
+ "mtfsf 255,%%f0"
+ : /*out*/
+ : /*in*/ "b"(&d[0])
+ : /*trash*/ "fr0", "cc", "memory"
+ );
+
+}
+
+int main ( void )
+{
+ int i;
+ UInt r;
+ for (i = 0; i < 16; i++) {
+ set_fpscr(i);
+ __asm__ __volatile__(
+ "li %0,0\n\t"
+ "mtcr %0\n\t"
+ "mcrfs 1,7\n\t"
+ "mfcr %0"
+ : /*out*/ "=b"(r)
+ : /*in*/
+ : /*trash*/ "cc"
+ );
+ printf("0x%x -> 0x%08x\n", i, r);
+ }
+ for (i = 0; i < 16; i++) {
+ set_fpscr(i);
+ __asm__ __volatile__(
+ "li %0,-1\n\t"
+ "mtcr %0\n\t"
+ "mcrfs 1,7\n\t"
+ "mfcr %0"
+ : /*out*/ "=b"(r)
+ : /*in*/
+ : /*trash*/ "cc"
+ );
+ printf("0x%x -> 0x%08x\n", i, r);
+ }
+ return 0;
+}