X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/e2fac8b15b12a7979f72090454d850e612fc5b13..b0d623f7f2ae71ed96e60569f61f9a9a27016e80:/tools/tests/libMicro/tattle.c?ds=inline diff --git a/tools/tests/libMicro/tattle.c b/tools/tests/libMicro/tattle.c new file mode 100644 index 000000000..59520f8ce --- /dev/null +++ b/tools/tests/libMicro/tattle.c @@ -0,0 +1,154 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms + * of the Common Development and Distribution License + * (the "License"). You may not use this file except + * in compliance with the License. + * + * You can obtain a copy of the license at + * src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing + * permissions and limitations under the License. + * + * When distributing Covered Code, include this CDDL + * HEADER in each file and include the License file at + * usr/src/OPENSOLARIS.LICENSE. If applicable, + * add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your + * own identifying information: Portions Copyright [yyyy] + * [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +#include +#include +#include +#include +#include +#include +#include +#include "libmicro.h" +#include + + +#ifdef USE_RDTSC +#ifdef __GNUC__ +#define ENABLE_RDTSC 1 +#endif +#endif + +/* + * dummy so we can link w/ libmicro + */ + +/*ARGSUSED*/ +int +benchmark(void *tsd, result_t *res) +{ + return (0); +} + +static void +cleanup(char *s) +{ + char *o = s; + char *e; + + while (*s == ' ') + s++; + + if (o != s) + (void) strcpy(o, s); + + e = o; + + while (*e != 0) + e++; + + e--; + + while (*e == ' ' && e > o) + *e-- = 0; + +} + + +int +main(int argc, char *argv[]) +{ + int c; + + if (strlen(compiler_version) > 30) + compiler_version[30] = 0; + + cleanup(compiler_version); + cleanup(extra_compiler_flags); + + while ((c = getopt(argc, argv, "vcfrsVTR")) != -1) { + switch (c) { + case 'V': + (void) printf("%s\n", LIBMICRO_VERSION); + break; + case 'v': + (void) printf("%s\n", compiler_version); + break; + case 'c': + (void) printf("%s\n", CC); + break; + case 'f': + if (strlen(extra_compiler_flags) == 0) + (void) printf("[none]\n"); + else + (void) printf("%s\n", extra_compiler_flags); + break; + + case 's': + (void) printf("%d\n", sizeof (long)); + break; + + case 'r': + + (void) printf("%lld nsecs\n", get_nsecs_resolution()); + break; + + case 'R': +#ifdef ENABLE_RDTSC + { + struct timeval s; + struct timeval f; + long long start_nsecs; + long long end_nsecs; + long elapsed_usecs; + + gettimeofday(&s, NULL); + start_nsecs = rdtsc(); + for (;;) { + gettimeofday(&f, NULL); + elapsed_usecs = (f.tv_sec - s.tv_sec) * + 1000000 + (f.tv_usec - s.tv_usec); + if (elapsed_usecs > 1000000) + break; + } + end_nsecs = rdtsc(); + (void) printf("LIBMICRO_HZ=%lld\n", + (long long)elapsed_usecs * + (end_nsecs - start_nsecs) / 1000000LL); + } +#else + (void) printf("\n"); +#endif + break; + } + } + + exit(0); + return (0); +}