Example #1
0
static inline void restore_fpcr(void)
{
	unsigned int offset;
	vector unsigned int fpcr;

	/* Restore, Step 13:
	 *    Restore the floating-point status and control
	 *    register from the LSCSA.
	 */
	offset = LSCSA_QW_OFFSET(fpcr);
	fpcr = regs_spill[offset].v;
	spu_mtfpscr(fpcr);
}
Example #2
0
int main()
{
	TestVec64_Ldexp test_a[] = {
		{
			// zero
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000400ULL,0xFFFFFFFFFFFFFC00ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL}
		},{
			// MIN , MAX
			{0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
			{0x0000000000000001ULL,0x0000000000000001ULL},
			{0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
			{0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
			{0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
			{0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL}
		},{
			// Inf , -Inf
			{0x7FF0000000000000ULL,0xFFF0000000000000ULL},
			{0x0000000000000001ULL,0x0000000000000001ULL},
			{0x7FF0000000000000ULL,0xFFF0000000000000ULL},
			{0x7FF0000000000000ULL,0xFFF0000000000000ULL},
			{0x7FF0000000000000ULL,0xFFF0000000000000ULL},
			{0x7FF0000000000000ULL,0xFFF0000000000000ULL}
		},{
#ifdef LDEXPD2_ROUND
			// denotmalized 
			{0x8000000000000003ULL,0x0000000000000003ULL},
			{0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL},
			{0x8000000000000002ULL,0x0000000000000001ULL},
			{0x8000000000000001ULL,0x0000000000000002ULL},
			{0x8000000000000001ULL,0x0000000000000001ULL},
			{0x8000000000000002ULL,0x0000000000000002ULL}
		},{
			// denotmalized -54
			{0x0010000000000001ULL,0x8010000000000001ULL},
			{0xFFFFFFFFFFFFFFCAULL,0xFFFFFFFFFFFFFFCAULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000001ULL,0x8000000000000001ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL}
		},{
			// max -> !
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0xFFFFFFFFFFFFF7CEULL,0xFFFFFFFFFFFFF7CEULL},
			{0x0000000000000001ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000001ULL,0x8000000000000001ULL},
			{0x0000000000000000ULL,0x8000000000000001ULL}
		},{
			// max -> !
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0xFFFFFFFFFFFFF7CDULL,0xFFFFFFFFFFFFF7CDULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000001ULL,0x8000000000000001ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL}
		},{
#else  // LDEXPD2_ROUND
			// denotmalized 
			{0x8000000000000003ULL,0x0000000000000003ULL},
			{0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL},
			{0x8000000000000001ULL,0x0000000000000001ULL},
			{0x8000000000000001ULL,0x0000000000000001ULL},
			{0x8000000000000001ULL,0x0000000000000001ULL},
			{0x8000000000000001ULL,0x0000000000000001ULL}
		},{

#endif  // LDEXPD2_ROUND
			// denotmalized 
			{0x0010000000000000ULL,0x8010000000000000ULL},
			{0xFFFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL},
			{0x0008000000000000ULL,0x8008000000000000ULL},
			{0x0008000000000000ULL,0x8008000000000000ULL},
			{0x0008000000000000ULL,0x8008000000000000ULL},
			{0x0008000000000000ULL,0x8008000000000000ULL}
		},{
			// denotmalized 
			{0x0008000000000000ULL,0x8008000000000000ULL},
			{0x0000000000000001ULL,0x0000000000000001ULL},
			{0x0010000000000000ULL,0x8010000000000000ULL},
			{0x0010000000000000ULL,0x8010000000000000ULL},
			{0x0010000000000000ULL,0x8010000000000000ULL},
			{0x0010000000000000ULL,0x8010000000000000ULL}
		},{
			// 1.0 
			{0x3ff0000000000000ULL,0xbff0000000000000ULL},
			{0x00000000000003ffULL,0x00000000000003ffULL},
			{0x7FE0000000000000ULL,0xFFE0000000000000ULL},
			{0x7FE0000000000000ULL,0xFFE0000000000000ULL},
			{0x7FE0000000000000ULL,0xFFE0000000000000ULL},
			{0x7FE0000000000000ULL,0xFFE0000000000000ULL}
		},{
			// 1.0 -> max
			{0x3ff0000000000000ULL,0xbff0000000000000ULL},
			{0x0000000000000400ULL,0x0000000000000400ULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL}
		},{
			// max -> !
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0xFFFFFFFF00000000ULL,0xFFFFFFFF00000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL},
			{0x0000000000000000ULL,0x8000000000000000ULL}
		},{
			// min-> 
			{0x0000000000000001ULL,0x8000000000000001ULL},
			{0x0FFFFFFFFFFFFFFFULL,0x0FFFFFFFFFFFFFFFULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL},
			{0x7FEFFFFFFFFFFFFFULL,0xFFEFFFFFFFFFFFFFULL}
		},{
			// NaN , -NaN
			{0x7FFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL},
			{0x0000000000000001ULL,0x0000000000000001ULL},
			{0x7FFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL},
			{0x7FFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL},
			{0x7FFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL},
			{0x7FFFFFFFFFFFFFFFULL,0xFFFFFFFFFFFFFFFFULL}
		},{
			{0ULL,0ULL},
			{0ULL,0ULL},
			{0ULL,0ULL},
			{0ULL,0ULL},
			{0ULL,0ULL},
			{0ULL,0ULL}
		}
	};
	int ii, test_ctr = 1;
	char msg[80];
	vec_double2 res_v;

	TEST_SET_START("20060905160000NM","NM", "ldexpd2");

   TEST_START("ldexpd2");

	for (ii=0; ; ii++) {
		if ( (test_a[ii].xxx[0] == 0) && (test_a[ii].xxx[1] == 0) ) break;

		// set Floating point round mode
		spu_mtfpscr(((vec_uint4){0x0100,0,0,0}));
		res_v = ldexpd2 (*((vec_double2 *)&test_a[ii].xxx[0]), *((vec_llong2 *)&test_a[ii].exp[0]));
		sprintf(msg,"2006090516%04dNM", test_ctr++);
		TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans0[0])), 0);

#ifdef LDEXPD2_ROUND

		spu_mtfpscr(((vec_uint4){0x0600,0,0,0}));
		res_v = ldexpd2 (*((vec_double2 *)&test_a[ii].xxx[0]), *((vec_llong2 *)&test_a[ii].exp[0]));
		sprintf(msg,"2006090516%04dNM", test_ctr++);
		TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans1[0])), 0);

		spu_mtfpscr(((vec_uint4){0x0b00,0,0,0}));
		res_v = ldexpd2 (*((vec_double2 *)&test_a[ii].xxx[0]), *((vec_llong2 *)&test_a[ii].exp[0]));
		sprintf(msg,"2006090516%04dNM", test_ctr++);
		TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans2[0])), 0);

		spu_mtfpscr(((vec_uint4){0x0c00,0,0,0}));
		res_v = ldexpd2 (*((vec_double2 *)&test_a[ii].xxx[0]), *((vec_llong2 *)&test_a[ii].exp[0]));
		sprintf(msg,"2006090516%04dNM", test_ctr++);
		TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans3[0])), 0);
#endif  // LDEXPD2_ROUND

	}


   TEST_SET_DONE();

   TEST_EXIT();

}
Example #3
0
int main()
{
    TestVec64_NerI test_a[] = {
        {
            // zero
            {0x0000000000000000ULL,0x8000000000000000ULL},
            {0x0000000000000000ULL,0x8000000000000000ULL},
            {0x0000000000000000ULL,0x8000000000000000ULL},
            {0x0000000000000000ULL,0x8000000000000000ULL},
            {0x0000000000000000ULL,0x8000000000000000ULL}
        },{
            // border
            {0xc330000000000000ULL,0x4330000000000000ULL},
            {0xc330000000000000ULL,0x4330000000000000ULL},
            {0xc330000000000000ULL,0x4330000000000000ULL},
            {0xc330000000000000ULL,0x4330000000000000ULL},
            {0xc330000000000000ULL,0x4330000000000000ULL}
        },{
            // MIN , MAX
            {0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
            {0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
            {0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
            {0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL},
            {0xFFEFFFFFFFFFFFFFULL,0x7FEFFFFFFFFFFFFFULL}
        },{
            // Inf , -Inf
            {0x7FF0000000000000ULL,0xFFF0000000000000ULL},
            {0x7FF0000000000000ULL,0xFFF0000000000000ULL},
            {0x7FF0000000000000ULL,0xFFF0000000000000ULL},
            {0x7FF0000000000000ULL,0xFFF0000000000000ULL},
            {0x7FF0000000000000ULL,0xFFF0000000000000ULL}
        },{
            // denotmalized
            {0x8000000000000001ULL,0x0000000000000001ULL},
            {0x8000000000000000ULL,0x0000000000000000ULL},
            {0x8000000000000000ULL,0x0000000000000000ULL},
            {0x8000000000000000ULL,0x3ff0000000000000ULL},
            {0xbff0000000000000ULL,0x0000000000000000ULL}
        },{
            // denotmalized
            {0x0008000000000000ULL,0x8008000000000000ULL},
            {0x0000000000000000ULL,0x8000000000000000ULL},
            {0x0000000000000000ULL,0x8000000000000000ULL},
            {0x3ff0000000000000ULL,0x8000000000000000ULL},
            {0x0000000000000000ULL,0xbff0000000000000ULL}
        },{
            // 1.0
            {0x3ff0000000000000ULL,0xbff0000000000000ULL},
            {0x3ff0000000000000ULL,0xbff0000000000000ULL},
            {0x3ff0000000000000ULL,0xbff0000000000000ULL},
            {0x3ff0000000000000ULL,0xbff0000000000000ULL},
            {0x3ff0000000000000ULL,0xbff0000000000000ULL}
        },{
            // 1.5
            {0x3ff8000000000000ULL,0xbff8000000000000ULL},
            {0x4000000000000000ULL,0xc000000000000000ULL},
            {0x3ff0000000000000ULL,0xbff0000000000000ULL},
            {0x4000000000000000ULL,0xbff0000000000000ULL},
            {0x3ff0000000000000ULL,0xc000000000000000ULL}
        },{
            // 2.5
            {0x4004000000000000ULL,0xc004000000000000ULL},
            {0x4000000000000000ULL,0xc000000000000000ULL},
            {0x4000000000000000ULL,0xc000000000000000ULL},
            {0x4008000000000000ULL,0xc000000000000000ULL},
            {0x4000000000000000ULL,0xc008000000000000ULL}
        },{
            {0ULL,0ULL},
            {0ULL,0ULL},
            {0ULL,0ULL},
            {0ULL,0ULL},
            {0ULL,0ULL}

        }
    };
    int ii, test_ctr = 1;
    char msg[80];
    vec_double2 res_v;

    TEST_SET_START("20060831210000NM","NM", "rintd2");

    TEST_START("rintd2");

    for (ii=0; ; ii++) {
        if ( (test_a[ii].xxx[0] == 0) && (test_a[ii].xxx[1] == 0) ) break;

        // set Floating point round mode
        spu_mtfpscr(((vec_uint4) {
            0x0000,0,0,0
        }));
        res_v = rintd2 (*((vec_double2 *)&test_a[ii].xxx[0]));
        sprintf(msg,"2006083121%04dNM", test_ctr++);
        TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans0[0])), 0);

        spu_mtfpscr(((vec_uint4) {
            0x0500,0,0,0
        }));
        res_v = rintd2 (*((vec_double2 *)&test_a[ii].xxx[0]));
        sprintf(msg,"2006083121%04dNM", test_ctr++);
        TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans1[0])), 0);

        spu_mtfpscr(((vec_uint4) {
            0x0a00,0,0,0
        }));
        res_v = rintd2 (*((vec_double2 *)&test_a[ii].xxx[0]));
        sprintf(msg,"2006083121%04dNM", test_ctr++);
        TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans2[0])), 0);

        spu_mtfpscr(((vec_uint4) {
            0x0f00,0,0,0
        }));
        res_v = rintd2 (*((vec_double2 *)&test_a[ii].xxx[0]));
        sprintf(msg,"2006083121%04dNM", test_ctr++);
        TEST_CHECK(msg, allequal_llong2( (vec_llong2)res_v, *((vec_llong2 *)&test_a[ii].ans3[0])), 0);
    }

    TEST_SET_DONE();

    TEST_EXIT();

}