xref: /onnv-gate/usr/src/cmd/fps/fptest/fptest.c (revision 7186:e728311aafb0)
16429Svs195195 /*
26429Svs195195  * CDDL HEADER START
36429Svs195195  *
46429Svs195195  * The contents of this file are subject to the terms of the
56429Svs195195  * Common Development and Distribution License (the "License").
66429Svs195195  * You may not use this file except in compliance with the License.
76429Svs195195  *
86429Svs195195  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
96429Svs195195  * or http://www.opensolaris.org/os/licensing.
106429Svs195195  * See the License for the specific language governing permissions
116429Svs195195  * and limitations under the License.
126429Svs195195  *
136429Svs195195  * When distributing Covered Code, include this CDDL HEADER in each
146429Svs195195  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
156429Svs195195  * If applicable, add the following below this CDDL HEADER, with the
166429Svs195195  * fields enclosed by brackets "[]" replaced with your own identifying
176429Svs195195  * information: Portions Copyright [yyyy] [name of copyright owner]
186429Svs195195  *
196429Svs195195  * CDDL HEADER END
206429Svs195195  */
216429Svs195195 
226429Svs195195 /*
236491Sia112686  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
246429Svs195195  * Use is subject to license terms.
256429Svs195195  */
266429Svs195195 
276429Svs195195 #pragma ident	"%Z%%M%	%I%	%E% SMI"
286429Svs195195 
296429Svs195195 #ifdef __lint
306429Svs195195 #pragma error_messages(off, E_VALUE_TYPE)
316429Svs195195 #endif
326429Svs195195 
336429Svs195195 #include <stdio.h>
346429Svs195195 #include <stdlib.h>
356429Svs195195 #include <signal.h>
366429Svs195195 #include <unistd.h>
376429Svs195195 #include <string.h>
386429Svs195195 #include <sys/types.h>
396429Svs195195 #include <sys/file.h>
406429Svs195195 #include <sys/fcntl.h>
416429Svs195195 #include <math.h>
426429Svs195195 #include <sys/dditypes.h>
436429Svs195195 #include <sys/ddidmareq.h>
446429Svs195195 #include <sys/ddi_impldefs.h>
456429Svs195195 #include <sys/processor.h>
466429Svs195195 #include <sys/pset.h>
476429Svs195195 #include <time.h>
486429Svs195195 #include <kstat.h>
496429Svs195195 #include <fp.h>
506429Svs195195 #include <fptest.h>
516429Svs195195 #include <fpstestmsg.h>
526429Svs195195 #include <externs.h>
536429Svs195195 #include <fps_ereport.h>
546429Svs195195 #include <fps_defines.h>
556429Svs195195 
566429Svs195195 #define	GetBoxStringLen SYS_NMLN
576429Svs195195 #define	NANO_IN_MILI 1000000
586429Svs195195 #define	MILI_IN_SEC 1000
596429Svs195195 #define	str_v9 "sparcv9"
606429Svs195195 #define	str_v9b "sparcv9+vis2"
616429Svs195195 #define	testname "fptest"
626429Svs195195 
636429Svs195195 static int fps_exec_time = 0;
646429Svs195195 static int fps_verbose_msg = 0;
656429Svs195195 static int fpu_cpu = -1;
666429Svs195195 static int test_group = 1;
676429Svs195195 static int stress_level = 1;
686429Svs195195 static int limit_group = 1;
696429Svs195195 static int proc_fr;
706429Svs195195 static int lowstresslapagroup_len;
716429Svs195195 static int lowstresslapagroup1000_len;
726429Svs195195 static int lowstresslapagroup1500_len;
736429Svs195195 static int lowstresslapagroup2000_len;
746429Svs195195 static int medstresslapagroup_len;
756429Svs195195 static int highstresslapagroup_len;
766429Svs195195 static struct LapaGroup *lowstresslapagroup;
776429Svs195195 
786429Svs195195 static void exe_time(hrtime_t timeStart);
796429Svs195195 static void process_fpu_args(int argc, char *argv[]);
806429Svs195195 static int check_proc(int cpu_id);
816429Svs195195 static int do_lapack(int unit, struct fps_test_ereport *report);
826429Svs195195 static int dpmath(struct fps_test_ereport *report);
836429Svs195195 static int is_cpu_on(int unit);
846429Svs195195 static int spmath(struct fps_test_ereport *report);
856429Svs195195 static int start_testing(int unit,
866429Svs195195     struct fps_test_ereport *report);
876429Svs195195 
886429Svs195195 /*
896429Svs195195  * main(int argc, char *argv[])
906429Svs195195  * is the main entry into the test.
916429Svs195195  */
926429Svs195195 int
main(int argc,char * argv[])936429Svs195195 main(int argc, char *argv[])
946429Svs195195 {
956429Svs195195 	int test_ret;
966429Svs195195 	int procb;
976429Svs195195 	int proc_setb;
986863Sia112686 	int ret = FPU_OK;
996429Svs195195 	hrtime_t test_start;
1006429Svs195195 	psetid_t opset = PS_NONE;
1016429Svs195195 	processorid_t proc_used = PBIND_NONE;
1026429Svs195195 	static struct fps_test_ereport ereport_data;
1036429Svs195195 
1046429Svs195195 	/* these are % ( modulo ) values */
1056429Svs195195 	lowstresslapagroup1000_len =
1066429Svs195195 	    (sizeof (LowStressLapaGroup_1000) / sizeof (struct LapaGroup)) - 1;
1076429Svs195195 	lowstresslapagroup1500_len =
1086429Svs195195 	    (sizeof (LowStressLapaGroup_1500) / sizeof (struct LapaGroup)) - 1;
1096429Svs195195 	lowstresslapagroup2000_len =
1106429Svs195195 	    (sizeof (LowStressLapaGroup_2000) / sizeof (struct LapaGroup)) - 1;
1116429Svs195195 	medstresslapagroup_len =
1126429Svs195195 	    (sizeof (MedStressLapaGroup) / sizeof (struct LapaGroup)) - 1;
1136429Svs195195 	highstresslapagroup_len =
1146429Svs195195 	    (sizeof (HighStressLapaGroup) / sizeof (struct LapaGroup)) - 1;
1156429Svs195195 
1166429Svs195195 	/* default frequency values */
1176429Svs195195 	proc_fr = 1000;
1186429Svs195195 	lowstresslapagroup_len = lowstresslapagroup1000_len;
1196429Svs195195 	lowstresslapagroup = LowStressLapaGroup_1000;
1206429Svs195195 
1216429Svs195195 	initialize_fps_test_struct(&ereport_data);
1226429Svs195195 
1236429Svs195195 	process_fpu_args(argc, argv);
1246429Svs195195 
1256429Svs195195 	fps_msg(fps_verbose_msg, gettext(FPSM_04), lowstresslapagroup_len,
1266429Svs195195 	    medstresslapagroup_len, highstresslapagroup_len);
1276429Svs195195 
1286429Svs195195 #ifdef V9B
1296429Svs195195 	fps_msg(fps_verbose_msg, gettext(FPSM_03), testname, "V9B");
1306429Svs195195 #else
1316429Svs195195 	fps_msg(fps_verbose_msg, gettext(FPSM_03), testname, "V9");
1326429Svs195195 #endif
1336429Svs195195 
1346429Svs195195 	if (fpu_cpu < 0)
1356429Svs195195 		return (FPU_INVALID_ARG);
1366429Svs195195 
1376429Svs195195 	test_start = gethrtime();
1386429Svs195195 
1396429Svs195195 	procb = processor_bind(P_PID, P_MYID, fpu_cpu, NULL);
1406429Svs195195 
1416429Svs195195 	if (procb) {
1426429Svs195195 		if ((pset_assign(PS_QUERY,
1436429Svs195195 		    (processorid_t)fpu_cpu, &opset) == 0) &&
1446429Svs195195 		    (opset != PS_NONE)) {
1456429Svs195195 			proc_setb = pset_bind(opset, P_PID, P_MYID, NULL);
1466429Svs195195 		}
1476429Svs195195 
1486429Svs195195 		if (proc_setb) {
1496429Svs195195 			return (FPU_BIND_FAIL);
1506429Svs195195 		}
1516429Svs195195 
1526429Svs195195 		procb = processor_bind(P_PID, P_MYID, fpu_cpu, NULL);
1536429Svs195195 
1546429Svs195195 		if (procb) {
155*7186Skk158166 			(void) pset_bind(PS_NONE, P_PID, P_MYID, NULL);
1566429Svs195195 			return (FPU_BIND_FAIL);
1576429Svs195195 		}
1586429Svs195195 	}
1596429Svs195195 
1606429Svs195195 	/* start testing */
1616429Svs195195 	ereport_data.cpu_id = fpu_cpu;
1626429Svs195195 	test_ret = start_testing(fpu_cpu, &ereport_data);
1636429Svs195195 
1646863Sia112686 	/*
1656863Sia112686 	 * Testing is now done and a return code is selected.
1666863Sia112686 	 * FPU_OK: No problems found on FPU tested.
1676863Sia112686 	 *
1686863Sia112686 	 * FPU_BIND_FAIL: CPU currently bound to is not the
1696863Sia112686 	 * one started on. Attempt to file ereport if CPU
1706863Sia112686 	 * is supported,  but don't include resource so
1716863Sia112686 	 * CPU isn't offlined.
1726863Sia112686 	 *
1736863Sia112686 	 * FPU_UNSUPPORT: Test wasn't run on a supported CPU.
1746863Sia112686 	 * Error was found, but no ereport will be filed since
1756863Sia112686 	 * CPU is unsupported and test values may not be valid.
1766863Sia112686 	 *
1776863Sia112686 	 * FPU_FOROFFLINE: Error found on FPU and ereport
1786863Sia112686 	 * payload successfully sent.
1796863Sia112686 	 *
1806863Sia112686 	 * FPU_EREPORT_INCOM: Error found on FPU, ereport payload
1816863Sia112686 	 * sent, but some nonessential information failed to add
1826863Sia112686 	 * to that payload. CPU will still be offlined.
1836863Sia112686 	 *
1846863Sia112686 	 * FPU_EREPORT_FAIL: Error found on FPU, but ereport payload
1856863Sia112686 	 * failed to transfer either due to lack of mandatory data
1866863Sia112686 	 * or unable to send on FPScrubber systevent channel.
1876863Sia112686 	 */
1886863Sia112686 
1896429Svs195195 	if (test_ret == FPU_FOROFFLINE) {
1906429Svs195195 		/*
1916429Svs195195 		 * check bind and
1926429Svs195195 		 * check if on supported plaform
1936429Svs195195 		 */
194*7186Skk158166 		(void) processor_bind(P_PID, P_MYID, PBIND_QUERY, &proc_used);
1956429Svs195195 
1966429Svs195195 		if (proc_used != (processorid_t)fpu_cpu ||
1976429Svs195195 		    proc_used == PBIND_NONE) {
1986429Svs195195 			ret = FPU_BIND_FAIL;
1996429Svs195195 			ereport_data.is_valid_cpu = 0;
2006429Svs195195 		}
2016429Svs195195 
2026429Svs195195 		if (check_proc(fpu_cpu) != 0) {
2036429Svs195195 			ret = FPU_UNSUPPORT;
2046429Svs195195 			ereport_data.is_valid_cpu = 0;
2056429Svs195195 		}
2066429Svs195195 
2076429Svs195195 		if (ret != FPU_UNSUPPORT) {
2086863Sia112686 			test_ret = fps_generate_ereport_struct(&ereport_data);
2096863Sia112686 			if (ret != FPU_BIND_FAIL) {
2106863Sia112686 				ret = test_ret;
2116863Sia112686 			}
2126429Svs195195 		}
2136429Svs195195 	}
2146429Svs195195 
2156429Svs195195 	if (fps_exec_time)
2166429Svs195195 		exe_time(test_start);
2176429Svs195195 
2186429Svs195195 	return (ret);
2196429Svs195195 }
2206429Svs195195 
2216429Svs195195 /*
2226429Svs195195  * exe_time(hrtime_t timeStart, int unit)
2236429Svs195195  * returns Execution time: H.M.S.Msec
2246429Svs195195  */
2256429Svs195195 static void
exe_time(hrtime_t time_start)2266429Svs195195 exe_time(hrtime_t time_start)
2276429Svs195195 {
2286429Svs195195 	hrtime_t mili_now;
2296429Svs195195 	hrtime_t mili_start;
2306429Svs195195 	long hour;
2316429Svs195195 	long minute;
2326429Svs195195 	long second;
2336429Svs195195 	long mili;
2346429Svs195195 	long dif_mili;
2356429Svs195195 	long mili_to_sec;
2366429Svs195195 
2376429Svs195195 	mili_start = time_start / NANO_IN_MILI;
2386429Svs195195 	mili_now = gethrtime() / NANO_IN_MILI;
2396429Svs195195 
2406429Svs195195 	dif_mili = (long)(mili_now - mili_start);
2416429Svs195195 	mili_to_sec = dif_mili / MILI_IN_SEC;
2426429Svs195195 	hour = mili_to_sec / 3600;
2436429Svs195195 	minute = (mili_to_sec - (hour * 3600)) / 60;
2446429Svs195195 	second = (mili_to_sec - ((hour * 3600) + (minute * 60)));
2456429Svs195195 	mili =
2466429Svs195195 	    (dif_mili - ((second * 1000) + (((hour * 3600) +
2476429Svs195195 	    (minute * 60)) * 1000)));
2486429Svs195195 
249*7186Skk158166 	(void) printf("Execution time: %ldH.%ldM.%ldS.%ldMsec\n", hour, minute,
2506429Svs195195 	    second, mili);
251*7186Skk158166 	(void) fflush(NULL);
2526429Svs195195 }
2536429Svs195195 
2546429Svs195195 /*
2556429Svs195195  * start_testing(int unit, int argc, char *argv[],
2566429Svs195195  * struct fps_test_ereport *report) performs each sub-test
2576429Svs195195  * sequentially and stores any failed test information in
2586429Svs195195  * report.
2596429Svs195195  */
2606429Svs195195 static int
start_testing(int unit,struct fps_test_ereport * report)2616429Svs195195 start_testing(int unit, struct fps_test_ereport *report)
2626429Svs195195 {
2636429Svs195195 	int lim;
2646429Svs195195 	int sdclimit;
2656429Svs195195 
2666429Svs195195 	if (report == NULL)
2676429Svs195195 		return (-1);
2686429Svs195195 
2696429Svs195195 	/*
2706429Svs195195 	 * The non-lapack logic will be executed when -p 0 OR -p ALL
2716429Svs195195 	 */
2726429Svs195195 	if ((0 == test_group) || (12345 == test_group)) {
2736429Svs195195 		fps_msg(fps_verbose_msg, gettext(FPSM_01), unit, limit_group);
2746429Svs195195 
2756429Svs195195 		/* turn on signal handlers */
2766429Svs195195 		(void) winitfp();
2776429Svs195195 
2786429Svs195195 		if (fpu_sysdiag(report) != 0) {
2796429Svs195195 			return (FPU_FOROFFLINE);
2806429Svs195195 		}
2816429Svs195195 
2826429Svs195195 		/* turn off signal handlers */
2836429Svs195195 		(void) restore_signals();
2846429Svs195195 
2856429Svs195195 		if (spmath(report) != 0) {
2866429Svs195195 			return (FPU_FOROFFLINE);
2876429Svs195195 		}
2886429Svs195195 
2896429Svs195195 		if (dpmath(report) != 0) {
2906429Svs195195 			return (FPU_FOROFFLINE);
2916429Svs195195 		}
2926429Svs195195 
2936429Svs195195 		if (cbbcopy(report) != 0) {
2946429Svs195195 			return (FPU_FOROFFLINE);
2956429Svs195195 		}
2966429Svs195195 
2976429Svs195195 		sdclimit = 100;
2986429Svs195195 
2996429Svs195195 		if (limit_group == 2)
3006429Svs195195 			sdclimit = 1000;
3016429Svs195195 		if (limit_group == 3)
3026429Svs195195 			sdclimit = 10000;
3036429Svs195195 
3046429Svs195195 		if (cheetah_sdc_test(sdclimit, report) != 0) {
3056429Svs195195 			return (FPU_FOROFFLINE);
3066429Svs195195 		}
3076429Svs195195 
3086429Svs195195 		lim = 100;
3096429Svs195195 
3106429Svs195195 		if (limit_group == 2)
3116429Svs195195 			lim = 1000;
3126429Svs195195 		if (limit_group == 3)
3136429Svs195195 			lim = 100000;
3146429Svs195195 
3156429Svs195195 		if (fpu_fdivd(lim, report) != 0) {
3166429Svs195195 			return (FPU_FOROFFLINE);
3176429Svs195195 		}
3186429Svs195195 
3196429Svs195195 		if (fpu_fmuld(lim, report) != 0) {
3206429Svs195195 			return (FPU_FOROFFLINE);
3216429Svs195195 		}
3226429Svs195195 
3236429Svs195195 		if (fpu_fmulx(lim, report) != 0) {
3246429Svs195195 			return (FPU_FOROFFLINE);
3256429Svs195195 		}
3266429Svs195195 
3276429Svs195195 #ifdef V9B
3286429Svs195195 
3296429Svs195195 		lim = 10;
3306429Svs195195 
3316429Svs195195 		if (limit_group == 2)
3326429Svs195195 			lim = 100;
3336429Svs195195 		if (limit_group == 3)
3346429Svs195195 			lim = 1000;
3356429Svs195195 
336*7186Skk158166 		if (align_data(lim, report) != 0) {
3376429Svs195195 			return (FPU_FOROFFLINE);
3386429Svs195195 		}
3396429Svs195195 
340*7186Skk158166 		if (vis_test(report) != 0) {
3416429Svs195195 			return (FPU_FOROFFLINE);
3426429Svs195195 		}
3436429Svs195195 
3446429Svs195195 #endif
3456429Svs195195 
3466429Svs195195 		if (test_group == 0)
3476429Svs195195 			return (FPU_OK);
3486429Svs195195 
3496429Svs195195 	} /* end the non lapack area */
3506429Svs195195 
3516429Svs195195 	if (do_lapack(unit, report) != 0)
3526429Svs195195 		return (FPU_FOROFFLINE);
3536429Svs195195 
3546429Svs195195 	return (FPU_OK);
3556429Svs195195 }
3566429Svs195195 
3576429Svs195195 /*
3586429Svs195195  * do_lapack(struct fps_test_ereport *report) calls the lapack
3596429Svs195195  * tests and stores any error info into report.
3606429Svs195195  */
3616429Svs195195 static int
do_lapack(int unit,struct fps_test_ereport * report)3626429Svs195195 do_lapack(int unit, struct fps_test_ereport *report)
3636429Svs195195 {
3646429Svs195195 	int lapa_group_index;
3656429Svs195195 	int lapa_loop_stress;
3666429Svs195195 	int lapa_stress;
3676429Svs195195 	int lapa_loop;
3686429Svs195195 	int high_lim;
3696429Svs195195 	int low_lim;
3706429Svs195195 
3716429Svs195195 	fps_msg(fps_verbose_msg, gettext(FPSM_05), limit_group);
3726429Svs195195 
3736429Svs195195 	switch (limit_group) {
3746429Svs195195 	case 1:
3756429Svs195195 		lapa_group_index = test_group % lowstresslapagroup_len;
3766429Svs195195 
3776429Svs195195 		if (lapa_group_index <= 0)
3786429Svs195195 			lapa_group_index = 1;
3796429Svs195195 
3806429Svs195195 		low_lim = lowstresslapagroup[lapa_group_index].limLow;
3816429Svs195195 		high_lim = lowstresslapagroup[lapa_group_index].limHigh;
3826429Svs195195 
3836429Svs195195 		if (test_group == 12345) {
3846429Svs195195 			low_lim = 1;
3856429Svs195195 			high_lim =
3866429Svs195195 			    lowstresslapagroup[lowstresslapagroup_len - 1]
3876429Svs195195 			    .limHigh;
3886429Svs195195 		}
3896429Svs195195 
3906429Svs195195 		break;
3916429Svs195195 	case 2:
3926429Svs195195 		lapa_group_index = test_group % medstresslapagroup_len;
3936429Svs195195 
3946429Svs195195 		if (lapa_group_index <= 0)
3956429Svs195195 			lapa_group_index = 1;
3966429Svs195195 
3976429Svs195195 		low_lim = MedStressLapaGroup[lapa_group_index].limLow;
3986429Svs195195 		high_lim = MedStressLapaGroup[lapa_group_index].limHigh;
3996429Svs195195 
4006429Svs195195 		if (test_group == 12345) {
4016429Svs195195 			low_lim = 1;
4026429Svs195195 			high_lim =
4036429Svs195195 			    MedStressLapaGroup[medstresslapagroup_len - 1]
4046429Svs195195 			    .limHigh;
4056429Svs195195 		}
4066429Svs195195 		break;
4076429Svs195195 	case 3:
4086429Svs195195 		lapa_group_index = test_group % highstresslapagroup_len;
4096429Svs195195 
4106429Svs195195 		if (lapa_group_index <= 0)
4116429Svs195195 			lapa_group_index = 1;
4126429Svs195195 
4136429Svs195195 		low_lim = HighStressLapaGroup[lapa_group_index].limLow;
4146429Svs195195 		high_lim = HighStressLapaGroup[lapa_group_index].limHigh;
4156429Svs195195 
4166429Svs195195 		if (test_group == 12345) {
4176429Svs195195 			low_lim = 1;
4186429Svs195195 			high_lim =
4196429Svs195195 			    HighStressLapaGroup[highstresslapagroup_len - 1]
4206429Svs195195 			    .limHigh;
4216429Svs195195 		}
4226429Svs195195 
4236429Svs195195 		/* hidden arg -s X */
4246429Svs195195 		if (stress_level > 4000) {
4256429Svs195195 			low_lim = 1;
4266429Svs195195 			high_lim = stress_level;
4276429Svs195195 		}
4286429Svs195195 		break;
4296429Svs195195 	default:
4306429Svs195195 		low_lim = 100;
4316429Svs195195 		high_lim = 200;
4326429Svs195195 		break;
4336429Svs195195 	}
4346429Svs195195 
4356429Svs195195 	if (low_lim < 1)
4366429Svs195195 		low_lim = 101;
4376429Svs195195 
4386429Svs195195 	if (high_lim > 10000)
4396429Svs195195 		high_lim = 201;
4406429Svs195195 
4416429Svs195195 	for (lapa_stress = low_lim; lapa_stress <= high_lim;
4426429Svs195195 	    lapa_stress = lapa_stress + 1) {
4436429Svs195195 		if (lapa_stress > 999) {
4446429Svs195195 			for (lapa_loop = lapa_stress; lapa_loop <= high_lim;
4456429Svs195195 			    lapa_loop = lapa_loop + 1000) {
4466429Svs195195 				lapa_loop_stress = lapa_loop;
4476429Svs195195 
4486429Svs195195 				if (lapa_loop_stress == 4000)
4496429Svs195195 					lapa_loop_stress = 4016;
4506429Svs195195 				if (lapa_loop_stress == 7000)
4516429Svs195195 					lapa_loop_stress = 7016;
4526429Svs195195 				if (lapa_loop_stress == 8000)
4536429Svs195195 					lapa_loop_stress = 8034;
4546429Svs195195 
4556429Svs195195 				if (slinpack_test(lapa_loop_stress, unit,
4566429Svs195195 				    report, fps_verbose_msg))
4576429Svs195195 					return (-4);
458*7186Skk158166 #ifndef __lint
4596429Svs195195 				if (dlinpack_test(lapa_loop_stress, unit,
4606429Svs195195 				    report, fps_verbose_msg))
4616429Svs195195 					return (-4);
462*7186Skk158166 #endif
4636429Svs195195 			}
4646429Svs195195 		break;
4656429Svs195195 		}
4666429Svs195195 
4676429Svs195195 		if (slinpack_test(lapa_stress, unit, report, fps_verbose_msg))
4686429Svs195195 			return (-4);
469*7186Skk158166 #ifndef __lint
4706429Svs195195 		if (dlinpack_test(lapa_stress, unit, report, fps_verbose_msg))
4716429Svs195195 			return (-4);
472*7186Skk158166 #endif
4736429Svs195195 	}
4746429Svs195195 
4756429Svs195195 	return (0);
4766429Svs195195 }
4776429Svs195195 
4786429Svs195195 
4796429Svs195195 /*
4806429Svs195195  * spmath(int unit, struct fps_test_ereport *report)
4816429Svs195195  * peforms basic tests of the arithmetic operations:
4826429Svs195195  * +, -, *, and /. If any errors, they are stored in
4836429Svs195195  * report.
4846429Svs195195  */
4856429Svs195195 static int
spmath(struct fps_test_ereport * report)4866429Svs195195 spmath(struct fps_test_ereport *report)
4876429Svs195195 {
4886429Svs195195 	char err_data[MAX_INFO_SIZE];
4896429Svs195195 	float a;
4906429Svs195195 	float ans;
4916429Svs195195 	float b;
4926429Svs195195 	float expect_ans;
4936429Svs195195 	uint64_t expected;
4946429Svs195195 	uint64_t observed;
4956429Svs195195 
4966429Svs195195 	a = 1.2345;
4976429Svs195195 	b = 0.9876;
4986429Svs195195 
4996429Svs195195 #ifndef __lint
5006429Svs195195 	ans = a + b;
5016429Svs195195 #endif
5026429Svs195195 	ans = a + b;
5036429Svs195195 	expect_ans = 2.2221000;
5046429Svs195195 	if (ans != expect_ans) {
5056429Svs195195 		if (ans < (2.2221000 - SPMARGIN) ||
5066429Svs195195 		    ans > (2.2221000 + SPMARGIN)) {
507*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
5086429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5096429Svs195195 			    expect_ans, ans);
5106429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5116429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5126429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5136429Svs195195 			    report, 6112, &observed, &expected, 1,
5146429Svs195195 			    1, err_data);
5156429Svs195195 
5166429Svs195195 			return (-2);
5176429Svs195195 		}
5186429Svs195195 	}
5196429Svs195195 
5206429Svs195195 	ans = (a - b);
5216429Svs195195 	expect_ans = 0.2469000;
5226429Svs195195 	if (ans != expect_ans) {
5236429Svs195195 		if (ans < (0.2469000 - SPMARGIN) ||
5246429Svs195195 		    ans > (0.2469000 + SPMARGIN)) {
525*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
5266429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5276429Svs195195 			    expect_ans, ans);
5286429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5296429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5306429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5316429Svs195195 			    report, 6113, &observed, &expected, 1,
5326429Svs195195 			    1, err_data);
5336429Svs195195 
5346429Svs195195 			return (-2);
5356429Svs195195 		}
5366429Svs195195 	}
5376429Svs195195 
5386429Svs195195 	ans = a * b;
5396429Svs195195 	expect_ans = 1.2191923;
5406429Svs195195 	if (ans != expect_ans) {
5416429Svs195195 		if (ans < (1.2191923 - SPMARGIN) ||
5426429Svs195195 		    ans > (1.2191923 + SPMARGIN)) {
543*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
5446429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5456429Svs195195 			    expect_ans, ans);
5466429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5476429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5486429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5496429Svs195195 			    report, 6114, &observed, &expected, 1,
5506429Svs195195 			    1, err_data);
5516429Svs195195 
5526429Svs195195 			return (-2);
5536429Svs195195 		}
5546429Svs195195 	}
5556429Svs195195 
5566429Svs195195 	ans = a / b;
5576429Svs195195 	expect_ans = 1.2500000;
5586429Svs195195 	if (ans != expect_ans) {
5596429Svs195195 		if (ans < (1.2500000 - SPMARGIN) ||
5606429Svs195195 		    ans > (1.2500000 + SPMARGIN)) {
561*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
5626429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5636429Svs195195 			    expect_ans, ans);
5646429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5656429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5666429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5676429Svs195195 			    report, 6115, &observed, &expected, 1,
5686429Svs195195 			    1, err_data);
5696429Svs195195 
5706429Svs195195 			return (-2);
5716429Svs195195 		}
5726429Svs195195 	}
5736429Svs195195 
5746429Svs195195 	ans = a + (a - b);
5756429Svs195195 	expect_ans = 1.4814000;
5766429Svs195195 	if (ans != expect_ans) {
5776429Svs195195 		if (ans < (1.4814000 - SPMARGIN) ||
5786429Svs195195 		    ans > (1.4814000 + SPMARGIN)) {
579*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
5806429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5816429Svs195195 			    expect_ans, ans);
5826429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5836429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5846429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5856429Svs195195 			    report, 6116, &observed, &expected, 1,
5866429Svs195195 			    1, err_data);
5876429Svs195195 
5886429Svs195195 			return (-2);
5896429Svs195195 		}
5906429Svs195195 	}
5916429Svs195195 
5926429Svs195195 	ans = a - (a + b);
5936429Svs195195 	expect_ans = -(0.9876000);
5946429Svs195195 	if (ans != expect_ans) {
5956429Svs195195 		if (ans < (-(0.9876000) - SPMARGIN) ||
5966429Svs195195 		    ans > (-(0.9876000) + SPMARGIN)) {
597*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
5986429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5996429Svs195195 			    expect_ans, ans);
6006429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6016429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6026429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6036429Svs195195 			    report, 6117, &observed, &expected, 1,
6046429Svs195195 			    1, err_data);
6056429Svs195195 
6066429Svs195195 			return (-2);
6076429Svs195195 		}
6086429Svs195195 	}
6096429Svs195195 
6106429Svs195195 	ans = a + (a * b);
6116429Svs195195 	expect_ans = 2.4536924;
6126429Svs195195 	if (ans != expect_ans) {
6136429Svs195195 		if (ans < (2.4536924 - SPMARGIN) ||
6146429Svs195195 		    ans > (2.4536924 + SPMARGIN)) {
615*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
6166429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6176429Svs195195 			    expect_ans, ans);
6186429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6196429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6206429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6216429Svs195195 			    report, 6118, &observed, &expected, 1,
6226429Svs195195 			    1, err_data);
6236429Svs195195 
6246429Svs195195 			return (-2);
6256429Svs195195 		}
6266429Svs195195 	}
6276429Svs195195 
6286429Svs195195 	ans = a - (a * b);
6296429Svs195195 	expect_ans = 0.0153078;
6306429Svs195195 	if (ans != expect_ans) {
6316429Svs195195 		if (ans < (0.0153078 - SPMARGIN) ||
6326429Svs195195 		    ans > (0.0153078 + SPMARGIN)) {
633*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
6346429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6356429Svs195195 			    expect_ans, ans);
6366429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6376429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6386429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6396429Svs195195 			    report, 6119, &observed, &expected, 1,
6406429Svs195195 			    1, err_data);
6416429Svs195195 
6426429Svs195195 			return (-2);
6436429Svs195195 		}
6446429Svs195195 	}
6456429Svs195195 
6466429Svs195195 	ans = a + (a / b);
6476429Svs195195 	expect_ans = 2.4844999;
6486429Svs195195 	if (ans != expect_ans) {
6496429Svs195195 		if (ans < (2.4844999 - SPMARGIN) ||
6506429Svs195195 		    ans > (2.4844999 + SPMARGIN)) {
651*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
6526429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6536429Svs195195 			    expect_ans, ans);
6546429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6556429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6566429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6576429Svs195195 			    report, 6120, &observed, &expected, 1,
6586429Svs195195 			    1, err_data);
6596429Svs195195 
6606429Svs195195 			return (-2);
6616429Svs195195 		}
6626429Svs195195 	}
6636429Svs195195 
6646429Svs195195 	ans = a - (a / b);
6656429Svs195195 	expect_ans = expect_ans;
6666429Svs195195 	if (ans != -(0.0155000)) {
6676429Svs195195 		if (ans < (-(0.0155000) - SPMARGIN) ||
6686429Svs195195 		    ans > (-(0.0155000) + SPMARGIN)) {
669*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
6706429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6716429Svs195195 			    expect_ans, ans);
6726429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6736429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6746429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6756429Svs195195 			    report, 6121, &observed, &expected, 1,
6766429Svs195195 			    1, err_data);
6776429Svs195195 
6786429Svs195195 			return (-2);
6796429Svs195195 		}
6806429Svs195195 	}
6816429Svs195195 
6826429Svs195195 	ans = a * (a + b);
6836429Svs195195 	expect_ans = 2.7431827;
6846429Svs195195 	if (ans != expect_ans) {
6856429Svs195195 		if (ans < (2.7431827 - SPMARGIN) ||
6866429Svs195195 		    ans > (2.7431827 + SPMARGIN)) {
687*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
6886429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6896429Svs195195 			    expect_ans, ans);
6906429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6916429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6926429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6936429Svs195195 			    report, 6122, &observed, &expected, 1,
6946429Svs195195 			    1, err_data);
6956429Svs195195 
6966429Svs195195 			return (-2);
6976429Svs195195 		}
6986429Svs195195 	}
6996429Svs195195 
7006429Svs195195 	ans = a * (a - b);
7016429Svs195195 	expect_ans = 0.3047981;
7026429Svs195195 	if (ans != expect_ans) {
7036429Svs195195 		if (ans < (0.3047981 - SPMARGIN) ||
7046429Svs195195 		    ans > (0.3047981 + SPMARGIN)) {
705*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
7066429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7076429Svs195195 			    expect_ans, ans);
7086429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7096429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7106429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7116429Svs195195 			    report, 6123, &observed, &expected, 1,
7126429Svs195195 			    1, err_data);
7136429Svs195195 
7146429Svs195195 			return (-2);
7156429Svs195195 		}
7166429Svs195195 	}
7176429Svs195195 
7186429Svs195195 	ans = a / (a + b);
7196429Svs195195 	expect_ans = 0.5555556;
7206429Svs195195 	if (ans != expect_ans) {
7216429Svs195195 		if (ans < (0.5555556 - SPMARGIN) ||
7226429Svs195195 		    ans > (0.5555556 + SPMARGIN)) {
723*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
7246429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7256429Svs195195 			    expect_ans, ans);
7266429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7276429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7286429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7296429Svs195195 			    report, 6124, &observed, &expected, 1,
7306429Svs195195 			    1, err_data);
7316429Svs195195 
7326429Svs195195 			return (-2);
7336429Svs195195 		}
7346429Svs195195 	}
7356429Svs195195 
7366429Svs195195 	ans = a / (a - b);
7376429Svs195195 	expect_ans = 4.9999995;
7386429Svs195195 	if (ans != expect_ans) {
7396429Svs195195 		if (ans < (4.9999995 - SPMARGIN) ||
7406429Svs195195 		    ans > (4.9999995 + SPMARGIN)) {
741*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
7426429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7436429Svs195195 			    expect_ans, ans);
7446429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7456429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7466429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7476429Svs195195 			    report, 6125, &observed, &expected, 1,
7486429Svs195195 			    1, err_data);
7496429Svs195195 
7506429Svs195195 			return (-2);
7516429Svs195195 		}
7526429Svs195195 	}
7536429Svs195195 
7546429Svs195195 	ans = a * (a / b);
7556429Svs195195 	expect_ans = 1.5431250;
7566429Svs195195 	if (ans != expect_ans) {
7576429Svs195195 		if (ans < (1.5431250 - SPMARGIN) ||
7586429Svs195195 		    ans > (1.5431250 + SPMARGIN)) {
759*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
7606429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7616429Svs195195 			    expect_ans, ans);
7626429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7636429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7646429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7656429Svs195195 			    report, 6126, &observed, &expected, 1,
7666429Svs195195 			    1, err_data);
7676429Svs195195 
7686429Svs195195 		return (-2);
7696429Svs195195 		}
7706429Svs195195 	}
7716429Svs195195 
7726429Svs195195 	ans = a / (a * b);
7736429Svs195195 	expect_ans = 1.0125557;
7746429Svs195195 	if (ans != expect_ans) {
7756429Svs195195 		if (ans < (1.0125557 - SPMARGIN) ||
7766429Svs195195 		    ans > (1.0125557 + SPMARGIN)) {
777*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
7786429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7796429Svs195195 			    expect_ans, ans);
7806429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7816429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7826429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7836429Svs195195 			    report, 6127, &observed, &expected, 1,
7846429Svs195195 			    1, err_data);
7856429Svs195195 
7866429Svs195195 			return (-2);
7876429Svs195195 		}
7886429Svs195195 	}
7896429Svs195195 
7906429Svs195195 	return (0);
7916429Svs195195 }
7926429Svs195195 
7936429Svs195195 /*
7946429Svs195195  * dpmath(int unit, struct fps_test_ereport *report)
7956429Svs195195  * peforms basic tests of the arithmetic operations:
7966429Svs195195  * +, -, *, and /. It also performs tests of cos,
7976429Svs195195  * sine, tan, log, sqrt, and exp. If any errors,
7986429Svs195195  * they are stored in report.
7996429Svs195195  */
8006429Svs195195 static int
dpmath(struct fps_test_ereport * report)8016429Svs195195 dpmath(struct fps_test_ereport *report)
8026429Svs195195 {
8036429Svs195195 	char err_data[MAX_INFO_SIZE];
8046429Svs195195 	double a;
8056429Svs195195 	double ans;
8066429Svs195195 	double b;
8076429Svs195195 	double expect_ans;
8086429Svs195195 	double expect_ans2;
8096429Svs195195 	double result;
8106429Svs195195 	double x;
8116429Svs195195 	uint64_t expected;
8126429Svs195195 	uint64_t observed;
8136429Svs195195 
8146429Svs195195 	a = 1.2345;
8156429Svs195195 	b = 0.9876;
8166429Svs195195 
8176429Svs195195 	ans = (a + b);
8186429Svs195195 	expect_ans = 2.222100000000000;
8196429Svs195195 	if (ans != expect_ans) {
8206429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8216429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8226429Svs195195 			expected = *(uint64_t *)&expect_ans;
8236429Svs195195 			observed = *(uint64_t *)&ans;
824*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
8256429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8266429Svs195195 			    expect_ans, ans);
8276429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8286429Svs195195 			    report, 6128, &observed, &expected, 1, 1,
8296429Svs195195 			    err_data);
8306429Svs195195 
8316429Svs195195 			return (-3);
8326429Svs195195 		}
8336429Svs195195 	}
8346429Svs195195 
8356429Svs195195 	ans = (a - b);
8366429Svs195195 	expect_ans = 0.246899999999999;
8376429Svs195195 	if (ans != expect_ans) {
8386429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8396429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8406429Svs195195 			expected = *(uint64_t *)&expect_ans;
8416429Svs195195 			observed = *(uint64_t *)&ans;
842*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
8436429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8446429Svs195195 			    expect_ans, ans);
8456429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8466429Svs195195 			    report, 6129, &observed, &expected, 1, 1,
8476429Svs195195 			    err_data);
8486429Svs195195 
8496429Svs195195 			return (-3);
8506429Svs195195 		}
8516429Svs195195 	}
8526429Svs195195 
8536429Svs195195 	ans = a * b;
8546429Svs195195 	expect_ans = 1.219192199999999;
8556429Svs195195 	if (ans != expect_ans) {
8566429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8576429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8586429Svs195195 			expected = *(uint64_t *)&expect_ans;
8596429Svs195195 			observed = *(uint64_t *)&ans;
860*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
8616429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8626429Svs195195 			    expect_ans, ans);
8636429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8646429Svs195195 			    report, 6130, &observed, &expected, 1, 1,
8656429Svs195195 			    err_data);
8666429Svs195195 
8676429Svs195195 			return (-3);
8686429Svs195195 		}
8696429Svs195195 	}
8706429Svs195195 
8716429Svs195195 	ans = a / b;
8726429Svs195195 	expect_ans = 1.249999999999999;
8736429Svs195195 	if (ans != expect_ans) {
8746429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8756429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8766429Svs195195 			expected = *(uint64_t *)&expect_ans;
8776429Svs195195 			observed = *(uint64_t *)&ans;
878*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
8796429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8806429Svs195195 			    expect_ans, ans);
8816429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8826429Svs195195 			    report, 6131, &observed, &expected, 1, 1,
8836429Svs195195 			    err_data);
8846429Svs195195 
8856429Svs195195 			return (-3);
8866429Svs195195 		}
8876429Svs195195 	}
8886429Svs195195 
8896429Svs195195 	ans = a + (a - b);
8906429Svs195195 	expect_ans = 1.481399999999999;
8916429Svs195195 	if (ans != expect_ans) {
8926429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8936429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8946429Svs195195 			expected = *(uint64_t *)&expect_ans;
8956429Svs195195 			observed = *(uint64_t *)&ans;
896*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
8976429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8986429Svs195195 			    expect_ans, ans);
8996429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9006429Svs195195 			    report, 6132, &observed, &expected, 1, 1,
9016429Svs195195 			    err_data);
9026429Svs195195 
9036429Svs195195 			return (-3);
9046429Svs195195 		}
9056429Svs195195 	}
9066429Svs195195 
9076429Svs195195 	ans = a - (a + b);
9086429Svs195195 	expect_ans = -(0.987600000000000);
9096429Svs195195 	if (ans != expect_ans) {
9106429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9116429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9126429Svs195195 			expected = *(uint64_t *)&expect_ans;
9136429Svs195195 			observed = *(uint64_t *)&ans;
914*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
9156429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9166429Svs195195 			    expect_ans, ans);
9176429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9186429Svs195195 			    report, 6133, &observed, &expected, 1, 1,
9196429Svs195195 			    err_data);
9206429Svs195195 
9216429Svs195195 			return (-3);
9226429Svs195195 		}
9236429Svs195195 	}
9246429Svs195195 
9256429Svs195195 	ans = a + (a * b);
9266429Svs195195 	expect_ans = 2.453692200000000;
9276429Svs195195 	if (ans != expect_ans) {
9286429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9296429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9306429Svs195195 			expected = *(uint64_t *)&expect_ans;
9316429Svs195195 			observed = *(uint64_t *)&ans;
932*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
9336429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9346429Svs195195 			    expect_ans, ans);
9356429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9366429Svs195195 			    report, 6134, &observed, &expected, 1, 1,
9376429Svs195195 			    err_data);
9386429Svs195195 
9396429Svs195195 			return (-3);
9406429Svs195195 		}
9416429Svs195195 	}
9426429Svs195195 
9436429Svs195195 	ans = a - (a * b);
9446429Svs195195 	expect_ans = 0.015307800000000;
9456429Svs195195 	if (ans != expect_ans) {
9466429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9476429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9486429Svs195195 			expected = *(uint64_t *)&expect_ans;
9496429Svs195195 			observed = *(uint64_t *)&ans;
950*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
9516429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9526429Svs195195 			    expect_ans, ans);
9536429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9546429Svs195195 			    report, 6135, &observed, &expected, 1, 1,
9556429Svs195195 			    err_data);
9566429Svs195195 
9576429Svs195195 			return (-3);
9586429Svs195195 		}
9596429Svs195195 	}
9606429Svs195195 
9616429Svs195195 	ans = a + (a / b);
9626429Svs195195 	expect_ans = 2.484500000000000;
9636429Svs195195 	if (ans != expect_ans) {
9646429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9656429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9666429Svs195195 			expected = *(uint64_t *)&expect_ans;
9676429Svs195195 			observed = *(uint64_t *)&ans;
968*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
9696429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9706429Svs195195 			    expect_ans, ans);
9716429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9726429Svs195195 			    report, 6136, &observed, &expected, 1, 1,
9736429Svs195195 			    err_data);
9746429Svs195195 
9756429Svs195195 			return (-3);
9766429Svs195195 		}
9776429Svs195195 	}
9786429Svs195195 
9796429Svs195195 	ans = a - (a / b);
9806429Svs195195 	expect_ans = -(0.015499999999999);
9816429Svs195195 	if (ans != expect_ans) {
9826429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9836429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9846429Svs195195 			expected = *(uint64_t *)&expect_ans;
9856429Svs195195 			observed = *(uint64_t *)&ans;
986*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
9876429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9886429Svs195195 			    expect_ans, ans);
9896429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9906429Svs195195 			    report, 6137, &observed, &expected, 1, 1,
9916429Svs195195 			    err_data);
9926429Svs195195 
9936429Svs195195 			return (-3);
9946429Svs195195 		}
9956429Svs195195 	}
9966429Svs195195 
9976429Svs195195 	ans = a * (a + b);
9986429Svs195195 	expect_ans = 2.743182449999999;
9996429Svs195195 	if (ans != expect_ans) {
10006429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10016429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10026429Svs195195 			expected = *(uint64_t *)&expect_ans;
10036429Svs195195 			observed = *(uint64_t *)&ans;
1004*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
10056429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10066429Svs195195 			    expect_ans, ans);
10076429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10086429Svs195195 			    report, 6138, &observed, &expected, 1, 1,
10096429Svs195195 			    err_data);
10106429Svs195195 
10116429Svs195195 			return (-3);
10126429Svs195195 		}
10136429Svs195195 	}
10146429Svs195195 
10156429Svs195195 	ans = a * (a - b);
10166429Svs195195 	expect_ans = 0.304798049999999;
10176429Svs195195 	if (ans != expect_ans) {
10186429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10196429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10206429Svs195195 			expected = *(uint64_t *)&expect_ans;
10216429Svs195195 			observed = *(uint64_t *)&ans;
1022*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
10236429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10246429Svs195195 			    expect_ans, ans);
10256429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10266429Svs195195 			    report, 6139, &observed, &expected, 1, 1,
10276429Svs195195 			    err_data);
10286429Svs195195 
10296429Svs195195 			return (-3);
10306429Svs195195 		}
10316429Svs195195 	}
10326429Svs195195 
10336429Svs195195 
10346429Svs195195 	ans = a / (a + b);
10356429Svs195195 	expect_ans = 0.555555555555555;
10366429Svs195195 	if (ans != expect_ans) {
10376429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10386429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10396429Svs195195 			expected = *(uint64_t *)&expect_ans;
10406429Svs195195 			observed = *(uint64_t *)&ans;
1041*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
10426429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10436429Svs195195 			    expect_ans, ans);
10446429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10456429Svs195195 			    report, 6140, &observed, &expected, 1, 1,
10466429Svs195195 			    err_data);
10476429Svs195195 
10486429Svs195195 			return (-3);
10496429Svs195195 		}
10506429Svs195195 	}
10516429Svs195195 
10526429Svs195195 	ans = a / (a - b);
10536429Svs195195 	expect_ans = 5.000000000000002;
10546429Svs195195 	if (ans != expect_ans) {
10556429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10566429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10576429Svs195195 			expected = *(uint64_t *)&expect_ans;
10586429Svs195195 			observed = *(uint64_t *)&ans;
1059*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
10606429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10616429Svs195195 			    expect_ans, ans);
10626429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10636429Svs195195 			    report, 6141, &observed, &expected, 1, 1,
10646429Svs195195 			    err_data);
10656429Svs195195 
10666429Svs195195 			return (-3);
10676429Svs195195 		}
10686429Svs195195 	}
10696429Svs195195 
10706429Svs195195 	ans = a * (a / b);
10716429Svs195195 	expect_ans = 1.543124999999999;
10726429Svs195195 	if (ans != expect_ans) {
10736429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10746429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10756429Svs195195 			expected = *(uint64_t *)&expect_ans;
10766429Svs195195 			observed = *(uint64_t *)&ans;
1077*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
10786429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10796429Svs195195 			    expect_ans, ans);
10806429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10816429Svs195195 			    report, 6142, &observed, &expected, 1, 1,
10826429Svs195195 			    err_data);
10836429Svs195195 
10846429Svs195195 			return (-3);
10856429Svs195195 		}
10866429Svs195195 	}
10876429Svs195195 
10886429Svs195195 	ans = a / (a * b);
10896429Svs195195 	expect_ans = 1.012555690562980;
10906429Svs195195 	if (ans != expect_ans) {
10916429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10926429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10936429Svs195195 			expected = *(uint64_t *)&expect_ans;
10946429Svs195195 			observed = *(uint64_t *)&ans;
1095*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
10966429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10976429Svs195195 			    expect_ans, ans);
10986429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10996429Svs195195 			    report, 6143, &observed, &expected, 1, 1,
11006429Svs195195 			    err_data);
11016429Svs195195 
11026429Svs195195 			return (-3);
11036429Svs195195 		}
11046429Svs195195 	}
11056429Svs195195 
11066429Svs195195 	/* Start Double Precision test of trg functions */
11076429Svs195195 
11086429Svs195195 	/* sin of values in the range of -2pi to +2pi   */
11096429Svs195195 	result = sin(-(pi * 2));
11106429Svs195195 	expect_ans = -(0.000000000820413);
11116429Svs195195 	if (result != expect_ans) {
11126429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11136429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11146429Svs195195 			expected = *(uint64_t *)&expect_ans;
11156429Svs195195 			observed = *(uint64_t *)&result;
1116*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
11176429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11186429Svs195195 			    expect_ans, result);
11196429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11206429Svs195195 			    report, 6144, &observed, &expected, 1, 1,
11216429Svs195195 			    err_data);
11226429Svs195195 
11236429Svs195195 			return (-3);
11246429Svs195195 		}
11256429Svs195195 	}
11266429Svs195195 
11276429Svs195195 	result = sin((pi * (-3)) / 2);
11286429Svs195195 	expect_ans = 1.0000000000000000;
11296429Svs195195 	if (result != expect_ans) {
11306429Svs195195 		if (result < (expect_ans - DPMARGIN)) {
11316429Svs195195 			expected = *(uint64_t *)&expect_ans;
11326429Svs195195 			observed = *(uint64_t *)&result;
1133*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
11346429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11356429Svs195195 			    expect_ans, result);
11366429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11376429Svs195195 			    report, 6145, &observed, &expected, 1, 1,
11386429Svs195195 			    err_data);
11396429Svs195195 
11406429Svs195195 			return (-3);
11416429Svs195195 		}
11426429Svs195195 #ifndef i86pc
11436429Svs195195 		else if (result > (-(0.000000000000000) + DPMARGIN)) {
11446429Svs195195 			expected = (uint64_t)-(0.000000000000000);
11456429Svs195195 			observed = *(uint64_t *)&result;
1146*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
11476429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11486429Svs195195 			    -0.000000000000000, result);
11496429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11506429Svs195195 			    report, 6146, &observed, &expected, 1, 1,
11516429Svs195195 			    err_data);
11526429Svs195195 
11536429Svs195195 			return (-3);
11546429Svs195195 		}
11556429Svs195195 #endif
11566429Svs195195 	}
11576429Svs195195 
11586429Svs195195 	result = sin(-(pi));
11596429Svs195195 	expect_ans = 0.000000000410206;
11606429Svs195195 	if (result != expect_ans) {
11616429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11626429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11636429Svs195195 			expected = *(uint64_t *)&expect_ans;
11646429Svs195195 			observed = *(uint64_t *)&result;
1165*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
11666429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11676429Svs195195 			    expect_ans, result);
11686429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11696429Svs195195 			    report, 6147, &observed, &expected, 1, 1,
11706429Svs195195 			    err_data);
11716429Svs195195 
11726429Svs195195 			return (-3);
11736429Svs195195 		}
11746429Svs195195 	}
11756429Svs195195 
11766429Svs195195 	result = sin(-(pi / 2));
11776429Svs195195 	expect_ans = -(1.0000000000000000);
11786429Svs195195 	if (result != expect_ans) {
11796429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11806429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11816429Svs195195 			expected = *(uint64_t *)&expect_ans;
11826429Svs195195 			observed = *(uint64_t *)&result;
1183*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
11846429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11856429Svs195195 			    expect_ans, result);
11866429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11876429Svs195195 			    report, 6148, &observed, &expected, 1, 1,
11886429Svs195195 			    err_data);
11896429Svs195195 
11906429Svs195195 			return (-3);
11916429Svs195195 		}
11926429Svs195195 	}
11936429Svs195195 
11946429Svs195195 	result = sin(0.0);
11956429Svs195195 	expect_ans = 0.0000000000000000;
11966429Svs195195 	if (result != expect_ans) {
11976429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11986429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11996429Svs195195 			expected = *(uint64_t *)&expect_ans;
12006429Svs195195 			observed = *(uint64_t *)&result;
1201*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
12026429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12036429Svs195195 			    expect_ans, result);
12046429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12056429Svs195195 			    report, 6149, &observed, &expected, 1, 1,
12066429Svs195195 			    err_data);
12076429Svs195195 
12086429Svs195195 			return (-3);
12096429Svs195195 		}
12106429Svs195195 	}
12116429Svs195195 
12126429Svs195195 	result = sin(pi / 2);
12136429Svs195195 	expect_ans = 1.0000000000000000;
12146429Svs195195 	if (result != expect_ans) {
12156429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12166429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12176429Svs195195 			expected = *(uint64_t *)&expect_ans;
12186429Svs195195 			observed = *(uint64_t *)&result;
1219*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
12206429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12216429Svs195195 			    expect_ans, result);
12226429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12236429Svs195195 			    report, 6150, &observed, &expected, 1, 1,
12246429Svs195195 			    err_data);
12256429Svs195195 
12266429Svs195195 			return (-3);
12276429Svs195195 		}
12286429Svs195195 	}
12296429Svs195195 
12306429Svs195195 	result = sin(pi);
12316429Svs195195 	expect_ans = -(0.000000000410206);
12326429Svs195195 	if (result != expect_ans) {
12336429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12346429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12356429Svs195195 			expected = *(uint64_t *)&expect_ans;
12366429Svs195195 			observed = *(uint64_t *)&result;
1237*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
12386429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12396429Svs195195 			    expect_ans, result);
12406429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12416429Svs195195 			    report, 6151, &observed, &expected, 1, 1,
12426429Svs195195 			    err_data);
12436429Svs195195 
12446429Svs195195 			return (-3);
12456429Svs195195 		}
12466429Svs195195 	}
12476429Svs195195 
12486429Svs195195 	result = sin((pi * 3) / 2);
12496429Svs195195 	expect_ans = -(1.0000000000000000);
12506429Svs195195 	if (result != expect_ans) {
12516429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12526429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12536429Svs195195 			expected = *(uint64_t *)&expect_ans;
12546429Svs195195 			observed = *(uint64_t *)&result;
1255*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
12566429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12576429Svs195195 			    expect_ans, result);
12586429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12596429Svs195195 			    report, 6152, &observed, &expected, 1, 1,
12606429Svs195195 			    err_data);
12616429Svs195195 
12626429Svs195195 			return (-3);
12636429Svs195195 		}
12646429Svs195195 	}
12656429Svs195195 
12666429Svs195195 	result = sin(pi * 2);
12676429Svs195195 	expect_ans = 0.000000000820143;
12686429Svs195195 	expect_ans2 = 0.00000000820143;
12696429Svs195195 	if (result != expect_ans) {
12706429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12716429Svs195195 		    result > (expect_ans2 + DPMARGIN)) {
12726429Svs195195 			expected = *(uint64_t *)&expect_ans;
12736429Svs195195 			observed = *(uint64_t *)&result;
1274*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
12756429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12766429Svs195195 			    expect_ans, result);
12776429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12786429Svs195195 			    report, 6153, &observed, &expected, 1, 1,
12796429Svs195195 			    err_data);
12806429Svs195195 
12816429Svs195195 			return (-3);
12826429Svs195195 		}
12836429Svs195195 	}
12846429Svs195195 
12856429Svs195195 	/* cos of values in the range of -2pi to +2pi   */
12866429Svs195195 	result = cos(pi * (-2));
12876429Svs195195 	expect_ans = 1.0000000000000000;
12886429Svs195195 	if (result != expect_ans) {
12896429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12906429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12916429Svs195195 			expected = *(uint64_t *)&expect_ans;
12926429Svs195195 			observed = *(uint64_t *)&result;
1293*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
12946429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12956429Svs195195 			    expect_ans, result);
12966429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12976429Svs195195 			    report, 6154, &observed, &expected, 1, 1,
12986429Svs195195 			    err_data);
12996429Svs195195 
13006429Svs195195 			return (-3);
13016429Svs195195 		}
13026429Svs195195 	}
13036429Svs195195 
13046429Svs195195 	result = cos((pi * (-3)) / 2);
13056429Svs195195 	expect_ans = 0.000000000615310;
13066429Svs195195 	if (result != expect_ans) {
13076429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13086429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13096429Svs195195 			expected = *(uint64_t *)&expect_ans;
13106429Svs195195 			observed = *(uint64_t *)&result;
1311*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
13126429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13136429Svs195195 			    expect_ans, result);
13146429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13156429Svs195195 			    report, 6155, &observed, &expected, 1, 1,
13166429Svs195195 			    err_data);
13176429Svs195195 
13186429Svs195195 			return (-3);
13196429Svs195195 		}
13206429Svs195195 	}
13216429Svs195195 
13226429Svs195195 	result = cos(-pi);
13236429Svs195195 	expect_ans = -(1.0000000000000000);
13246429Svs195195 	if (result != expect_ans) {
13256429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13266429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13276429Svs195195 			expected = *(uint64_t *)&expect_ans;
13286429Svs195195 			observed = *(uint64_t *)&result;
1329*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
13306429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13316429Svs195195 			    expect_ans, result);
13326429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13336429Svs195195 			    report, 6156, &observed, &expected, 1, 1,
13346429Svs195195 			    err_data);
13356429Svs195195 
13366429Svs195195 			return (-3);
13376429Svs195195 		}
13386429Svs195195 	}
13396429Svs195195 
13406429Svs195195 	result = cos(-(pi / 2));
13416429Svs195195 	expect_ans = -(0.000000000205103);
13426429Svs195195 	if (result != expect_ans) {
13436429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13446429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13456429Svs195195 			expected = *(uint64_t *)&expect_ans;
13466429Svs195195 			observed = *(uint64_t *)&result;
1347*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
13486429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13496429Svs195195 			    expect_ans, result);
13506429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13516429Svs195195 			    report, 6157, &observed, &expected, 1, 1,
13526429Svs195195 			    err_data);
13536429Svs195195 
13546429Svs195195 			return (-3);
13556429Svs195195 		}
13566429Svs195195 	}
13576429Svs195195 
13586429Svs195195 	result = cos(0.0);
13596429Svs195195 	expect_ans = 1.0000000000000000;
13606429Svs195195 	if (result != expect_ans) {
13616429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13626429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13636429Svs195195 			expected = *(uint64_t *)&expect_ans;
13646429Svs195195 			observed = *(uint64_t *)&result;
1365*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
13666429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13676429Svs195195 			    expect_ans, result);
13686429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13696429Svs195195 			    report, 6158, &observed, &expected, 1, 1,
13706429Svs195195 			    err_data);
13716429Svs195195 
13726429Svs195195 			return (-3);
13736429Svs195195 		}
13746429Svs195195 	}
13756429Svs195195 
13766429Svs195195 	result = cos(pi / 2);
13776429Svs195195 	expect_ans = (-0.000000000205103);
13786429Svs195195 	if (result != expect_ans) {
13796429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13806429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13816429Svs195195 			expected = *(uint64_t *)&expect_ans;
13826429Svs195195 			observed = *(uint64_t *)&result;
1383*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
13846429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13856429Svs195195 			    expect_ans, result);
13866429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13876429Svs195195 			    report, 6159, &observed, &expected, 1, 1,
13886429Svs195195 			    err_data);
13896429Svs195195 
13906429Svs195195 			return (-3);
13916429Svs195195 		}
13926429Svs195195 	}
13936429Svs195195 
13946429Svs195195 	result = cos(pi);
13956429Svs195195 	expect_ans = (-1.0000000000000000);
13966429Svs195195 	if (result != expect_ans) {
13976429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13986429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13996429Svs195195 			expected = *(uint64_t *)&expect_ans;
14006429Svs195195 			observed = *(uint64_t *)&result;
1401*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
14026429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14036429Svs195195 			    expect_ans, result);
14046429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14056429Svs195195 			    report, 6160, &observed, &expected, 1, 1,
14066429Svs195195 			    err_data);
14076429Svs195195 
14086429Svs195195 			return (-3);
14096429Svs195195 		}
14106429Svs195195 	}
14116429Svs195195 
14126429Svs195195 	result = cos((pi * 3) / 2);
14136429Svs195195 	expect_ans = 0.000000000615310;
14146429Svs195195 	if (result != expect_ans) {
14156429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14166429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14176429Svs195195 			expected = *(uint64_t *)&expect_ans;
14186429Svs195195 			observed = *(uint64_t *)&result;
1419*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
14206429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14216429Svs195195 			    expect_ans, result);
14226429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14236429Svs195195 			    report, 6161, &observed, &expected, 1, 1,
14246429Svs195195 			    err_data);
14256429Svs195195 
14266429Svs195195 			return (-3);
14276429Svs195195 		}
14286429Svs195195 	}
14296429Svs195195 
14306429Svs195195 	result = cos(pi * 2);
14316429Svs195195 	expect_ans = 1.0000000000000000;
14326429Svs195195 	if (result != expect_ans) {
14336429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14346429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14356429Svs195195 			expected = *(uint64_t *)&expect_ans;
14366429Svs195195 			observed = *(uint64_t *)&result;
1437*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
14386429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14396429Svs195195 			    expect_ans, result);
14406429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14416429Svs195195 			    report, 6162, &observed, &expected, 1, 1,
14426429Svs195195 			    err_data);
14436429Svs195195 
14446429Svs195195 			return (-3);
14456429Svs195195 		}
14466429Svs195195 	}
14476429Svs195195 
14486429Svs195195 	/* sin and cos of: pi/4, 3pi/4, 5pi/4 and 7pi/4  */
14496429Svs195195 	result = sin(pi / 4);
14506429Svs195195 	expect_ans = 0.707106781259062;
14516429Svs195195 	if (result != expect_ans) {
14526429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14536429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14546429Svs195195 			expected = *(uint64_t *)&expect_ans;
14556429Svs195195 			observed = *(uint64_t *)&result;
1456*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
14576429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14586429Svs195195 			    expect_ans, result);
14596429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14606429Svs195195 			    report, 6163, &observed, &expected, 1, 1,
14616429Svs195195 			    err_data);
14626429Svs195195 
14636429Svs195195 			return (-3);
14646429Svs195195 		}
14656429Svs195195 	}
14666429Svs195195 
14676429Svs195195 	result = sin((pi * 3) / 4);
14686429Svs195195 	expect_ans = 0.707106780969002;
14696429Svs195195 	if (result != expect_ans) {
14706429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14716429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14726429Svs195195 			expected = *(uint64_t *)&expect_ans;
14736429Svs195195 			observed = *(uint64_t *)&result;
1474*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
14756429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14766429Svs195195 			    expect_ans, result);
14776429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14786429Svs195195 			    report, 6164, &observed, &expected, 1, 1,
14796429Svs195195 			    err_data);
14806429Svs195195 
14816429Svs195195 			return (-3);
14826429Svs195195 		}
14836429Svs195195 	}
14846429Svs195195 
14856429Svs195195 	result = sin((pi * 5) / 4);
14866429Svs195195 	expect_ans = -(0.707106781549122);
14876429Svs195195 	if (result != expect_ans) {
14886429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14896429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14906429Svs195195 			expected = *(uint64_t *)&expect_ans;
14916429Svs195195 			observed = *(uint64_t *)&result;
1492*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
14936429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14946429Svs195195 			    expect_ans, result);
14956429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14966429Svs195195 			    report, 6165, &observed, &expected, 1, 1,
14976429Svs195195 			    err_data);
14986429Svs195195 
14996429Svs195195 			return (-3);
15006429Svs195195 		}
15016429Svs195195 	}
15026429Svs195195 
15036429Svs195195 	result = sin((pi * 7) / 4);
15046429Svs195195 	expect_ans = -(0.707106780678942);
15056429Svs195195 	if (result != expect_ans) {
15066429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15076429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15086429Svs195195 			expected = *(uint64_t *)&expect_ans;
15096429Svs195195 			observed = *(uint64_t *)&result;
1510*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
15116429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15126429Svs195195 			    expect_ans, result);
15136429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15146429Svs195195 			    report, 6166, &observed, &expected, 1, 1,
15156429Svs195195 			    err_data);
15166429Svs195195 
15176429Svs195195 			return (-3);
15186429Svs195195 		}
15196429Svs195195 	}
15206429Svs195195 
15216429Svs195195 	result = cos(pi / 4);
15226429Svs195195 	expect_ans = 0.707106781114032;
15236429Svs195195 	if (result != expect_ans) {
15246429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15256429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15266429Svs195195 			expected = *(uint64_t *)&expect_ans;
15276429Svs195195 			observed = *(uint64_t *)&result;
1528*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
15296429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15306429Svs195195 			    expect_ans, result);
15316429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15326429Svs195195 			    report, 6167, &observed, &expected, 1, 1,
15336429Svs195195 			    err_data);
15346429Svs195195 
15356429Svs195195 			return (-3);
15366429Svs195195 		}
15376429Svs195195 	}
15386429Svs195195 
15396429Svs195195 	result = cos((pi * 3) / 4);
15406429Svs195195 	expect_ans = -(0.707106781404092);
15416429Svs195195 	if (result != expect_ans) {
15426429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15436429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15446429Svs195195 			expected = *(uint64_t *)&expect_ans;
15456429Svs195195 			observed = *(uint64_t *)&result;
1546*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
15476429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15486429Svs195195 			    expect_ans, result);
15496429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15506429Svs195195 			    report, 6168, &observed, &expected, 1, 1,
15516429Svs195195 			    err_data);
15526429Svs195195 
15536429Svs195195 			return (-3);
15546429Svs195195 		}
15556429Svs195195 	}
15566429Svs195195 
15576429Svs195195 	result = cos((pi * 5) / 4);
15586429Svs195195 	expect_ans = -(0.707106780823972);
15596429Svs195195 	if (result != expect_ans) {
15606429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15616429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15626429Svs195195 			expected = *(uint64_t *)&expect_ans;
15636429Svs195195 			observed = *(uint64_t *)&result;
1564*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
15656429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15666429Svs195195 			    expect_ans, result);
15676429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15686429Svs195195 			    report, 6169, &observed, &expected, 1, 1,
15696429Svs195195 			    err_data);
15706429Svs195195 
15716429Svs195195 			return (-3);
15726429Svs195195 		}
15736429Svs195195 	}
15746429Svs195195 
15756429Svs195195 	result = cos((pi * 7) / 4);
15766429Svs195195 	expect_ans = 0.707106781694152;
15776429Svs195195 	if (result != expect_ans) {
15786429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15796429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15806429Svs195195 			expected = *(uint64_t *)&expect_ans;
15816429Svs195195 			observed = *(uint64_t *)&result;
1582*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
15836429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15846429Svs195195 			    expect_ans, result);
15856429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15866429Svs195195 			    report, 6170, &observed, &expected, 1, 1,
15876429Svs195195 			    err_data);
15886429Svs195195 
15896429Svs195195 			return (-3);
15906429Svs195195 		}
15916429Svs195195 	}
15926429Svs195195 
15936429Svs195195 	/* exponential	 */
15946429Svs195195 	x = exp(0.0);
15956429Svs195195 	expect_ans = 1.0000000000000000;
15966429Svs195195 	if (x != expect_ans) {
15976429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
15986429Svs195195 		    x > (expect_ans + DPMARGIN)) {
15996429Svs195195 			expected = *(uint64_t *)&expect_ans;
16006429Svs195195 			observed = *(uint64_t *)&x;
1601*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
16026429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16036429Svs195195 			    expect_ans, x);
16046429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16056429Svs195195 			    report, 6171, &observed, &expected, 1, 1,
16066429Svs195195 			    err_data);
16076429Svs195195 
16086429Svs195195 			return (-3);
16096429Svs195195 		}
16106429Svs195195 	}
16116429Svs195195 
16126429Svs195195 	x = exp(1.0);
16136429Svs195195 	expect_ans = 2.718281828459045;
16146429Svs195195 	if (x != expect_ans) {
16156429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16166429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16176429Svs195195 			expected = *(uint64_t *)&expect_ans;
16186429Svs195195 			observed = *(uint64_t *)&x;
1619*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
16206429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16216429Svs195195 			    expect_ans, x);
16226429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16236429Svs195195 			    report, 6172, &observed, &expected, 1, 1,
16246429Svs195195 			    err_data);
16256429Svs195195 
16266429Svs195195 			return (-3);
16276429Svs195195 		}
16286429Svs195195 	}
16296429Svs195195 
16306429Svs195195 	x = exp(2.0);
16316429Svs195195 	expect_ans = 7.389056098930650;
16326429Svs195195 	if (x != expect_ans) {
16336429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16346429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16356429Svs195195 			expected = *(uint64_t *)&expect_ans;
16366429Svs195195 			observed = *(uint64_t *)&x;
1637*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
16386429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16396429Svs195195 			    expect_ans, x);
16406429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16416429Svs195195 			    report, 6173, &observed, &expected, 1, 1,
16426429Svs195195 			    err_data);
16436429Svs195195 
16446429Svs195195 			return (-3);
16456429Svs195195 		}
16466429Svs195195 	}
16476429Svs195195 
16486429Svs195195 	x = exp(5.0);
16496429Svs195195 	expect_ans = 148.413159102576600;
16506429Svs195195 	if (x != expect_ans) {
16516429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16526429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16536429Svs195195 			expected = *(uint64_t *)&expect_ans;
16546429Svs195195 			observed = *(uint64_t *)&x;
1655*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
16566429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16576429Svs195195 			    expect_ans, x);
16586429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16596429Svs195195 			    report, 6174, &observed, &expected, 1, 1,
16606429Svs195195 			    err_data);
16616429Svs195195 
16626429Svs195195 			return (-3);
16636429Svs195195 		}
16646429Svs195195 	}
16656429Svs195195 
16666429Svs195195 	x = exp(10.0);
16676429Svs195195 	expect_ans = 22026.465794806718000;
16686429Svs195195 	if (x != expect_ans) {
16696429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16706429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16716429Svs195195 			expected = *(uint64_t *)&expect_ans;
16726429Svs195195 			observed = *(uint64_t *)&x;
1673*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
16746429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16756429Svs195195 			    expect_ans, x);
16766429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16776429Svs195195 			    report, 6175, &observed, &expected, 1, 1,
16786429Svs195195 			    err_data);
16796429Svs195195 
16806429Svs195195 			return (-3);
16816429Svs195195 		}
16826429Svs195195 	}
16836429Svs195195 
16846429Svs195195 	x = exp(-1.0);
16856429Svs195195 	expect_ans = 0.367879441171442;
16866429Svs195195 	if (x != expect_ans) {
16876429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16886429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16896429Svs195195 			expected = *(uint64_t *)&expect_ans;
16906429Svs195195 			observed = *(uint64_t *)&x;
1691*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
16926429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16936429Svs195195 			    expect_ans, x);
16946429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16956429Svs195195 			    report, 6176, &observed, &expected, 1, 1,
16966429Svs195195 			    err_data);
16976429Svs195195 
16986429Svs195195 			return (-3);
16996429Svs195195 		}
17006429Svs195195 	}
17016429Svs195195 
17026429Svs195195 	x = exp(-2.0);
17036429Svs195195 	expect_ans = 0.135335283236612;
17046429Svs195195 	if (x != expect_ans) {
17056429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17066429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17076429Svs195195 			expected = *(uint64_t *)&expect_ans;
17086429Svs195195 			observed = *(uint64_t *)&x;
1709*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
17106429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17116429Svs195195 			    expect_ans, x);
17126429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17136429Svs195195 			    report, 6177, &observed, &expected, 1, 1,
17146429Svs195195 			    err_data);
17156429Svs195195 
17166429Svs195195 			return (-3);
17176429Svs195195 		}
17186429Svs195195 	}
17196429Svs195195 
17206429Svs195195 	x = exp(-5.0);
17216429Svs195195 	expect_ans = 0.006737946999085;
17226429Svs195195 	if (x != expect_ans) {
17236429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17246429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17256429Svs195195 			expected = *(uint64_t *)&expect_ans;
17266429Svs195195 			observed = *(uint64_t *)&x;
1727*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
17286429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17296429Svs195195 			    expect_ans, x);
17306429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17316429Svs195195 			    report, 6178, &observed, &expected, 1, 1,
17326429Svs195195 			    err_data);
17336429Svs195195 
17346429Svs195195 			return (-3);
17356429Svs195195 		}
17366429Svs195195 	}
17376429Svs195195 
17386429Svs195195 	x = exp(-10.0);
17396429Svs195195 	expect_ans = 0.000045399929762;
17406429Svs195195 	if (x != expect_ans) {
17416429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17426429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17436429Svs195195 			expected = *(uint64_t *)&expect_ans;
17446429Svs195195 			observed = *(uint64_t *)&x;
1745*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
17466429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17476429Svs195195 			    expect_ans, x);
17486429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17496429Svs195195 			    report, 6179, &observed, &expected, 1, 1,
17506429Svs195195 			    err_data);
17516429Svs195195 
17526429Svs195195 			return (-3);
17536429Svs195195 		}
17546429Svs195195 	}
17556429Svs195195 
17566429Svs195195 	x = exp(log(1.0));
17576429Svs195195 	expect_ans = 1.0000000000000000;
17586429Svs195195 	if (x != expect_ans) {
17596429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17606429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17616429Svs195195 			expected = *(uint64_t *)&expect_ans;
17626429Svs195195 			observed = *(uint64_t *)&x;
1763*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
17646429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17656429Svs195195 			    expect_ans, x);
17666429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17676429Svs195195 			    report, 6180, &observed, &expected, 1, 1,
17686429Svs195195 			    err_data);
17696429Svs195195 
17706429Svs195195 			return (-3);
17716429Svs195195 		}
17726429Svs195195 	}
17736429Svs195195 
17746429Svs195195 	x = exp(log(10.0));
17756429Svs195195 	expect_ans = 10.000000000000002;
17766429Svs195195 	if (x != expect_ans) {
17776429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17786429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17796429Svs195195 			expected = *(uint64_t *)&expect_ans;
17806429Svs195195 			observed = *(uint64_t *)&x;
1781*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
17826429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17836429Svs195195 			    expect_ans, x);
17846429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17856429Svs195195 			    report, 6181, &observed, &expected, 1, 1,
17866429Svs195195 			    err_data);
17876429Svs195195 
17886429Svs195195 			return (-3);
17896429Svs195195 		}
17906429Svs195195 	}
17916429Svs195195 
17926429Svs195195 	/* logarithms */
17936429Svs195195 	x = log(1.0);
17946429Svs195195 	expect_ans = 0.0000000000000000;
17956429Svs195195 	if (x != expect_ans) {
17966429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17976429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17986429Svs195195 		expected = *(uint64_t *)&expect_ans;
17996429Svs195195 			observed = *(uint64_t *)&x;
1800*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
18016429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18026429Svs195195 			    expect_ans, x);
18036429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18046429Svs195195 			    report, 6182, &observed, &expected, 1, 1,
18056429Svs195195 			    err_data);
18066429Svs195195 
18076429Svs195195 			return (-3);
18086429Svs195195 		}
18096429Svs195195 	}
18106429Svs195195 
18116429Svs195195 	x = log(2.0);
18126429Svs195195 	expect_ans = 0.693147180559945;
18136429Svs195195 	if (x != expect_ans) {
18146429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18156429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18166429Svs195195 			expected = *(uint64_t *)&expect_ans;
18176429Svs195195 			observed = *(uint64_t *)&x;
1818*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
18196429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18206429Svs195195 			    expect_ans, x);
18216429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18226429Svs195195 			    report, 6183, &observed, &expected, 1, 1,
18236429Svs195195 			    err_data);
18246429Svs195195 
18256429Svs195195 			return (-3);
18266429Svs195195 		}
18276429Svs195195 	}
18286429Svs195195 
18296429Svs195195 	x = log(10.0);
18306429Svs195195 	expect_ans = 2.302585092994045;
18316429Svs195195 	if (x != expect_ans) {
18326429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18336429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18346429Svs195195 			expected = *(uint64_t *)&expect_ans;
18356429Svs195195 			observed = *(uint64_t *)&x;
1836*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
18376429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18386429Svs195195 			    expect_ans, x);
18396429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18406429Svs195195 			    report, 6184, &observed, &expected, 1, 1,
18416429Svs195195 			    err_data);
18426429Svs195195 
18436429Svs195195 			return (-3);
18446429Svs195195 		}
18456429Svs195195 	}
18466429Svs195195 
18476429Svs195195 	x = log(100.0);
18486429Svs195195 	expect_ans = 4.605170185988091;
18496429Svs195195 	if (x != expect_ans) {
18506429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18516429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18526429Svs195195 			expected = *(uint64_t *)&expect_ans;
18536429Svs195195 			observed = *(uint64_t *)&x;
1854*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
18556429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18566429Svs195195 			    expect_ans, x);
18576429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18586429Svs195195 			    report, 6185, &observed, &expected, 1, 1,
18596429Svs195195 			    err_data);
18606429Svs195195 
18616429Svs195195 			return (-3);
18626429Svs195195 		}
18636429Svs195195 	}
18646429Svs195195 
18656429Svs195195 	x = log(exp(0.0));
18666429Svs195195 	expect_ans = 0.0000000000000000;
18676429Svs195195 	if (x != expect_ans) {
18686429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18696429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18706429Svs195195 			expected = *(uint64_t *)&expect_ans;
18716429Svs195195 			observed = *(uint64_t *)&x;
1872*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
18736429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18746429Svs195195 			    expect_ans, x);
18756429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18766429Svs195195 			    report, 6186, &observed, &expected, 1, 1,
18776429Svs195195 			    err_data);
18786429Svs195195 
18796429Svs195195 			return (-3);
18806429Svs195195 		}
18816429Svs195195 	}
18826429Svs195195 
18836429Svs195195 	x = log(exp(1.0));
18846429Svs195195 	expect_ans = 1.0000000000000000;
18856429Svs195195 	if (x != expect_ans) {
18866429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18876429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18886429Svs195195 			expected = *(uint64_t *)&expect_ans;
18896429Svs195195 			observed = *(uint64_t *)&x;
1890*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
18916429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18926429Svs195195 			    expect_ans, x);
18936429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18946429Svs195195 			    report, 6187, &observed, &expected, 1, 1,
18956429Svs195195 			    err_data);
18966429Svs195195 
18976429Svs195195 			return (-3);
18986429Svs195195 		}
18996429Svs195195 	}
19006429Svs195195 
19016429Svs195195 	x = log(exp(10.0));
19026429Svs195195 	expect_ans = 10.0000000000000000;
19036429Svs195195 	if (x != expect_ans) {
19046429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19056429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19066429Svs195195 			expected = *(uint64_t *)&expect_ans;
19076429Svs195195 			observed = *(uint64_t *)&x;
1908*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
19096429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19106429Svs195195 			    expect_ans, x);
19116429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19126429Svs195195 			    report, 6188, &observed, &expected, 1, 1,
19136429Svs195195 			    err_data);
19146429Svs195195 
19156429Svs195195 			return (-3);
19166429Svs195195 		}
19176429Svs195195 	}
19186429Svs195195 
19196429Svs195195 	/*
19206429Svs195195 	 * These functions are supported by the 68881
19216429Svs195195 	 * but not the FPA
19226429Svs195195 	 */
19236429Svs195195 
19246429Svs195195 	x = tan(-(2 * pi));
19256429Svs195195 	expect_ans = -(0.000000000820414);
19266429Svs195195 	if (x != expect_ans) {
19276429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19286429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19296429Svs195195 			expected = *(uint64_t *)&expect_ans;
19306429Svs195195 			observed = *(uint64_t *)&x;
1931*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
19326429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19336429Svs195195 			    expect_ans, x);
19346429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19356429Svs195195 			    report, 6189, &observed, &expected, 1, 1,
19366429Svs195195 			    err_data);
19376429Svs195195 
19386429Svs195195 			return (-3);
19396429Svs195195 		}
19406429Svs195195 	}
19416429Svs195195 
19426429Svs195195 	x = tan(-(7 * pi) / 4);
19436429Svs195195 	expect_ans = 0.999999998564275;
19446429Svs195195 	if (x != expect_ans) {
19456429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19466429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19476429Svs195195 			expected = *(uint64_t *)&expect_ans;
19486429Svs195195 			observed = *(uint64_t *)&x;
1949*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
19506429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19516429Svs195195 			    expect_ans, x);
19526429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19536429Svs195195 			    report, 6190, &observed, &expected, 1, 1,
19546429Svs195195 			    err_data);
19556429Svs195195 
19566429Svs195195 			return (-3);
19576429Svs195195 		}
19586429Svs195195 	}
19596429Svs195195 
19606429Svs195195 	x = tan(-(5 * pi) / 4);
19616429Svs195195 	expect_ans = -(1.000000001025517);
19626429Svs195195 	if (x != expect_ans) {
19636429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19646429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19656429Svs195195 			expected = *(uint64_t *)&expect_ans;
19666429Svs195195 			observed = *(uint64_t *)&x;
1967*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),\
19686429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19696429Svs195195 			    expect_ans, x);
19706429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19716429Svs195195 			    report, 6191, &observed, &expected, 1, 1,
19726429Svs195195 			    err_data);
19736429Svs195195 
19746429Svs195195 			return (-3);
19756429Svs195195 		}
19766429Svs195195 	}
19776429Svs195195 
19786429Svs195195 	x = tan(-(pi));
19796429Svs195195 	expect_ans = -(0.000000000410207);
19806429Svs195195 	if (x != expect_ans) {
19816429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19826429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19836429Svs195195 			expected = *(uint64_t *)&expect_ans;
19846429Svs195195 			observed = *(uint64_t *)&x;
1985*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
19866429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19876429Svs195195 			    expect_ans, x);
19886429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19896429Svs195195 			    report, 6192, &observed, &expected, 1, 1,
19906429Svs195195 			    err_data);
19916429Svs195195 
19926429Svs195195 			return (-3);
19936429Svs195195 		}
19946429Svs195195 	}
19956429Svs195195 
19966429Svs195195 	x = tan(-(3 * pi) / 4);
19976429Svs195195 	expect_ans = 0.999999999384690;
19986429Svs195195 	if (x != expect_ans) {
19996429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20006429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20016429Svs195195 			expected = *(uint64_t *)&expect_ans;
20026429Svs195195 			observed = *(uint64_t *)&x;
2003*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
20046429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20056429Svs195195 			    expect_ans, x);
20066429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20076429Svs195195 			    report, 6193, &observed, &expected, 1, 1,
20086429Svs195195 			    err_data);
20096429Svs195195 
20106429Svs195195 			return (-3);
20116429Svs195195 		}
20126429Svs195195 	}
20136429Svs195195 
20146429Svs195195 	x = tan(-(pi) / 4);
20156429Svs195195 	expect_ans = -(1.000000000205103);
20166429Svs195195 	if (x != expect_ans) {
20176429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20186429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20196429Svs195195 			expected = *(uint64_t *)&expect_ans;
20206429Svs195195 			observed = *(uint64_t *)&x;
2021*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
20226429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20236429Svs195195 			    expect_ans, x);
20246429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20256429Svs195195 			    report, 6194, &observed, &expected, 1, 1,
20266429Svs195195 			    err_data);
20276429Svs195195 
20286429Svs195195 			return (-3);
20296429Svs195195 		}
20306429Svs195195 	}
20316429Svs195195 
20326429Svs195195 	x = tan(0.0);
20336429Svs195195 	expect_ans = 0.000000000000000;
20346429Svs195195 	if (x != expect_ans) {
20356429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20366429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20376429Svs195195 			expected = *(uint64_t *)&expect_ans;
20386429Svs195195 			observed = *(uint64_t *)&x;
2039*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
20406429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20416429Svs195195 			    expect_ans, x);
20426429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20436429Svs195195 			    report, 6195, &observed, &expected, 1, 1,
20446429Svs195195 			    err_data);
20456429Svs195195 
20466429Svs195195 			return (-3);
20476429Svs195195 		}
20486429Svs195195 	}
20496429Svs195195 
20506429Svs195195 	x = tan(pi / 4);
20516429Svs195195 	expect_ans = 1.000000000205103;
20526429Svs195195 	if (x != expect_ans) {
20536429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20546429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20556429Svs195195 			expected = *(uint64_t *)&expect_ans;
20566429Svs195195 			observed = *(uint64_t *)&x;
2057*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
20586429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20596429Svs195195 			    expect_ans, x);
20606429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20616429Svs195195 			    report, 6196, &observed, &expected, 1, 1,
20626429Svs195195 			    err_data);
20636429Svs195195 
20646429Svs195195 			return (-3);
20656429Svs195195 		}
20666429Svs195195 	}
20676429Svs195195 
20686429Svs195195 	x = tan((3 * pi) / 4);
20696429Svs195195 	expect_ans = -(0.999999999384690);
20706429Svs195195 	if (x != expect_ans) {
20716429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20726429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20736429Svs195195 			expected = *(uint64_t *)&expect_ans;
20746429Svs195195 			observed = *(uint64_t *)&x;
2075*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
20766429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20776429Svs195195 			    expect_ans, x);
20786429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20796429Svs195195 			    report, 6197, &observed, &expected, 1, 1,
20806429Svs195195 			    err_data);
20816429Svs195195 
20826429Svs195195 			return (-3);
20836429Svs195195 		}
20846429Svs195195 	}
20856429Svs195195 
20866429Svs195195 	x = tan(pi);
20876429Svs195195 	expect_ans = 0.000000000410207;
20886429Svs195195 	if (x != expect_ans) {
20896429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20906429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20916429Svs195195 			expected = *(uint64_t *)&expect_ans;
20926429Svs195195 			observed = *(uint64_t *)&x;
2093*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
20946429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20956429Svs195195 			    expect_ans, x);
20966429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20976429Svs195195 			    report, 6198, &observed, &expected, 1, 1,
20986429Svs195195 			    err_data);
20996429Svs195195 
21006429Svs195195 			return (-3);
21016429Svs195195 		}
21026429Svs195195 	}
21036429Svs195195 
21046429Svs195195 	x = tan((5 * pi) / 4);
21056429Svs195195 	expect_ans = 1.000000001025517;
21066429Svs195195 	if (x != expect_ans) {
21076429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21086429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21096429Svs195195 			expected = *(uint64_t *)&expect_ans;
21106429Svs195195 			observed = *(uint64_t *)&x;
2111*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
21126429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21136429Svs195195 			    expect_ans, x);
21146429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21156429Svs195195 			    report, 6199, &observed, &expected, 1, 1,
21166429Svs195195 			    err_data);
21176429Svs195195 
21186429Svs195195 			return (-3);
21196429Svs195195 		}
21206429Svs195195 	}
21216429Svs195195 
21226429Svs195195 	x = tan((7 * pi) / 4);
21236429Svs195195 	expect_ans = -(0.999999998564275);
21246429Svs195195 	if (x != expect_ans) {
21256429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21266429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21276429Svs195195 			expected = *(uint64_t *)&expect_ans;
21286429Svs195195 			observed = *(uint64_t *)&x;
2129*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
21306429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21316429Svs195195 			    expect_ans, x);
21326429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21336429Svs195195 			    report, 6200, &observed, &expected, 1, 1,
21346429Svs195195 			    err_data);
21356429Svs195195 
21366429Svs195195 			return (-3);
21376429Svs195195 		}
21386429Svs195195 	}
21396429Svs195195 
21406429Svs195195 	x = tan((2 * pi));
21416429Svs195195 	expect_ans = 0.000000000820414;
21426429Svs195195 	if (x != expect_ans) {
21436429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21446429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21456429Svs195195 			expected = *(uint64_t *)&expect_ans;
21466429Svs195195 			observed = *(uint64_t *)&x;
2147*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
21486429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21496429Svs195195 			    expect_ans, x);
21506429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21516429Svs195195 			    report, 6201, &observed, &expected, 1, 1,
21526429Svs195195 			    err_data);
21536429Svs195195 
21546429Svs195195 			return (-3);
21556429Svs195195 		}
21566429Svs195195 	}
21576429Svs195195 
21586429Svs195195 	x = sqrt(0.0);
21596429Svs195195 	expect_ans = 0.000000000000000;
21606429Svs195195 	if (x != expect_ans) {
21616429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21626429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21636429Svs195195 			expected = *(uint64_t *)&expect_ans;
21646429Svs195195 			observed = *(uint64_t *)&x;
2165*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
21666429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21676429Svs195195 			    expect_ans, x);
21686429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21696429Svs195195 			    report, 6202, &observed, &expected, 1, 1,
21706429Svs195195 			    err_data);
21716429Svs195195 
21726429Svs195195 			return (-3);
21736429Svs195195 		}
21746429Svs195195 	}
21756429Svs195195 
21766429Svs195195 	x = sqrt(1.0);
21776429Svs195195 	expect_ans = 1.000000000000000;
21786429Svs195195 	if (x != expect_ans) {
21796429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21806429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21816429Svs195195 			expected = *(uint64_t *)&expect_ans;
21826429Svs195195 			observed = *(uint64_t *)&x;
2183*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
21846429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21856429Svs195195 			    expect_ans, x);
21866429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21876429Svs195195 			    report, 6203, &observed, &expected, 1, 1,
21886429Svs195195 			    err_data);
21896429Svs195195 
21906429Svs195195 			return (-3);
21916429Svs195195 		}
21926429Svs195195 	}
21936429Svs195195 
21946429Svs195195 	x = sqrt(4.0);
21956429Svs195195 	expect_ans = 2.000000000000000;
21966429Svs195195 	if (x != expect_ans) {
21976429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21986429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21996429Svs195195 			expected = *(uint64_t *)&expect_ans;
22006429Svs195195 			observed = *(uint64_t *)&x;
2201*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
22026429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22036429Svs195195 			    expect_ans, x);
22046429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22056429Svs195195 			    report, 6204, &observed, &expected, 1, 1,
22066429Svs195195 			    err_data);
22076429Svs195195 
22086429Svs195195 			return (-3);
22096429Svs195195 		}
22106429Svs195195 	}
22116429Svs195195 
22126429Svs195195 	x = sqrt(9.0);
22136429Svs195195 	expect_ans = 3.000000000000000;
22146429Svs195195 	if (x != expect_ans) {
22156429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22166429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22176429Svs195195 			expected = *(uint64_t *)&expect_ans;
22186429Svs195195 			observed = *(uint64_t *)&x;
2219*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
22206429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22216429Svs195195 			    expect_ans, x);
22226429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22236429Svs195195 			    report, 6205, &observed, &expected, 1, 1,
22246429Svs195195 			    err_data);
22256429Svs195195 
22266429Svs195195 			return (-3);
22276429Svs195195 		}
22286429Svs195195 	}
22296429Svs195195 
22306429Svs195195 	x = sqrt(16.0);
22316429Svs195195 	expect_ans = 4.000000000000000;
22326429Svs195195 	if (x != expect_ans) {
22336429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22346429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22356429Svs195195 			expected = *(uint64_t *)&expect_ans;
22366429Svs195195 			observed = *(uint64_t *)&x;
2237*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
22386429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22396429Svs195195 			    expect_ans, x);
22406429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22416429Svs195195 			    report, 6206, &observed, &expected, 1, 1,
22426429Svs195195 			    err_data);
22436429Svs195195 
22446429Svs195195 			return (-3);
22456429Svs195195 		}
22466429Svs195195 	}
22476429Svs195195 
22486429Svs195195 	x = sqrt(25.0);
22496429Svs195195 	expect_ans = 5.000000000000000;
22506429Svs195195 	if (x != expect_ans) {
22516429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22526429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22536429Svs195195 			expected = *(uint64_t *)&expect_ans;
22546429Svs195195 			observed = *(uint64_t *)&x;
2255*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
22566429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22576429Svs195195 			    expect_ans, x);
22586429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22596429Svs195195 			    report, 6207, &observed, &expected, 1, 1,
22606429Svs195195 			    err_data);
22616429Svs195195 
22626429Svs195195 			return (-3);
22636429Svs195195 		}
22646429Svs195195 	}
22656429Svs195195 
22666429Svs195195 	x = sqrt(36.0);
22676429Svs195195 	expect_ans = 6.000000000000000;
22686429Svs195195 	if (x != expect_ans) {
22696429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22706429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22716429Svs195195 			expected = *(uint64_t *)&expect_ans;
22726429Svs195195 			observed = *(uint64_t *)&x;
2273*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
22746429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22756429Svs195195 			    expect_ans, x);
22766429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22776429Svs195195 			    report, 6208, &observed, &expected, 1, 1,
22786429Svs195195 			    err_data);
22796429Svs195195 
22806429Svs195195 			return (-3);
22816429Svs195195 		}
22826429Svs195195 	}
22836429Svs195195 
22846429Svs195195 	x = sqrt(49.0);
22856429Svs195195 	expect_ans = 7.000000000000000;
22866429Svs195195 	if (x != expect_ans) {
22876429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22886429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22896429Svs195195 			expected = *(uint64_t *)&expect_ans;
22906429Svs195195 			observed = *(uint64_t *)&x;
2291*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
22926429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22936429Svs195195 			    expect_ans, x);
22946429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22956429Svs195195 			    report, 6209, &observed, &expected, 1, 1,
22966429Svs195195 			    err_data);
22976429Svs195195 
22986429Svs195195 			return (-3);
22996429Svs195195 		}
23006429Svs195195 	}
23016429Svs195195 
23026429Svs195195 	x = sqrt(64.0);
23036429Svs195195 	expect_ans = 8.000000000000000;
23046429Svs195195 	if (x != expect_ans) {
23056429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
23066429Svs195195 		    x > (expect_ans + DPMARGIN)) {
23076429Svs195195 			expected = *(uint64_t *)&expect_ans;
23086429Svs195195 			observed = *(uint64_t *)&x;
2309*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
23106429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
23116429Svs195195 			    expect_ans, x);
23126429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
23136429Svs195195 			    report, 6210, &observed, &expected, 1, 1,
23146429Svs195195 			    err_data);
23156429Svs195195 
23166429Svs195195 			return (-3);
23176429Svs195195 		}
23186429Svs195195 	}
23196429Svs195195 
23206429Svs195195 	x = sqrt(81.0);
23216429Svs195195 	expect_ans = 9.000000000000000;
23226429Svs195195 	if (x != expect_ans) {
23236429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
23246429Svs195195 		    x > (expect_ans + DPMARGIN)) {
23256429Svs195195 			expected = *(uint64_t *)&expect_ans;
23266429Svs195195 			observed = *(uint64_t *)&x;
2327*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
23286429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
23296429Svs195195 			    expect_ans, x);
23306429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
23316429Svs195195 			    report, 6211, &observed, &expected, 1, 1,
23326429Svs195195 			    err_data);
23336429Svs195195 
23346429Svs195195 			return (-3);
23356429Svs195195 		}
23366429Svs195195 	}
23376429Svs195195 
23386429Svs195195 	x = sqrt(100.0);
23396429Svs195195 	expect_ans = 10.000000000000000;
23406429Svs195195 	if (x != expect_ans) {
23416429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
23426429Svs195195 		    x > (expect_ans + DPMARGIN)) {
23436429Svs195195 			expected = *(uint64_t *)&expect_ans;
23446429Svs195195 			observed = *(uint64_t *)&x;
2345*7186Skk158166 			(void) snprintf(err_data, sizeof (err_data),
23466429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
23476429Svs195195 			    expect_ans, x);
23486429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
23496429Svs195195 			    report, 6212, &observed, &expected, 1, 1,
23506429Svs195195 			    err_data);
23516429Svs195195 
23526429Svs195195 			return (-3);
23536429Svs195195 		}
23546429Svs195195 	}
23556429Svs195195 
23566429Svs195195 	return (0);
23576429Svs195195 }
23586429Svs195195 
23596429Svs195195 /*
23606429Svs195195  * process_fpu_args(int argc, char *argv[])
23616429Svs195195  * processes the args passed into main()
23626429Svs195195  * and sets the appropriate global vars.
23636429Svs195195  */
23646429Svs195195 static void
process_fpu_args(int argc,char * argv[])23656429Svs195195 process_fpu_args(int argc, char *argv[])
23666429Svs195195 {
23676429Svs195195 	char l_buf[32];
23686429Svs195195 	char *px;
23696429Svs195195 	int opt;
23706429Svs195195 
23716429Svs195195 	while ((opt = getopt(argc, argv, "s:d:p:f:vnhe")) != EOF) {
23726429Svs195195 	switch (opt) {
23736429Svs195195 		case 'P': /* -p N or -p all or no -p */
23746429Svs195195 		case 'p':
23756429Svs195195 
2376*7186Skk158166 			(void) memset(l_buf, 0, sizeof (l_buf));
23776429Svs195195 			test_group = -1;
23786429Svs195195 			if (NULL != optarg) {
2379*7186Skk158166 			(void) strncpy(l_buf, optarg, 3);	/* -p all */
23806429Svs195195 			if (!strncasecmp(l_buf, "all", 3)) {
23816429Svs195195 				test_group = 12345;
23826429Svs195195 				break;
23836429Svs195195 				}
23846429Svs195195 				test_group = atoi(optarg);
23856429Svs195195 				if ((0 == test_group) && strcmp(optarg, "0"))
23866429Svs195195 					test_group = -1;
23876429Svs195195 			}
23886429Svs195195 
23896429Svs195195 			if (test_group < 0) {
23906429Svs195195 				_exit(FPU_INVALID_ARG);
23916429Svs195195 			}
23926429Svs195195 			break;
23936429Svs195195 		case 'f': /* 1000,1500,2000 freq */
23946429Svs195195 		case 'F':
2395*7186Skk158166 			(void) memset(l_buf, 0, sizeof (l_buf));
23966429Svs195195 			if (NULL != optarg) {
2397*7186Skk158166 				/* -f 1000 */
2398*7186Skk158166 				(void) strncpy(l_buf, optarg, 5);
2399*7186Skk158166 
24006429Svs195195 				proc_fr = atoi(optarg);
24016429Svs195195 
24026429Svs195195 				switch (proc_fr) {
24036429Svs195195 				case 1000 :
24046429Svs195195 					lowstresslapagroup_len =
24056429Svs195195 					    lowstresslapagroup1000_len;
24066429Svs195195 					lowstresslapagroup =
24076429Svs195195 					    LowStressLapaGroup_1000;
24086429Svs195195 					break;
24096429Svs195195 				case 1500 :
24106429Svs195195 					lowstresslapagroup_len =
24116429Svs195195 					    lowstresslapagroup1500_len;
24126429Svs195195 					lowstresslapagroup =
24136429Svs195195 					    LowStressLapaGroup_1500;
24146429Svs195195 					break;
24156429Svs195195 				case 2000 :
24166429Svs195195 					lowstresslapagroup_len =
24176429Svs195195 					    lowstresslapagroup2000_len;
24186429Svs195195 					lowstresslapagroup =
24196429Svs195195 					    LowStressLapaGroup_2000;
24206429Svs195195 					break;
24216429Svs195195 				default :
24226429Svs195195 					if (proc_fr < 1500) {
24236429Svs195195 						lowstresslapagroup_len =
24246429Svs195195 						    lowstresslapagroup1000_len;
24256429Svs195195 						lowstresslapagroup =
24266429Svs195195 						    LowStressLapaGroup_1000;
24276429Svs195195 						break;
24286429Svs195195 					} else if (proc_fr < 2000) {
24296429Svs195195 						lowstresslapagroup_len =
24306429Svs195195 						    lowstresslapagroup1500_len;
24316429Svs195195 						lowstresslapagroup =
24326429Svs195195 						    LowStressLapaGroup_1500;
24336429Svs195195 						break;
24346429Svs195195 					} else {
24356429Svs195195 						lowstresslapagroup_len =
24366429Svs195195 						    lowstresslapagroup2000_len;
24376429Svs195195 						lowstresslapagroup =
24386429Svs195195 						    LowStressLapaGroup_2000;
24396429Svs195195 						break;
24406429Svs195195 					}
24416429Svs195195 				}
24426429Svs195195 			}
24436429Svs195195 			break;
24446429Svs195195 		case 'd':
24456429Svs195195 			if (optarg == NULL)
24466429Svs195195 				_exit(FPU_INVALID_ARG);
24476429Svs195195 
24486429Svs195195 			fpu_cpu = atoi(optarg);
24496429Svs195195 
24506429Svs195195 			if (fpu_cpu == 0 && strcmp(optarg, "0"))
24516429Svs195195 				_exit(FPU_INVALID_ARG);
24526429Svs195195 
24536429Svs195195 			if (is_cpu_on(fpu_cpu))
24546429Svs195195 				_exit(FPU_BIND_FAIL);
24556429Svs195195 			break;
24566429Svs195195 		case 'E':
24576429Svs195195 		case 'e':
24586429Svs195195 			fps_exec_time = 1;
24596429Svs195195 			break;
24606429Svs195195 		case 'V':
24616429Svs195195 		case 'v':
24626429Svs195195 			fps_verbose_msg = 1;
24636429Svs195195 			break;
24646429Svs195195 		case 'S':
24656429Svs195195 		case 's':
2466*7186Skk158166 			(void) memset(l_buf, 0, sizeof (l_buf));
24676429Svs195195 			stress_level = 1;
24686429Svs195195 
24696429Svs195195 			if (NULL != optarg) {
2470*7186Skk158166 				(void) strncpy(l_buf, optarg, 2);
24716429Svs195195 
24726429Svs195195 				if (('X' != l_buf[0]) && (0 != l_buf[1]))
24736429Svs195195 					l_buf[0] = 'E';
24746429Svs195195 
24756429Svs195195 				switch (l_buf[0]) {
24766429Svs195195 				case 'l':
24776429Svs195195 				case 'L':
24786429Svs195195 				case '1':
24796429Svs195195 					stress_level = 1;
24806429Svs195195 					limit_group = 1;
24816429Svs195195 					break;
24826429Svs195195 				case 'm':
24836429Svs195195 				case 'M':
24846429Svs195195 				case '2':
24856429Svs195195 					stress_level = 1000;
24866429Svs195195 					limit_group = 2;
24876429Svs195195 					break;
24886429Svs195195 				case 'h':
24896429Svs195195 				case 'H':
24906429Svs195195 				case '3':
24916429Svs195195 					stress_level = 4000;
24926429Svs195195 					limit_group = 3;
24936429Svs195195 					break;
24946429Svs195195 				case 'X':
24956429Svs195195 					px = optarg + 1;
24966429Svs195195 					stress_level = 10000;
24976429Svs195195 					limit_group = 3;
24986429Svs195195 
24996429Svs195195 					if (NULL != px) {
25006429Svs195195 						stress_level = atoi(px);
25016429Svs195195 						if ((0 == stress_level) ||
25026429Svs195195 						    (stress_level > 10000) ||
25036429Svs195195 						    (stress_level < 1000) ||
25046429Svs195195 						    (0 != stress_level % 1000))
25056429Svs195195 							stress_level = 10000;
25066429Svs195195 					}
25076429Svs195195 					break;
25086429Svs195195 				default:
25096429Svs195195 					stress_level = 1;
25106429Svs195195 					limit_group = 1;
25116429Svs195195 					break;
25126429Svs195195 				}
25136429Svs195195 			}
25146429Svs195195 			break;
25156429Svs195195 		default:
25166429Svs195195 			_exit(FPU_INVALID_ARG);
25176429Svs195195 			break;
25186429Svs195195 		}
25196429Svs195195 	}
25206429Svs195195 }
25216429Svs195195 
25226429Svs195195 /*
25236429Svs195195  * is_cpu_on(int unit) checks to see if processor
25246429Svs195195  * unit is online.
25256429Svs195195  */
25266429Svs195195 static int
is_cpu_on(int unit)25276429Svs195195 is_cpu_on(int unit)
25286429Svs195195 {
25296429Svs195195 	int proc_stat;
25306429Svs195195 
25316429Svs195195 	proc_stat = p_online(unit, P_STATUS);
25326429Svs195195 
25336429Svs195195 	if (P_ONLINE == proc_stat)
25346429Svs195195 		return (0);
25356429Svs195195 
25366429Svs195195 	return (1);
25376429Svs195195 }
25386429Svs195195 
25396429Svs195195 /*
25406429Svs195195  * check_proc(int cpu_id) checks to see that we're on an
25416429Svs195195  * fpscrubber supported processor specified by cpu_id.
25426429Svs195195  */
25436429Svs195195 static int
check_proc(int cpu_id)25446429Svs195195 check_proc(int cpu_id)
25456429Svs195195 {
25466429Svs195195 	char brand[40];
25476429Svs195195 	kstat_ctl_t *kc;
25486429Svs195195 	kstat_t *ksp;
25496429Svs195195 	kstat_named_t *knp;
25506429Svs195195 
25516429Svs195195 
25526429Svs195195 	/* grab kstat info */
25536429Svs195195 	if ((kc = kstat_open()) == NULL)
25546429Svs195195 		return (1);
25556429Svs195195 
25566429Svs195195 	if ((ksp = kstat_lookup(kc, "cpu_info", (int)cpu_id, NULL)) == NULL) {
2557*7186Skk158166 		(void) kstat_close(kc);
25586429Svs195195 
25596429Svs195195 		return (1);
25606429Svs195195 	}
25616429Svs195195 
25626429Svs195195 	if ((kstat_read(kc, ksp, NULL)) == -1) {
2563*7186Skk158166 		(void) kstat_close(kc);
25646429Svs195195 
25656429Svs195195 		return (1);
25666429Svs195195 	}
25676429Svs195195 
25686429Svs195195 	if ((knp = kstat_data_lookup(ksp, "brand")) == NULL) {
2569*7186Skk158166 		(void) kstat_close(kc);
25706429Svs195195 
25716429Svs195195 		return (1);
25726429Svs195195 	}
25736429Svs195195 
2574*7186Skk158166 	if (snprintf(brand, MAX_CPU_BRAND, "%s",
2575*7186Skk158166 	    KSTAT_NAMED_STR_PTR(knp)) < 0) {
2576*7186Skk158166 		(void) kstat_close(kc);
25776429Svs195195 
25786429Svs195195 		return (1);
25796429Svs195195 	}
25806429Svs195195 
25816429Svs195195 	/* check against supported CPUs */
25826429Svs195195 
25836429Svs195195 	if (strcmp(brand, USIII_KSTAT) != 0 &&
25846429Svs195195 	    strcmp(brand, USIIIi_KSTAT) != 0 &&
25856429Svs195195 	    strcmp(brand, USIIIP_KSTAT) != 0 &&
25866429Svs195195 	    strcmp(brand, USIV_KSTAT) != 0 &&
25876429Svs195195 	    strcmp(brand, USIVP_KSTAT) != 0) {
2588*7186Skk158166 			(void) kstat_close(kc);
25896429Svs195195 
25906429Svs195195 			return (2);
25916429Svs195195 	}
25926429Svs195195 
2593*7186Skk158166 	(void) kstat_close(kc);
25946429Svs195195 
25956429Svs195195 	return (0);
25966429Svs195195 }
2597