xref: /onnv-gate/usr/src/cmd/fps/fptest/fptest.c (revision 6863:7a7174ac2c5d)
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
936429Svs195195 main(int argc, char *argv[])
946429Svs195195 {
956429Svs195195 	int test_ret;
966429Svs195195 	int procb;
976429Svs195195 	int proc_setb;
98*6863Sia112686 	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) {
1556429Svs195195 			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 
164*6863Sia112686 	/*
165*6863Sia112686 	 * Testing is now done and a return code is selected.
166*6863Sia112686 	 * FPU_OK: No problems found on FPU tested.
167*6863Sia112686 	 *
168*6863Sia112686 	 * FPU_BIND_FAIL: CPU currently bound to is not the
169*6863Sia112686 	 * one started on. Attempt to file ereport if CPU
170*6863Sia112686 	 * is supported,  but don't include resource so
171*6863Sia112686 	 * CPU isn't offlined.
172*6863Sia112686 	 *
173*6863Sia112686 	 * FPU_UNSUPPORT: Test wasn't run on a supported CPU.
174*6863Sia112686 	 * Error was found, but no ereport will be filed since
175*6863Sia112686 	 * CPU is unsupported and test values may not be valid.
176*6863Sia112686 	 *
177*6863Sia112686 	 * FPU_FOROFFLINE: Error found on FPU and ereport
178*6863Sia112686 	 * payload successfully sent.
179*6863Sia112686 	 *
180*6863Sia112686 	 * FPU_EREPORT_INCOM: Error found on FPU, ereport payload
181*6863Sia112686 	 * sent, but some nonessential information failed to add
182*6863Sia112686 	 * to that payload. CPU will still be offlined.
183*6863Sia112686 	 *
184*6863Sia112686 	 * FPU_EREPORT_FAIL: Error found on FPU, but ereport payload
185*6863Sia112686 	 * failed to transfer either due to lack of mandatory data
186*6863Sia112686 	 * or unable to send on FPScrubber systevent channel.
187*6863Sia112686 	 */
188*6863Sia112686 
1896429Svs195195 	if (test_ret == FPU_FOROFFLINE) {
1906429Svs195195 		/*
1916429Svs195195 		 * check bind and
1926429Svs195195 		 * check if on supported plaform
1936429Svs195195 		 */
1946429Svs195195 		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) {
208*6863Sia112686 			test_ret = fps_generate_ereport_struct(&ereport_data);
209*6863Sia112686 			if (ret != FPU_BIND_FAIL) {
210*6863Sia112686 				ret = test_ret;
211*6863Sia112686 			}
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
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 
2496429Svs195195 	printf("Execution time: %ldH.%ldM.%ldS.%ldMsec\n", hour, minute,
2506429Svs195195 	    second, mili);
2516429Svs195195 	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
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 
3366429Svs195195 		if (align_data(lim, unit, report) != 0) {
3376429Svs195195 			return (FPU_FOROFFLINE);
3386429Svs195195 		}
3396429Svs195195 
3406429Svs195195 		if (vis_test(unit, 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
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);
4586429Svs195195 				if (dlinpack_test(lapa_loop_stress, unit,
4596429Svs195195 				    report, fps_verbose_msg))
4606429Svs195195 					return (-4);
4616429Svs195195 			}
4626429Svs195195 		break;
4636429Svs195195 		}
4646429Svs195195 
4656429Svs195195 		if (slinpack_test(lapa_stress, unit, report, fps_verbose_msg))
4666429Svs195195 			return (-4);
4676429Svs195195 		if (dlinpack_test(lapa_stress, unit, report, fps_verbose_msg))
4686429Svs195195 			return (-4);
4696429Svs195195 	}
4706429Svs195195 
4716429Svs195195 	return (0);
4726429Svs195195 }
4736429Svs195195 
4746429Svs195195 
4756429Svs195195 /*
4766429Svs195195  * spmath(int unit, struct fps_test_ereport *report)
4776429Svs195195  * peforms basic tests of the arithmetic operations:
4786429Svs195195  * +, -, *, and /. If any errors, they are stored in
4796429Svs195195  * report.
4806429Svs195195  */
4816429Svs195195 static int
4826429Svs195195 spmath(struct fps_test_ereport *report)
4836429Svs195195 {
4846429Svs195195 	char err_data[MAX_INFO_SIZE];
4856429Svs195195 	float a;
4866429Svs195195 	float ans;
4876429Svs195195 	float b;
4886429Svs195195 	float expect_ans;
4896429Svs195195 	uint64_t expected;
4906429Svs195195 	uint64_t observed;
4916429Svs195195 
4926429Svs195195 	a = 1.2345;
4936429Svs195195 	b = 0.9876;
4946429Svs195195 
4956429Svs195195 #ifndef __lint
4966429Svs195195 	ans = a + b;
4976429Svs195195 #endif
4986429Svs195195 	ans = a + b;
4996429Svs195195 	expect_ans = 2.2221000;
5006429Svs195195 	if (ans != expect_ans) {
5016429Svs195195 		if (ans < (2.2221000 - SPMARGIN) ||
5026429Svs195195 		    ans > (2.2221000 + SPMARGIN)) {
5036429Svs195195 			snprintf(err_data, sizeof (err_data),
5046429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5056429Svs195195 			    expect_ans, ans);
5066429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5076429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5086429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5096429Svs195195 			    report, 6112, &observed, &expected, 1,
5106429Svs195195 			    1, err_data);
5116429Svs195195 
5126429Svs195195 			return (-2);
5136429Svs195195 		}
5146429Svs195195 	}
5156429Svs195195 
5166429Svs195195 	ans = (a - b);
5176429Svs195195 	expect_ans = 0.2469000;
5186429Svs195195 	if (ans != expect_ans) {
5196429Svs195195 		if (ans < (0.2469000 - SPMARGIN) ||
5206429Svs195195 		    ans > (0.2469000 + SPMARGIN)) {
5216429Svs195195 			snprintf(err_data, sizeof (err_data),
5226429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5236429Svs195195 			    expect_ans, ans);
5246429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5256429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5266429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5276429Svs195195 			    report, 6113, &observed, &expected, 1,
5286429Svs195195 			    1, err_data);
5296429Svs195195 
5306429Svs195195 			return (-2);
5316429Svs195195 		}
5326429Svs195195 	}
5336429Svs195195 
5346429Svs195195 	ans = a * b;
5356429Svs195195 	expect_ans = 1.2191923;
5366429Svs195195 	if (ans != expect_ans) {
5376429Svs195195 		if (ans < (1.2191923 - SPMARGIN) ||
5386429Svs195195 		    ans > (1.2191923 + SPMARGIN)) {
5396429Svs195195 			snprintf(err_data, sizeof (err_data),
5406429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5416429Svs195195 			    expect_ans, ans);
5426429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5436429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5446429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5456429Svs195195 			    report, 6114, &observed, &expected, 1,
5466429Svs195195 			    1, err_data);
5476429Svs195195 
5486429Svs195195 			return (-2);
5496429Svs195195 		}
5506429Svs195195 	}
5516429Svs195195 
5526429Svs195195 	ans = a / b;
5536429Svs195195 	expect_ans = 1.2500000;
5546429Svs195195 	if (ans != expect_ans) {
5556429Svs195195 		if (ans < (1.2500000 - SPMARGIN) ||
5566429Svs195195 		    ans > (1.2500000 + SPMARGIN)) {
5576429Svs195195 			snprintf(err_data, sizeof (err_data),
5586429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5596429Svs195195 			    expect_ans, ans);
5606429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5616429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5626429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5636429Svs195195 			    report, 6115, &observed, &expected, 1,
5646429Svs195195 			    1, err_data);
5656429Svs195195 
5666429Svs195195 			return (-2);
5676429Svs195195 		}
5686429Svs195195 	}
5696429Svs195195 
5706429Svs195195 	ans = a + (a - b);
5716429Svs195195 	expect_ans = 1.4814000;
5726429Svs195195 	if (ans != expect_ans) {
5736429Svs195195 		if (ans < (1.4814000 - SPMARGIN) ||
5746429Svs195195 		    ans > (1.4814000 + SPMARGIN)) {
5756429Svs195195 			snprintf(err_data, sizeof (err_data),
5766429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5776429Svs195195 			    expect_ans, ans);
5786429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5796429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5806429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5816429Svs195195 			    report, 6116, &observed, &expected, 1,
5826429Svs195195 			    1, err_data);
5836429Svs195195 
5846429Svs195195 			return (-2);
5856429Svs195195 		}
5866429Svs195195 	}
5876429Svs195195 
5886429Svs195195 	ans = a - (a + b);
5896429Svs195195 	expect_ans = -(0.9876000);
5906429Svs195195 	if (ans != expect_ans) {
5916429Svs195195 		if (ans < (-(0.9876000) - SPMARGIN) ||
5926429Svs195195 		    ans > (-(0.9876000) + SPMARGIN)) {
5936429Svs195195 			snprintf(err_data, sizeof (err_data),
5946429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
5956429Svs195195 			    expect_ans, ans);
5966429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
5976429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
5986429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
5996429Svs195195 			    report, 6117, &observed, &expected, 1,
6006429Svs195195 			    1, err_data);
6016429Svs195195 
6026429Svs195195 			return (-2);
6036429Svs195195 		}
6046429Svs195195 	}
6056429Svs195195 
6066429Svs195195 	ans = a + (a * b);
6076429Svs195195 	expect_ans = 2.4536924;
6086429Svs195195 	if (ans != expect_ans) {
6096429Svs195195 		if (ans < (2.4536924 - SPMARGIN) ||
6106429Svs195195 		    ans > (2.4536924 + SPMARGIN)) {
6116429Svs195195 			snprintf(err_data, sizeof (err_data),
6126429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6136429Svs195195 			    expect_ans, ans);
6146429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6156429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6166429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6176429Svs195195 			    report, 6118, &observed, &expected, 1,
6186429Svs195195 			    1, err_data);
6196429Svs195195 
6206429Svs195195 			return (-2);
6216429Svs195195 		}
6226429Svs195195 	}
6236429Svs195195 
6246429Svs195195 	ans = a - (a * b);
6256429Svs195195 	expect_ans = 0.0153078;
6266429Svs195195 	if (ans != expect_ans) {
6276429Svs195195 		if (ans < (0.0153078 - SPMARGIN) ||
6286429Svs195195 		    ans > (0.0153078 + SPMARGIN)) {
6296429Svs195195 			snprintf(err_data, sizeof (err_data),
6306429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6316429Svs195195 			    expect_ans, ans);
6326429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6336429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6346429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6356429Svs195195 			    report, 6119, &observed, &expected, 1,
6366429Svs195195 			    1, err_data);
6376429Svs195195 
6386429Svs195195 			return (-2);
6396429Svs195195 		}
6406429Svs195195 	}
6416429Svs195195 
6426429Svs195195 	ans = a + (a / b);
6436429Svs195195 	expect_ans = 2.4844999;
6446429Svs195195 	if (ans != expect_ans) {
6456429Svs195195 		if (ans < (2.4844999 - SPMARGIN) ||
6466429Svs195195 		    ans > (2.4844999 + SPMARGIN)) {
6476429Svs195195 			snprintf(err_data, sizeof (err_data),
6486429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6496429Svs195195 			    expect_ans, ans);
6506429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6516429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6526429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6536429Svs195195 			    report, 6120, &observed, &expected, 1,
6546429Svs195195 			    1, err_data);
6556429Svs195195 
6566429Svs195195 			return (-2);
6576429Svs195195 		}
6586429Svs195195 	}
6596429Svs195195 
6606429Svs195195 	ans = a - (a / b);
6616429Svs195195 	expect_ans = expect_ans;
6626429Svs195195 	if (ans != -(0.0155000)) {
6636429Svs195195 		if (ans < (-(0.0155000) - SPMARGIN) ||
6646429Svs195195 		    ans > (-(0.0155000) + SPMARGIN)) {
6656429Svs195195 			snprintf(err_data, sizeof (err_data),
6666429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6676429Svs195195 			    expect_ans, ans);
6686429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6696429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6706429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6716429Svs195195 			    report, 6121, &observed, &expected, 1,
6726429Svs195195 			    1, err_data);
6736429Svs195195 
6746429Svs195195 			return (-2);
6756429Svs195195 		}
6766429Svs195195 	}
6776429Svs195195 
6786429Svs195195 	ans = a * (a + b);
6796429Svs195195 	expect_ans = 2.7431827;
6806429Svs195195 	if (ans != expect_ans) {
6816429Svs195195 		if (ans < (2.7431827 - SPMARGIN) ||
6826429Svs195195 		    ans > (2.7431827 + SPMARGIN)) {
6836429Svs195195 			snprintf(err_data, sizeof (err_data),
6846429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
6856429Svs195195 			    expect_ans, ans);
6866429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
6876429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
6886429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
6896429Svs195195 			    report, 6122, &observed, &expected, 1,
6906429Svs195195 			    1, err_data);
6916429Svs195195 
6926429Svs195195 			return (-2);
6936429Svs195195 		}
6946429Svs195195 	}
6956429Svs195195 
6966429Svs195195 	ans = a * (a - b);
6976429Svs195195 	expect_ans = 0.3047981;
6986429Svs195195 	if (ans != expect_ans) {
6996429Svs195195 		if (ans < (0.3047981 - SPMARGIN) ||
7006429Svs195195 		    ans > (0.3047981 + SPMARGIN)) {
7016429Svs195195 			snprintf(err_data, sizeof (err_data),
7026429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7036429Svs195195 			    expect_ans, ans);
7046429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7056429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7066429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7076429Svs195195 			    report, 6123, &observed, &expected, 1,
7086429Svs195195 			    1, err_data);
7096429Svs195195 
7106429Svs195195 			return (-2);
7116429Svs195195 		}
7126429Svs195195 	}
7136429Svs195195 
7146429Svs195195 	ans = a / (a + b);
7156429Svs195195 	expect_ans = 0.5555556;
7166429Svs195195 	if (ans != expect_ans) {
7176429Svs195195 		if (ans < (0.5555556 - SPMARGIN) ||
7186429Svs195195 		    ans > (0.5555556 + SPMARGIN)) {
7196429Svs195195 			snprintf(err_data, sizeof (err_data),
7206429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7216429Svs195195 			    expect_ans, ans);
7226429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7236429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7246429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7256429Svs195195 			    report, 6124, &observed, &expected, 1,
7266429Svs195195 			    1, err_data);
7276429Svs195195 
7286429Svs195195 			return (-2);
7296429Svs195195 		}
7306429Svs195195 	}
7316429Svs195195 
7326429Svs195195 	ans = a / (a - b);
7336429Svs195195 	expect_ans = 4.9999995;
7346429Svs195195 	if (ans != expect_ans) {
7356429Svs195195 		if (ans < (4.9999995 - SPMARGIN) ||
7366429Svs195195 		    ans > (4.9999995 + SPMARGIN)) {
7376429Svs195195 			snprintf(err_data, sizeof (err_data),
7386429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7396429Svs195195 			    expect_ans, ans);
7406429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7416429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7426429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7436429Svs195195 			    report, 6125, &observed, &expected, 1,
7446429Svs195195 			    1, err_data);
7456429Svs195195 
7466429Svs195195 			return (-2);
7476429Svs195195 		}
7486429Svs195195 	}
7496429Svs195195 
7506429Svs195195 	ans = a * (a / b);
7516429Svs195195 	expect_ans = 1.5431250;
7526429Svs195195 	if (ans != expect_ans) {
7536429Svs195195 		if (ans < (1.5431250 - SPMARGIN) ||
7546429Svs195195 		    ans > (1.5431250 + SPMARGIN)) {
7556429Svs195195 			snprintf(err_data, sizeof (err_data),
7566429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7576429Svs195195 			    expect_ans, ans);
7586429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7596429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7606429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7616429Svs195195 			    report, 6126, &observed, &expected, 1,
7626429Svs195195 			    1, err_data);
7636429Svs195195 
7646429Svs195195 		return (-2);
7656429Svs195195 		}
7666429Svs195195 	}
7676429Svs195195 
7686429Svs195195 	ans = a / (a * b);
7696429Svs195195 	expect_ans = 1.0125557;
7706429Svs195195 	if (ans != expect_ans) {
7716429Svs195195 		if (ans < (1.0125557 - SPMARGIN) ||
7726429Svs195195 		    ans > (1.0125557 + SPMARGIN)) {
7736429Svs195195 			snprintf(err_data, sizeof (err_data),
7746429Svs195195 			    "\nExpected: %.8f\nObserved: %.8f",
7756429Svs195195 			    expect_ans, ans);
7766429Svs195195 			expected = (uint64_t)(*(uint32_t *)&expect_ans);
7776429Svs195195 			observed = (uint64_t)(*(uint32_t *)&ans);
7786429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
7796429Svs195195 			    report, 6127, &observed, &expected, 1,
7806429Svs195195 			    1, err_data);
7816429Svs195195 
7826429Svs195195 			return (-2);
7836429Svs195195 		}
7846429Svs195195 	}
7856429Svs195195 
7866429Svs195195 	return (0);
7876429Svs195195 }
7886429Svs195195 
7896429Svs195195 /*
7906429Svs195195  * dpmath(int unit, struct fps_test_ereport *report)
7916429Svs195195  * peforms basic tests of the arithmetic operations:
7926429Svs195195  * +, -, *, and /. It also performs tests of cos,
7936429Svs195195  * sine, tan, log, sqrt, and exp. If any errors,
7946429Svs195195  * they are stored in report.
7956429Svs195195  */
7966429Svs195195 static int
7976429Svs195195 dpmath(struct fps_test_ereport *report)
7986429Svs195195 {
7996429Svs195195 	char err_data[MAX_INFO_SIZE];
8006429Svs195195 	double a;
8016429Svs195195 	double ans;
8026429Svs195195 	double b;
8036429Svs195195 	double expect_ans;
8046429Svs195195 	double expect_ans2;
8056429Svs195195 	double result;
8066429Svs195195 	double x;
8076429Svs195195 	uint64_t expected;
8086429Svs195195 	uint64_t observed;
8096429Svs195195 
8106429Svs195195 	a = 1.2345;
8116429Svs195195 	b = 0.9876;
8126429Svs195195 
8136429Svs195195 	ans = (a + b);
8146429Svs195195 	expect_ans = 2.222100000000000;
8156429Svs195195 	if (ans != expect_ans) {
8166429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8176429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8186429Svs195195 			expected = *(uint64_t *)&expect_ans;
8196429Svs195195 			observed = *(uint64_t *)&ans;
8206429Svs195195 			snprintf(err_data, sizeof (err_data),
8216429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8226429Svs195195 			    expect_ans, ans);
8236429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8246429Svs195195 			    report, 6128, &observed, &expected, 1, 1,
8256429Svs195195 			    err_data);
8266429Svs195195 
8276429Svs195195 			return (-3);
8286429Svs195195 		}
8296429Svs195195 	}
8306429Svs195195 
8316429Svs195195 	ans = (a - b);
8326429Svs195195 	expect_ans = 0.246899999999999;
8336429Svs195195 	if (ans != expect_ans) {
8346429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8356429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8366429Svs195195 			expected = *(uint64_t *)&expect_ans;
8376429Svs195195 			observed = *(uint64_t *)&ans;
8386429Svs195195 			snprintf(err_data, sizeof (err_data),
8396429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8406429Svs195195 			    expect_ans, ans);
8416429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8426429Svs195195 			    report, 6129, &observed, &expected, 1, 1,
8436429Svs195195 			    err_data);
8446429Svs195195 
8456429Svs195195 			return (-3);
8466429Svs195195 		}
8476429Svs195195 	}
8486429Svs195195 
8496429Svs195195 	ans = a * b;
8506429Svs195195 	expect_ans = 1.219192199999999;
8516429Svs195195 	if (ans != expect_ans) {
8526429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8536429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8546429Svs195195 			expected = *(uint64_t *)&expect_ans;
8556429Svs195195 			observed = *(uint64_t *)&ans;
8566429Svs195195 			snprintf(err_data, sizeof (err_data),
8576429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8586429Svs195195 			    expect_ans, ans);
8596429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8606429Svs195195 			    report, 6130, &observed, &expected, 1, 1,
8616429Svs195195 			    err_data);
8626429Svs195195 
8636429Svs195195 			return (-3);
8646429Svs195195 		}
8656429Svs195195 	}
8666429Svs195195 
8676429Svs195195 	ans = a / b;
8686429Svs195195 	expect_ans = 1.249999999999999;
8696429Svs195195 	if (ans != expect_ans) {
8706429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8716429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8726429Svs195195 			expected = *(uint64_t *)&expect_ans;
8736429Svs195195 			observed = *(uint64_t *)&ans;
8746429Svs195195 			snprintf(err_data, sizeof (err_data),
8756429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8766429Svs195195 			    expect_ans, ans);
8776429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8786429Svs195195 			    report, 6131, &observed, &expected, 1, 1,
8796429Svs195195 			    err_data);
8806429Svs195195 
8816429Svs195195 			return (-3);
8826429Svs195195 		}
8836429Svs195195 	}
8846429Svs195195 
8856429Svs195195 	ans = a + (a - b);
8866429Svs195195 	expect_ans = 1.481399999999999;
8876429Svs195195 	if (ans != expect_ans) {
8886429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
8896429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
8906429Svs195195 			expected = *(uint64_t *)&expect_ans;
8916429Svs195195 			observed = *(uint64_t *)&ans;
8926429Svs195195 			snprintf(err_data, sizeof (err_data),
8936429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
8946429Svs195195 			    expect_ans, ans);
8956429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
8966429Svs195195 			    report, 6132, &observed, &expected, 1, 1,
8976429Svs195195 			    err_data);
8986429Svs195195 
8996429Svs195195 			return (-3);
9006429Svs195195 		}
9016429Svs195195 	}
9026429Svs195195 
9036429Svs195195 	ans = a - (a + b);
9046429Svs195195 	expect_ans = -(0.987600000000000);
9056429Svs195195 	if (ans != expect_ans) {
9066429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9076429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9086429Svs195195 			expected = *(uint64_t *)&expect_ans;
9096429Svs195195 			observed = *(uint64_t *)&ans;
9106429Svs195195 			snprintf(err_data, sizeof (err_data),
9116429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9126429Svs195195 			    expect_ans, ans);
9136429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9146429Svs195195 			    report, 6133, &observed, &expected, 1, 1,
9156429Svs195195 			    err_data);
9166429Svs195195 
9176429Svs195195 			return (-3);
9186429Svs195195 		}
9196429Svs195195 	}
9206429Svs195195 
9216429Svs195195 	ans = a + (a * b);
9226429Svs195195 	expect_ans = 2.453692200000000;
9236429Svs195195 	if (ans != expect_ans) {
9246429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9256429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9266429Svs195195 			expected = *(uint64_t *)&expect_ans;
9276429Svs195195 			observed = *(uint64_t *)&ans;
9286429Svs195195 			snprintf(err_data, sizeof (err_data),
9296429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9306429Svs195195 			    expect_ans, ans);
9316429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9326429Svs195195 			    report, 6134, &observed, &expected, 1, 1,
9336429Svs195195 			    err_data);
9346429Svs195195 
9356429Svs195195 			return (-3);
9366429Svs195195 		}
9376429Svs195195 	}
9386429Svs195195 
9396429Svs195195 	ans = a - (a * b);
9406429Svs195195 	expect_ans = 0.015307800000000;
9416429Svs195195 	if (ans != expect_ans) {
9426429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9436429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9446429Svs195195 			expected = *(uint64_t *)&expect_ans;
9456429Svs195195 			observed = *(uint64_t *)&ans;
9466429Svs195195 			snprintf(err_data, sizeof (err_data),
9476429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9486429Svs195195 			    expect_ans, ans);
9496429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9506429Svs195195 			    report, 6135, &observed, &expected, 1, 1,
9516429Svs195195 			    err_data);
9526429Svs195195 
9536429Svs195195 			return (-3);
9546429Svs195195 		}
9556429Svs195195 	}
9566429Svs195195 
9576429Svs195195 	ans = a + (a / b);
9586429Svs195195 	expect_ans = 2.484500000000000;
9596429Svs195195 	if (ans != expect_ans) {
9606429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9616429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9626429Svs195195 			expected = *(uint64_t *)&expect_ans;
9636429Svs195195 			observed = *(uint64_t *)&ans;
9646429Svs195195 			snprintf(err_data, sizeof (err_data),
9656429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9666429Svs195195 			    expect_ans, ans);
9676429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9686429Svs195195 			    report, 6136, &observed, &expected, 1, 1,
9696429Svs195195 			    err_data);
9706429Svs195195 
9716429Svs195195 			return (-3);
9726429Svs195195 		}
9736429Svs195195 	}
9746429Svs195195 
9756429Svs195195 	ans = a - (a / b);
9766429Svs195195 	expect_ans = -(0.015499999999999);
9776429Svs195195 	if (ans != expect_ans) {
9786429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9796429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9806429Svs195195 			expected = *(uint64_t *)&expect_ans;
9816429Svs195195 			observed = *(uint64_t *)&ans;
9826429Svs195195 			snprintf(err_data, sizeof (err_data),
9836429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
9846429Svs195195 			    expect_ans, ans);
9856429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
9866429Svs195195 			    report, 6137, &observed, &expected, 1, 1,
9876429Svs195195 			    err_data);
9886429Svs195195 
9896429Svs195195 			return (-3);
9906429Svs195195 		}
9916429Svs195195 	}
9926429Svs195195 
9936429Svs195195 	ans = a * (a + b);
9946429Svs195195 	expect_ans = 2.743182449999999;
9956429Svs195195 	if (ans != expect_ans) {
9966429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
9976429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
9986429Svs195195 			expected = *(uint64_t *)&expect_ans;
9996429Svs195195 			observed = *(uint64_t *)&ans;
10006429Svs195195 			snprintf(err_data, sizeof (err_data),
10016429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10026429Svs195195 			    expect_ans, ans);
10036429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10046429Svs195195 			    report, 6138, &observed, &expected, 1, 1,
10056429Svs195195 			    err_data);
10066429Svs195195 
10076429Svs195195 			return (-3);
10086429Svs195195 		}
10096429Svs195195 	}
10106429Svs195195 
10116429Svs195195 	ans = a * (a - b);
10126429Svs195195 	expect_ans = 0.304798049999999;
10136429Svs195195 	if (ans != expect_ans) {
10146429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10156429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10166429Svs195195 			expected = *(uint64_t *)&expect_ans;
10176429Svs195195 			observed = *(uint64_t *)&ans;
10186429Svs195195 			snprintf(err_data, sizeof (err_data),
10196429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10206429Svs195195 			    expect_ans, ans);
10216429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10226429Svs195195 			    report, 6139, &observed, &expected, 1, 1,
10236429Svs195195 			    err_data);
10246429Svs195195 
10256429Svs195195 			return (-3);
10266429Svs195195 		}
10276429Svs195195 	}
10286429Svs195195 
10296429Svs195195 
10306429Svs195195 	ans = a / (a + b);
10316429Svs195195 	expect_ans = 0.555555555555555;
10326429Svs195195 	if (ans != expect_ans) {
10336429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10346429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10356429Svs195195 			expected = *(uint64_t *)&expect_ans;
10366429Svs195195 			observed = *(uint64_t *)&ans;
10376429Svs195195 			snprintf(err_data, sizeof (err_data),
10386429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10396429Svs195195 			    expect_ans, ans);
10406429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10416429Svs195195 			    report, 6140, &observed, &expected, 1, 1,
10426429Svs195195 			    err_data);
10436429Svs195195 
10446429Svs195195 			return (-3);
10456429Svs195195 		}
10466429Svs195195 	}
10476429Svs195195 
10486429Svs195195 	ans = a / (a - b);
10496429Svs195195 	expect_ans = 5.000000000000002;
10506429Svs195195 	if (ans != expect_ans) {
10516429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10526429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10536429Svs195195 			expected = *(uint64_t *)&expect_ans;
10546429Svs195195 			observed = *(uint64_t *)&ans;
10556429Svs195195 			snprintf(err_data, sizeof (err_data),
10566429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10576429Svs195195 			    expect_ans, ans);
10586429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10596429Svs195195 			    report, 6141, &observed, &expected, 1, 1,
10606429Svs195195 			    err_data);
10616429Svs195195 
10626429Svs195195 			return (-3);
10636429Svs195195 		}
10646429Svs195195 	}
10656429Svs195195 
10666429Svs195195 	ans = a * (a / b);
10676429Svs195195 	expect_ans = 1.543124999999999;
10686429Svs195195 	if (ans != expect_ans) {
10696429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10706429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10716429Svs195195 			expected = *(uint64_t *)&expect_ans;
10726429Svs195195 			observed = *(uint64_t *)&ans;
10736429Svs195195 			snprintf(err_data, sizeof (err_data),
10746429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10756429Svs195195 			    expect_ans, ans);
10766429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10776429Svs195195 			    report, 6142, &observed, &expected, 1, 1,
10786429Svs195195 			    err_data);
10796429Svs195195 
10806429Svs195195 			return (-3);
10816429Svs195195 		}
10826429Svs195195 	}
10836429Svs195195 
10846429Svs195195 	ans = a / (a * b);
10856429Svs195195 	expect_ans = 1.012555690562980;
10866429Svs195195 	if (ans != expect_ans) {
10876429Svs195195 		if (ans < (expect_ans - DPMARGIN) ||
10886429Svs195195 		    ans > (expect_ans + DPMARGIN)) {
10896429Svs195195 			expected = *(uint64_t *)&expect_ans;
10906429Svs195195 			observed = *(uint64_t *)&ans;
10916429Svs195195 			snprintf(err_data, sizeof (err_data),
10926429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
10936429Svs195195 			    expect_ans, ans);
10946429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
10956429Svs195195 			    report, 6143, &observed, &expected, 1, 1,
10966429Svs195195 			    err_data);
10976429Svs195195 
10986429Svs195195 			return (-3);
10996429Svs195195 		}
11006429Svs195195 	}
11016429Svs195195 
11026429Svs195195 	/* Start Double Precision test of trg functions */
11036429Svs195195 
11046429Svs195195 	/* sin of values in the range of -2pi to +2pi   */
11056429Svs195195 	result = sin(-(pi * 2));
11066429Svs195195 	expect_ans = -(0.000000000820413);
11076429Svs195195 	if (result != expect_ans) {
11086429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11096429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11106429Svs195195 			expected = *(uint64_t *)&expect_ans;
11116429Svs195195 			observed = *(uint64_t *)&result;
11126429Svs195195 			snprintf(err_data, sizeof (err_data),
11136429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11146429Svs195195 			    expect_ans, result);
11156429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11166429Svs195195 			    report, 6144, &observed, &expected, 1, 1,
11176429Svs195195 			    err_data);
11186429Svs195195 
11196429Svs195195 			return (-3);
11206429Svs195195 		}
11216429Svs195195 	}
11226429Svs195195 
11236429Svs195195 	result = sin((pi * (-3)) / 2);
11246429Svs195195 	expect_ans = 1.0000000000000000;
11256429Svs195195 	if (result != expect_ans) {
11266429Svs195195 		if (result < (expect_ans - DPMARGIN)) {
11276429Svs195195 			expected = *(uint64_t *)&expect_ans;
11286429Svs195195 			observed = *(uint64_t *)&result;
11296429Svs195195 			snprintf(err_data, sizeof (err_data),
11306429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11316429Svs195195 			    expect_ans, result);
11326429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11336429Svs195195 			    report, 6145, &observed, &expected, 1, 1,
11346429Svs195195 			    err_data);
11356429Svs195195 
11366429Svs195195 			return (-3);
11376429Svs195195 		}
11386429Svs195195 #ifndef i86pc
11396429Svs195195 		else if (result > (-(0.000000000000000) + DPMARGIN)) {
11406429Svs195195 			expected = (uint64_t)-(0.000000000000000);
11416429Svs195195 			observed = *(uint64_t *)&result;
11426429Svs195195 			snprintf(err_data, sizeof (err_data),
11436429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11446429Svs195195 			    -0.000000000000000, result);
11456429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11466429Svs195195 			    report, 6146, &observed, &expected, 1, 1,
11476429Svs195195 			    err_data);
11486429Svs195195 
11496429Svs195195 			return (-3);
11506429Svs195195 		}
11516429Svs195195 #endif
11526429Svs195195 	}
11536429Svs195195 
11546429Svs195195 	result = sin(-(pi));
11556429Svs195195 	expect_ans = 0.000000000410206;
11566429Svs195195 	if (result != expect_ans) {
11576429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11586429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11596429Svs195195 			expected = *(uint64_t *)&expect_ans;
11606429Svs195195 			observed = *(uint64_t *)&result;
11616429Svs195195 			snprintf(err_data, sizeof (err_data),
11626429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11636429Svs195195 			    expect_ans, result);
11646429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11656429Svs195195 			    report, 6147, &observed, &expected, 1, 1,
11666429Svs195195 			    err_data);
11676429Svs195195 
11686429Svs195195 			return (-3);
11696429Svs195195 		}
11706429Svs195195 	}
11716429Svs195195 
11726429Svs195195 	result = sin(-(pi / 2));
11736429Svs195195 	expect_ans = -(1.0000000000000000);
11746429Svs195195 	if (result != expect_ans) {
11756429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11766429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11776429Svs195195 			expected = *(uint64_t *)&expect_ans;
11786429Svs195195 			observed = *(uint64_t *)&result;
11796429Svs195195 			snprintf(err_data, sizeof (err_data),
11806429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11816429Svs195195 			    expect_ans, result);
11826429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
11836429Svs195195 			    report, 6148, &observed, &expected, 1, 1,
11846429Svs195195 			    err_data);
11856429Svs195195 
11866429Svs195195 			return (-3);
11876429Svs195195 		}
11886429Svs195195 	}
11896429Svs195195 
11906429Svs195195 	result = sin(0.0);
11916429Svs195195 	expect_ans = 0.0000000000000000;
11926429Svs195195 	if (result != expect_ans) {
11936429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
11946429Svs195195 		    result > (expect_ans + DPMARGIN)) {
11956429Svs195195 			expected = *(uint64_t *)&expect_ans;
11966429Svs195195 			observed = *(uint64_t *)&result;
11976429Svs195195 			snprintf(err_data, sizeof (err_data),
11986429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
11996429Svs195195 			    expect_ans, result);
12006429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12016429Svs195195 			    report, 6149, &observed, &expected, 1, 1,
12026429Svs195195 			    err_data);
12036429Svs195195 
12046429Svs195195 			return (-3);
12056429Svs195195 		}
12066429Svs195195 	}
12076429Svs195195 
12086429Svs195195 	result = sin(pi / 2);
12096429Svs195195 	expect_ans = 1.0000000000000000;
12106429Svs195195 	if (result != expect_ans) {
12116429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12126429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12136429Svs195195 			expected = *(uint64_t *)&expect_ans;
12146429Svs195195 			observed = *(uint64_t *)&result;
12156429Svs195195 			snprintf(err_data, sizeof (err_data),
12166429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12176429Svs195195 			    expect_ans, result);
12186429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12196429Svs195195 			    report, 6150, &observed, &expected, 1, 1,
12206429Svs195195 			    err_data);
12216429Svs195195 
12226429Svs195195 			return (-3);
12236429Svs195195 		}
12246429Svs195195 	}
12256429Svs195195 
12266429Svs195195 	result = sin(pi);
12276429Svs195195 	expect_ans = -(0.000000000410206);
12286429Svs195195 	if (result != expect_ans) {
12296429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12306429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12316429Svs195195 			expected = *(uint64_t *)&expect_ans;
12326429Svs195195 			observed = *(uint64_t *)&result;
12336429Svs195195 			snprintf(err_data, sizeof (err_data),
12346429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12356429Svs195195 			    expect_ans, result);
12366429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12376429Svs195195 			    report, 6151, &observed, &expected, 1, 1,
12386429Svs195195 			    err_data);
12396429Svs195195 
12406429Svs195195 			return (-3);
12416429Svs195195 		}
12426429Svs195195 	}
12436429Svs195195 
12446429Svs195195 	result = sin((pi * 3) / 2);
12456429Svs195195 	expect_ans = -(1.0000000000000000);
12466429Svs195195 	if (result != expect_ans) {
12476429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12486429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12496429Svs195195 			expected = *(uint64_t *)&expect_ans;
12506429Svs195195 			observed = *(uint64_t *)&result;
12516429Svs195195 			snprintf(err_data, sizeof (err_data),
12526429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12536429Svs195195 			    expect_ans, result);
12546429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12556429Svs195195 			    report, 6152, &observed, &expected, 1, 1,
12566429Svs195195 			    err_data);
12576429Svs195195 
12586429Svs195195 			return (-3);
12596429Svs195195 		}
12606429Svs195195 	}
12616429Svs195195 
12626429Svs195195 	result = sin(pi * 2);
12636429Svs195195 	expect_ans = 0.000000000820143;
12646429Svs195195 	expect_ans2 = 0.00000000820143;
12656429Svs195195 	if (result != expect_ans) {
12666429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12676429Svs195195 		    result > (expect_ans2 + DPMARGIN)) {
12686429Svs195195 			expected = *(uint64_t *)&expect_ans;
12696429Svs195195 			observed = *(uint64_t *)&result;
12706429Svs195195 			snprintf(err_data, sizeof (err_data),
12716429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12726429Svs195195 			    expect_ans, result);
12736429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12746429Svs195195 			    report, 6153, &observed, &expected, 1, 1,
12756429Svs195195 			    err_data);
12766429Svs195195 
12776429Svs195195 			return (-3);
12786429Svs195195 		}
12796429Svs195195 	}
12806429Svs195195 
12816429Svs195195 	/* cos of values in the range of -2pi to +2pi   */
12826429Svs195195 	result = cos(pi * (-2));
12836429Svs195195 	expect_ans = 1.0000000000000000;
12846429Svs195195 	if (result != expect_ans) {
12856429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
12866429Svs195195 		    result > (expect_ans + DPMARGIN)) {
12876429Svs195195 			expected = *(uint64_t *)&expect_ans;
12886429Svs195195 			observed = *(uint64_t *)&result;
12896429Svs195195 			snprintf(err_data, sizeof (err_data),
12906429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
12916429Svs195195 			    expect_ans, result);
12926429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
12936429Svs195195 			    report, 6154, &observed, &expected, 1, 1,
12946429Svs195195 			    err_data);
12956429Svs195195 
12966429Svs195195 			return (-3);
12976429Svs195195 		}
12986429Svs195195 	}
12996429Svs195195 
13006429Svs195195 	result = cos((pi * (-3)) / 2);
13016429Svs195195 	expect_ans = 0.000000000615310;
13026429Svs195195 	if (result != expect_ans) {
13036429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13046429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13056429Svs195195 			expected = *(uint64_t *)&expect_ans;
13066429Svs195195 			observed = *(uint64_t *)&result;
13076429Svs195195 			snprintf(err_data, sizeof (err_data),
13086429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13096429Svs195195 			    expect_ans, result);
13106429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13116429Svs195195 			    report, 6155, &observed, &expected, 1, 1,
13126429Svs195195 			    err_data);
13136429Svs195195 
13146429Svs195195 			return (-3);
13156429Svs195195 		}
13166429Svs195195 	}
13176429Svs195195 
13186429Svs195195 	result = cos(-pi);
13196429Svs195195 	expect_ans = -(1.0000000000000000);
13206429Svs195195 	if (result != expect_ans) {
13216429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13226429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13236429Svs195195 			expected = *(uint64_t *)&expect_ans;
13246429Svs195195 			observed = *(uint64_t *)&result;
13256429Svs195195 			snprintf(err_data, sizeof (err_data),
13266429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13276429Svs195195 			    expect_ans, result);
13286429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13296429Svs195195 			    report, 6156, &observed, &expected, 1, 1,
13306429Svs195195 			    err_data);
13316429Svs195195 
13326429Svs195195 			return (-3);
13336429Svs195195 		}
13346429Svs195195 	}
13356429Svs195195 
13366429Svs195195 	result = cos(-(pi / 2));
13376429Svs195195 	expect_ans = -(0.000000000205103);
13386429Svs195195 	if (result != expect_ans) {
13396429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13406429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13416429Svs195195 			expected = *(uint64_t *)&expect_ans;
13426429Svs195195 			observed = *(uint64_t *)&result;
13436429Svs195195 			snprintf(err_data, sizeof (err_data),
13446429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13456429Svs195195 			    expect_ans, result);
13466429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13476429Svs195195 			    report, 6157, &observed, &expected, 1, 1,
13486429Svs195195 			    err_data);
13496429Svs195195 
13506429Svs195195 			return (-3);
13516429Svs195195 		}
13526429Svs195195 	}
13536429Svs195195 
13546429Svs195195 	result = cos(0.0);
13556429Svs195195 	expect_ans = 1.0000000000000000;
13566429Svs195195 	if (result != expect_ans) {
13576429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13586429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13596429Svs195195 			expected = *(uint64_t *)&expect_ans;
13606429Svs195195 			observed = *(uint64_t *)&result;
13616429Svs195195 			snprintf(err_data, sizeof (err_data),
13626429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13636429Svs195195 			    expect_ans, result);
13646429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13656429Svs195195 			    report, 6158, &observed, &expected, 1, 1,
13666429Svs195195 			    err_data);
13676429Svs195195 
13686429Svs195195 			return (-3);
13696429Svs195195 		}
13706429Svs195195 	}
13716429Svs195195 
13726429Svs195195 	result = cos(pi / 2);
13736429Svs195195 	expect_ans = (-0.000000000205103);
13746429Svs195195 	if (result != expect_ans) {
13756429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13766429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13776429Svs195195 			expected = *(uint64_t *)&expect_ans;
13786429Svs195195 			observed = *(uint64_t *)&result;
13796429Svs195195 			snprintf(err_data, sizeof (err_data),
13806429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13816429Svs195195 			    expect_ans, result);
13826429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
13836429Svs195195 			    report, 6159, &observed, &expected, 1, 1,
13846429Svs195195 			    err_data);
13856429Svs195195 
13866429Svs195195 			return (-3);
13876429Svs195195 		}
13886429Svs195195 	}
13896429Svs195195 
13906429Svs195195 	result = cos(pi);
13916429Svs195195 	expect_ans = (-1.0000000000000000);
13926429Svs195195 	if (result != expect_ans) {
13936429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
13946429Svs195195 		    result > (expect_ans + DPMARGIN)) {
13956429Svs195195 			expected = *(uint64_t *)&expect_ans;
13966429Svs195195 			observed = *(uint64_t *)&result;
13976429Svs195195 			snprintf(err_data, sizeof (err_data),
13986429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
13996429Svs195195 			    expect_ans, result);
14006429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14016429Svs195195 			    report, 6160, &observed, &expected, 1, 1,
14026429Svs195195 			    err_data);
14036429Svs195195 
14046429Svs195195 			return (-3);
14056429Svs195195 		}
14066429Svs195195 	}
14076429Svs195195 
14086429Svs195195 	result = cos((pi * 3) / 2);
14096429Svs195195 	expect_ans = 0.000000000615310;
14106429Svs195195 	if (result != expect_ans) {
14116429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14126429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14136429Svs195195 			expected = *(uint64_t *)&expect_ans;
14146429Svs195195 			observed = *(uint64_t *)&result;
14156429Svs195195 			snprintf(err_data, sizeof (err_data),
14166429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14176429Svs195195 			    expect_ans, result);
14186429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14196429Svs195195 			    report, 6161, &observed, &expected, 1, 1,
14206429Svs195195 			    err_data);
14216429Svs195195 
14226429Svs195195 			return (-3);
14236429Svs195195 		}
14246429Svs195195 	}
14256429Svs195195 
14266429Svs195195 	result = cos(pi * 2);
14276429Svs195195 	expect_ans = 1.0000000000000000;
14286429Svs195195 	if (result != expect_ans) {
14296429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14306429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14316429Svs195195 			expected = *(uint64_t *)&expect_ans;
14326429Svs195195 			observed = *(uint64_t *)&result;
14336429Svs195195 			snprintf(err_data, sizeof (err_data),
14346429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14356429Svs195195 			    expect_ans, result);
14366429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14376429Svs195195 			    report, 6162, &observed, &expected, 1, 1,
14386429Svs195195 			    err_data);
14396429Svs195195 
14406429Svs195195 			return (-3);
14416429Svs195195 		}
14426429Svs195195 	}
14436429Svs195195 
14446429Svs195195 	/* sin and cos of: pi/4, 3pi/4, 5pi/4 and 7pi/4  */
14456429Svs195195 	result = sin(pi / 4);
14466429Svs195195 	expect_ans = 0.707106781259062;
14476429Svs195195 	if (result != expect_ans) {
14486429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14496429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14506429Svs195195 			expected = *(uint64_t *)&expect_ans;
14516429Svs195195 			observed = *(uint64_t *)&result;
14526429Svs195195 			snprintf(err_data, sizeof (err_data),
14536429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14546429Svs195195 			    expect_ans, result);
14556429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14566429Svs195195 			    report, 6163, &observed, &expected, 1, 1,
14576429Svs195195 			    err_data);
14586429Svs195195 
14596429Svs195195 			return (-3);
14606429Svs195195 		}
14616429Svs195195 	}
14626429Svs195195 
14636429Svs195195 	result = sin((pi * 3) / 4);
14646429Svs195195 	expect_ans = 0.707106780969002;
14656429Svs195195 	if (result != expect_ans) {
14666429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14676429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14686429Svs195195 			expected = *(uint64_t *)&expect_ans;
14696429Svs195195 			observed = *(uint64_t *)&result;
14706429Svs195195 			snprintf(err_data, sizeof (err_data),
14716429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14726429Svs195195 			    expect_ans, result);
14736429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14746429Svs195195 			    report, 6164, &observed, &expected, 1, 1,
14756429Svs195195 			    err_data);
14766429Svs195195 
14776429Svs195195 			return (-3);
14786429Svs195195 		}
14796429Svs195195 	}
14806429Svs195195 
14816429Svs195195 	result = sin((pi * 5) / 4);
14826429Svs195195 	expect_ans = -(0.707106781549122);
14836429Svs195195 	if (result != expect_ans) {
14846429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
14856429Svs195195 		    result > (expect_ans + DPMARGIN)) {
14866429Svs195195 			expected = *(uint64_t *)&expect_ans;
14876429Svs195195 			observed = *(uint64_t *)&result;
14886429Svs195195 			snprintf(err_data, sizeof (err_data),
14896429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
14906429Svs195195 			    expect_ans, result);
14916429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
14926429Svs195195 			    report, 6165, &observed, &expected, 1, 1,
14936429Svs195195 			    err_data);
14946429Svs195195 
14956429Svs195195 			return (-3);
14966429Svs195195 		}
14976429Svs195195 	}
14986429Svs195195 
14996429Svs195195 	result = sin((pi * 7) / 4);
15006429Svs195195 	expect_ans = -(0.707106780678942);
15016429Svs195195 	if (result != expect_ans) {
15026429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15036429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15046429Svs195195 			expected = *(uint64_t *)&expect_ans;
15056429Svs195195 			observed = *(uint64_t *)&result;
15066429Svs195195 			snprintf(err_data, sizeof (err_data),
15076429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15086429Svs195195 			    expect_ans, result);
15096429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15106429Svs195195 			    report, 6166, &observed, &expected, 1, 1,
15116429Svs195195 			    err_data);
15126429Svs195195 
15136429Svs195195 			return (-3);
15146429Svs195195 		}
15156429Svs195195 	}
15166429Svs195195 
15176429Svs195195 	result = cos(pi / 4);
15186429Svs195195 	expect_ans = 0.707106781114032;
15196429Svs195195 	if (result != expect_ans) {
15206429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15216429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15226429Svs195195 			expected = *(uint64_t *)&expect_ans;
15236429Svs195195 			observed = *(uint64_t *)&result;
15246429Svs195195 			snprintf(err_data, sizeof (err_data),
15256429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15266429Svs195195 			    expect_ans, result);
15276429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15286429Svs195195 			    report, 6167, &observed, &expected, 1, 1,
15296429Svs195195 			    err_data);
15306429Svs195195 
15316429Svs195195 			return (-3);
15326429Svs195195 		}
15336429Svs195195 	}
15346429Svs195195 
15356429Svs195195 	result = cos((pi * 3) / 4);
15366429Svs195195 	expect_ans = -(0.707106781404092);
15376429Svs195195 	if (result != expect_ans) {
15386429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15396429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15406429Svs195195 			expected = *(uint64_t *)&expect_ans;
15416429Svs195195 			observed = *(uint64_t *)&result;
15426429Svs195195 			snprintf(err_data, sizeof (err_data),
15436429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15446429Svs195195 			    expect_ans, result);
15456429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15466429Svs195195 			    report, 6168, &observed, &expected, 1, 1,
15476429Svs195195 			    err_data);
15486429Svs195195 
15496429Svs195195 			return (-3);
15506429Svs195195 		}
15516429Svs195195 	}
15526429Svs195195 
15536429Svs195195 	result = cos((pi * 5) / 4);
15546429Svs195195 	expect_ans = -(0.707106780823972);
15556429Svs195195 	if (result != expect_ans) {
15566429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15576429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15586429Svs195195 			expected = *(uint64_t *)&expect_ans;
15596429Svs195195 			observed = *(uint64_t *)&result;
15606429Svs195195 			snprintf(err_data, sizeof (err_data),
15616429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15626429Svs195195 			    expect_ans, result);
15636429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15646429Svs195195 			    report, 6169, &observed, &expected, 1, 1,
15656429Svs195195 			    err_data);
15666429Svs195195 
15676429Svs195195 			return (-3);
15686429Svs195195 		}
15696429Svs195195 	}
15706429Svs195195 
15716429Svs195195 	result = cos((pi * 7) / 4);
15726429Svs195195 	expect_ans = 0.707106781694152;
15736429Svs195195 	if (result != expect_ans) {
15746429Svs195195 		if (result < (expect_ans - DPMARGIN) ||
15756429Svs195195 		    result > (expect_ans + DPMARGIN)) {
15766429Svs195195 			expected = *(uint64_t *)&expect_ans;
15776429Svs195195 			observed = *(uint64_t *)&result;
15786429Svs195195 			snprintf(err_data, sizeof (err_data),
15796429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15806429Svs195195 			    expect_ans, result);
15816429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
15826429Svs195195 			    report, 6170, &observed, &expected, 1, 1,
15836429Svs195195 			    err_data);
15846429Svs195195 
15856429Svs195195 			return (-3);
15866429Svs195195 		}
15876429Svs195195 	}
15886429Svs195195 
15896429Svs195195 	/* exponential	 */
15906429Svs195195 	x = exp(0.0);
15916429Svs195195 	expect_ans = 1.0000000000000000;
15926429Svs195195 	if (x != expect_ans) {
15936429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
15946429Svs195195 		    x > (expect_ans + DPMARGIN)) {
15956429Svs195195 			expected = *(uint64_t *)&expect_ans;
15966429Svs195195 			observed = *(uint64_t *)&x;
15976429Svs195195 			snprintf(err_data, sizeof (err_data),
15986429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
15996429Svs195195 			    expect_ans, x);
16006429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16016429Svs195195 			    report, 6171, &observed, &expected, 1, 1,
16026429Svs195195 			    err_data);
16036429Svs195195 
16046429Svs195195 			return (-3);
16056429Svs195195 		}
16066429Svs195195 	}
16076429Svs195195 
16086429Svs195195 	x = exp(1.0);
16096429Svs195195 	expect_ans = 2.718281828459045;
16106429Svs195195 	if (x != expect_ans) {
16116429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16126429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16136429Svs195195 			expected = *(uint64_t *)&expect_ans;
16146429Svs195195 			observed = *(uint64_t *)&x;
16156429Svs195195 			snprintf(err_data, sizeof (err_data),
16166429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16176429Svs195195 			    expect_ans, x);
16186429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16196429Svs195195 			    report, 6172, &observed, &expected, 1, 1,
16206429Svs195195 			    err_data);
16216429Svs195195 
16226429Svs195195 			return (-3);
16236429Svs195195 		}
16246429Svs195195 	}
16256429Svs195195 
16266429Svs195195 	x = exp(2.0);
16276429Svs195195 	expect_ans = 7.389056098930650;
16286429Svs195195 	if (x != expect_ans) {
16296429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16306429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16316429Svs195195 			expected = *(uint64_t *)&expect_ans;
16326429Svs195195 			observed = *(uint64_t *)&x;
16336429Svs195195 			snprintf(err_data, sizeof (err_data),
16346429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16356429Svs195195 			    expect_ans, x);
16366429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16376429Svs195195 			    report, 6173, &observed, &expected, 1, 1,
16386429Svs195195 			    err_data);
16396429Svs195195 
16406429Svs195195 			return (-3);
16416429Svs195195 		}
16426429Svs195195 	}
16436429Svs195195 
16446429Svs195195 	x = exp(5.0);
16456429Svs195195 	expect_ans = 148.413159102576600;
16466429Svs195195 	if (x != expect_ans) {
16476429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16486429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16496429Svs195195 			expected = *(uint64_t *)&expect_ans;
16506429Svs195195 			observed = *(uint64_t *)&x;
16516429Svs195195 			snprintf(err_data, sizeof (err_data),
16526429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16536429Svs195195 			    expect_ans, x);
16546429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16556429Svs195195 			    report, 6174, &observed, &expected, 1, 1,
16566429Svs195195 			    err_data);
16576429Svs195195 
16586429Svs195195 			return (-3);
16596429Svs195195 		}
16606429Svs195195 	}
16616429Svs195195 
16626429Svs195195 	x = exp(10.0);
16636429Svs195195 	expect_ans = 22026.465794806718000;
16646429Svs195195 	if (x != expect_ans) {
16656429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16666429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16676429Svs195195 			expected = *(uint64_t *)&expect_ans;
16686429Svs195195 			observed = *(uint64_t *)&x;
16696429Svs195195 			snprintf(err_data, sizeof (err_data),
16706429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16716429Svs195195 			    expect_ans, x);
16726429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16736429Svs195195 			    report, 6175, &observed, &expected, 1, 1,
16746429Svs195195 			    err_data);
16756429Svs195195 
16766429Svs195195 			return (-3);
16776429Svs195195 		}
16786429Svs195195 	}
16796429Svs195195 
16806429Svs195195 	x = exp(-1.0);
16816429Svs195195 	expect_ans = 0.367879441171442;
16826429Svs195195 	if (x != expect_ans) {
16836429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
16846429Svs195195 		    x > (expect_ans + DPMARGIN)) {
16856429Svs195195 			expected = *(uint64_t *)&expect_ans;
16866429Svs195195 			observed = *(uint64_t *)&x;
16876429Svs195195 			snprintf(err_data, sizeof (err_data),
16886429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
16896429Svs195195 			    expect_ans, x);
16906429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
16916429Svs195195 			    report, 6176, &observed, &expected, 1, 1,
16926429Svs195195 			    err_data);
16936429Svs195195 
16946429Svs195195 			return (-3);
16956429Svs195195 		}
16966429Svs195195 	}
16976429Svs195195 
16986429Svs195195 	x = exp(-2.0);
16996429Svs195195 	expect_ans = 0.135335283236612;
17006429Svs195195 	if (x != expect_ans) {
17016429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17026429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17036429Svs195195 			expected = *(uint64_t *)&expect_ans;
17046429Svs195195 			observed = *(uint64_t *)&x;
17056429Svs195195 			snprintf(err_data, sizeof (err_data),
17066429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17076429Svs195195 			    expect_ans, x);
17086429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17096429Svs195195 			    report, 6177, &observed, &expected, 1, 1,
17106429Svs195195 			    err_data);
17116429Svs195195 
17126429Svs195195 			return (-3);
17136429Svs195195 		}
17146429Svs195195 	}
17156429Svs195195 
17166429Svs195195 	x = exp(-5.0);
17176429Svs195195 	expect_ans = 0.006737946999085;
17186429Svs195195 	if (x != expect_ans) {
17196429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17206429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17216429Svs195195 			expected = *(uint64_t *)&expect_ans;
17226429Svs195195 			observed = *(uint64_t *)&x;
17236429Svs195195 			snprintf(err_data, sizeof (err_data),
17246429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17256429Svs195195 			    expect_ans, x);
17266429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17276429Svs195195 			    report, 6178, &observed, &expected, 1, 1,
17286429Svs195195 			    err_data);
17296429Svs195195 
17306429Svs195195 			return (-3);
17316429Svs195195 		}
17326429Svs195195 	}
17336429Svs195195 
17346429Svs195195 	x = exp(-10.0);
17356429Svs195195 	expect_ans = 0.000045399929762;
17366429Svs195195 	if (x != expect_ans) {
17376429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17386429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17396429Svs195195 			expected = *(uint64_t *)&expect_ans;
17406429Svs195195 			observed = *(uint64_t *)&x;
17416429Svs195195 			snprintf(err_data, sizeof (err_data),
17426429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17436429Svs195195 			    expect_ans, x);
17446429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17456429Svs195195 			    report, 6179, &observed, &expected, 1, 1,
17466429Svs195195 			    err_data);
17476429Svs195195 
17486429Svs195195 			return (-3);
17496429Svs195195 		}
17506429Svs195195 	}
17516429Svs195195 
17526429Svs195195 	x = exp(log(1.0));
17536429Svs195195 	expect_ans = 1.0000000000000000;
17546429Svs195195 	if (x != expect_ans) {
17556429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17566429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17576429Svs195195 			expected = *(uint64_t *)&expect_ans;
17586429Svs195195 			observed = *(uint64_t *)&x;
17596429Svs195195 			snprintf(err_data, sizeof (err_data),
17606429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17616429Svs195195 			    expect_ans, x);
17626429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17636429Svs195195 			    report, 6180, &observed, &expected, 1, 1,
17646429Svs195195 			    err_data);
17656429Svs195195 
17666429Svs195195 			return (-3);
17676429Svs195195 		}
17686429Svs195195 	}
17696429Svs195195 
17706429Svs195195 	x = exp(log(10.0));
17716429Svs195195 	expect_ans = 10.000000000000002;
17726429Svs195195 	if (x != expect_ans) {
17736429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17746429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17756429Svs195195 			expected = *(uint64_t *)&expect_ans;
17766429Svs195195 			observed = *(uint64_t *)&x;
17776429Svs195195 			snprintf(err_data, sizeof (err_data),
17786429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17796429Svs195195 			    expect_ans, x);
17806429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
17816429Svs195195 			    report, 6181, &observed, &expected, 1, 1,
17826429Svs195195 			    err_data);
17836429Svs195195 
17846429Svs195195 			return (-3);
17856429Svs195195 		}
17866429Svs195195 	}
17876429Svs195195 
17886429Svs195195 	/* logarithms */
17896429Svs195195 	x = log(1.0);
17906429Svs195195 	expect_ans = 0.0000000000000000;
17916429Svs195195 	if (x != expect_ans) {
17926429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
17936429Svs195195 		    x > (expect_ans + DPMARGIN)) {
17946429Svs195195 		expected = *(uint64_t *)&expect_ans;
17956429Svs195195 			observed = *(uint64_t *)&x;
17966429Svs195195 			snprintf(err_data, sizeof (err_data),
17976429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
17986429Svs195195 			    expect_ans, x);
17996429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18006429Svs195195 			    report, 6182, &observed, &expected, 1, 1,
18016429Svs195195 			    err_data);
18026429Svs195195 
18036429Svs195195 			return (-3);
18046429Svs195195 		}
18056429Svs195195 	}
18066429Svs195195 
18076429Svs195195 	x = log(2.0);
18086429Svs195195 	expect_ans = 0.693147180559945;
18096429Svs195195 	if (x != expect_ans) {
18106429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18116429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18126429Svs195195 			expected = *(uint64_t *)&expect_ans;
18136429Svs195195 			observed = *(uint64_t *)&x;
18146429Svs195195 			snprintf(err_data, sizeof (err_data),
18156429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18166429Svs195195 			    expect_ans, x);
18176429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18186429Svs195195 			    report, 6183, &observed, &expected, 1, 1,
18196429Svs195195 			    err_data);
18206429Svs195195 
18216429Svs195195 			return (-3);
18226429Svs195195 		}
18236429Svs195195 	}
18246429Svs195195 
18256429Svs195195 	x = log(10.0);
18266429Svs195195 	expect_ans = 2.302585092994045;
18276429Svs195195 	if (x != expect_ans) {
18286429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18296429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18306429Svs195195 			expected = *(uint64_t *)&expect_ans;
18316429Svs195195 			observed = *(uint64_t *)&x;
18326429Svs195195 			snprintf(err_data, sizeof (err_data),
18336429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18346429Svs195195 			    expect_ans, x);
18356429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18366429Svs195195 			    report, 6184, &observed, &expected, 1, 1,
18376429Svs195195 			    err_data);
18386429Svs195195 
18396429Svs195195 			return (-3);
18406429Svs195195 		}
18416429Svs195195 	}
18426429Svs195195 
18436429Svs195195 	x = log(100.0);
18446429Svs195195 	expect_ans = 4.605170185988091;
18456429Svs195195 	if (x != expect_ans) {
18466429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18476429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18486429Svs195195 			expected = *(uint64_t *)&expect_ans;
18496429Svs195195 			observed = *(uint64_t *)&x;
18506429Svs195195 			snprintf(err_data, sizeof (err_data),
18516429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18526429Svs195195 			    expect_ans, x);
18536429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18546429Svs195195 			    report, 6185, &observed, &expected, 1, 1,
18556429Svs195195 			    err_data);
18566429Svs195195 
18576429Svs195195 			return (-3);
18586429Svs195195 		}
18596429Svs195195 	}
18606429Svs195195 
18616429Svs195195 	x = log(exp(0.0));
18626429Svs195195 	expect_ans = 0.0000000000000000;
18636429Svs195195 	if (x != expect_ans) {
18646429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18656429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18666429Svs195195 			expected = *(uint64_t *)&expect_ans;
18676429Svs195195 			observed = *(uint64_t *)&x;
18686429Svs195195 			snprintf(err_data, sizeof (err_data),
18696429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18706429Svs195195 			    expect_ans, x);
18716429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18726429Svs195195 			    report, 6186, &observed, &expected, 1, 1,
18736429Svs195195 			    err_data);
18746429Svs195195 
18756429Svs195195 			return (-3);
18766429Svs195195 		}
18776429Svs195195 	}
18786429Svs195195 
18796429Svs195195 	x = log(exp(1.0));
18806429Svs195195 	expect_ans = 1.0000000000000000;
18816429Svs195195 	if (x != expect_ans) {
18826429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
18836429Svs195195 		    x > (expect_ans + DPMARGIN)) {
18846429Svs195195 			expected = *(uint64_t *)&expect_ans;
18856429Svs195195 			observed = *(uint64_t *)&x;
18866429Svs195195 			snprintf(err_data, sizeof (err_data),
18876429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
18886429Svs195195 			    expect_ans, x);
18896429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
18906429Svs195195 			    report, 6187, &observed, &expected, 1, 1,
18916429Svs195195 			    err_data);
18926429Svs195195 
18936429Svs195195 			return (-3);
18946429Svs195195 		}
18956429Svs195195 	}
18966429Svs195195 
18976429Svs195195 	x = log(exp(10.0));
18986429Svs195195 	expect_ans = 10.0000000000000000;
18996429Svs195195 	if (x != expect_ans) {
19006429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19016429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19026429Svs195195 			expected = *(uint64_t *)&expect_ans;
19036429Svs195195 			observed = *(uint64_t *)&x;
19046429Svs195195 			snprintf(err_data, sizeof (err_data),
19056429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19066429Svs195195 			    expect_ans, x);
19076429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19086429Svs195195 			    report, 6188, &observed, &expected, 1, 1,
19096429Svs195195 			    err_data);
19106429Svs195195 
19116429Svs195195 			return (-3);
19126429Svs195195 		}
19136429Svs195195 	}
19146429Svs195195 
19156429Svs195195 	/*
19166429Svs195195 	 * These functions are supported by the 68881
19176429Svs195195 	 * but not the FPA
19186429Svs195195 	 */
19196429Svs195195 
19206429Svs195195 	x = tan(-(2 * pi));
19216429Svs195195 	expect_ans = -(0.000000000820414);
19226429Svs195195 	if (x != expect_ans) {
19236429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19246429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19256429Svs195195 			expected = *(uint64_t *)&expect_ans;
19266429Svs195195 			observed = *(uint64_t *)&x;
19276429Svs195195 			snprintf(err_data, sizeof (err_data),
19286429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19296429Svs195195 			    expect_ans, x);
19306429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19316429Svs195195 			    report, 6189, &observed, &expected, 1, 1,
19326429Svs195195 			    err_data);
19336429Svs195195 
19346429Svs195195 			return (-3);
19356429Svs195195 		}
19366429Svs195195 	}
19376429Svs195195 
19386429Svs195195 	x = tan(-(7 * pi) / 4);
19396429Svs195195 	expect_ans = 0.999999998564275;
19406429Svs195195 	if (x != expect_ans) {
19416429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19426429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19436429Svs195195 			expected = *(uint64_t *)&expect_ans;
19446429Svs195195 			observed = *(uint64_t *)&x;
19456429Svs195195 			snprintf(err_data, sizeof (err_data),
19466429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19476429Svs195195 			    expect_ans, x);
19486429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19496429Svs195195 			    report, 6190, &observed, &expected, 1, 1,
19506429Svs195195 			    err_data);
19516429Svs195195 
19526429Svs195195 			return (-3);
19536429Svs195195 		}
19546429Svs195195 	}
19556429Svs195195 
19566429Svs195195 	x = tan(-(5 * pi) / 4);
19576429Svs195195 	expect_ans = -(1.000000001025517);
19586429Svs195195 	if (x != expect_ans) {
19596429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19606429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19616429Svs195195 			expected = *(uint64_t *)&expect_ans;
19626429Svs195195 			observed = *(uint64_t *)&x;
19636429Svs195195 			snprintf(err_data, sizeof (err_data),\
19646429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19656429Svs195195 			    expect_ans, x);
19666429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19676429Svs195195 			    report, 6191, &observed, &expected, 1, 1,
19686429Svs195195 			    err_data);
19696429Svs195195 
19706429Svs195195 			return (-3);
19716429Svs195195 		}
19726429Svs195195 	}
19736429Svs195195 
19746429Svs195195 	x = tan(-(pi));
19756429Svs195195 	expect_ans = -(0.000000000410207);
19766429Svs195195 	if (x != expect_ans) {
19776429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19786429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19796429Svs195195 			expected = *(uint64_t *)&expect_ans;
19806429Svs195195 			observed = *(uint64_t *)&x;
19816429Svs195195 			snprintf(err_data, sizeof (err_data),
19826429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
19836429Svs195195 			    expect_ans, x);
19846429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
19856429Svs195195 			    report, 6192, &observed, &expected, 1, 1,
19866429Svs195195 			    err_data);
19876429Svs195195 
19886429Svs195195 			return (-3);
19896429Svs195195 		}
19906429Svs195195 	}
19916429Svs195195 
19926429Svs195195 	x = tan(-(3 * pi) / 4);
19936429Svs195195 	expect_ans = 0.999999999384690;
19946429Svs195195 	if (x != expect_ans) {
19956429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
19966429Svs195195 		    x > (expect_ans + DPMARGIN)) {
19976429Svs195195 			expected = *(uint64_t *)&expect_ans;
19986429Svs195195 			observed = *(uint64_t *)&x;
19996429Svs195195 			snprintf(err_data, sizeof (err_data),
20006429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20016429Svs195195 			    expect_ans, x);
20026429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20036429Svs195195 			    report, 6193, &observed, &expected, 1, 1,
20046429Svs195195 			    err_data);
20056429Svs195195 
20066429Svs195195 			return (-3);
20076429Svs195195 		}
20086429Svs195195 	}
20096429Svs195195 
20106429Svs195195 	x = tan(-(pi) / 4);
20116429Svs195195 	expect_ans = -(1.000000000205103);
20126429Svs195195 	if (x != expect_ans) {
20136429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20146429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20156429Svs195195 			expected = *(uint64_t *)&expect_ans;
20166429Svs195195 			observed = *(uint64_t *)&x;
20176429Svs195195 			snprintf(err_data, sizeof (err_data),
20186429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20196429Svs195195 			    expect_ans, x);
20206429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20216429Svs195195 			    report, 6194, &observed, &expected, 1, 1,
20226429Svs195195 			    err_data);
20236429Svs195195 
20246429Svs195195 			return (-3);
20256429Svs195195 		}
20266429Svs195195 	}
20276429Svs195195 
20286429Svs195195 	x = tan(0.0);
20296429Svs195195 	expect_ans = 0.000000000000000;
20306429Svs195195 	if (x != expect_ans) {
20316429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20326429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20336429Svs195195 			expected = *(uint64_t *)&expect_ans;
20346429Svs195195 			observed = *(uint64_t *)&x;
20356429Svs195195 			snprintf(err_data, sizeof (err_data),
20366429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20376429Svs195195 			    expect_ans, x);
20386429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20396429Svs195195 			    report, 6195, &observed, &expected, 1, 1,
20406429Svs195195 			    err_data);
20416429Svs195195 
20426429Svs195195 			return (-3);
20436429Svs195195 		}
20446429Svs195195 	}
20456429Svs195195 
20466429Svs195195 	x = tan(pi / 4);
20476429Svs195195 	expect_ans = 1.000000000205103;
20486429Svs195195 	if (x != expect_ans) {
20496429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20506429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20516429Svs195195 			expected = *(uint64_t *)&expect_ans;
20526429Svs195195 			observed = *(uint64_t *)&x;
20536429Svs195195 			snprintf(err_data, sizeof (err_data),
20546429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20556429Svs195195 			    expect_ans, x);
20566429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20576429Svs195195 			    report, 6196, &observed, &expected, 1, 1,
20586429Svs195195 			    err_data);
20596429Svs195195 
20606429Svs195195 			return (-3);
20616429Svs195195 		}
20626429Svs195195 	}
20636429Svs195195 
20646429Svs195195 	x = tan((3 * pi) / 4);
20656429Svs195195 	expect_ans = -(0.999999999384690);
20666429Svs195195 	if (x != expect_ans) {
20676429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20686429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20696429Svs195195 			expected = *(uint64_t *)&expect_ans;
20706429Svs195195 			observed = *(uint64_t *)&x;
20716429Svs195195 			snprintf(err_data, sizeof (err_data),
20726429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20736429Svs195195 			    expect_ans, x);
20746429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20756429Svs195195 			    report, 6197, &observed, &expected, 1, 1,
20766429Svs195195 			    err_data);
20776429Svs195195 
20786429Svs195195 			return (-3);
20796429Svs195195 		}
20806429Svs195195 	}
20816429Svs195195 
20826429Svs195195 	x = tan(pi);
20836429Svs195195 	expect_ans = 0.000000000410207;
20846429Svs195195 	if (x != expect_ans) {
20856429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
20866429Svs195195 		    x > (expect_ans + DPMARGIN)) {
20876429Svs195195 			expected = *(uint64_t *)&expect_ans;
20886429Svs195195 			observed = *(uint64_t *)&x;
20896429Svs195195 			snprintf(err_data, sizeof (err_data),
20906429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
20916429Svs195195 			    expect_ans, x);
20926429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
20936429Svs195195 			    report, 6198, &observed, &expected, 1, 1,
20946429Svs195195 			    err_data);
20956429Svs195195 
20966429Svs195195 			return (-3);
20976429Svs195195 		}
20986429Svs195195 	}
20996429Svs195195 
21006429Svs195195 	x = tan((5 * pi) / 4);
21016429Svs195195 	expect_ans = 1.000000001025517;
21026429Svs195195 	if (x != expect_ans) {
21036429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21046429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21056429Svs195195 			expected = *(uint64_t *)&expect_ans;
21066429Svs195195 			observed = *(uint64_t *)&x;
21076429Svs195195 			snprintf(err_data, sizeof (err_data),
21086429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21096429Svs195195 			    expect_ans, x);
21106429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21116429Svs195195 			    report, 6199, &observed, &expected, 1, 1,
21126429Svs195195 			    err_data);
21136429Svs195195 
21146429Svs195195 			return (-3);
21156429Svs195195 		}
21166429Svs195195 	}
21176429Svs195195 
21186429Svs195195 	x = tan((7 * pi) / 4);
21196429Svs195195 	expect_ans = -(0.999999998564275);
21206429Svs195195 	if (x != expect_ans) {
21216429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21226429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21236429Svs195195 			expected = *(uint64_t *)&expect_ans;
21246429Svs195195 			observed = *(uint64_t *)&x;
21256429Svs195195 			snprintf(err_data, sizeof (err_data),
21266429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21276429Svs195195 			    expect_ans, x);
21286429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21296429Svs195195 			    report, 6200, &observed, &expected, 1, 1,
21306429Svs195195 			    err_data);
21316429Svs195195 
21326429Svs195195 			return (-3);
21336429Svs195195 		}
21346429Svs195195 	}
21356429Svs195195 
21366429Svs195195 	x = tan((2 * pi));
21376429Svs195195 	expect_ans = 0.000000000820414;
21386429Svs195195 	if (x != expect_ans) {
21396429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21406429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21416429Svs195195 			expected = *(uint64_t *)&expect_ans;
21426429Svs195195 			observed = *(uint64_t *)&x;
21436429Svs195195 			snprintf(err_data, sizeof (err_data),
21446429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21456429Svs195195 			    expect_ans, x);
21466429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21476429Svs195195 			    report, 6201, &observed, &expected, 1, 1,
21486429Svs195195 			    err_data);
21496429Svs195195 
21506429Svs195195 			return (-3);
21516429Svs195195 		}
21526429Svs195195 	}
21536429Svs195195 
21546429Svs195195 	x = sqrt(0.0);
21556429Svs195195 	expect_ans = 0.000000000000000;
21566429Svs195195 	if (x != expect_ans) {
21576429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21586429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21596429Svs195195 			expected = *(uint64_t *)&expect_ans;
21606429Svs195195 			observed = *(uint64_t *)&x;
21616429Svs195195 			snprintf(err_data, sizeof (err_data),
21626429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21636429Svs195195 			    expect_ans, x);
21646429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21656429Svs195195 			    report, 6202, &observed, &expected, 1, 1,
21666429Svs195195 			    err_data);
21676429Svs195195 
21686429Svs195195 			return (-3);
21696429Svs195195 		}
21706429Svs195195 	}
21716429Svs195195 
21726429Svs195195 	x = sqrt(1.0);
21736429Svs195195 	expect_ans = 1.000000000000000;
21746429Svs195195 	if (x != expect_ans) {
21756429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21766429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21776429Svs195195 			expected = *(uint64_t *)&expect_ans;
21786429Svs195195 			observed = *(uint64_t *)&x;
21796429Svs195195 			snprintf(err_data, sizeof (err_data),
21806429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21816429Svs195195 			    expect_ans, x);
21826429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
21836429Svs195195 			    report, 6203, &observed, &expected, 1, 1,
21846429Svs195195 			    err_data);
21856429Svs195195 
21866429Svs195195 			return (-3);
21876429Svs195195 		}
21886429Svs195195 	}
21896429Svs195195 
21906429Svs195195 	x = sqrt(4.0);
21916429Svs195195 	expect_ans = 2.000000000000000;
21926429Svs195195 	if (x != expect_ans) {
21936429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
21946429Svs195195 		    x > (expect_ans + DPMARGIN)) {
21956429Svs195195 			expected = *(uint64_t *)&expect_ans;
21966429Svs195195 			observed = *(uint64_t *)&x;
21976429Svs195195 			snprintf(err_data, sizeof (err_data),
21986429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
21996429Svs195195 			    expect_ans, x);
22006429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22016429Svs195195 			    report, 6204, &observed, &expected, 1, 1,
22026429Svs195195 			    err_data);
22036429Svs195195 
22046429Svs195195 			return (-3);
22056429Svs195195 		}
22066429Svs195195 	}
22076429Svs195195 
22086429Svs195195 	x = sqrt(9.0);
22096429Svs195195 	expect_ans = 3.000000000000000;
22106429Svs195195 	if (x != expect_ans) {
22116429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22126429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22136429Svs195195 			expected = *(uint64_t *)&expect_ans;
22146429Svs195195 			observed = *(uint64_t *)&x;
22156429Svs195195 			snprintf(err_data, sizeof (err_data),
22166429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22176429Svs195195 			    expect_ans, x);
22186429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22196429Svs195195 			    report, 6205, &observed, &expected, 1, 1,
22206429Svs195195 			    err_data);
22216429Svs195195 
22226429Svs195195 			return (-3);
22236429Svs195195 		}
22246429Svs195195 	}
22256429Svs195195 
22266429Svs195195 	x = sqrt(16.0);
22276429Svs195195 	expect_ans = 4.000000000000000;
22286429Svs195195 	if (x != expect_ans) {
22296429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22306429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22316429Svs195195 			expected = *(uint64_t *)&expect_ans;
22326429Svs195195 			observed = *(uint64_t *)&x;
22336429Svs195195 			snprintf(err_data, sizeof (err_data),
22346429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22356429Svs195195 			    expect_ans, x);
22366429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22376429Svs195195 			    report, 6206, &observed, &expected, 1, 1,
22386429Svs195195 			    err_data);
22396429Svs195195 
22406429Svs195195 			return (-3);
22416429Svs195195 		}
22426429Svs195195 	}
22436429Svs195195 
22446429Svs195195 	x = sqrt(25.0);
22456429Svs195195 	expect_ans = 5.000000000000000;
22466429Svs195195 	if (x != expect_ans) {
22476429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22486429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22496429Svs195195 			expected = *(uint64_t *)&expect_ans;
22506429Svs195195 			observed = *(uint64_t *)&x;
22516429Svs195195 			snprintf(err_data, sizeof (err_data),
22526429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22536429Svs195195 			    expect_ans, x);
22546429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22556429Svs195195 			    report, 6207, &observed, &expected, 1, 1,
22566429Svs195195 			    err_data);
22576429Svs195195 
22586429Svs195195 			return (-3);
22596429Svs195195 		}
22606429Svs195195 	}
22616429Svs195195 
22626429Svs195195 	x = sqrt(36.0);
22636429Svs195195 	expect_ans = 6.000000000000000;
22646429Svs195195 	if (x != expect_ans) {
22656429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22666429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22676429Svs195195 			expected = *(uint64_t *)&expect_ans;
22686429Svs195195 			observed = *(uint64_t *)&x;
22696429Svs195195 			snprintf(err_data, sizeof (err_data),
22706429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22716429Svs195195 			    expect_ans, x);
22726429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22736429Svs195195 			    report, 6208, &observed, &expected, 1, 1,
22746429Svs195195 			    err_data);
22756429Svs195195 
22766429Svs195195 			return (-3);
22776429Svs195195 		}
22786429Svs195195 	}
22796429Svs195195 
22806429Svs195195 	x = sqrt(49.0);
22816429Svs195195 	expect_ans = 7.000000000000000;
22826429Svs195195 	if (x != expect_ans) {
22836429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
22846429Svs195195 		    x > (expect_ans + DPMARGIN)) {
22856429Svs195195 			expected = *(uint64_t *)&expect_ans;
22866429Svs195195 			observed = *(uint64_t *)&x;
22876429Svs195195 			snprintf(err_data, sizeof (err_data),
22886429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
22896429Svs195195 			    expect_ans, x);
22906429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
22916429Svs195195 			    report, 6209, &observed, &expected, 1, 1,
22926429Svs195195 			    err_data);
22936429Svs195195 
22946429Svs195195 			return (-3);
22956429Svs195195 		}
22966429Svs195195 	}
22976429Svs195195 
22986429Svs195195 	x = sqrt(64.0);
22996429Svs195195 	expect_ans = 8.000000000000000;
23006429Svs195195 	if (x != expect_ans) {
23016429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
23026429Svs195195 		    x > (expect_ans + DPMARGIN)) {
23036429Svs195195 			expected = *(uint64_t *)&expect_ans;
23046429Svs195195 			observed = *(uint64_t *)&x;
23056429Svs195195 			snprintf(err_data, sizeof (err_data),
23066429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
23076429Svs195195 			    expect_ans, x);
23086429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
23096429Svs195195 			    report, 6210, &observed, &expected, 1, 1,
23106429Svs195195 			    err_data);
23116429Svs195195 
23126429Svs195195 			return (-3);
23136429Svs195195 		}
23146429Svs195195 	}
23156429Svs195195 
23166429Svs195195 	x = sqrt(81.0);
23176429Svs195195 	expect_ans = 9.000000000000000;
23186429Svs195195 	if (x != expect_ans) {
23196429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
23206429Svs195195 		    x > (expect_ans + DPMARGIN)) {
23216429Svs195195 			expected = *(uint64_t *)&expect_ans;
23226429Svs195195 			observed = *(uint64_t *)&x;
23236429Svs195195 			snprintf(err_data, sizeof (err_data),
23246429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
23256429Svs195195 			    expect_ans, x);
23266429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
23276429Svs195195 			    report, 6211, &observed, &expected, 1, 1,
23286429Svs195195 			    err_data);
23296429Svs195195 
23306429Svs195195 			return (-3);
23316429Svs195195 		}
23326429Svs195195 	}
23336429Svs195195 
23346429Svs195195 	x = sqrt(100.0);
23356429Svs195195 	expect_ans = 10.000000000000000;
23366429Svs195195 	if (x != expect_ans) {
23376429Svs195195 		if (x < (expect_ans - DPMARGIN) ||
23386429Svs195195 		    x > (expect_ans + DPMARGIN)) {
23396429Svs195195 			expected = *(uint64_t *)&expect_ans;
23406429Svs195195 			observed = *(uint64_t *)&x;
23416429Svs195195 			snprintf(err_data, sizeof (err_data),
23426429Svs195195 			    "\nExpected: %.16f\nObserved: %.16f",
23436429Svs195195 			    expect_ans, x);
23446429Svs195195 			setup_fps_test_struct(IS_EREPORT_INFO,
23456429Svs195195 			    report, 6212, &observed, &expected, 1, 1,
23466429Svs195195 			    err_data);
23476429Svs195195 
23486429Svs195195 			return (-3);
23496429Svs195195 		}
23506429Svs195195 	}
23516429Svs195195 
23526429Svs195195 	return (0);
23536429Svs195195 }
23546429Svs195195 
23556429Svs195195 /*
23566429Svs195195  * process_fpu_args(int argc, char *argv[])
23576429Svs195195  * processes the args passed into main()
23586429Svs195195  * and sets the appropriate global vars.
23596429Svs195195  */
23606429Svs195195 static void
23616429Svs195195 process_fpu_args(int argc, char *argv[])
23626429Svs195195 {
23636429Svs195195 	char l_buf[32];
23646429Svs195195 	char *px;
23656429Svs195195 	int opt;
23666429Svs195195 
23676429Svs195195 	while ((opt = getopt(argc, argv, "s:d:p:f:vnhe")) != EOF) {
23686429Svs195195 	switch (opt) {
23696429Svs195195 		case 'P': /* -p N or -p all or no -p */
23706429Svs195195 		case 'p':
23716429Svs195195 
23726429Svs195195 			memset(l_buf, 0, sizeof (l_buf));
23736429Svs195195 			test_group = -1;
23746429Svs195195 			if (NULL != optarg) {
23756429Svs195195 			strncpy(l_buf, optarg, 3);	/* -p all */
23766429Svs195195 			if (!strncasecmp(l_buf, "all", 3)) {
23776429Svs195195 				test_group = 12345;
23786429Svs195195 				break;
23796429Svs195195 				}
23806429Svs195195 				test_group = atoi(optarg);
23816429Svs195195 				if ((0 == test_group) && strcmp(optarg, "0"))
23826429Svs195195 					test_group = -1;
23836429Svs195195 			}
23846429Svs195195 
23856429Svs195195 			if (test_group < 0) {
23866429Svs195195 				_exit(FPU_INVALID_ARG);
23876429Svs195195 			}
23886429Svs195195 			break;
23896429Svs195195 		case 'f': /* 1000,1500,2000 freq */
23906429Svs195195 		case 'F':
23916429Svs195195 			memset(l_buf, 0, sizeof (l_buf));
23926429Svs195195 			if (NULL != optarg) {
23936429Svs195195 				strncpy(l_buf, optarg, 5);	/* -f 1000 */
23946429Svs195195 				proc_fr = atoi(optarg);
23956429Svs195195 
23966429Svs195195 				switch (proc_fr) {
23976429Svs195195 				case 1000 :
23986429Svs195195 					lowstresslapagroup_len =
23996429Svs195195 					    lowstresslapagroup1000_len;
24006429Svs195195 					lowstresslapagroup =
24016429Svs195195 					    LowStressLapaGroup_1000;
24026429Svs195195 					break;
24036429Svs195195 				case 1500 :
24046429Svs195195 					lowstresslapagroup_len =
24056429Svs195195 					    lowstresslapagroup1500_len;
24066429Svs195195 					lowstresslapagroup =
24076429Svs195195 					    LowStressLapaGroup_1500;
24086429Svs195195 					break;
24096429Svs195195 				case 2000 :
24106429Svs195195 					lowstresslapagroup_len =
24116429Svs195195 					    lowstresslapagroup2000_len;
24126429Svs195195 					lowstresslapagroup =
24136429Svs195195 					    LowStressLapaGroup_2000;
24146429Svs195195 					break;
24156429Svs195195 				default :
24166429Svs195195 					if (proc_fr < 1500) {
24176429Svs195195 						lowstresslapagroup_len =
24186429Svs195195 						    lowstresslapagroup1000_len;
24196429Svs195195 						lowstresslapagroup =
24206429Svs195195 						    LowStressLapaGroup_1000;
24216429Svs195195 						break;
24226429Svs195195 					} else if (proc_fr < 2000) {
24236429Svs195195 						lowstresslapagroup_len =
24246429Svs195195 						    lowstresslapagroup1500_len;
24256429Svs195195 						lowstresslapagroup =
24266429Svs195195 						    LowStressLapaGroup_1500;
24276429Svs195195 						break;
24286429Svs195195 					} else {
24296429Svs195195 						lowstresslapagroup_len =
24306429Svs195195 						    lowstresslapagroup2000_len;
24316429Svs195195 						lowstresslapagroup =
24326429Svs195195 						    LowStressLapaGroup_2000;
24336429Svs195195 						break;
24346429Svs195195 					}
24356429Svs195195 				}
24366429Svs195195 			}
24376429Svs195195 			break;
24386429Svs195195 		case 'd':
24396429Svs195195 			if (optarg == NULL)
24406429Svs195195 				_exit(FPU_INVALID_ARG);
24416429Svs195195 
24426429Svs195195 			fpu_cpu = atoi(optarg);
24436429Svs195195 
24446429Svs195195 			if (fpu_cpu == 0 && strcmp(optarg, "0"))
24456429Svs195195 				_exit(FPU_INVALID_ARG);
24466429Svs195195 
24476429Svs195195 			if (is_cpu_on(fpu_cpu))
24486429Svs195195 				_exit(FPU_BIND_FAIL);
24496429Svs195195 			break;
24506429Svs195195 		case 'E':
24516429Svs195195 		case 'e':
24526429Svs195195 			fps_exec_time = 1;
24536429Svs195195 			break;
24546429Svs195195 		case 'V':
24556429Svs195195 		case 'v':
24566429Svs195195 			fps_verbose_msg = 1;
24576429Svs195195 			break;
24586429Svs195195 		case 'S':
24596429Svs195195 		case 's':
24606429Svs195195 			memset(l_buf, 0, sizeof (l_buf));
24616429Svs195195 			stress_level = 1;
24626429Svs195195 
24636429Svs195195 			if (NULL != optarg) {
24646429Svs195195 				strncpy(l_buf, optarg, 2);
24656429Svs195195 
24666429Svs195195 				if (('X' != l_buf[0]) && (0 != l_buf[1]))
24676429Svs195195 					l_buf[0] = 'E';
24686429Svs195195 
24696429Svs195195 				switch (l_buf[0]) {
24706429Svs195195 				case 'l':
24716429Svs195195 				case 'L':
24726429Svs195195 				case '1':
24736429Svs195195 					stress_level = 1;
24746429Svs195195 					limit_group = 1;
24756429Svs195195 					break;
24766429Svs195195 				case 'm':
24776429Svs195195 				case 'M':
24786429Svs195195 				case '2':
24796429Svs195195 					stress_level = 1000;
24806429Svs195195 					limit_group = 2;
24816429Svs195195 					break;
24826429Svs195195 				case 'h':
24836429Svs195195 				case 'H':
24846429Svs195195 				case '3':
24856429Svs195195 					stress_level = 4000;
24866429Svs195195 					limit_group = 3;
24876429Svs195195 					break;
24886429Svs195195 				case 'X':
24896429Svs195195 					px = optarg + 1;
24906429Svs195195 					stress_level = 10000;
24916429Svs195195 					limit_group = 3;
24926429Svs195195 
24936429Svs195195 					if (NULL != px) {
24946429Svs195195 						stress_level = atoi(px);
24956429Svs195195 						if ((0 == stress_level) ||
24966429Svs195195 						    (stress_level > 10000) ||
24976429Svs195195 						    (stress_level < 1000) ||
24986429Svs195195 						    (0 != stress_level % 1000))
24996429Svs195195 							stress_level = 10000;
25006429Svs195195 					}
25016429Svs195195 					break;
25026429Svs195195 				default:
25036429Svs195195 					stress_level = 1;
25046429Svs195195 					limit_group = 1;
25056429Svs195195 					break;
25066429Svs195195 				}
25076429Svs195195 			}
25086429Svs195195 			break;
25096429Svs195195 		default:
25106429Svs195195 			_exit(FPU_INVALID_ARG);
25116429Svs195195 			break;
25126429Svs195195 		}
25136429Svs195195 	}
25146429Svs195195 }
25156429Svs195195 
25166429Svs195195 /*
25176429Svs195195  * is_cpu_on(int unit) checks to see if processor
25186429Svs195195  * unit is online.
25196429Svs195195  */
25206429Svs195195 static int
25216429Svs195195 is_cpu_on(int unit)
25226429Svs195195 {
25236429Svs195195 	int proc_stat;
25246429Svs195195 
25256429Svs195195 	proc_stat = p_online(unit, P_STATUS);
25266429Svs195195 
25276429Svs195195 	if (P_ONLINE == proc_stat)
25286429Svs195195 		return (0);
25296429Svs195195 
25306429Svs195195 	return (1);
25316429Svs195195 }
25326429Svs195195 
25336429Svs195195 /*
25346429Svs195195  * check_proc(int cpu_id) checks to see that we're on an
25356429Svs195195  * fpscrubber supported processor specified by cpu_id.
25366429Svs195195  */
25376429Svs195195 static int
25386429Svs195195 check_proc(int cpu_id)
25396429Svs195195 {
25406429Svs195195 	char brand[40];
25416429Svs195195 	kstat_ctl_t *kc;
25426429Svs195195 	kstat_t *ksp;
25436429Svs195195 	kstat_named_t *knp;
25446429Svs195195 
25456429Svs195195 
25466429Svs195195 	/* grab kstat info */
25476429Svs195195 	if ((kc = kstat_open()) == NULL)
25486429Svs195195 		return (1);
25496429Svs195195 
25506429Svs195195 	if ((ksp = kstat_lookup(kc, "cpu_info", (int)cpu_id, NULL)) == NULL) {
25516429Svs195195 		kstat_close(kc);
25526429Svs195195 
25536429Svs195195 		return (1);
25546429Svs195195 	}
25556429Svs195195 
25566429Svs195195 	if ((kstat_read(kc, ksp, NULL)) == -1) {
25576429Svs195195 		kstat_close(kc);
25586429Svs195195 
25596429Svs195195 		return (1);
25606429Svs195195 	}
25616429Svs195195 
25626429Svs195195 	if ((knp = kstat_data_lookup(ksp, "brand")) == NULL) {
25636429Svs195195 		kstat_close(kc);
25646429Svs195195 
25656429Svs195195 		return (1);
25666429Svs195195 	}
25676429Svs195195 
25686429Svs195195 	if ((snprintf(brand, MAX_CPU_BRAND, "%s",
25696429Svs195195 	    KSTAT_NAMED_STR_PTR(knp))) < 0) {
25706429Svs195195 		kstat_close(kc);
25716429Svs195195 
25726429Svs195195 		return (1);
25736429Svs195195 	}
25746429Svs195195 
25756429Svs195195 	/* check against supported CPUs */
25766429Svs195195 
25776429Svs195195 	if (strcmp(brand, USIII_KSTAT) != 0 &&
25786429Svs195195 	    strcmp(brand, USIIIi_KSTAT) != 0 &&
25796429Svs195195 	    strcmp(brand, USIIIP_KSTAT) != 0 &&
25806429Svs195195 	    strcmp(brand, USIV_KSTAT) != 0 &&
25816429Svs195195 	    strcmp(brand, USIVP_KSTAT) != 0) {
25826429Svs195195 			kstat_close(kc);
25836429Svs195195 
25846429Svs195195 			return (2);
25856429Svs195195 	}
25866429Svs195195 
25876429Svs195195 	kstat_close(kc);
25886429Svs195195 
25896429Svs195195 	return (0);
25906429Svs195195 }
2591