summaryrefslogtreecommitdiffstats
path: root/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/benchmarks/corelib/tools/qstring/generatelist_char.pl')
-rw-r--r--tests/benchmarks/corelib/tools/qstring/generatelist_char.pl208
1 files changed, 0 insertions, 208 deletions
diff --git a/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl b/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl
deleted file mode 100644
index f9134405f5..0000000000
--- a/tests/benchmarks/corelib/tools/qstring/generatelist_char.pl
+++ /dev/null
@@ -1,208 +0,0 @@
-#!/usr/bin/perl
-# -*- mode: utf-8; tabs: nil -*-
-## Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-## Contact: http://www.qt-project.org/legal
-##
-## This file is part of the QtCore module of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:LGPL$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and Digia. For licensing terms and
-## conditions see http://qt.digia.com/licensing. For further information
-## use the contact form at http://qt.digia.com/contact-us.
-##
-## GNU Lesser General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU Lesser
-## General Public License version 2.1 as published by the Free Software
-## Foundation and appearing in the file LICENSE.LGPL included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU Lesser General Public License version 2.1 requirements
-## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-##
-## In addition, as a special exception, Digia gives you certain additional
-## rights. These rights are described in the Digia Qt LGPL Exception
-## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3.0 as published by the Free Software
-## Foundation and appearing in the file LICENSE.GPL included in the
-## packaging of this file. Please review the following information to
-## ensure the GNU General Public License version 3.0 requirements will be
-## met: http://www.gnu.org/copyleft/gpl.html.
-##
-##
-## $QT_END_LICENSE$
-#
-# Parses a file (passed as argument) that contains a dump of pairs of
-# strings and generates C source code including said data.
-#
-# The format of the file is:
-# LEN = <len> <keyword> <align1> <align2>\n<data1><data2>\n
-# where:
-# LEN the literal string "LEN"
-# <len> the length of the data, in 16-bit words
-# <keyword> the literal string "SAME" or "DIFF"
-# <align1> the alignment or pointer value of the first data
-# <align2> the alignment or pointer value of the second data
-# <data1> the first data
-# <data2> the second data
-# \n newline
-#
-# The code to write this data would be:
-# fprintf(out, "LEN = %d %s %d %d\n", len,
-# (p1 == p2) ? "SAME" : "DIFF",
-# uint(quintptr(p1)) & 0xfff, uint(quintptr(p2)) & 0xfff);
-# fwrite(p1, 2, len, out);
-# fwrite(p2, 2, len, out);
-# fwrite("\n", 1, 1, out);
-
-sub printCharArray($$$) {
- $str = $_[0];
- $align = $_[1] & 0x3f;
- $offset = $_[2];
-
- $headpadding = $align & 0xf;
- $tailpadding = 16 - (($len + $headpadding) & 0xf);
- $multiplecachelines = ($align + $len) > 0x40;
-
- if ($multiplecachelines) {
- # if this string crosses into a new cacheline, then
- # replicate the result
- $headpadding |= ($offset & ~0x3f);
- $headpadding += 0x40
- if ($headpadding < $offset);
- $headpadding -= $offset;
- ++$cachelinecrosses;
- }
-
- if ($headpadding > 0) {
- print " \"";
- for $i (1..$headpadding) {
- printf "\\%o", 256-$i;
- }
- print "\"\n";
- }
-
- print " \"";
- for ($i = 0; $i < $len; $i++) {
- $c = substr($str, $i, 1);
- if (ord($c) < 0x20 || ord($c) > 0x7f || $c eq '"' || $c eq '\\') {
- printf "\\%o\"\"", ord($c);
- } else {
- print $c;
- }
- }
-
- if ($tailpadding > 0) {
- print "\"\n \"";
- for $i (1..$tailpadding) {
- printf "\\%o", 256-$i;
- }
- }
- print "\" // ", $offset + $headpadding + $len + $tailpadding;
- print "+" if $multiplecachelines;
- print "\n";
-
- return ($offset + $headpadding, $offset + $headpadding + $len + $tailpadding);
-}
-
-print "// This is a generated file - DO NOT EDIT\n\n";
-
-print "#include \"data.h\"\n\n";
-
-$varname = shift @ARGV;
-print "static const char charData[] __attribute__((aligned(64))) = {\n";
-$count = 0;
-$offset = 0;
-$totalsize = 0;
-$maxlen = 0;
-$cachelinecrosses = 0;
-
-open IN, "<" . $ARGV[0];
-while (1) {
- $line = readline(*IN);
- last unless defined($line);
- $line =~ /LEN = (\d+) (\w+) (\d+) (\d+)/;
- $len = $1;
- $data[$count]->{len} = $len;
- $sameptr = $2;
- $data[$count]->{align1} = $3 - 0;
- $data[$count]->{align2} = $4 - 0;
-
- # statistics
- $alignhistogram{$3 & 0xf}++;
- $alignhistogram{$4 & 0xf}++;
- $samealignments{$3 & 0xf}++ if ($3 & 0xf) == ($4 & 0xf);
-
- read IN, $a, $len;
- read IN, $b, $len;
-
- <IN>; # Eat the newline
-
- if ($len == 0) {
- $data[$count]->{offset1} = $offset;
- $data[$count]->{offset2} = $data[$count]->{offset1};
- ++$data[$count]->{offset2} if ($sameptr eq "DIFF");
- } else {
- print " // #$count\n";
- ($data[$count]->{offset1}, $offset) =
- printCharArray($a, $data[$count]->{align1}, $offset);
- die if ($offset & 0xf) != 0;
-
- if ($sameptr eq "DIFF") {
- ($data[$count]->{offset2}, $offset) =
- printCharArray($b, $data[$count]->{align2}, $offset);
- } else {
- $data[$count]->{offset2} = $data[$count]->{offset1};
- }
- print "\n";
- }
- ++$count;
-
- $totalsize += $len;
- $maxlen = $len if $len > $maxlen;
-}
-print "};\n";
-close IN;
-
-print "static const int intData[] = {\n";
-for $i (0..$count-1) {
- print " ",
- $data[$i]->{len}, ", ",
- $data[$i]->{offset1}, ", ",
- $data[$i]->{offset2}, ", ",
- $data[$i]->{align1}, ", ",
- $data[$i]->{align2},
- ", // #$i\n";
- next if $data[$i]->{len} == 0;
- die if (($data[$i]->{offset1} & 0xf) != ($data[$i]->{align1} & 0xf));
- die if (($data[$i]->{offset2} & 0xf) != ($data[$i]->{align2} & 0xf));
-}
-print "};\n\n";
-
-print "struct StringData $varname = {\n" .
- " intData,\n" .
- " { charData },\n" .
- " $count, /* entryCount */\n" .
- " $maxlen /* maxLength */\n" .
- "};\n\n";
-
-printf "// average comparison length: %.4f\n", ($totalsize * 1.0 / $count);
-printf "// cache-line crosses: %d (%.1f%%)\n",
- $cachelinecrosses, ($cachelinecrosses * 100.0 / $count / 2);
-
-print "// alignment histogram:\n";
-for $key (sort { $a <=> $b } keys(%alignhistogram)) {
- $value = $alignhistogram{$key};
- $samealigned = $samealignments{$key};
- printf "// 0xXXX%x = %d (%.1f%%) strings, %d (%.1f%%) of which same-aligned\n",
- $key, $value, $value * 100.0 / ($count*2),
- $samealigned, $samealigned * 100.0 / $value;
- $samealignedtotal += $samealigned;
-}
-printf "// total = %d (100%) strings, %d (%.1f%%) of which same-aligned\n",
- $count * 2, $samealignedtotal, $samealignedtotal * 100 / $count / 2;