1 /* Test functions for direct move support. */
4 void __attribute__((__noinline__
))
5 copy (TYPE
*a
, TYPE
*b
)
11 void __attribute__((__noinline__
))
12 load_gpr (TYPE
*a
, TYPE
*b
)
15 __asm__ ("# gpr, reg = %0" : "+b" (c
));
21 void __attribute__((__noinline__
))
22 load_fpr (TYPE
*a
, TYPE
*b
)
25 __asm__ ("# fpr, reg = %0" : "+d" (c
));
31 void __attribute__((__noinline__
))
32 load_altivec (TYPE
*a
, TYPE
*b
)
35 __asm__ ("# altivec, reg = %0" : "+v" (c
));
41 void __attribute__((__noinline__
))
42 load_vsx (TYPE
*a
, TYPE
*b
)
45 __asm__ ("# vsx, reg = %x0" : "+wa" (c
));
51 void __attribute__((__noinline__
))
52 load_gpr_to_vsx (TYPE
*a
, TYPE
*b
)
56 __asm__ ("# gpr, reg = %0" : "+b" (c
));
58 __asm__ ("# vsx, reg = %x0" : "+wa" (d
));
64 void __attribute__((__noinline__
))
65 load_vsx_to_gpr (TYPE
*a
, TYPE
*b
)
69 __asm__ ("# vsx, reg = %x0" : "+wa" (c
));
71 __asm__ ("# gpr, reg = %0" : "+b" (d
));
77 typedef void (fn_type (TYPE
*, TYPE
*));
84 const struct test_struct test_functions
[] = {
87 { load_gpr
, "load_gpr" },
90 { load_fpr
, "load_fpr" },
93 { load_altivec
, "load_altivec" },
96 { load_vsx
, "load_vsx" },
99 { load_gpr_to_vsx
, "load_gpr_to_vsx" },
101 #ifndef NO_VSX_TO_GPR
102 { load_vsx_to_gpr
, "load_vsx_to_gpr" },
106 /* Test a given value for each of the functions. */
107 void __attribute__((__noinline__
))
112 for (i
= 0; i
< sizeof (test_functions
) / sizeof (test_functions
[0]); i
++)
116 test_functions
[i
].func (&a
, &b
);
117 if (memcmp ((void *)&a
, (void *)&b
, sizeof (TYPE
)) != 0)
130 unsigned char bytes
[sizeof (TYPE
)];
134 TYPE value
= (TYPE
)-5;
135 for (i
= 0; i
< 12; i
++)
141 for (i
= 0; i
< 8*sizeof (TYPE
); i
++)
142 test_value (((TYPE
)1) << i
);
145 TYPE value
= (TYPE
)0;
146 for (i
= 0; i
< 10; i
++)
149 test_value (~ value
);
153 for (i
= 0; i
< 8*sizeof (TYPE
); i
++)
154 test_value (((TYPE
)1) << i
);
157 TYPE value
= (TYPE
)-5;
158 for (i
= 0; i
< 12; i
++)
164 test_value ((TYPE
)3.1415926535);
165 test_value ((TYPE
)1.23456);
166 test_value ((TYPE
)(-0.0));
167 test_value ((TYPE
)NAN
);
168 test_value ((TYPE
)+INFINITY
);
169 test_value ((TYPE
)-INFINITY
);
172 for (j
= 0; j
< 10; j
++)
174 for (i
= 0; i
< sizeof (TYPE
); i
++)
175 u
.bytes
[i
] = (unsigned char) (random () >> 4);
177 test_value (u
.value
);