From 4c80e11f6ac109e81549de0fb222683f4bf5fb4a Mon Sep 17 00:00:00 2001 From: pfg Date: Sun, 1 Jul 2012 04:26:51 +0000 Subject: [PATCH] MFC r237624, r237714, r237716, r237860: Bring llquantize support into Dtrace. Bryan Cantrill implemented the equivalent of semi-log graph paper for Dtrace so llquantize will use one logarithmic and one linear scale. Illumos Revision: 13355:15b74a2a9a9d Reference: https://www.illumos/issues/905 Obtained from: Illumos git-svn-id: svn://svn.freebsd.org/base/stable/8@237872 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- .../err.D_LLQUANT_FACTOREVEN.nodivide.d | 29 + .../err.D_LLQUANT_FACTOREVEN.notfactor.d | 29 + .../llquantize/err.D_LLQUANT_FACTORMATCH.d | 30 + .../llquantize/err.D_LLQUANT_FACTORNSTEPS.d | 29 + .../llquantize/err.D_LLQUANT_FACTORSMALL.d | 29 + .../llquantize/err.D_LLQUANT_FACTORTYPE.d | 30 + .../llquantize/err.D_LLQUANT_FACTORVAL.d | 29 + .../llquantize/err.D_LLQUANT_HIGHMATCH.d | 30 + .../llquantize/err.D_LLQUANT_HIGHTYPE.d | 30 + .../common/llquantize/err.D_LLQUANT_HIGHVAL.d | 29 + .../llquantize/err.D_LLQUANT_LOWMATCH.d | 30 + .../common/llquantize/err.D_LLQUANT_LOWTYPE.d | 30 + .../common/llquantize/err.D_LLQUANT_LOWVAL.d | 29 + .../llquantize/err.D_LLQUANT_MAGRANGE.d | 29 + .../llquantize/err.D_LLQUANT_MAGTOOBIG.d | 29 + .../llquantize/err.D_LLQUANT_NSTEPMATCH.d | 30 + .../llquantize/err.D_LLQUANT_NSTEPTYPE.d | 30 + .../llquantize/err.D_LLQUANT_NSTEPVAL.d | 29 + .../test/tst/common/llquantize/tst.bases.d | 46 + .../tst/common/llquantize/tst.bases.d.out | 177 ++ .../test/tst/common/llquantize/tst.basic.d | 38 + .../tst/common/llquantize/tst.basic.d.out | 25 + .../test/tst/common/llquantize/tst.negorder.d | 62 + .../tst/common/llquantize/tst.negorder.d.out | 148 ++ .../test/tst/common/llquantize/tst.negvalue.d | 38 + .../tst/common/llquantize/tst.negvalue.d.out | 25 + .../test/tst/common/llquantize/tst.normal.d | 40 + .../tst/common/llquantize/tst.normal.d.out | 26 + .../test/tst/common/llquantize/tst.range.d | 38 + .../tst/common/llquantize/tst.range.d.out | 29 + .../test/tst/common/llquantize/tst.steps.d | 52 + .../tst/common/llquantize/tst.steps.d.out | 2033 +++++++++++++++++ .../test/tst/common/llquantize/tst.trunc.d | 49 + .../tst/common/llquantize/tst.trunc.d.out | 34 + .../lib/libdtrace/common/dt_aggregate.c | 89 +- .../opensolaris/lib/libdtrace/common/dt_cc.c | 141 ++ .../lib/libdtrace/common/dt_consume.c | 122 + .../lib/libdtrace/common/dt_errtags.h | 17 + .../lib/libdtrace/common/dt_impl.h | 6 + .../lib/libdtrace/common/dt_open.c | 10 +- .../lib/libdtrace/common/dt_printf.c | 12 + .../opensolaris/lib/libdtrace/common/dtrace.h | 6 +- .../opensolaris/uts/common/dtrace/dtrace.c | 98 + .../opensolaris/uts/common/sys/dtrace.h | 30 + 44 files changed, 3916 insertions(+), 5 deletions(-) create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.nodivide.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.notfactor.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORMATCH.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORNSTEPS.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORSMALL.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORTYPE.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORVAL.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHMATCH.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHTYPE.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHVAL.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWMATCH.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWTYPE.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWVAL.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGRANGE.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGTOOBIG.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPMATCH.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPTYPE.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPVAL.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d.out create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d.out create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d.out create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d.out create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d.out create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d.out create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d.out create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d create mode 100644 cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d.out diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.nodivide.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.nodivide.d new file mode 100644 index 000000000..b11d2828b --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.nodivide.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 10, 25); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.notfactor.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.notfactor.d new file mode 100644 index 000000000..c8af7d920 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTOREVEN.notfactor.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 10, 30); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORMATCH.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORMATCH.d new file mode 100644 index 000000000..0404b4ffb --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORMATCH.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 10, 10); + @ = llquantize(0, 3, 0, 10, 81); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORNSTEPS.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORNSTEPS.d new file mode 100644 index 000000000..fd6b0e67f --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORNSTEPS.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 10, 7); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORSMALL.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORSMALL.d new file mode 100644 index 000000000..7074f5f66 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORSMALL.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 1, 0, 10, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORTYPE.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORTYPE.d new file mode 100644 index 000000000..ea39c7e38 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORTYPE.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + this->doogle = 10; + @ = llquantize(0, this->doogle, 0, 10, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORVAL.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORVAL.d new file mode 100644 index 000000000..a1ad20f28 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_FACTORVAL.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 65537, 0, 10, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHMATCH.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHMATCH.d new file mode 100644 index 000000000..46bf0e6fc --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHMATCH.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 10, 10); + @ = llquantize(0, 10, 0, 11, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHTYPE.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHTYPE.d new file mode 100644 index 000000000..fee786d39 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHTYPE.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + this->doogle = 10; + @ = llquantize(0, 10, 0, this->doogle, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHVAL.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHVAL.d new file mode 100644 index 000000000..531ab0b66 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_HIGHVAL.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, -1, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWMATCH.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWMATCH.d new file mode 100644 index 000000000..126429a29 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWMATCH.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 10, 10); + @ = llquantize(0, 10, 1, 10, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWTYPE.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWTYPE.d new file mode 100644 index 000000000..2a9b2efdc --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWTYPE.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + this->doogle = 0; + @ = llquantize(0, 10, this->doogle, 10, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWVAL.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWVAL.d new file mode 100644 index 000000000..e1045d83b --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_LOWVAL.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, -1, 10, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGRANGE.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGRANGE.d new file mode 100644 index 000000000..9852c1ab9 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGRANGE.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 10, 0, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGTOOBIG.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGTOOBIG.d new file mode 100644 index 000000000..c70763084 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_MAGTOOBIG.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 100, 10); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPMATCH.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPMATCH.d new file mode 100644 index 000000000..77b4d8a84 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPMATCH.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(0, 10, 0, 10, 10); + @ = llquantize(0, 10, 0, 10, 100); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPTYPE.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPTYPE.d new file mode 100644 index 000000000..4eb9b2f06 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPTYPE.d @@ -0,0 +1,30 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + this->doogle = 10; + @ = llquantize(0, 10, 0, 10, this->doogle); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPVAL.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPVAL.d new file mode 100644 index 000000000..3855beb4a --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/err.D_LLQUANT_NSTEPVAL.d @@ -0,0 +1,29 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +BEGIN +{ + @ = llquantize(123, 10, 0, 10, 123456); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d new file mode 100644 index 000000000..e3a6ff1a8 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d @@ -0,0 +1,46 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +tick-1ms +/i++ <= 100/ +{ + @two = llquantize(i, 2, 0, 6, 2); + @three = llquantize(i, 3, 0, 1, 9); + @four = llquantize(i, 4, 0, 1, 4); + @five = llquantize(i, 5, 0, 1, 25); + @six = llquantize(i, 6, 0, 3, 12); + @seven = llquantize(i, 7, 0, 1, 7); + @eight = llquantize(i, 8, 0, 1, 16); + @nine = llquantize(i, 9, 0, 1, 9); + @ten = llquantize(i, 10, 0, 1, 10); +} + +tick-1ms +/i > 100/ +{ + exit(0); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d.out new file mode 100644 index 000000000..1b207bf6f --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.bases.d.out @@ -0,0 +1,177 @@ + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 |@ 2 + 4 |@@ 4 + 8 |@@@ 8 + 16 |@@@@@@ 16 + 32 |@@@@@@@@@@@@@ 32 + 64 |@@@@@@@@@@@@@@@ 38 + >= 128 | 0 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 8 | 1 + >= 9 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 93 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 |@@ 4 + 8 |@@ 4 + 12 |@@ 4 + >= 16 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 86 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 8 | 1 + 9 | 1 + 10 | 1 + 11 | 1 + 12 | 1 + 13 | 1 + 14 | 1 + 15 | 1 + 16 | 1 + 17 | 1 + 18 | 1 + 19 | 1 + 20 | 1 + 21 | 1 + 22 | 1 + 23 | 1 + 24 | 1 + >= 25 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 77 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 |@ 3 + 9 |@ 3 + 12 |@ 3 + 15 |@ 3 + 18 |@ 3 + 21 |@ 3 + 24 |@ 3 + 27 |@ 3 + 30 |@ 3 + 33 |@ 3 + 36 |@@@@@@@ 18 + 54 |@@@@@@@ 18 + 72 |@@@@@@@ 18 + 90 |@@@@@ 12 + 108 | 0 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 |@@@ 7 + 14 |@@@ 7 + 21 |@@@ 7 + 28 |@@@ 7 + 35 |@@@ 7 + 42 |@@@ 7 + >= 49 |@@@@@@@@@@@@@@@@@@@@@ 53 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 8 |@@ 4 + 12 |@@ 4 + 16 |@@ 4 + 20 |@@ 4 + 24 |@@ 4 + 28 |@@ 4 + 32 |@@ 4 + 36 |@@ 4 + 40 |@@ 4 + 44 |@@ 4 + 48 |@@ 4 + 52 |@@ 4 + 56 |@@ 4 + 60 |@@ 4 + >= 64 |@@@@@@@@@@@@@@@ 38 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 8 | 1 + 9 |@@@@ 9 + 18 |@@@@ 9 + 27 |@@@@ 9 + 36 |@@@@ 9 + 45 |@@@@ 9 + 54 |@@@@ 9 + 63 |@@@@ 9 + 72 |@@@@ 9 + >= 81 |@@@@@@@@ 21 + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 8 | 1 + 9 | 1 + 10 |@@@@ 10 + 20 |@@@@ 10 + 30 |@@@@ 10 + 40 |@@@@ 10 + 50 |@@@@ 10 + 60 |@@@@ 10 + 70 |@@@@ 10 + 80 |@@@@ 10 + 90 |@@@@ 10 + >= 100 |@ 2 + diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d new file mode 100644 index 000000000..57b6ed881 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d @@ -0,0 +1,38 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +tick-1ms +/i++ <= 100/ +{ + @ = llquantize(i, 10, 0, 10, 10); +} + +tick-1ms +/i > 100/ +{ + exit(0); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d.out new file mode 100644 index 000000000..9a7b28896 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.basic.d.out @@ -0,0 +1,25 @@ + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 8 | 1 + 9 | 1 + 10 |@@@@ 10 + 20 |@@@@ 10 + 30 |@@@@ 10 + 40 |@@@@ 10 + 50 |@@@@ 10 + 60 |@@@@ 10 + 70 |@@@@ 10 + 80 |@@@@ 10 + 90 |@@@@ 10 + 100 |@ 2 + 200 | 0 + diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d new file mode 100644 index 000000000..b18c688bc --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d @@ -0,0 +1,62 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +BEGIN +{ + a = 7; + b = 13; + val = (-a * b) + a; +} + +tick-1ms +{ + incr = val % b; + val += a; +} + +tick-1ms +/val == 0/ +{ + val += a; +} + +tick-1ms +/incr != 0/ +{ + i++; + @llquanty[i] = llquantize(1, 10, 0, 10, 10, incr); +} + +tick-1ms +/incr == 0/ +{ + printf("Ordering of llquantize() with some negative weights:\n"); + printa(@llquanty); + printf("\n"); + + exit(0); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d.out new file mode 100644 index 000000000..ac0f3cb30 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negorder.d.out @@ -0,0 +1,148 @@ +Ordering of llquantize() with some negative weights: + + 2 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -12 + 2 | 0 + + 4 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -11 + 2 | 0 + + 6 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -10 + 2 | 0 + + 8 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -9 + 2 | 0 + + 10 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -8 + 2 | 0 + + 12 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -7 + 2 | 0 + + 1 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -6 + 2 | 0 + + 3 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -5 + 2 | 0 + + 5 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -4 + 2 | 0 + + 7 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -3 + 2 | 0 + + 9 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -2 + 2 | 0 + + 11 + value ------------- Distribution ------------- count + < 1 | 0 + 1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -1 + 2 | 0 + + 14 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 + 2 | 0 + + 16 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 2 + 2 | 0 + + 18 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 3 + 2 | 0 + + 20 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 4 + 2 | 0 + + 22 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 5 + 2 | 0 + + 24 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 6 + 2 | 0 + + 13 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 7 + 2 | 0 + + 15 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 8 + 2 | 0 + + 17 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 9 + 2 | 0 + + 19 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 10 + 2 | 0 + + 21 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 11 + 2 | 0 + + 23 + value ------------- Distribution ------------- count + < 1 | 0 + 1 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 12 + 2 | 0 + + + diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d new file mode 100644 index 000000000..c74d019cb --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d @@ -0,0 +1,38 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +tick-1ms +/i++ <= 100/ +{ + @ = llquantize(i, 10, 0, 10, 10, 50 - i); +} + +tick-1ms +/i > 100/ +{ + exit(0); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d.out new file mode 100644 index 000000000..04b0d5e1b --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.negvalue.d.out @@ -0,0 +1,25 @@ + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 49 + 2 | 48 + 3 | 47 + 4 | 46 + 5 | 45 + 6 | 44 + 7 | 43 + 8 | 42 + 9 | 41 + 10 |@@@ 355 + 20 |@@ 255 + 30 |@ 155 + 40 | 55 + 50 | -45 + 60 @| -145 + 70 @@| -245 + 80 @@@| -345 + 90 @@@| -445 + 100 @| -101 + 200 | 0 + diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d new file mode 100644 index 000000000..7097ba7d3 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d @@ -0,0 +1,40 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +tick-1ms +/i++ <= 100/ +{ + @ = llquantize(i, 10, 0, 10, 10); +} + +tick-1ms +/i > 100/ +{ + normalize(@, 10); + printa(@); + exit(0); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d.out new file mode 100644 index 000000000..3b1f41b21 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.normal.d.out @@ -0,0 +1,26 @@ + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 0 + 2 | 0 + 3 | 0 + 4 | 0 + 5 | 0 + 6 | 0 + 7 | 0 + 8 | 0 + 9 | 0 + 10 |@@@@ 1 + 20 |@@@@ 1 + 30 |@@@@ 1 + 40 |@@@@ 1 + 50 |@@@@ 1 + 60 |@@@@ 1 + 70 |@@@@ 1 + 80 |@@@@ 1 + 90 |@@@@ 1 + 100 |@ 0 + 200 | 0 + + diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d new file mode 100644 index 000000000..e2882b3f8 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d @@ -0,0 +1,38 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +BEGIN +{ + @["Screven"] = llquantize(0, 10, 1, 2, 20, 25); + @["Katz"] = llquantize(1, 10, 1, 2, 20, -100); + @["Kurian"] = llquantize(7, 10, 1, 2, 20, 15); + @["Rozwat"] = llquantize(49, 10, 1, 2, 20, 15); + @["Fowler"] = llquantize(343, 10, 1, 2, 20, 150); + + printa(@); + exit(0); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d.out new file mode 100644 index 000000000..c6736c6fc --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.range.d.out @@ -0,0 +1,29 @@ + + Katz + value ------------- Distribution ------------- count + < 10 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -100 + 10 | 0 + + Kurian + value ------------- Distribution ------------- count + < 10 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 15 + 10 | 0 + + Screven + value ------------- Distribution ------------- count + < 10 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 25 + 10 | 0 + + Rozwat + value ------------- Distribution ------------- count + 40 | 0 + 45 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 15 + 50 | 0 + + Fowler + value ------------- Distribution ------------- count + 250 | 0 + 300 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 150 + 350 | 0 + + diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d new file mode 100644 index 000000000..f00659e57 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d @@ -0,0 +1,52 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +tick-1ms +/i++ <= 100/ +{ + @ = llquantize(i, 10, 0, 10, 20); + @hunid = llquantize(i * 10, 10, 0, 10, 100); + @large = llquantize(i * 100, 10, 0, 10, 1000); +} + +tick-1ms +/i > 100/ +{ + exit(0); +} + +END +{ + printf("20 steps:\n"); + printa(@); + + printf("100 steps:\n"); + printa(@hunid); + + printf("1000 steps:\n"); + printa(@large); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d.out new file mode 100644 index 000000000..08885515c --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.steps.d.out @@ -0,0 +1,2033 @@ +20 steps: + + + value ------------- Distribution ------------- count + < 1 | 0 + 1 | 1 + 2 | 1 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 8 | 1 + 9 | 1 + 10 |@@ 5 + 15 |@@ 5 + 20 |@@ 5 + 25 |@@ 5 + 30 |@@ 5 + 35 |@@ 5 + 40 |@@ 5 + 45 |@@ 5 + 50 |@@ 5 + 55 |@@ 5 + 60 |@@ 5 + 65 |@@ 5 + 70 |@@ 5 + 75 |@@ 5 + 80 |@@ 5 + 85 |@@ 5 + 90 |@@ 5 + 95 |@@ 5 + 100 |@ 2 + 150 | 0 + +100 steps: + + + value ------------- Distribution ------------- count + 9 | 0 + 10 | 1 + 11 | 0 + 12 | 0 + 13 | 0 + 14 | 0 + 15 | 0 + 16 | 0 + 17 | 0 + 18 | 0 + 19 | 0 + 20 | 1 + 21 | 0 + 22 | 0 + 23 | 0 + 24 | 0 + 25 | 0 + 26 | 0 + 27 | 0 + 28 | 0 + 29 | 0 + 30 | 1 + 31 | 0 + 32 | 0 + 33 | 0 + 34 | 0 + 35 | 0 + 36 | 0 + 37 | 0 + 38 | 0 + 39 | 0 + 40 | 1 + 41 | 0 + 42 | 0 + 43 | 0 + 44 | 0 + 45 | 0 + 46 | 0 + 47 | 0 + 48 | 0 + 49 | 0 + 50 | 1 + 51 | 0 + 52 | 0 + 53 | 0 + 54 | 0 + 55 | 0 + 56 | 0 + 57 | 0 + 58 | 0 + 59 | 0 + 60 | 1 + 61 | 0 + 62 | 0 + 63 | 0 + 64 | 0 + 65 | 0 + 66 | 0 + 67 | 0 + 68 | 0 + 69 | 0 + 70 | 1 + 71 | 0 + 72 | 0 + 73 | 0 + 74 | 0 + 75 | 0 + 76 | 0 + 77 | 0 + 78 | 0 + 79 | 0 + 80 | 1 + 81 | 0 + 82 | 0 + 83 | 0 + 84 | 0 + 85 | 0 + 86 | 0 + 87 | 0 + 88 | 0 + 89 | 0 + 90 | 1 + 91 | 0 + 92 | 0 + 93 | 0 + 94 | 0 + 95 | 0 + 96 | 0 + 97 | 0 + 98 | 0 + 99 | 0 + 100 | 1 + 110 | 1 + 120 | 1 + 130 | 1 + 140 | 1 + 150 | 1 + 160 | 1 + 170 | 1 + 180 | 1 + 190 | 1 + 200 | 1 + 210 | 1 + 220 | 1 + 230 | 1 + 240 | 1 + 250 | 1 + 260 | 1 + 270 | 1 + 280 | 1 + 290 | 1 + 300 | 1 + 310 | 1 + 320 | 1 + 330 | 1 + 340 | 1 + 350 | 1 + 360 | 1 + 370 | 1 + 380 | 1 + 390 | 1 + 400 | 1 + 410 | 1 + 420 | 1 + 430 | 1 + 440 | 1 + 450 | 1 + 460 | 1 + 470 | 1 + 480 | 1 + 490 | 1 + 500 | 1 + 510 | 1 + 520 | 1 + 530 | 1 + 540 | 1 + 550 | 1 + 560 | 1 + 570 | 1 + 580 | 1 + 590 | 1 + 600 | 1 + 610 | 1 + 620 | 1 + 630 | 1 + 640 | 1 + 650 | 1 + 660 | 1 + 670 | 1 + 680 | 1 + 690 | 1 + 700 | 1 + 710 | 1 + 720 | 1 + 730 | 1 + 740 | 1 + 750 | 1 + 760 | 1 + 770 | 1 + 780 | 1 + 790 | 1 + 800 | 1 + 810 | 1 + 820 | 1 + 830 | 1 + 840 | 1 + 850 | 1 + 860 | 1 + 870 | 1 + 880 | 1 + 890 | 1 + 900 | 1 + 910 | 1 + 920 | 1 + 930 | 1 + 940 | 1 + 950 | 1 + 960 | 1 + 970 | 1 + 980 | 1 + 990 | 1 + 1000 |@ 2 + 1100 | 0 + +1000 steps: + + + value ------------- Distribution ------------- count + 99 | 0 + 100 | 1 + 101 | 0 + 102 | 0 + 103 | 0 + 104 | 0 + 105 | 0 + 106 | 0 + 107 | 0 + 108 | 0 + 109 | 0 + 110 | 0 + 111 | 0 + 112 | 0 + 113 | 0 + 114 | 0 + 115 | 0 + 116 | 0 + 117 | 0 + 118 | 0 + 119 | 0 + 120 | 0 + 121 | 0 + 122 | 0 + 123 | 0 + 124 | 0 + 125 | 0 + 126 | 0 + 127 | 0 + 128 | 0 + 129 | 0 + 130 | 0 + 131 | 0 + 132 | 0 + 133 | 0 + 134 | 0 + 135 | 0 + 136 | 0 + 137 | 0 + 138 | 0 + 139 | 0 + 140 | 0 + 141 | 0 + 142 | 0 + 143 | 0 + 144 | 0 + 145 | 0 + 146 | 0 + 147 | 0 + 148 | 0 + 149 | 0 + 150 | 0 + 151 | 0 + 152 | 0 + 153 | 0 + 154 | 0 + 155 | 0 + 156 | 0 + 157 | 0 + 158 | 0 + 159 | 0 + 160 | 0 + 161 | 0 + 162 | 0 + 163 | 0 + 164 | 0 + 165 | 0 + 166 | 0 + 167 | 0 + 168 | 0 + 169 | 0 + 170 | 0 + 171 | 0 + 172 | 0 + 173 | 0 + 174 | 0 + 175 | 0 + 176 | 0 + 177 | 0 + 178 | 0 + 179 | 0 + 180 | 0 + 181 | 0 + 182 | 0 + 183 | 0 + 184 | 0 + 185 | 0 + 186 | 0 + 187 | 0 + 188 | 0 + 189 | 0 + 190 | 0 + 191 | 0 + 192 | 0 + 193 | 0 + 194 | 0 + 195 | 0 + 196 | 0 + 197 | 0 + 198 | 0 + 199 | 0 + 200 | 1 + 201 | 0 + 202 | 0 + 203 | 0 + 204 | 0 + 205 | 0 + 206 | 0 + 207 | 0 + 208 | 0 + 209 | 0 + 210 | 0 + 211 | 0 + 212 | 0 + 213 | 0 + 214 | 0 + 215 | 0 + 216 | 0 + 217 | 0 + 218 | 0 + 219 | 0 + 220 | 0 + 221 | 0 + 222 | 0 + 223 | 0 + 224 | 0 + 225 | 0 + 226 | 0 + 227 | 0 + 228 | 0 + 229 | 0 + 230 | 0 + 231 | 0 + 232 | 0 + 233 | 0 + 234 | 0 + 235 | 0 + 236 | 0 + 237 | 0 + 238 | 0 + 239 | 0 + 240 | 0 + 241 | 0 + 242 | 0 + 243 | 0 + 244 | 0 + 245 | 0 + 246 | 0 + 247 | 0 + 248 | 0 + 249 | 0 + 250 | 0 + 251 | 0 + 252 | 0 + 253 | 0 + 254 | 0 + 255 | 0 + 256 | 0 + 257 | 0 + 258 | 0 + 259 | 0 + 260 | 0 + 261 | 0 + 262 | 0 + 263 | 0 + 264 | 0 + 265 | 0 + 266 | 0 + 267 | 0 + 268 | 0 + 269 | 0 + 270 | 0 + 271 | 0 + 272 | 0 + 273 | 0 + 274 | 0 + 275 | 0 + 276 | 0 + 277 | 0 + 278 | 0 + 279 | 0 + 280 | 0 + 281 | 0 + 282 | 0 + 283 | 0 + 284 | 0 + 285 | 0 + 286 | 0 + 287 | 0 + 288 | 0 + 289 | 0 + 290 | 0 + 291 | 0 + 292 | 0 + 293 | 0 + 294 | 0 + 295 | 0 + 296 | 0 + 297 | 0 + 298 | 0 + 299 | 0 + 300 | 1 + 301 | 0 + 302 | 0 + 303 | 0 + 304 | 0 + 305 | 0 + 306 | 0 + 307 | 0 + 308 | 0 + 309 | 0 + 310 | 0 + 311 | 0 + 312 | 0 + 313 | 0 + 314 | 0 + 315 | 0 + 316 | 0 + 317 | 0 + 318 | 0 + 319 | 0 + 320 | 0 + 321 | 0 + 322 | 0 + 323 | 0 + 324 | 0 + 325 | 0 + 326 | 0 + 327 | 0 + 328 | 0 + 329 | 0 + 330 | 0 + 331 | 0 + 332 | 0 + 333 | 0 + 334 | 0 + 335 | 0 + 336 | 0 + 337 | 0 + 338 | 0 + 339 | 0 + 340 | 0 + 341 | 0 + 342 | 0 + 343 | 0 + 344 | 0 + 345 | 0 + 346 | 0 + 347 | 0 + 348 | 0 + 349 | 0 + 350 | 0 + 351 | 0 + 352 | 0 + 353 | 0 + 354 | 0 + 355 | 0 + 356 | 0 + 357 | 0 + 358 | 0 + 359 | 0 + 360 | 0 + 361 | 0 + 362 | 0 + 363 | 0 + 364 | 0 + 365 | 0 + 366 | 0 + 367 | 0 + 368 | 0 + 369 | 0 + 370 | 0 + 371 | 0 + 372 | 0 + 373 | 0 + 374 | 0 + 375 | 0 + 376 | 0 + 377 | 0 + 378 | 0 + 379 | 0 + 380 | 0 + 381 | 0 + 382 | 0 + 383 | 0 + 384 | 0 + 385 | 0 + 386 | 0 + 387 | 0 + 388 | 0 + 389 | 0 + 390 | 0 + 391 | 0 + 392 | 0 + 393 | 0 + 394 | 0 + 395 | 0 + 396 | 0 + 397 | 0 + 398 | 0 + 399 | 0 + 400 | 1 + 401 | 0 + 402 | 0 + 403 | 0 + 404 | 0 + 405 | 0 + 406 | 0 + 407 | 0 + 408 | 0 + 409 | 0 + 410 | 0 + 411 | 0 + 412 | 0 + 413 | 0 + 414 | 0 + 415 | 0 + 416 | 0 + 417 | 0 + 418 | 0 + 419 | 0 + 420 | 0 + 421 | 0 + 422 | 0 + 423 | 0 + 424 | 0 + 425 | 0 + 426 | 0 + 427 | 0 + 428 | 0 + 429 | 0 + 430 | 0 + 431 | 0 + 432 | 0 + 433 | 0 + 434 | 0 + 435 | 0 + 436 | 0 + 437 | 0 + 438 | 0 + 439 | 0 + 440 | 0 + 441 | 0 + 442 | 0 + 443 | 0 + 444 | 0 + 445 | 0 + 446 | 0 + 447 | 0 + 448 | 0 + 449 | 0 + 450 | 0 + 451 | 0 + 452 | 0 + 453 | 0 + 454 | 0 + 455 | 0 + 456 | 0 + 457 | 0 + 458 | 0 + 459 | 0 + 460 | 0 + 461 | 0 + 462 | 0 + 463 | 0 + 464 | 0 + 465 | 0 + 466 | 0 + 467 | 0 + 468 | 0 + 469 | 0 + 470 | 0 + 471 | 0 + 472 | 0 + 473 | 0 + 474 | 0 + 475 | 0 + 476 | 0 + 477 | 0 + 478 | 0 + 479 | 0 + 480 | 0 + 481 | 0 + 482 | 0 + 483 | 0 + 484 | 0 + 485 | 0 + 486 | 0 + 487 | 0 + 488 | 0 + 489 | 0 + 490 | 0 + 491 | 0 + 492 | 0 + 493 | 0 + 494 | 0 + 495 | 0 + 496 | 0 + 497 | 0 + 498 | 0 + 499 | 0 + 500 | 1 + 501 | 0 + 502 | 0 + 503 | 0 + 504 | 0 + 505 | 0 + 506 | 0 + 507 | 0 + 508 | 0 + 509 | 0 + 510 | 0 + 511 | 0 + 512 | 0 + 513 | 0 + 514 | 0 + 515 | 0 + 516 | 0 + 517 | 0 + 518 | 0 + 519 | 0 + 520 | 0 + 521 | 0 + 522 | 0 + 523 | 0 + 524 | 0 + 525 | 0 + 526 | 0 + 527 | 0 + 528 | 0 + 529 | 0 + 530 | 0 + 531 | 0 + 532 | 0 + 533 | 0 + 534 | 0 + 535 | 0 + 536 | 0 + 537 | 0 + 538 | 0 + 539 | 0 + 540 | 0 + 541 | 0 + 542 | 0 + 543 | 0 + 544 | 0 + 545 | 0 + 546 | 0 + 547 | 0 + 548 | 0 + 549 | 0 + 550 | 0 + 551 | 0 + 552 | 0 + 553 | 0 + 554 | 0 + 555 | 0 + 556 | 0 + 557 | 0 + 558 | 0 + 559 | 0 + 560 | 0 + 561 | 0 + 562 | 0 + 563 | 0 + 564 | 0 + 565 | 0 + 566 | 0 + 567 | 0 + 568 | 0 + 569 | 0 + 570 | 0 + 571 | 0 + 572 | 0 + 573 | 0 + 574 | 0 + 575 | 0 + 576 | 0 + 577 | 0 + 578 | 0 + 579 | 0 + 580 | 0 + 581 | 0 + 582 | 0 + 583 | 0 + 584 | 0 + 585 | 0 + 586 | 0 + 587 | 0 + 588 | 0 + 589 | 0 + 590 | 0 + 591 | 0 + 592 | 0 + 593 | 0 + 594 | 0 + 595 | 0 + 596 | 0 + 597 | 0 + 598 | 0 + 599 | 0 + 600 | 1 + 601 | 0 + 602 | 0 + 603 | 0 + 604 | 0 + 605 | 0 + 606 | 0 + 607 | 0 + 608 | 0 + 609 | 0 + 610 | 0 + 611 | 0 + 612 | 0 + 613 | 0 + 614 | 0 + 615 | 0 + 616 | 0 + 617 | 0 + 618 | 0 + 619 | 0 + 620 | 0 + 621 | 0 + 622 | 0 + 623 | 0 + 624 | 0 + 625 | 0 + 626 | 0 + 627 | 0 + 628 | 0 + 629 | 0 + 630 | 0 + 631 | 0 + 632 | 0 + 633 | 0 + 634 | 0 + 635 | 0 + 636 | 0 + 637 | 0 + 638 | 0 + 639 | 0 + 640 | 0 + 641 | 0 + 642 | 0 + 643 | 0 + 644 | 0 + 645 | 0 + 646 | 0 + 647 | 0 + 648 | 0 + 649 | 0 + 650 | 0 + 651 | 0 + 652 | 0 + 653 | 0 + 654 | 0 + 655 | 0 + 656 | 0 + 657 | 0 + 658 | 0 + 659 | 0 + 660 | 0 + 661 | 0 + 662 | 0 + 663 | 0 + 664 | 0 + 665 | 0 + 666 | 0 + 667 | 0 + 668 | 0 + 669 | 0 + 670 | 0 + 671 | 0 + 672 | 0 + 673 | 0 + 674 | 0 + 675 | 0 + 676 | 0 + 677 | 0 + 678 | 0 + 679 | 0 + 680 | 0 + 681 | 0 + 682 | 0 + 683 | 0 + 684 | 0 + 685 | 0 + 686 | 0 + 687 | 0 + 688 | 0 + 689 | 0 + 690 | 0 + 691 | 0 + 692 | 0 + 693 | 0 + 694 | 0 + 695 | 0 + 696 | 0 + 697 | 0 + 698 | 0 + 699 | 0 + 700 | 1 + 701 | 0 + 702 | 0 + 703 | 0 + 704 | 0 + 705 | 0 + 706 | 0 + 707 | 0 + 708 | 0 + 709 | 0 + 710 | 0 + 711 | 0 + 712 | 0 + 713 | 0 + 714 | 0 + 715 | 0 + 716 | 0 + 717 | 0 + 718 | 0 + 719 | 0 + 720 | 0 + 721 | 0 + 722 | 0 + 723 | 0 + 724 | 0 + 725 | 0 + 726 | 0 + 727 | 0 + 728 | 0 + 729 | 0 + 730 | 0 + 731 | 0 + 732 | 0 + 733 | 0 + 734 | 0 + 735 | 0 + 736 | 0 + 737 | 0 + 738 | 0 + 739 | 0 + 740 | 0 + 741 | 0 + 742 | 0 + 743 | 0 + 744 | 0 + 745 | 0 + 746 | 0 + 747 | 0 + 748 | 0 + 749 | 0 + 750 | 0 + 751 | 0 + 752 | 0 + 753 | 0 + 754 | 0 + 755 | 0 + 756 | 0 + 757 | 0 + 758 | 0 + 759 | 0 + 760 | 0 + 761 | 0 + 762 | 0 + 763 | 0 + 764 | 0 + 765 | 0 + 766 | 0 + 767 | 0 + 768 | 0 + 769 | 0 + 770 | 0 + 771 | 0 + 772 | 0 + 773 | 0 + 774 | 0 + 775 | 0 + 776 | 0 + 777 | 0 + 778 | 0 + 779 | 0 + 780 | 0 + 781 | 0 + 782 | 0 + 783 | 0 + 784 | 0 + 785 | 0 + 786 | 0 + 787 | 0 + 788 | 0 + 789 | 0 + 790 | 0 + 791 | 0 + 792 | 0 + 793 | 0 + 794 | 0 + 795 | 0 + 796 | 0 + 797 | 0 + 798 | 0 + 799 | 0 + 800 | 1 + 801 | 0 + 802 | 0 + 803 | 0 + 804 | 0 + 805 | 0 + 806 | 0 + 807 | 0 + 808 | 0 + 809 | 0 + 810 | 0 + 811 | 0 + 812 | 0 + 813 | 0 + 814 | 0 + 815 | 0 + 816 | 0 + 817 | 0 + 818 | 0 + 819 | 0 + 820 | 0 + 821 | 0 + 822 | 0 + 823 | 0 + 824 | 0 + 825 | 0 + 826 | 0 + 827 | 0 + 828 | 0 + 829 | 0 + 830 | 0 + 831 | 0 + 832 | 0 + 833 | 0 + 834 | 0 + 835 | 0 + 836 | 0 + 837 | 0 + 838 | 0 + 839 | 0 + 840 | 0 + 841 | 0 + 842 | 0 + 843 | 0 + 844 | 0 + 845 | 0 + 846 | 0 + 847 | 0 + 848 | 0 + 849 | 0 + 850 | 0 + 851 | 0 + 852 | 0 + 853 | 0 + 854 | 0 + 855 | 0 + 856 | 0 + 857 | 0 + 858 | 0 + 859 | 0 + 860 | 0 + 861 | 0 + 862 | 0 + 863 | 0 + 864 | 0 + 865 | 0 + 866 | 0 + 867 | 0 + 868 | 0 + 869 | 0 + 870 | 0 + 871 | 0 + 872 | 0 + 873 | 0 + 874 | 0 + 875 | 0 + 876 | 0 + 877 | 0 + 878 | 0 + 879 | 0 + 880 | 0 + 881 | 0 + 882 | 0 + 883 | 0 + 884 | 0 + 885 | 0 + 886 | 0 + 887 | 0 + 888 | 0 + 889 | 0 + 890 | 0 + 891 | 0 + 892 | 0 + 893 | 0 + 894 | 0 + 895 | 0 + 896 | 0 + 897 | 0 + 898 | 0 + 899 | 0 + 900 | 1 + 901 | 0 + 902 | 0 + 903 | 0 + 904 | 0 + 905 | 0 + 906 | 0 + 907 | 0 + 908 | 0 + 909 | 0 + 910 | 0 + 911 | 0 + 912 | 0 + 913 | 0 + 914 | 0 + 915 | 0 + 916 | 0 + 917 | 0 + 918 | 0 + 919 | 0 + 920 | 0 + 921 | 0 + 922 | 0 + 923 | 0 + 924 | 0 + 925 | 0 + 926 | 0 + 927 | 0 + 928 | 0 + 929 | 0 + 930 | 0 + 931 | 0 + 932 | 0 + 933 | 0 + 934 | 0 + 935 | 0 + 936 | 0 + 937 | 0 + 938 | 0 + 939 | 0 + 940 | 0 + 941 | 0 + 942 | 0 + 943 | 0 + 944 | 0 + 945 | 0 + 946 | 0 + 947 | 0 + 948 | 0 + 949 | 0 + 950 | 0 + 951 | 0 + 952 | 0 + 953 | 0 + 954 | 0 + 955 | 0 + 956 | 0 + 957 | 0 + 958 | 0 + 959 | 0 + 960 | 0 + 961 | 0 + 962 | 0 + 963 | 0 + 964 | 0 + 965 | 0 + 966 | 0 + 967 | 0 + 968 | 0 + 969 | 0 + 970 | 0 + 971 | 0 + 972 | 0 + 973 | 0 + 974 | 0 + 975 | 0 + 976 | 0 + 977 | 0 + 978 | 0 + 979 | 0 + 980 | 0 + 981 | 0 + 982 | 0 + 983 | 0 + 984 | 0 + 985 | 0 + 986 | 0 + 987 | 0 + 988 | 0 + 989 | 0 + 990 | 0 + 991 | 0 + 992 | 0 + 993 | 0 + 994 | 0 + 995 | 0 + 996 | 0 + 997 | 0 + 998 | 0 + 999 | 0 + 1000 | 1 + 1010 | 0 + 1020 | 0 + 1030 | 0 + 1040 | 0 + 1050 | 0 + 1060 | 0 + 1070 | 0 + 1080 | 0 + 1090 | 0 + 1100 | 1 + 1110 | 0 + 1120 | 0 + 1130 | 0 + 1140 | 0 + 1150 | 0 + 1160 | 0 + 1170 | 0 + 1180 | 0 + 1190 | 0 + 1200 | 1 + 1210 | 0 + 1220 | 0 + 1230 | 0 + 1240 | 0 + 1250 | 0 + 1260 | 0 + 1270 | 0 + 1280 | 0 + 1290 | 0 + 1300 | 1 + 1310 | 0 + 1320 | 0 + 1330 | 0 + 1340 | 0 + 1350 | 0 + 1360 | 0 + 1370 | 0 + 1380 | 0 + 1390 | 0 + 1400 | 1 + 1410 | 0 + 1420 | 0 + 1430 | 0 + 1440 | 0 + 1450 | 0 + 1460 | 0 + 1470 | 0 + 1480 | 0 + 1490 | 0 + 1500 | 1 + 1510 | 0 + 1520 | 0 + 1530 | 0 + 1540 | 0 + 1550 | 0 + 1560 | 0 + 1570 | 0 + 1580 | 0 + 1590 | 0 + 1600 | 1 + 1610 | 0 + 1620 | 0 + 1630 | 0 + 1640 | 0 + 1650 | 0 + 1660 | 0 + 1670 | 0 + 1680 | 0 + 1690 | 0 + 1700 | 1 + 1710 | 0 + 1720 | 0 + 1730 | 0 + 1740 | 0 + 1750 | 0 + 1760 | 0 + 1770 | 0 + 1780 | 0 + 1790 | 0 + 1800 | 1 + 1810 | 0 + 1820 | 0 + 1830 | 0 + 1840 | 0 + 1850 | 0 + 1860 | 0 + 1870 | 0 + 1880 | 0 + 1890 | 0 + 1900 | 1 + 1910 | 0 + 1920 | 0 + 1930 | 0 + 1940 | 0 + 1950 | 0 + 1960 | 0 + 1970 | 0 + 1980 | 0 + 1990 | 0 + 2000 | 1 + 2010 | 0 + 2020 | 0 + 2030 | 0 + 2040 | 0 + 2050 | 0 + 2060 | 0 + 2070 | 0 + 2080 | 0 + 2090 | 0 + 2100 | 1 + 2110 | 0 + 2120 | 0 + 2130 | 0 + 2140 | 0 + 2150 | 0 + 2160 | 0 + 2170 | 0 + 2180 | 0 + 2190 | 0 + 2200 | 1 + 2210 | 0 + 2220 | 0 + 2230 | 0 + 2240 | 0 + 2250 | 0 + 2260 | 0 + 2270 | 0 + 2280 | 0 + 2290 | 0 + 2300 | 1 + 2310 | 0 + 2320 | 0 + 2330 | 0 + 2340 | 0 + 2350 | 0 + 2360 | 0 + 2370 | 0 + 2380 | 0 + 2390 | 0 + 2400 | 1 + 2410 | 0 + 2420 | 0 + 2430 | 0 + 2440 | 0 + 2450 | 0 + 2460 | 0 + 2470 | 0 + 2480 | 0 + 2490 | 0 + 2500 | 1 + 2510 | 0 + 2520 | 0 + 2530 | 0 + 2540 | 0 + 2550 | 0 + 2560 | 0 + 2570 | 0 + 2580 | 0 + 2590 | 0 + 2600 | 1 + 2610 | 0 + 2620 | 0 + 2630 | 0 + 2640 | 0 + 2650 | 0 + 2660 | 0 + 2670 | 0 + 2680 | 0 + 2690 | 0 + 2700 | 1 + 2710 | 0 + 2720 | 0 + 2730 | 0 + 2740 | 0 + 2750 | 0 + 2760 | 0 + 2770 | 0 + 2780 | 0 + 2790 | 0 + 2800 | 1 + 2810 | 0 + 2820 | 0 + 2830 | 0 + 2840 | 0 + 2850 | 0 + 2860 | 0 + 2870 | 0 + 2880 | 0 + 2890 | 0 + 2900 | 1 + 2910 | 0 + 2920 | 0 + 2930 | 0 + 2940 | 0 + 2950 | 0 + 2960 | 0 + 2970 | 0 + 2980 | 0 + 2990 | 0 + 3000 | 1 + 3010 | 0 + 3020 | 0 + 3030 | 0 + 3040 | 0 + 3050 | 0 + 3060 | 0 + 3070 | 0 + 3080 | 0 + 3090 | 0 + 3100 | 1 + 3110 | 0 + 3120 | 0 + 3130 | 0 + 3140 | 0 + 3150 | 0 + 3160 | 0 + 3170 | 0 + 3180 | 0 + 3190 | 0 + 3200 | 1 + 3210 | 0 + 3220 | 0 + 3230 | 0 + 3240 | 0 + 3250 | 0 + 3260 | 0 + 3270 | 0 + 3280 | 0 + 3290 | 0 + 3300 | 1 + 3310 | 0 + 3320 | 0 + 3330 | 0 + 3340 | 0 + 3350 | 0 + 3360 | 0 + 3370 | 0 + 3380 | 0 + 3390 | 0 + 3400 | 1 + 3410 | 0 + 3420 | 0 + 3430 | 0 + 3440 | 0 + 3450 | 0 + 3460 | 0 + 3470 | 0 + 3480 | 0 + 3490 | 0 + 3500 | 1 + 3510 | 0 + 3520 | 0 + 3530 | 0 + 3540 | 0 + 3550 | 0 + 3560 | 0 + 3570 | 0 + 3580 | 0 + 3590 | 0 + 3600 | 1 + 3610 | 0 + 3620 | 0 + 3630 | 0 + 3640 | 0 + 3650 | 0 + 3660 | 0 + 3670 | 0 + 3680 | 0 + 3690 | 0 + 3700 | 1 + 3710 | 0 + 3720 | 0 + 3730 | 0 + 3740 | 0 + 3750 | 0 + 3760 | 0 + 3770 | 0 + 3780 | 0 + 3790 | 0 + 3800 | 1 + 3810 | 0 + 3820 | 0 + 3830 | 0 + 3840 | 0 + 3850 | 0 + 3860 | 0 + 3870 | 0 + 3880 | 0 + 3890 | 0 + 3900 | 1 + 3910 | 0 + 3920 | 0 + 3930 | 0 + 3940 | 0 + 3950 | 0 + 3960 | 0 + 3970 | 0 + 3980 | 0 + 3990 | 0 + 4000 | 1 + 4010 | 0 + 4020 | 0 + 4030 | 0 + 4040 | 0 + 4050 | 0 + 4060 | 0 + 4070 | 0 + 4080 | 0 + 4090 | 0 + 4100 | 1 + 4110 | 0 + 4120 | 0 + 4130 | 0 + 4140 | 0 + 4150 | 0 + 4160 | 0 + 4170 | 0 + 4180 | 0 + 4190 | 0 + 4200 | 1 + 4210 | 0 + 4220 | 0 + 4230 | 0 + 4240 | 0 + 4250 | 0 + 4260 | 0 + 4270 | 0 + 4280 | 0 + 4290 | 0 + 4300 | 1 + 4310 | 0 + 4320 | 0 + 4330 | 0 + 4340 | 0 + 4350 | 0 + 4360 | 0 + 4370 | 0 + 4380 | 0 + 4390 | 0 + 4400 | 1 + 4410 | 0 + 4420 | 0 + 4430 | 0 + 4440 | 0 + 4450 | 0 + 4460 | 0 + 4470 | 0 + 4480 | 0 + 4490 | 0 + 4500 | 1 + 4510 | 0 + 4520 | 0 + 4530 | 0 + 4540 | 0 + 4550 | 0 + 4560 | 0 + 4570 | 0 + 4580 | 0 + 4590 | 0 + 4600 | 1 + 4610 | 0 + 4620 | 0 + 4630 | 0 + 4640 | 0 + 4650 | 0 + 4660 | 0 + 4670 | 0 + 4680 | 0 + 4690 | 0 + 4700 | 1 + 4710 | 0 + 4720 | 0 + 4730 | 0 + 4740 | 0 + 4750 | 0 + 4760 | 0 + 4770 | 0 + 4780 | 0 + 4790 | 0 + 4800 | 1 + 4810 | 0 + 4820 | 0 + 4830 | 0 + 4840 | 0 + 4850 | 0 + 4860 | 0 + 4870 | 0 + 4880 | 0 + 4890 | 0 + 4900 | 1 + 4910 | 0 + 4920 | 0 + 4930 | 0 + 4940 | 0 + 4950 | 0 + 4960 | 0 + 4970 | 0 + 4980 | 0 + 4990 | 0 + 5000 | 1 + 5010 | 0 + 5020 | 0 + 5030 | 0 + 5040 | 0 + 5050 | 0 + 5060 | 0 + 5070 | 0 + 5080 | 0 + 5090 | 0 + 5100 | 1 + 5110 | 0 + 5120 | 0 + 5130 | 0 + 5140 | 0 + 5150 | 0 + 5160 | 0 + 5170 | 0 + 5180 | 0 + 5190 | 0 + 5200 | 1 + 5210 | 0 + 5220 | 0 + 5230 | 0 + 5240 | 0 + 5250 | 0 + 5260 | 0 + 5270 | 0 + 5280 | 0 + 5290 | 0 + 5300 | 1 + 5310 | 0 + 5320 | 0 + 5330 | 0 + 5340 | 0 + 5350 | 0 + 5360 | 0 + 5370 | 0 + 5380 | 0 + 5390 | 0 + 5400 | 1 + 5410 | 0 + 5420 | 0 + 5430 | 0 + 5440 | 0 + 5450 | 0 + 5460 | 0 + 5470 | 0 + 5480 | 0 + 5490 | 0 + 5500 | 1 + 5510 | 0 + 5520 | 0 + 5530 | 0 + 5540 | 0 + 5550 | 0 + 5560 | 0 + 5570 | 0 + 5580 | 0 + 5590 | 0 + 5600 | 1 + 5610 | 0 + 5620 | 0 + 5630 | 0 + 5640 | 0 + 5650 | 0 + 5660 | 0 + 5670 | 0 + 5680 | 0 + 5690 | 0 + 5700 | 1 + 5710 | 0 + 5720 | 0 + 5730 | 0 + 5740 | 0 + 5750 | 0 + 5760 | 0 + 5770 | 0 + 5780 | 0 + 5790 | 0 + 5800 | 1 + 5810 | 0 + 5820 | 0 + 5830 | 0 + 5840 | 0 + 5850 | 0 + 5860 | 0 + 5870 | 0 + 5880 | 0 + 5890 | 0 + 5900 | 1 + 5910 | 0 + 5920 | 0 + 5930 | 0 + 5940 | 0 + 5950 | 0 + 5960 | 0 + 5970 | 0 + 5980 | 0 + 5990 | 0 + 6000 | 1 + 6010 | 0 + 6020 | 0 + 6030 | 0 + 6040 | 0 + 6050 | 0 + 6060 | 0 + 6070 | 0 + 6080 | 0 + 6090 | 0 + 6100 | 1 + 6110 | 0 + 6120 | 0 + 6130 | 0 + 6140 | 0 + 6150 | 0 + 6160 | 0 + 6170 | 0 + 6180 | 0 + 6190 | 0 + 6200 | 1 + 6210 | 0 + 6220 | 0 + 6230 | 0 + 6240 | 0 + 6250 | 0 + 6260 | 0 + 6270 | 0 + 6280 | 0 + 6290 | 0 + 6300 | 1 + 6310 | 0 + 6320 | 0 + 6330 | 0 + 6340 | 0 + 6350 | 0 + 6360 | 0 + 6370 | 0 + 6380 | 0 + 6390 | 0 + 6400 | 1 + 6410 | 0 + 6420 | 0 + 6430 | 0 + 6440 | 0 + 6450 | 0 + 6460 | 0 + 6470 | 0 + 6480 | 0 + 6490 | 0 + 6500 | 1 + 6510 | 0 + 6520 | 0 + 6530 | 0 + 6540 | 0 + 6550 | 0 + 6560 | 0 + 6570 | 0 + 6580 | 0 + 6590 | 0 + 6600 | 1 + 6610 | 0 + 6620 | 0 + 6630 | 0 + 6640 | 0 + 6650 | 0 + 6660 | 0 + 6670 | 0 + 6680 | 0 + 6690 | 0 + 6700 | 1 + 6710 | 0 + 6720 | 0 + 6730 | 0 + 6740 | 0 + 6750 | 0 + 6760 | 0 + 6770 | 0 + 6780 | 0 + 6790 | 0 + 6800 | 1 + 6810 | 0 + 6820 | 0 + 6830 | 0 + 6840 | 0 + 6850 | 0 + 6860 | 0 + 6870 | 0 + 6880 | 0 + 6890 | 0 + 6900 | 1 + 6910 | 0 + 6920 | 0 + 6930 | 0 + 6940 | 0 + 6950 | 0 + 6960 | 0 + 6970 | 0 + 6980 | 0 + 6990 | 0 + 7000 | 1 + 7010 | 0 + 7020 | 0 + 7030 | 0 + 7040 | 0 + 7050 | 0 + 7060 | 0 + 7070 | 0 + 7080 | 0 + 7090 | 0 + 7100 | 1 + 7110 | 0 + 7120 | 0 + 7130 | 0 + 7140 | 0 + 7150 | 0 + 7160 | 0 + 7170 | 0 + 7180 | 0 + 7190 | 0 + 7200 | 1 + 7210 | 0 + 7220 | 0 + 7230 | 0 + 7240 | 0 + 7250 | 0 + 7260 | 0 + 7270 | 0 + 7280 | 0 + 7290 | 0 + 7300 | 1 + 7310 | 0 + 7320 | 0 + 7330 | 0 + 7340 | 0 + 7350 | 0 + 7360 | 0 + 7370 | 0 + 7380 | 0 + 7390 | 0 + 7400 | 1 + 7410 | 0 + 7420 | 0 + 7430 | 0 + 7440 | 0 + 7450 | 0 + 7460 | 0 + 7470 | 0 + 7480 | 0 + 7490 | 0 + 7500 | 1 + 7510 | 0 + 7520 | 0 + 7530 | 0 + 7540 | 0 + 7550 | 0 + 7560 | 0 + 7570 | 0 + 7580 | 0 + 7590 | 0 + 7600 | 1 + 7610 | 0 + 7620 | 0 + 7630 | 0 + 7640 | 0 + 7650 | 0 + 7660 | 0 + 7670 | 0 + 7680 | 0 + 7690 | 0 + 7700 | 1 + 7710 | 0 + 7720 | 0 + 7730 | 0 + 7740 | 0 + 7750 | 0 + 7760 | 0 + 7770 | 0 + 7780 | 0 + 7790 | 0 + 7800 | 1 + 7810 | 0 + 7820 | 0 + 7830 | 0 + 7840 | 0 + 7850 | 0 + 7860 | 0 + 7870 | 0 + 7880 | 0 + 7890 | 0 + 7900 | 1 + 7910 | 0 + 7920 | 0 + 7930 | 0 + 7940 | 0 + 7950 | 0 + 7960 | 0 + 7970 | 0 + 7980 | 0 + 7990 | 0 + 8000 | 1 + 8010 | 0 + 8020 | 0 + 8030 | 0 + 8040 | 0 + 8050 | 0 + 8060 | 0 + 8070 | 0 + 8080 | 0 + 8090 | 0 + 8100 | 1 + 8110 | 0 + 8120 | 0 + 8130 | 0 + 8140 | 0 + 8150 | 0 + 8160 | 0 + 8170 | 0 + 8180 | 0 + 8190 | 0 + 8200 | 1 + 8210 | 0 + 8220 | 0 + 8230 | 0 + 8240 | 0 + 8250 | 0 + 8260 | 0 + 8270 | 0 + 8280 | 0 + 8290 | 0 + 8300 | 1 + 8310 | 0 + 8320 | 0 + 8330 | 0 + 8340 | 0 + 8350 | 0 + 8360 | 0 + 8370 | 0 + 8380 | 0 + 8390 | 0 + 8400 | 1 + 8410 | 0 + 8420 | 0 + 8430 | 0 + 8440 | 0 + 8450 | 0 + 8460 | 0 + 8470 | 0 + 8480 | 0 + 8490 | 0 + 8500 | 1 + 8510 | 0 + 8520 | 0 + 8530 | 0 + 8540 | 0 + 8550 | 0 + 8560 | 0 + 8570 | 0 + 8580 | 0 + 8590 | 0 + 8600 | 1 + 8610 | 0 + 8620 | 0 + 8630 | 0 + 8640 | 0 + 8650 | 0 + 8660 | 0 + 8670 | 0 + 8680 | 0 + 8690 | 0 + 8700 | 1 + 8710 | 0 + 8720 | 0 + 8730 | 0 + 8740 | 0 + 8750 | 0 + 8760 | 0 + 8770 | 0 + 8780 | 0 + 8790 | 0 + 8800 | 1 + 8810 | 0 + 8820 | 0 + 8830 | 0 + 8840 | 0 + 8850 | 0 + 8860 | 0 + 8870 | 0 + 8880 | 0 + 8890 | 0 + 8900 | 1 + 8910 | 0 + 8920 | 0 + 8930 | 0 + 8940 | 0 + 8950 | 0 + 8960 | 0 + 8970 | 0 + 8980 | 0 + 8990 | 0 + 9000 | 1 + 9010 | 0 + 9020 | 0 + 9030 | 0 + 9040 | 0 + 9050 | 0 + 9060 | 0 + 9070 | 0 + 9080 | 0 + 9090 | 0 + 9100 | 1 + 9110 | 0 + 9120 | 0 + 9130 | 0 + 9140 | 0 + 9150 | 0 + 9160 | 0 + 9170 | 0 + 9180 | 0 + 9190 | 0 + 9200 | 1 + 9210 | 0 + 9220 | 0 + 9230 | 0 + 9240 | 0 + 9250 | 0 + 9260 | 0 + 9270 | 0 + 9280 | 0 + 9290 | 0 + 9300 | 1 + 9310 | 0 + 9320 | 0 + 9330 | 0 + 9340 | 0 + 9350 | 0 + 9360 | 0 + 9370 | 0 + 9380 | 0 + 9390 | 0 + 9400 | 1 + 9410 | 0 + 9420 | 0 + 9430 | 0 + 9440 | 0 + 9450 | 0 + 9460 | 0 + 9470 | 0 + 9480 | 0 + 9490 | 0 + 9500 | 1 + 9510 | 0 + 9520 | 0 + 9530 | 0 + 9540 | 0 + 9550 | 0 + 9560 | 0 + 9570 | 0 + 9580 | 0 + 9590 | 0 + 9600 | 1 + 9610 | 0 + 9620 | 0 + 9630 | 0 + 9640 | 0 + 9650 | 0 + 9660 | 0 + 9670 | 0 + 9680 | 0 + 9690 | 0 + 9700 | 1 + 9710 | 0 + 9720 | 0 + 9730 | 0 + 9740 | 0 + 9750 | 0 + 9760 | 0 + 9770 | 0 + 9780 | 0 + 9790 | 0 + 9800 | 1 + 9810 | 0 + 9820 | 0 + 9830 | 0 + 9840 | 0 + 9850 | 0 + 9860 | 0 + 9870 | 0 + 9880 | 0 + 9890 | 0 + 9900 | 1 + 9910 | 0 + 9920 | 0 + 9930 | 0 + 9940 | 0 + 9950 | 0 + 9960 | 0 + 9970 | 0 + 9980 | 0 + 9990 | 0 + 10000 | 1 + 10100 | 1 + 10200 | 0 + + diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d new file mode 100644 index 000000000..e3db03002 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d @@ -0,0 +1,49 @@ +/* + * 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 usr/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 (c) 2011, Joyent, Inc. All rights reserved. + */ + +#pragma D option quiet + +int i; + +tick-10ms +/i < 100/ +{ + @[i] = llquantize(i, 10, 1, 2, 10, 150); + @[i] = llquantize(i + 1, 10, 1, 2, 10, 150); + @[i] = llquantize(i + 2, 10, 1, 2, 10, 150); + @[i] = llquantize(i + 3, 10, 1, 2, 10, 150); + i++; +} + +tick-10ms +/i == 100/ +{ + exit(0); +} + +END +{ + trunc(@, 5); +} diff --git a/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d.out b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d.out new file mode 100644 index 000000000..941c62679 --- /dev/null +++ b/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/llquantize/tst.trunc.d.out @@ -0,0 +1,34 @@ + + 95 + value ------------- Distribution ------------- count + 80 | 0 + 90 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 600 + 100 | 0 + + 96 + value ------------- Distribution ------------- count + 80 | 0 + 90 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 600 + 100 | 0 + + 97 + value ------------- Distribution ------------- count + 80 | 0 + 90 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 450 + 100 |@@@@@@@@@@ 150 + 200 | 0 + + 98 + value ------------- Distribution ------------- count + 80 | 0 + 90 |@@@@@@@@@@@@@@@@@@@@ 300 + 100 |@@@@@@@@@@@@@@@@@@@@ 300 + 200 | 0 + + 99 + value ------------- Distribution ------------- count + 80 | 0 + 90 |@@@@@@@@@@ 150 + 100 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 450 + 200 | 0 + diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c index f6c9622c6..42b66458d 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c @@ -24,7 +24,9 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" +/* + * Copyright (c) 2011, Joyent, Inc. All rights reserved. + */ #include #include @@ -209,6 +211,83 @@ dt_aggregate_lquantizedcmp(int64_t *lhs, int64_t *rhs) return (0); } +static void +dt_aggregate_llquantize(int64_t *existing, int64_t *new, size_t size) +{ + int i; + + for (i = 1; i < size / sizeof (int64_t); i++) + existing[i] = existing[i] + new[i]; +} + +static long double +dt_aggregate_llquantizedsum(int64_t *llquanta) +{ + int64_t arg = *llquanta++; + uint16_t factor = DTRACE_LLQUANTIZE_FACTOR(arg); + uint16_t low = DTRACE_LLQUANTIZE_LOW(arg); + uint16_t high = DTRACE_LLQUANTIZE_HIGH(arg); + uint16_t nsteps = DTRACE_LLQUANTIZE_NSTEP(arg); + int bin = 0, order; + int64_t value = 1, next, step; + long double total; + + assert(nsteps >= factor); + assert(nsteps % factor == 0); + + for (order = 0; order < low; order++) + value *= factor; + + total = (long double)llquanta[bin++] * (long double)(value - 1); + + next = value * factor; + step = next > nsteps ? next / nsteps : 1; + + while (order <= high) { + assert(value < next); + total += (long double)llquanta[bin++] * (long double)(value); + + if ((value += step) != next) + continue; + + next = value * factor; + step = next > nsteps ? next / nsteps : 1; + order++; + } + + return (total + (long double)llquanta[bin] * (long double)value); +} + +static int +dt_aggregate_llquantizedcmp(int64_t *lhs, int64_t *rhs) +{ + long double lsum = dt_aggregate_llquantizedsum(lhs); + long double rsum = dt_aggregate_llquantizedsum(rhs); + int64_t lzero, rzero; + + if (lsum < rsum) + return (DT_LESSTHAN); + + if (lsum > rsum) + return (DT_GREATERTHAN); + + /* + * If they're both equal, then we will compare based on the weights at + * zero. If the weights at zero are equal, then this will be judged a + * tie and will be resolved based on the key comparison. + */ + lzero = lhs[1]; + rzero = rhs[1]; + + if (lzero < rzero) + return (DT_LESSTHAN); + + if (lzero > rzero) + return (DT_GREATERTHAN); + + return (0); +} + static int dt_aggregate_quantizedcmp(int64_t *lhs, int64_t *rhs) { @@ -592,6 +671,10 @@ hashnext: h->dtahe_aggregate = dt_aggregate_lquantize; break; + case DTRACEAGG_LLQUANTIZE: + h->dtahe_aggregate = dt_aggregate_llquantize; + break; + case DTRACEAGG_COUNT: case DTRACEAGG_SUM: case DTRACEAGG_AVG: @@ -859,6 +942,10 @@ dt_aggregate_valcmp(const void *lhs, const void *rhs) rval = dt_aggregate_lquantizedcmp(laddr, raddr); break; + case DTRACEAGG_LLQUANTIZE: + rval = dt_aggregate_llquantizedcmp(laddr, raddr); + break; + case DTRACEAGG_COUNT: case DTRACEAGG_SUM: case DTRACEAGG_MIN: diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c index 5250641b5..671475706 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c @@ -82,6 +82,7 @@ #include #include +#include #include #include @@ -1369,6 +1370,146 @@ dt_compile_agg(dtrace_hdl_t *dtp, dt_node_t *dnp, dtrace_stmtdesc_t *sdp) argmax = 5; } + if (fid->di_id == DTRACEAGG_LLQUANTIZE) { + /* + * For log/linear quantizations, we have between one and five + * arguments in addition to the expression: + * + * arg1 => Factor + * arg2 => Low magnitude + * arg3 => High magnitude + * arg4 => Number of steps per magnitude + * arg5 => Quantization increment value (defaults to 1) + */ + dt_node_t *llarg = dnp->dn_aggfun->dn_args->dn_list; + uint64_t oarg, order, v; + dt_idsig_t *isp; + int i; + + struct { + char *str; /* string identifier */ + int badtype; /* error on bad type */ + int badval; /* error on bad value */ + int mismatch; /* error on bad match */ + int shift; /* shift value */ + uint16_t value; /* value itself */ + } args[] = { + { "factor", D_LLQUANT_FACTORTYPE, + D_LLQUANT_FACTORVAL, D_LLQUANT_FACTORMATCH, + DTRACE_LLQUANTIZE_FACTORSHIFT }, + { "low magnitude", D_LLQUANT_LOWTYPE, + D_LLQUANT_LOWVAL, D_LLQUANT_LOWMATCH, + DTRACE_LLQUANTIZE_LOWSHIFT }, + { "high magnitude", D_LLQUANT_HIGHTYPE, + D_LLQUANT_HIGHVAL, D_LLQUANT_HIGHMATCH, + DTRACE_LLQUANTIZE_HIGHSHIFT }, + { "linear steps per magnitude", D_LLQUANT_NSTEPTYPE, + D_LLQUANT_NSTEPVAL, D_LLQUANT_NSTEPMATCH, + DTRACE_LLQUANTIZE_NSTEPSHIFT }, + { NULL } + }; + + assert(arg == 0); + + for (i = 0; args[i].str != NULL; i++) { + if (llarg->dn_kind != DT_NODE_INT) { + dnerror(llarg, args[i].badtype, "llquantize( ) " + "argument #%d (%s) must be an " + "integer constant\n", i + 1, args[i].str); + } + + if ((uint64_t)llarg->dn_value > UINT16_MAX) { + dnerror(llarg, args[i].badval, "llquantize( ) " + "argument #%d (%s) must be an unsigned " + "16-bit quantity\n", i + 1, args[i].str); + } + + args[i].value = (uint16_t)llarg->dn_value; + + assert(!(arg & ((uint64_t)UINT16_MAX << + args[i].shift))); + arg |= ((uint64_t)args[i].value << args[i].shift); + llarg = llarg->dn_list; + } + + assert(arg != 0); + + if (args[0].value < 2) { + dnerror(dnp, D_LLQUANT_FACTORSMALL, "llquantize( ) " + "factor (argument #1) must be two or more\n"); + } + + if (args[1].value >= args[2].value) { + dnerror(dnp, D_LLQUANT_MAGRANGE, "llquantize( ) " + "high magnitude (argument #3) must be greater " + "than low magnitude (argument #2)\n"); + } + + if (args[3].value < args[0].value) { + dnerror(dnp, D_LLQUANT_FACTORNSTEPS, "llquantize( ) " + "factor (argument #1) must be less than or " + "equal to the number of linear steps per " + "magnitude (argument #4)\n"); + } + + for (v = args[0].value; v < args[3].value; v *= args[0].value) + continue; + + if ((args[3].value % args[0].value) || (v % args[3].value)) { + dnerror(dnp, D_LLQUANT_FACTOREVEN, "llquantize( ) " + "factor (argument #1) must evenly divide the " + "number of steps per magnitude (argument #4), " + "and the number of steps per magnitude must evenly " + "divide a power of the factor\n"); + } + + for (i = 0, order = 1; i < args[2].value; i++) { + if (order * args[0].value > order) { + order *= args[0].value; + continue; + } + + dnerror(dnp, D_LLQUANT_MAGTOOBIG, "llquantize( ) " + "factor (%d) raised to power of high magnitude " + "(%d) overflows 64-bits\n", args[0].value, + args[2].value); + } + + isp = (dt_idsig_t *)aid->di_data; + + if (isp->dis_auxinfo == 0) { + /* + * This is the first time we've seen an llquantize() + * for this aggregation; we'll store our argument + * as the auxiliary signature information. + */ + isp->dis_auxinfo = arg; + } else if ((oarg = isp->dis_auxinfo) != arg) { + /* + * If we have seen this llquantize() before and the + * argument doesn't match the original argument, pick + * the original argument apart to concisely report the + * mismatch. + */ + int expected = 0, found = 0; + + for (i = 0; expected == found; i++) { + assert(args[i].str != NULL); + + expected = (oarg >> args[i].shift) & UINT16_MAX; + found = (arg >> args[i].shift) & UINT16_MAX; + } + + dnerror(dnp, args[i - 1].mismatch, "llquantize( ) " + "%s (argument #%d) doesn't match previous " + "declaration: expected %d, found %d\n", + args[i - 1].str, i, expected, found); + } + + incr = llarg; + argmax = 6; + } + if (fid->di_id == DTRACEAGG_QUANTIZE) { incr = dnp->dn_aggfun->dn_args->dn_list; argmax = 2; diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c index 911478ee0..a273791b7 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c @@ -23,6 +23,10 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2011, Joyent, Inc. All rights reserved. + */ + #include #include #include @@ -686,6 +690,121 @@ dt_print_lquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr, return (0); } +int +dt_print_llquantize(dtrace_hdl_t *dtp, FILE *fp, const void *addr, + size_t size, uint64_t normal) +{ + int i, first_bin, last_bin, bin = 1, order, levels; + uint16_t factor, low, high, nsteps; + const int64_t *data = addr; + int64_t value = 1, next, step; + char positives = 0, negatives = 0; + long double total = 0; + uint64_t arg; + char c[32]; + + if (size < sizeof (uint64_t)) + return (dt_set_errno(dtp, EDT_DMISMATCH)); + + arg = *data++; + size -= sizeof (uint64_t); + + factor = DTRACE_LLQUANTIZE_FACTOR(arg); + low = DTRACE_LLQUANTIZE_LOW(arg); + high = DTRACE_LLQUANTIZE_HIGH(arg); + nsteps = DTRACE_LLQUANTIZE_NSTEP(arg); + + /* + * We don't expect to be handed invalid llquantize() parameters here, + * but sanity check them (to a degree) nonetheless. + */ + if (size > INT32_MAX || factor < 2 || low >= high || + nsteps == 0 || factor > nsteps) + return (dt_set_errno(dtp, EDT_DMISMATCH)); + + levels = (int)size / sizeof (uint64_t); + + first_bin = 0; + last_bin = levels - 1; + + while (first_bin < levels && data[first_bin] == 0) + first_bin++; + + if (first_bin == levels) { + first_bin = 0; + last_bin = 1; + } else { + if (first_bin > 0) + first_bin--; + + while (last_bin > 0 && data[last_bin] == 0) + last_bin--; + + if (last_bin < levels - 1) + last_bin++; + } + + for (i = first_bin; i <= last_bin; i++) { + positives |= (data[i] > 0); + negatives |= (data[i] < 0); + total += dt_fabsl((long double)data[i]); + } + + if (dt_printf(dtp, fp, "\n%16s %41s %-9s\n", "value", + "------------- Distribution -------------", "count") < 0) + return (-1); + + for (order = 0; order < low; order++) + value *= factor; + + next = value * factor; + step = next > nsteps ? next / nsteps : 1; + + if (first_bin == 0) { + (void) snprintf(c, sizeof (c), "< %lld", (long long)value); + + if (dt_printf(dtp, fp, "%16s ", c) < 0) + return (-1); + + if (dt_print_quantline(dtp, fp, data[0], normal, + total, positives, negatives) < 0) + return (-1); + } + + while (order <= high) { + if (bin >= first_bin && bin <= last_bin) { + if (dt_printf(dtp, fp, "%16lld ", (long long)value) < 0) + return (-1); + + if (dt_print_quantline(dtp, fp, data[bin], + normal, total, positives, negatives) < 0) + return (-1); + } + + assert(value < next); + bin++; + + if ((value += step) != next) + continue; + + next = value * factor; + step = next > nsteps ? next / nsteps : 1; + order++; + } + + if (last_bin < bin) + return (0); + + assert(last_bin == bin); + (void) snprintf(c, sizeof (c), ">= %lld", value); + + if (dt_printf(dtp, fp, "%16s ", c) < 0) + return (-1); + + return (dt_print_quantline(dtp, fp, data[bin], normal, + total, positives, negatives)); +} + /*ARGSUSED*/ static int dt_print_average(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr, @@ -1710,6 +1829,9 @@ dt_print_datum(dtrace_hdl_t *dtp, FILE *fp, dtrace_recdesc_t *rec, case DTRACEAGG_LQUANTIZE: return (dt_print_lquantize(dtp, fp, addr, size, normal)); + case DTRACEAGG_LLQUANTIZE: + return (dt_print_llquantize(dtp, fp, addr, size, normal)); + case DTRACEAGG_AVG: return (dt_print_average(dtp, fp, addr, size, normal)); diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h index 62f955505..8495f1584 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h @@ -236,6 +236,23 @@ typedef enum { D_LQUANT_MATCHBASE, /* lquantize() mismatch on base */ D_LQUANT_MATCHLIM, /* lquantize() mismatch on limit */ D_LQUANT_MATCHSTEP, /* lquantize() mismatch on step */ + D_LLQUANT_FACTORTYPE, /* llquantize() bad magnitude type */ + D_LLQUANT_FACTORVAL, /* llquantize() bad magnitude value */ + D_LLQUANT_FACTORMATCH, /* llquantize() mismatch on magnitude */ + D_LLQUANT_LOWTYPE, /* llquantize() bad low mag type */ + D_LLQUANT_LOWVAL, /* llquantize() bad low mag value */ + D_LLQUANT_LOWMATCH, /* llquantize() mismatch on low mag */ + D_LLQUANT_HIGHTYPE, /* llquantize() bad high mag type */ + D_LLQUANT_HIGHVAL, /* llquantize() bad high mag value */ + D_LLQUANT_HIGHMATCH, /* llquantize() mismatch on high mag */ + D_LLQUANT_NSTEPTYPE, /* llquantize() bad # steps type */ + D_LLQUANT_NSTEPVAL, /* llquantize() bad # steps value */ + D_LLQUANT_NSTEPMATCH, /* llquantize() mismatch on # steps */ + D_LLQUANT_MAGRANGE, /* llquantize() bad magnitude range */ + D_LLQUANT_FACTORNSTEPS, /* llquantize() # steps < factor */ + D_LLQUANT_FACTOREVEN, /* llquantize() bad # steps/factor */ + D_LLQUANT_FACTORSMALL, /* llquantize() magnitude too small */ + D_LLQUANT_MAGTOOBIG, /* llquantize() high mag too large */ D_PRINTM_ADDR, /* printm() memref bad type */ D_PRINTM_SIZE, /* printm() size bad type */ D_PRINTT_ADDR, /* printt() typeref bad type */ diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h index bfdaecd0b..99498d9fd 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h @@ -24,6 +24,10 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2011, Joyent, Inc. All rights reserved. + */ + #ifndef _DT_IMPL_H #define _DT_IMPL_H @@ -641,6 +645,8 @@ extern int dt_print_quantize(dtrace_hdl_t *, FILE *, const void *, size_t, uint64_t); extern int dt_print_lquantize(dtrace_hdl_t *, FILE *, const void *, size_t, uint64_t); +extern int dt_print_llquantize(dtrace_hdl_t *, FILE *, + const void *, size_t, uint64_t); extern int dt_print_agg(const dtrace_aggdata_t *, void *); extern int dt_handle(dtrace_hdl_t *, dtrace_probedata_t *); diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c index e77952d4d..c2d817a79 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_open.c @@ -21,6 +21,7 @@ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, Joyent, Inc. All rights reserved. */ #include @@ -114,8 +115,9 @@ #define DT_VERS_1_6_1 DT_VERSION_NUMBER(1, 6, 1) #define DT_VERS_1_6_2 DT_VERSION_NUMBER(1, 6, 2) #define DT_VERS_1_6_3 DT_VERSION_NUMBER(1, 6, 3) -#define DT_VERS_LATEST DT_VERS_1_6_3 -#define DT_VERS_STRING "Sun D 1.6.3" +#define DT_VERS_1_7 DT_VERSION_NUMBER(1, 7, 0) +#define DT_VERS_LATEST DT_VERS_1_7 +#define DT_VERS_STRING "Sun D 1.7" const dt_version_t _dtrace_versions[] = { DT_VERS_1_0, /* D API 1.0.0 (PSARC 2001/466) Solaris 10 FCS */ @@ -131,6 +133,7 @@ const dt_version_t _dtrace_versions[] = { DT_VERS_1_6_1, /* D API 1.6.1 */ DT_VERS_1_6_2, /* D API 1.6.2 */ DT_VERS_1_6_3, /* D API 1.6.3 */ + DT_VERS_1_7, /* D API 1.7 */ 0 }; @@ -287,6 +290,9 @@ static const dt_ident_t _dtrace_globals[] = { &dt_idops_func, "stack(...)" }, { "lltostr", DT_IDENT_FUNC, 0, DIF_SUBR_LLTOSTR, DT_ATTR_STABCMN, DT_VERS_1_0, &dt_idops_func, "string(int64_t)" }, +{ "llquantize", DT_IDENT_AGGFUNC, 0, DTRACEAGG_LLQUANTIZE, DT_ATTR_STABCMN, + DT_VERS_1_7, &dt_idops_func, + "void(@, int32_t, int32_t, int32_t, int32_t, ...)" }, { "lquantize", DT_IDENT_AGGFUNC, 0, DTRACEAGG_LQUANTIZE, DT_ATTR_STABCMN, DT_VERS_1_0, &dt_idops_func, "void(@, int32_t, int32_t, ...)" }, diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_printf.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_printf.c index 2619818b5..51f87b03f 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_printf.c +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_printf.c @@ -21,6 +21,7 @@ /* * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, Joyent, Inc. All rights reserved. */ #if defined(sun) @@ -1322,6 +1323,14 @@ pfprint_lquantize(dtrace_hdl_t *dtp, FILE *fp, const char *format, return (dt_print_lquantize(dtp, fp, addr, size, normal)); } +/*ARGSUSED*/ +static int +pfprint_llquantize(dtrace_hdl_t *dtp, FILE *fp, const char *format, + const dt_pfargd_t *pfd, const void *addr, size_t size, uint64_t normal) +{ + return (dt_print_llquantize(dtp, fp, addr, size, normal)); +} + static int dt_printf_format(dtrace_hdl_t *dtp, FILE *fp, const dt_pfargv_t *pfv, const dtrace_recdesc_t *recs, uint_t nrecs, const void *buf, @@ -1507,6 +1516,9 @@ dt_printf_format(dtrace_hdl_t *dtp, FILE *fp, const dt_pfargv_t *pfv, case DTRACEAGG_LQUANTIZE: func = pfprint_lquantize; break; + case DTRACEAGG_LLQUANTIZE: + func = pfprint_llquantize; + break; case DTRACEACT_MOD: func = pfprint_mod; break; diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dtrace.h b/cddl/contrib/opensolaris/lib/libdtrace/common/dtrace.h index 13c27765b..eb5ab43b1 100644 --- a/cddl/contrib/opensolaris/lib/libdtrace/common/dtrace.h +++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dtrace.h @@ -24,11 +24,13 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2011, Joyent, Inc. All rights reserved. + */ + #ifndef _DTRACE_H #define _DTRACE_H -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c index 822eeee83..cee8c2950 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c +++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c @@ -1913,6 +1913,75 @@ dtrace_aggregate_lquantize(uint64_t *lquanta, uint64_t nval, uint64_t incr) lquanta[levels + 1] += incr; } +static int +dtrace_aggregate_llquantize_bucket(uint16_t factor, uint16_t low, + uint16_t high, uint16_t nsteps, int64_t value) +{ + int64_t this = 1, last, next; + int base = 1, order; + + ASSERT(factor <= nsteps); + ASSERT(nsteps % factor == 0); + + for (order = 0; order < low; order++) + this *= factor; + + /* + * If our value is less than our factor taken to the power of the + * low order of magnitude, it goes into the zeroth bucket. + */ + if (value < (last = this)) + return (0); + + for (this *= factor; order <= high; order++) { + int nbuckets = this > nsteps ? nsteps : this; + + if ((next = this * factor) < this) { + /* + * We should not generally get log/linear quantizations + * with a high magnitude that allows 64-bits to + * overflow, but we nonetheless protect against this + * by explicitly checking for overflow, and clamping + * our value accordingly. + */ + value = this - 1; + } + + if (value < this) { + /* + * If our value lies within this order of magnitude, + * determine its position by taking the offset within + * the order of magnitude, dividing by the bucket + * width, and adding to our (accumulated) base. + */ + return (base + (value - last) / (this / nbuckets)); + } + + base += nbuckets - (nbuckets / factor); + last = this; + this = next; + } + + /* + * Our value is greater than or equal to our factor taken to the + * power of one plus the high magnitude -- return the top bucket. + */ + return (base); +} + +static void +dtrace_aggregate_llquantize(uint64_t *llquanta, uint64_t nval, uint64_t incr) +{ + uint64_t arg = *llquanta++; + uint16_t factor = DTRACE_LLQUANTIZE_FACTOR(arg); + uint16_t low = DTRACE_LLQUANTIZE_LOW(arg); + uint16_t high = DTRACE_LLQUANTIZE_HIGH(arg); + uint16_t nsteps = DTRACE_LLQUANTIZE_NSTEP(arg); + + llquanta[dtrace_aggregate_llquantize_bucket(factor, + low, high, nsteps, nval)] += incr; +} + /*ARGSUSED*/ static void dtrace_aggregate_avg(uint64_t *data, uint64_t nval, uint64_t arg) @@ -9853,6 +9922,35 @@ dtrace_ecb_aggregation_create(dtrace_ecb_t *ecb, dtrace_actdesc_t *desc) break; } + case DTRACEAGG_LLQUANTIZE: { + uint16_t factor = DTRACE_LLQUANTIZE_FACTOR(desc->dtad_arg); + uint16_t low = DTRACE_LLQUANTIZE_LOW(desc->dtad_arg); + uint16_t high = DTRACE_LLQUANTIZE_HIGH(desc->dtad_arg); + uint16_t nsteps = DTRACE_LLQUANTIZE_NSTEP(desc->dtad_arg); + int64_t v; + + agg->dtag_initial = desc->dtad_arg; + agg->dtag_aggregate = dtrace_aggregate_llquantize; + + if (factor < 2 || low >= high || nsteps < factor) + goto err; + + /* + * Now check that the number of steps evenly divides a power + * of the factor. (This assures both integer bucket size and + * linearity within each magnitude.) + */ + for (v = factor; v < nsteps; v *= factor) + continue; + + if ((v % nsteps) || (nsteps % factor)) + goto err; + + size = (dtrace_aggregate_llquantize_bucket(factor, + low, high, nsteps, INT64_MAX) + 2) * sizeof (uint64_t); + break; + } + case DTRACEAGG_AVG: agg->dtag_aggregate = dtrace_aggregate_avg; size = sizeof (uint64_t) * 2; diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h b/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h index 1f0c37218..cad30d31c 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h +++ b/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h @@ -24,6 +24,10 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2011, Joyent, Inc. All rights reserved. + */ + #ifndef _SYS_DTRACE_H #define _SYS_DTRACE_H @@ -481,6 +485,7 @@ typedef struct dtrace_difv { #define DTRACEAGG_STDDEV (DTRACEACT_AGGREGATION + 6) #define DTRACEAGG_QUANTIZE (DTRACEACT_AGGREGATION + 7) #define DTRACEAGG_LQUANTIZE (DTRACEACT_AGGREGATION + 8) +#define DTRACEAGG_LLQUANTIZE (DTRACEACT_AGGREGATION + 9) #define DTRACEACT_ISAGG(x) \ (DTRACEACT_CLASS(x) == DTRACEACT_AGGREGATION) @@ -515,6 +520,31 @@ typedef struct dtrace_difv { (int32_t)(((x) & DTRACE_LQUANTIZE_BASEMASK) >> \ DTRACE_LQUANTIZE_BASESHIFT) +#define DTRACE_LLQUANTIZE_FACTORSHIFT 48 +#define DTRACE_LLQUANTIZE_FACTORMASK ((uint64_t)UINT16_MAX << 48) +#define DTRACE_LLQUANTIZE_LOWSHIFT 32 +#define DTRACE_LLQUANTIZE_LOWMASK ((uint64_t)UINT16_MAX << 32) +#define DTRACE_LLQUANTIZE_HIGHSHIFT 16 +#define DTRACE_LLQUANTIZE_HIGHMASK ((uint64_t)UINT16_MAX << 16) +#define DTRACE_LLQUANTIZE_NSTEPSHIFT 0 +#define DTRACE_LLQUANTIZE_NSTEPMASK UINT16_MAX + +#define DTRACE_LLQUANTIZE_FACTOR(x) \ + (uint16_t)(((x) & DTRACE_LLQUANTIZE_FACTORMASK) >> \ + DTRACE_LLQUANTIZE_FACTORSHIFT) + +#define DTRACE_LLQUANTIZE_LOW(x) \ + (uint16_t)(((x) & DTRACE_LLQUANTIZE_LOWMASK) >> \ + DTRACE_LLQUANTIZE_LOWSHIFT) + +#define DTRACE_LLQUANTIZE_HIGH(x) \ + (uint16_t)(((x) & DTRACE_LLQUANTIZE_HIGHMASK) >> \ + DTRACE_LLQUANTIZE_HIGHSHIFT) + +#define DTRACE_LLQUANTIZE_NSTEP(x) \ + (uint16_t)(((x) & DTRACE_LLQUANTIZE_NSTEPMASK) >> \ + DTRACE_LLQUANTIZE_NSTEPSHIFT) + #define DTRACE_USTACK_NFRAMES(x) (uint32_t)((x) & UINT32_MAX) #define DTRACE_USTACK_STRSIZE(x) (uint32_t)((x) >> 32) #define DTRACE_USTACK_ARG(x, y) \ -- 2.45.0