mirror of
https://github.com/claunia/findcrcs.git
synced 2025-12-16 10:44:25 +00:00
Added version 0.2 from V.
This commit is contained in:
674
COPYING
Normal file
674
COPYING
Normal file
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
24
Makefile
Normal file
24
Makefile
Normal file
@@ -0,0 +1,24 @@
|
||||
BINARY := findcrcs
|
||||
|
||||
ifeq ($(OS), Windows_NT)
|
||||
BINARY := $(BINARY).exe
|
||||
endif
|
||||
|
||||
all: findcrcs
|
||||
|
||||
clean:
|
||||
rm $(BINARY)
|
||||
|
||||
findcrcs: findcrcs.cc md5.c md5.h crcutil-1.0
|
||||
g++ -O3 -Wall -mcrc32 -o $(BINARY) findcrcs.cc md5.c crcutil-1.0/examples/interface.cc crcutil-1.0/code/*.cc -Icrcutil-1.0/code -Icrcutil-1.0/tests -Icrcutil-1.0/examples
|
||||
strip $(BINARY)
|
||||
|
||||
crcutil-1.0: crcutil-1.0.tar.gz
|
||||
tar xfz crcutil-1.0.tar.gz
|
||||
chmod -R og-w+rX crcutil-1.0
|
||||
chown -R 0.0 crcutil-1.0
|
||||
touch crcutil-1.0
|
||||
|
||||
crcutil-1.0.tar.gz:
|
||||
wget -q -O - http://crcutil.googlecode.com/files/crcutil-1.0.tar.gz > crcutil-1.0.tar.gz
|
||||
touch crcutil-1.0.tar.gz
|
||||
40
README
Normal file
40
README
Normal file
@@ -0,0 +1,40 @@
|
||||
What:
|
||||
This is a not yet idiotproof version of findcrcs.
|
||||
It is to be used for finding a block of data which matches a specific crc.
|
||||
|
||||
How:
|
||||
findcrcs <file> <size of window> <crc> [more crcs...]
|
||||
|
||||
File is a big file which should or may contain the searched for data.
|
||||
Size of window is the size of the block of data to find.
|
||||
Crc is the crc to find in the file (may be more then 1, but all will be matched on the window size).
|
||||
|
||||
If a match is found it will print out an md5sum of the matched block for further inspection.
|
||||
For best results, add some (1MB or so) zero bytes padding around the file first.
|
||||
In a future version, this might be a selectable option of this program.
|
||||
|
||||
Why:
|
||||
Useful for finding audio offsets in disk images together with the redump.org database.
|
||||
|
||||
Warning:
|
||||
This software is not yet idiotproof!
|
||||
- It does not check arguments for validity yet (especially size of window and crc's.)
|
||||
- No paddiong option yet.
|
||||
if matching audiodata, you should pad the combined audiotracks with zero bytes at the start and end.
|
||||
|
||||
Compiling:
|
||||
Use "make" on any linux/unix/bsd console nearby, or if you must, an msys or cygwin environment.
|
||||
You need to use a relatively recent gcc (4.5.0+ ish I guess).
|
||||
This software uses crcutil-1.0 for providing fast crc calculations.
|
||||
crcutil is made by Andrew Kadatch and Bob Jenkins and can be found on http://code.google.com/p/crcutil/
|
||||
Do not contact them for support on findcrcs.
|
||||
The Makefile will try to pull in version 1.0 through wget if it is not supplied yet.
|
||||
|
||||
Also, this program makes use of the MD5 implementation of Alexander Peslyak.
|
||||
This is found at http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
|
||||
A small casting patch was made to support g++, this small patch is released under the same license as the original md5.c file.
|
||||
|
||||
Contact:
|
||||
At the moment, see the redump.org forum thread where you got this.
|
||||
|
||||
-V.
|
||||
BIN
crcutil-1.0.tar.gz
Normal file
BIN
crcutil-1.0.tar.gz
Normal file
Binary file not shown.
4
crcutil-1.0/AUTHORS
Normal file
4
crcutil-1.0/AUTHORS
Normal file
@@ -0,0 +1,4 @@
|
||||
Andrew Kadatch
|
||||
Bob Jenkins
|
||||
|
||||
[The end of the document]
|
||||
202
crcutil-1.0/COPYING
Normal file
202
crcutil-1.0/COPYING
Normal file
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
4
crcutil-1.0/ChangeLog
Normal file
4
crcutil-1.0/ChangeLog
Normal file
@@ -0,0 +1,4 @@
|
||||
10 Dec 2010:
|
||||
- Version 1.0.0
|
||||
|
||||
[The end of the document]
|
||||
65
crcutil-1.0/INSTALL
Normal file
65
crcutil-1.0/INSTALL
Normal file
@@ -0,0 +1,65 @@
|
||||
Since crcutil is a library, and rather small, template library,
|
||||
it is better to compile it directly into your code. Or you could
|
||||
build a library for interface.cc and use it.
|
||||
|
||||
|
||||
Building and running the tests (Linux/GCC, MacOSX/GCC)
|
||||
------------------------------------------------------
|
||||
|
||||
Run
|
||||
./autogen.sh <target> <compiler_flags>
|
||||
or
|
||||
./autogen.sh <target> "-m32 -march=i686 <compiler_flags>"
|
||||
to build and run 64-bit and 32-bit <target> with GCC.
|
||||
|
||||
Typically, <compiler_flags> is not required.
|
||||
|
||||
Useful values for <target> are:
|
||||
clean
|
||||
configure
|
||||
check
|
||||
|
||||
E.g.
|
||||
./autogen.sh check
|
||||
will build and run 64-bit unittest, whilst
|
||||
./autogen.sh clean
|
||||
will clean everything up.
|
||||
|
||||
|
||||
Why ./autogen.sh? Two reasons:
|
||||
|
||||
1. Automake is well beyond my comprehension, and I am unable to create
|
||||
"Makefile.am" consistently. So autogen.sh has that piece of black magic.
|
||||
|
||||
2. autogen.sh detects version of GCC and provides different compile options
|
||||
to work around differences between compiler versions that cannot
|
||||
be detected at compile time.
|
||||
|
||||
You still can do
|
||||
./configure CXXFLAGS="-O3" CFLAGS="-O3"
|
||||
(if you use GCC before 4.5.0) or
|
||||
./configure CXXFLAGS="-O3 -mcrc32" CFLAGS="-O3"
|
||||
and then run
|
||||
make check
|
||||
but the use of "./autogen.sh" is the preferred way to go.
|
||||
|
||||
|
||||
Building and running the tests (Windows, CL or ICL compiler)
|
||||
------------------------------------------------------------
|
||||
|
||||
Run
|
||||
nmake -f Makefile.win cl64
|
||||
or
|
||||
nmake -f Makefile.win cl32
|
||||
or
|
||||
nmake -f Makefile.win icl64
|
||||
or
|
||||
nmake -f Makefile.win icl32
|
||||
to build and 64-bit and 32-bit unit test using
|
||||
Microsoft CL and Intel's ICL compilers respectively.
|
||||
|
||||
Run
|
||||
nmake -f Makefile.win clean
|
||||
to clean everything up.
|
||||
|
||||
[The end of the document]
|
||||
202
crcutil-1.0/LICENSE
Normal file
202
crcutil-1.0/LICENSE
Normal file
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
966
crcutil-1.0/Makefile
Normal file
966
crcutil-1.0/Makefile
Normal file
@@ -0,0 +1,966 @@
|
||||
# Makefile.in generated by automake 1.11.1 from Makefile.am.
|
||||
# Makefile. Generated from Makefile.in by configure.
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
||||
# Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
|
||||
|
||||
pkgdatadir = $(datadir)/crcutil
|
||||
pkgincludedir = $(includedir)/crcutil
|
||||
pkglibdir = $(libdir)/crcutil
|
||||
pkglibexecdir = $(libexecdir)/crcutil
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
check_PROGRAMS = crcutil_ut$(EXEEXT)
|
||||
TESTS = crcutil_ut$(EXEEXT)
|
||||
tmp_PROGRAMS = usage$(EXEEXT)
|
||||
subdir = .
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
|
||||
depcomp install-sh missing
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(tmpdir)"
|
||||
PROGRAMS = $(tmp_PROGRAMS)
|
||||
am_crcutil_ut_OBJECTS = crc32c_sse4.$(OBJEXT) \
|
||||
multiword_128_64_gcc_amd64_sse2.$(OBJEXT) \
|
||||
multiword_64_64_cl_i386_mmx.$(OBJEXT) \
|
||||
multiword_64_64_gcc_amd64_asm.$(OBJEXT) \
|
||||
multiword_64_64_gcc_i386_mmx.$(OBJEXT) set_hi_pri.$(OBJEXT) \
|
||||
unittest.$(OBJEXT)
|
||||
crcutil_ut_OBJECTS = $(am_crcutil_ut_OBJECTS)
|
||||
crcutil_ut_LDADD = $(LDADD)
|
||||
am_usage_OBJECTS = usage-crc32c_sse4.$(OBJEXT) \
|
||||
usage-multiword_128_64_gcc_amd64_sse2.$(OBJEXT) \
|
||||
usage-multiword_64_64_cl_i386_mmx.$(OBJEXT) \
|
||||
usage-multiword_64_64_gcc_amd64_asm.$(OBJEXT) \
|
||||
usage-multiword_64_64_gcc_i386_mmx.$(OBJEXT) \
|
||||
usage-interface.$(OBJEXT) usage-usage.$(OBJEXT)
|
||||
usage_OBJECTS = $(am_usage_OBJECTS)
|
||||
usage_LDADD = $(LDADD)
|
||||
usage_LINK = $(CXXLD) $(usage_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
DEFAULT_INCLUDES = -I.
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
SOURCES = $(crcutil_ut_SOURCES) $(usage_SOURCES)
|
||||
DIST_SOURCES = $(crcutil_ut_SOURCES) $(usage_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
am__tty_colors = \
|
||||
red=; grn=; lgn=; blu=; std=
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d "$(distdir)" \
|
||||
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr "$(distdir)"; }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = ${SHELL} /home/akad/crc7/missing --run aclocal-1.11
|
||||
AMTAR = ${SHELL} /home/akad/crc7/missing --run tar
|
||||
AUTOCONF = ${SHELL} /home/akad/crc7/missing --run autoconf
|
||||
AUTOHEADER = ${SHELL} /home/akad/crc7/missing --run autoheader
|
||||
AUTOMAKE = ${SHELL} /home/akad/crc7/missing --run automake-1.11
|
||||
AWK = gawk
|
||||
CC = gcc
|
||||
CCDEPMODE = depmode=gcc3
|
||||
CFLAGS = -O3
|
||||
CPP = gcc -E
|
||||
CPPFLAGS =
|
||||
CXX = g++
|
||||
CXXDEPMODE = depmode=gcc3
|
||||
CXXFLAGS = -O3
|
||||
CYGPATH_W = echo
|
||||
DEFS = -DHAVE_CONFIG_H
|
||||
DEPDIR = .deps
|
||||
ECHO_C =
|
||||
ECHO_N = -n
|
||||
ECHO_T =
|
||||
EGREP = /bin/grep -E
|
||||
EXEEXT =
|
||||
GREP = /bin/grep
|
||||
INSTALL = /usr/bin/install -c
|
||||
INSTALL_DATA = ${INSTALL} -m 644
|
||||
INSTALL_PROGRAM = ${INSTALL}
|
||||
INSTALL_SCRIPT = ${INSTALL}
|
||||
INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
|
||||
LDFLAGS =
|
||||
LIBOBJS =
|
||||
LIBS =
|
||||
LTLIBOBJS =
|
||||
MAKEINFO = ${SHELL} /home/akad/crc7/missing --run makeinfo
|
||||
MKDIR_P = /bin/mkdir -p
|
||||
OBJEXT = o
|
||||
PACKAGE = crcutil
|
||||
PACKAGE_BUGREPORT = crcutil@googlegroups.com
|
||||
PACKAGE_NAME = crcutil
|
||||
PACKAGE_STRING = crcutil 1.0
|
||||
PACKAGE_TARNAME = crcutil
|
||||
PACKAGE_URL =
|
||||
PACKAGE_VERSION = 1.0
|
||||
PATH_SEPARATOR = :
|
||||
SET_MAKE =
|
||||
SHELL = /bin/sh
|
||||
STRIP =
|
||||
VERSION = 1.0
|
||||
abs_builddir = /home/akad/crc7
|
||||
abs_srcdir = /home/akad/crc7
|
||||
abs_top_builddir = /home/akad/crc7
|
||||
abs_top_srcdir = /home/akad/crc7
|
||||
ac_ct_CC = gcc
|
||||
ac_ct_CXX = g++
|
||||
am__include = include
|
||||
am__leading_dot = .
|
||||
am__quote =
|
||||
am__tar = ${AMTAR} chof - "$$tardir"
|
||||
am__untar = ${AMTAR} xf -
|
||||
bindir = ${exec_prefix}/bin
|
||||
build_alias =
|
||||
builddir = .
|
||||
datadir = ${datarootdir}
|
||||
datarootdir = ${prefix}/share
|
||||
docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
|
||||
dvidir = ${docdir}
|
||||
exec_prefix = ${prefix}
|
||||
host_alias =
|
||||
htmldir = ${docdir}
|
||||
includedir = ${prefix}/include
|
||||
infodir = ${datarootdir}/info
|
||||
install_sh = ${SHELL} /home/akad/crc7/install-sh
|
||||
libdir = ${exec_prefix}/lib
|
||||
libexecdir = ${exec_prefix}/libexec
|
||||
localedir = ${datarootdir}/locale
|
||||
localstatedir = ${prefix}/var
|
||||
mandir = ${datarootdir}/man
|
||||
mkdir_p = /bin/mkdir -p
|
||||
oldincludedir = /usr/include
|
||||
pdfdir = ${docdir}
|
||||
prefix = /usr/local
|
||||
program_transform_name = s,x,x,
|
||||
psdir = ${docdir}
|
||||
sbindir = ${exec_prefix}/sbin
|
||||
sharedstatedir = ${prefix}/com
|
||||
srcdir = .
|
||||
sysconfdir = ${prefix}/etc
|
||||
target_alias =
|
||||
top_build_prefix =
|
||||
top_builddir = .
|
||||
top_srcdir = .
|
||||
AM_CXXFLAGS = -DCRCUTIL_USE_MM_CRC32=1 -Wall -msse2 -Icode
|
||||
AM_CFLAGS = $(AM_CXXFLAGS)
|
||||
crcutil_ut_SOURCES = code/base_types.h code/crc32c_sse4.cc code/crc32c_sse4.h code/crc32c_sse4_intrin.h code/crc_casts.h code/generic_crc.h code/gf_util.h code/multiword_128_64_gcc_amd64_sse2.cc code/multiword_64_64_cl_i386_mmx.cc code/multiword_64_64_gcc_amd64_asm.cc code/multiword_64_64_gcc_i386_mmx.cc code/platform.h code/protected_crc.h code/rolling_crc.h code/std_headers.h code/uint128_sse2.h tests/aligned_alloc.h tests/bob_jenkins_rng.h tests/rdtsc.h tests/set_hi_pri.c tests/unittest.cc tests/unittest.h tests/unittest_helper.h
|
||||
tmpdir = /tmp
|
||||
usage_CXXFLAGS = $(AM_CXXFLAGS) -Itests
|
||||
usage_SOURCES = code/base_types.h code/crc32c_sse4.cc code/crc32c_sse4.h code/crc32c_sse4_intrin.h code/crc_casts.h code/generic_crc.h code/gf_util.h code/multiword_128_64_gcc_amd64_sse2.cc code/multiword_64_64_cl_i386_mmx.cc code/multiword_64_64_gcc_amd64_asm.cc code/multiword_64_64_gcc_i386_mmx.cc code/platform.h code/protected_crc.h code/rolling_crc.h code/std_headers.h code/uint128_sse2.h examples/interface.cc examples/interface.h examples/usage.cc tests/aligned_alloc.h
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .cc .o .obj
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
|
||||
install-tmpPROGRAMS: $(tmp_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(tmpdir)" || $(MKDIR_P) "$(DESTDIR)$(tmpdir)"
|
||||
@list='$(tmp_PROGRAMS)'; test -n "$(tmpdir)" || list=; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p; \
|
||||
then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(tmpdir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(tmpdir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-tmpPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(tmp_PROGRAMS)'; test -n "$(tmpdir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' `; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(tmpdir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(tmpdir)" && rm -f $$files
|
||||
|
||||
clean-tmpPROGRAMS:
|
||||
-test -z "$(tmp_PROGRAMS)" || rm -f $(tmp_PROGRAMS)
|
||||
crcutil_ut$(EXEEXT): $(crcutil_ut_OBJECTS) $(crcutil_ut_DEPENDENCIES)
|
||||
@rm -f crcutil_ut$(EXEEXT)
|
||||
$(CXXLINK) $(crcutil_ut_OBJECTS) $(crcutil_ut_LDADD) $(LIBS)
|
||||
usage$(EXEEXT): $(usage_OBJECTS) $(usage_DEPENDENCIES)
|
||||
@rm -f usage$(EXEEXT)
|
||||
$(usage_LINK) $(usage_OBJECTS) $(usage_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
include ./$(DEPDIR)/crc32c_sse4.Po
|
||||
include ./$(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Po
|
||||
include ./$(DEPDIR)/multiword_64_64_cl_i386_mmx.Po
|
||||
include ./$(DEPDIR)/multiword_64_64_gcc_amd64_asm.Po
|
||||
include ./$(DEPDIR)/multiword_64_64_gcc_i386_mmx.Po
|
||||
include ./$(DEPDIR)/set_hi_pri.Po
|
||||
include ./$(DEPDIR)/unittest.Po
|
||||
include ./$(DEPDIR)/usage-crc32c_sse4.Po
|
||||
include ./$(DEPDIR)/usage-interface.Po
|
||||
include ./$(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Po
|
||||
include ./$(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Po
|
||||
include ./$(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Po
|
||||
include ./$(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Po
|
||||
include ./$(DEPDIR)/usage-usage.Po
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
set_hi_pri.o: tests/set_hi_pri.c
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_hi_pri.o -MD -MP -MF $(DEPDIR)/set_hi_pri.Tpo -c -o set_hi_pri.o `test -f 'tests/set_hi_pri.c' || echo '$(srcdir)/'`tests/set_hi_pri.c
|
||||
$(am__mv) $(DEPDIR)/set_hi_pri.Tpo $(DEPDIR)/set_hi_pri.Po
|
||||
# source='tests/set_hi_pri.c' object='set_hi_pri.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_hi_pri.o `test -f 'tests/set_hi_pri.c' || echo '$(srcdir)/'`tests/set_hi_pri.c
|
||||
|
||||
set_hi_pri.obj: tests/set_hi_pri.c
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_hi_pri.obj -MD -MP -MF $(DEPDIR)/set_hi_pri.Tpo -c -o set_hi_pri.obj `if test -f 'tests/set_hi_pri.c'; then $(CYGPATH_W) 'tests/set_hi_pri.c'; else $(CYGPATH_W) '$(srcdir)/tests/set_hi_pri.c'; fi`
|
||||
$(am__mv) $(DEPDIR)/set_hi_pri.Tpo $(DEPDIR)/set_hi_pri.Po
|
||||
# source='tests/set_hi_pri.c' object='set_hi_pri.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
|
||||
# $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_hi_pri.obj `if test -f 'tests/set_hi_pri.c'; then $(CYGPATH_W) 'tests/set_hi_pri.c'; else $(CYGPATH_W) '$(srcdir)/tests/set_hi_pri.c'; fi`
|
||||
|
||||
.cc.o:
|
||||
$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXXCOMPILE) -c -o $@ $<
|
||||
|
||||
.cc.obj:
|
||||
$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
# source='$<' object='$@' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
crc32c_sse4.o: code/crc32c_sse4.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT crc32c_sse4.o -MD -MP -MF $(DEPDIR)/crc32c_sse4.Tpo -c -o crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
$(am__mv) $(DEPDIR)/crc32c_sse4.Tpo $(DEPDIR)/crc32c_sse4.Po
|
||||
# source='code/crc32c_sse4.cc' object='crc32c_sse4.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
|
||||
crc32c_sse4.obj: code/crc32c_sse4.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT crc32c_sse4.obj -MD -MP -MF $(DEPDIR)/crc32c_sse4.Tpo -c -o crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/crc32c_sse4.Tpo $(DEPDIR)/crc32c_sse4.Po
|
||||
# source='code/crc32c_sse4.cc' object='crc32c_sse4.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
|
||||
multiword_128_64_gcc_amd64_sse2.o: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_128_64_gcc_amd64_sse2.o -MD -MP -MF $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo -c -o multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
$(am__mv) $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Po
|
||||
# source='code/multiword_128_64_gcc_amd64_sse2.cc' object='multiword_128_64_gcc_amd64_sse2.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
|
||||
multiword_128_64_gcc_amd64_sse2.obj: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_128_64_gcc_amd64_sse2.obj -MD -MP -MF $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo -c -o multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Po
|
||||
# source='code/multiword_128_64_gcc_amd64_sse2.cc' object='multiword_128_64_gcc_amd64_sse2.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
|
||||
multiword_64_64_cl_i386_mmx.o: code/multiword_64_64_cl_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_cl_i386_mmx.o -MD -MP -MF $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo -c -o multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
$(am__mv) $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_cl_i386_mmx.Po
|
||||
# source='code/multiword_64_64_cl_i386_mmx.cc' object='multiword_64_64_cl_i386_mmx.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
|
||||
multiword_64_64_cl_i386_mmx.obj: code/multiword_64_64_cl_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_cl_i386_mmx.obj -MD -MP -MF $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo -c -o multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_cl_i386_mmx.Po
|
||||
# source='code/multiword_64_64_cl_i386_mmx.cc' object='multiword_64_64_cl_i386_mmx.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
|
||||
multiword_64_64_gcc_amd64_asm.o: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_amd64_asm.o -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo -c -o multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
$(am__mv) $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Po
|
||||
# source='code/multiword_64_64_gcc_amd64_asm.cc' object='multiword_64_64_gcc_amd64_asm.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
|
||||
multiword_64_64_gcc_amd64_asm.obj: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_amd64_asm.obj -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo -c -o multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Po
|
||||
# source='code/multiword_64_64_gcc_amd64_asm.cc' object='multiword_64_64_gcc_amd64_asm.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
|
||||
multiword_64_64_gcc_i386_mmx.o: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_i386_mmx.o -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo -c -o multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
$(am__mv) $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Po
|
||||
# source='code/multiword_64_64_gcc_i386_mmx.cc' object='multiword_64_64_gcc_i386_mmx.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
|
||||
multiword_64_64_gcc_i386_mmx.obj: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_i386_mmx.obj -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo -c -o multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Po
|
||||
# source='code/multiword_64_64_gcc_i386_mmx.cc' object='multiword_64_64_gcc_i386_mmx.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
|
||||
unittest.o: tests/unittest.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unittest.o -MD -MP -MF $(DEPDIR)/unittest.Tpo -c -o unittest.o `test -f 'tests/unittest.cc' || echo '$(srcdir)/'`tests/unittest.cc
|
||||
$(am__mv) $(DEPDIR)/unittest.Tpo $(DEPDIR)/unittest.Po
|
||||
# source='tests/unittest.cc' object='unittest.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unittest.o `test -f 'tests/unittest.cc' || echo '$(srcdir)/'`tests/unittest.cc
|
||||
|
||||
unittest.obj: tests/unittest.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unittest.obj -MD -MP -MF $(DEPDIR)/unittest.Tpo -c -o unittest.obj `if test -f 'tests/unittest.cc'; then $(CYGPATH_W) 'tests/unittest.cc'; else $(CYGPATH_W) '$(srcdir)/tests/unittest.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/unittest.Tpo $(DEPDIR)/unittest.Po
|
||||
# source='tests/unittest.cc' object='unittest.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unittest.obj `if test -f 'tests/unittest.cc'; then $(CYGPATH_W) 'tests/unittest.cc'; else $(CYGPATH_W) '$(srcdir)/tests/unittest.cc'; fi`
|
||||
|
||||
usage-crc32c_sse4.o: code/crc32c_sse4.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-crc32c_sse4.o -MD -MP -MF $(DEPDIR)/usage-crc32c_sse4.Tpo -c -o usage-crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
$(am__mv) $(DEPDIR)/usage-crc32c_sse4.Tpo $(DEPDIR)/usage-crc32c_sse4.Po
|
||||
# source='code/crc32c_sse4.cc' object='usage-crc32c_sse4.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
|
||||
usage-crc32c_sse4.obj: code/crc32c_sse4.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-crc32c_sse4.obj -MD -MP -MF $(DEPDIR)/usage-crc32c_sse4.Tpo -c -o usage-crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/usage-crc32c_sse4.Tpo $(DEPDIR)/usage-crc32c_sse4.Po
|
||||
# source='code/crc32c_sse4.cc' object='usage-crc32c_sse4.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
|
||||
usage-multiword_128_64_gcc_amd64_sse2.o: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_128_64_gcc_amd64_sse2.o -MD -MP -MF $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo -c -o usage-multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Po
|
||||
# source='code/multiword_128_64_gcc_amd64_sse2.cc' object='usage-multiword_128_64_gcc_amd64_sse2.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
|
||||
usage-multiword_128_64_gcc_amd64_sse2.obj: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_128_64_gcc_amd64_sse2.obj -MD -MP -MF $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo -c -o usage-multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Po
|
||||
# source='code/multiword_128_64_gcc_amd64_sse2.cc' object='usage-multiword_128_64_gcc_amd64_sse2.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
|
||||
usage-multiword_64_64_cl_i386_mmx.o: code/multiword_64_64_cl_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_cl_i386_mmx.o -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo -c -o usage-multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Po
|
||||
# source='code/multiword_64_64_cl_i386_mmx.cc' object='usage-multiword_64_64_cl_i386_mmx.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
|
||||
usage-multiword_64_64_cl_i386_mmx.obj: code/multiword_64_64_cl_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_cl_i386_mmx.obj -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo -c -o usage-multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Po
|
||||
# source='code/multiword_64_64_cl_i386_mmx.cc' object='usage-multiword_64_64_cl_i386_mmx.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
|
||||
usage-multiword_64_64_gcc_amd64_asm.o: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_amd64_asm.o -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo -c -o usage-multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Po
|
||||
# source='code/multiword_64_64_gcc_amd64_asm.cc' object='usage-multiword_64_64_gcc_amd64_asm.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
|
||||
usage-multiword_64_64_gcc_amd64_asm.obj: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_amd64_asm.obj -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo -c -o usage-multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Po
|
||||
# source='code/multiword_64_64_gcc_amd64_asm.cc' object='usage-multiword_64_64_gcc_amd64_asm.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
|
||||
usage-multiword_64_64_gcc_i386_mmx.o: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_i386_mmx.o -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo -c -o usage-multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Po
|
||||
# source='code/multiword_64_64_gcc_i386_mmx.cc' object='usage-multiword_64_64_gcc_i386_mmx.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
|
||||
usage-multiword_64_64_gcc_i386_mmx.obj: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_i386_mmx.obj -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo -c -o usage-multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Po
|
||||
# source='code/multiword_64_64_gcc_i386_mmx.cc' object='usage-multiword_64_64_gcc_i386_mmx.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
|
||||
usage-interface.o: examples/interface.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-interface.o -MD -MP -MF $(DEPDIR)/usage-interface.Tpo -c -o usage-interface.o `test -f 'examples/interface.cc' || echo '$(srcdir)/'`examples/interface.cc
|
||||
$(am__mv) $(DEPDIR)/usage-interface.Tpo $(DEPDIR)/usage-interface.Po
|
||||
# source='examples/interface.cc' object='usage-interface.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-interface.o `test -f 'examples/interface.cc' || echo '$(srcdir)/'`examples/interface.cc
|
||||
|
||||
usage-interface.obj: examples/interface.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-interface.obj -MD -MP -MF $(DEPDIR)/usage-interface.Tpo -c -o usage-interface.obj `if test -f 'examples/interface.cc'; then $(CYGPATH_W) 'examples/interface.cc'; else $(CYGPATH_W) '$(srcdir)/examples/interface.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/usage-interface.Tpo $(DEPDIR)/usage-interface.Po
|
||||
# source='examples/interface.cc' object='usage-interface.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-interface.obj `if test -f 'examples/interface.cc'; then $(CYGPATH_W) 'examples/interface.cc'; else $(CYGPATH_W) '$(srcdir)/examples/interface.cc'; fi`
|
||||
|
||||
usage-usage.o: examples/usage.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-usage.o -MD -MP -MF $(DEPDIR)/usage-usage.Tpo -c -o usage-usage.o `test -f 'examples/usage.cc' || echo '$(srcdir)/'`examples/usage.cc
|
||||
$(am__mv) $(DEPDIR)/usage-usage.Tpo $(DEPDIR)/usage-usage.Po
|
||||
# source='examples/usage.cc' object='usage-usage.o' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-usage.o `test -f 'examples/usage.cc' || echo '$(srcdir)/'`examples/usage.cc
|
||||
|
||||
usage-usage.obj: examples/usage.cc
|
||||
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-usage.obj -MD -MP -MF $(DEPDIR)/usage-usage.Tpo -c -o usage-usage.obj `if test -f 'examples/usage.cc'; then $(CYGPATH_W) 'examples/usage.cc'; else $(CYGPATH_W) '$(srcdir)/examples/usage.cc'; fi`
|
||||
$(am__mv) $(DEPDIR)/usage-usage.Tpo $(DEPDIR)/usage-usage.Po
|
||||
# source='examples/usage.cc' object='usage-usage.obj' libtool=no \
|
||||
# DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) \
|
||||
# $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-usage.obj `if test -f 'examples/usage.cc'; then $(CYGPATH_W) 'examples/usage.cc'; else $(CYGPATH_W) '$(srcdir)/examples/usage.cc'; fi`
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
check-TESTS: $(TESTS)
|
||||
@failed=0; all=0; xfail=0; xpass=0; skip=0; \
|
||||
srcdir=$(srcdir); export srcdir; \
|
||||
list=' $(TESTS) '; \
|
||||
$(am__tty_colors); \
|
||||
if test -n "$$list"; then \
|
||||
for tst in $$list; do \
|
||||
if test -f ./$$tst; then dir=./; \
|
||||
elif test -f $$tst; then dir=; \
|
||||
else dir="$(srcdir)/"; fi; \
|
||||
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
|
||||
all=`expr $$all + 1`; \
|
||||
case " $(XFAIL_TESTS) " in \
|
||||
*[\ \ ]$$tst[\ \ ]*) \
|
||||
xpass=`expr $$xpass + 1`; \
|
||||
failed=`expr $$failed + 1`; \
|
||||
col=$$red; res=XPASS; \
|
||||
;; \
|
||||
*) \
|
||||
col=$$grn; res=PASS; \
|
||||
;; \
|
||||
esac; \
|
||||
elif test $$? -ne 77; then \
|
||||
all=`expr $$all + 1`; \
|
||||
case " $(XFAIL_TESTS) " in \
|
||||
*[\ \ ]$$tst[\ \ ]*) \
|
||||
xfail=`expr $$xfail + 1`; \
|
||||
col=$$lgn; res=XFAIL; \
|
||||
;; \
|
||||
*) \
|
||||
failed=`expr $$failed + 1`; \
|
||||
col=$$red; res=FAIL; \
|
||||
;; \
|
||||
esac; \
|
||||
else \
|
||||
skip=`expr $$skip + 1`; \
|
||||
col=$$blu; res=SKIP; \
|
||||
fi; \
|
||||
echo "$${col}$$res$${std}: $$tst"; \
|
||||
done; \
|
||||
if test "$$all" -eq 1; then \
|
||||
tests="test"; \
|
||||
All=""; \
|
||||
else \
|
||||
tests="tests"; \
|
||||
All="All "; \
|
||||
fi; \
|
||||
if test "$$failed" -eq 0; then \
|
||||
if test "$$xfail" -eq 0; then \
|
||||
banner="$$All$$all $$tests passed"; \
|
||||
else \
|
||||
if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
|
||||
banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
|
||||
fi; \
|
||||
else \
|
||||
if test "$$xpass" -eq 0; then \
|
||||
banner="$$failed of $$all $$tests failed"; \
|
||||
else \
|
||||
if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
|
||||
banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dashes="$$banner"; \
|
||||
skipped=""; \
|
||||
if test "$$skip" -ne 0; then \
|
||||
if test "$$skip" -eq 1; then \
|
||||
skipped="($$skip test was not run)"; \
|
||||
else \
|
||||
skipped="($$skip tests were not run)"; \
|
||||
fi; \
|
||||
test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||
dashes="$$skipped"; \
|
||||
fi; \
|
||||
report=""; \
|
||||
if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
|
||||
report="Please report to $(PACKAGE_BUGREPORT)"; \
|
||||
test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||
dashes="$$report"; \
|
||||
fi; \
|
||||
dashes=`echo "$$dashes" | sed s/./=/g`; \
|
||||
if test "$$failed" -eq 0; then \
|
||||
echo "$$grn$$dashes"; \
|
||||
else \
|
||||
echo "$$red$$dashes"; \
|
||||
fi; \
|
||||
echo "$$banner"; \
|
||||
test -z "$$skipped" || echo "$$skipped"; \
|
||||
test -z "$$report" || echo "$$report"; \
|
||||
echo "$$dashes$$std"; \
|
||||
test "$$failed" -eq 0; \
|
||||
else :; fi
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -755 \
|
||||
-exec chmod u+rwx,go+rx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzma: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lzma*) \
|
||||
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@$(am__cd) '$(distuninstallcheck_dir)' \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
|
||||
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) config.h
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(tmpdir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-checkPROGRAMS clean-generic clean-tmpPROGRAMS \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-hdr distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-tmpPROGRAMS
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-tmpPROGRAMS
|
||||
|
||||
.MAKE: all check-am install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
|
||||
clean clean-checkPROGRAMS clean-generic clean-tmpPROGRAMS \
|
||||
ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
|
||||
dist-tarZ dist-xz dist-zip distcheck distclean \
|
||||
distclean-compile distclean-generic distclean-hdr \
|
||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
install-tmpPROGRAMS installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-tmpPROGRAMS
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
9
crcutil-1.0/Makefile.am
Normal file
9
crcutil-1.0/Makefile.am
Normal file
@@ -0,0 +1,9 @@
|
||||
AM_CXXFLAGS=-DCRCUTIL_USE_MM_CRC32=1 -Wall -msse2 -Icode
|
||||
AM_CFLAGS=$(AM_CXXFLAGS)
|
||||
check_PROGRAMS=crcutil_ut
|
||||
TESTS=crcutil_ut
|
||||
crcutil_ut_SOURCES=code/base_types.h code/crc32c_sse4.cc code/crc32c_sse4.h code/crc32c_sse4_intrin.h code/crc_casts.h code/generic_crc.h code/gf_util.h code/multiword_128_64_gcc_amd64_sse2.cc code/multiword_64_64_cl_i386_mmx.cc code/multiword_64_64_gcc_amd64_asm.cc code/multiword_64_64_gcc_i386_mmx.cc code/platform.h code/protected_crc.h code/rolling_crc.h code/std_headers.h code/uint128_sse2.h tests/aligned_alloc.h tests/bob_jenkins_rng.h tests/rdtsc.h tests/set_hi_pri.c tests/unittest.cc tests/unittest.h tests/unittest_helper.h
|
||||
tmpdir=/tmp
|
||||
tmp_PROGRAMS=usage
|
||||
usage_CXXFLAGS=$(AM_CXXFLAGS) -Itests
|
||||
usage_SOURCES=code/base_types.h code/crc32c_sse4.cc code/crc32c_sse4.h code/crc32c_sse4_intrin.h code/crc_casts.h code/generic_crc.h code/gf_util.h code/multiword_128_64_gcc_amd64_sse2.cc code/multiword_64_64_cl_i386_mmx.cc code/multiword_64_64_gcc_amd64_asm.cc code/multiword_64_64_gcc_i386_mmx.cc code/platform.h code/protected_crc.h code/rolling_crc.h code/std_headers.h code/uint128_sse2.h examples/interface.cc examples/interface.h examples/usage.cc tests/aligned_alloc.h
|
||||
966
crcutil-1.0/Makefile.in
Normal file
966
crcutil-1.0/Makefile.in
Normal file
@@ -0,0 +1,966 @@
|
||||
# Makefile.in generated by automake 1.11.1 from Makefile.am.
|
||||
# @configure_input@
|
||||
|
||||
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
|
||||
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
|
||||
# Inc.
|
||||
# This Makefile.in is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
@SET_MAKE@
|
||||
|
||||
VPATH = @srcdir@
|
||||
pkgdatadir = $(datadir)/@PACKAGE@
|
||||
pkgincludedir = $(includedir)/@PACKAGE@
|
||||
pkglibdir = $(libdir)/@PACKAGE@
|
||||
pkglibexecdir = $(libexecdir)/@PACKAGE@
|
||||
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
|
||||
install_sh_DATA = $(install_sh) -c -m 644
|
||||
install_sh_PROGRAM = $(install_sh) -c
|
||||
install_sh_SCRIPT = $(install_sh) -c
|
||||
INSTALL_HEADER = $(INSTALL_DATA)
|
||||
transform = $(program_transform_name)
|
||||
NORMAL_INSTALL = :
|
||||
PRE_INSTALL = :
|
||||
POST_INSTALL = :
|
||||
NORMAL_UNINSTALL = :
|
||||
PRE_UNINSTALL = :
|
||||
POST_UNINSTALL = :
|
||||
check_PROGRAMS = crcutil_ut$(EXEEXT)
|
||||
TESTS = crcutil_ut$(EXEEXT)
|
||||
tmp_PROGRAMS = usage$(EXEEXT)
|
||||
subdir = .
|
||||
DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
|
||||
$(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
||||
$(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
|
||||
depcomp install-sh missing
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
|
||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
||||
$(ACLOCAL_M4)
|
||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
||||
configure.lineno config.status.lineno
|
||||
mkinstalldirs = $(install_sh) -d
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
CONFIG_CLEAN_VPATH_FILES =
|
||||
am__installdirs = "$(DESTDIR)$(tmpdir)"
|
||||
PROGRAMS = $(tmp_PROGRAMS)
|
||||
am_crcutil_ut_OBJECTS = crc32c_sse4.$(OBJEXT) \
|
||||
multiword_128_64_gcc_amd64_sse2.$(OBJEXT) \
|
||||
multiword_64_64_cl_i386_mmx.$(OBJEXT) \
|
||||
multiword_64_64_gcc_amd64_asm.$(OBJEXT) \
|
||||
multiword_64_64_gcc_i386_mmx.$(OBJEXT) set_hi_pri.$(OBJEXT) \
|
||||
unittest.$(OBJEXT)
|
||||
crcutil_ut_OBJECTS = $(am_crcutil_ut_OBJECTS)
|
||||
crcutil_ut_LDADD = $(LDADD)
|
||||
am_usage_OBJECTS = usage-crc32c_sse4.$(OBJEXT) \
|
||||
usage-multiword_128_64_gcc_amd64_sse2.$(OBJEXT) \
|
||||
usage-multiword_64_64_cl_i386_mmx.$(OBJEXT) \
|
||||
usage-multiword_64_64_gcc_amd64_asm.$(OBJEXT) \
|
||||
usage-multiword_64_64_gcc_i386_mmx.$(OBJEXT) \
|
||||
usage-interface.$(OBJEXT) usage-usage.$(OBJEXT)
|
||||
usage_OBJECTS = $(am_usage_OBJECTS)
|
||||
usage_LDADD = $(LDADD)
|
||||
usage_LINK = $(CXXLD) $(usage_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
|
||||
$(LDFLAGS) -o $@
|
||||
DEFAULT_INCLUDES = -I.@am__isrc@
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
am__depfiles_maybe = depfiles
|
||||
am__mv = mv -f
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
|
||||
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
|
||||
CXXLD = $(CXX)
|
||||
CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
|
||||
-o $@
|
||||
SOURCES = $(crcutil_ut_SOURCES) $(usage_SOURCES)
|
||||
DIST_SOURCES = $(crcutil_ut_SOURCES) $(usage_SOURCES)
|
||||
ETAGS = etags
|
||||
CTAGS = ctags
|
||||
am__tty_colors = \
|
||||
red=; grn=; lgn=; blu=; std=
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
am__remove_distdir = \
|
||||
{ test ! -d "$(distdir)" \
|
||||
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
||||
&& rm -fr "$(distdir)"; }; }
|
||||
DIST_ARCHIVES = $(distdir).tar.gz
|
||||
GZIP_ENV = --best
|
||||
distuninstallcheck_listfiles = find . -type f -print
|
||||
distcleancheck_listfiles = find . -type f -print
|
||||
ACLOCAL = @ACLOCAL@
|
||||
AMTAR = @AMTAR@
|
||||
AUTOCONF = @AUTOCONF@
|
||||
AUTOHEADER = @AUTOHEADER@
|
||||
AUTOMAKE = @AUTOMAKE@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
CFLAGS = @CFLAGS@
|
||||
CPP = @CPP@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CXX = @CXX@
|
||||
CXXDEPMODE = @CXXDEPMODE@
|
||||
CXXFLAGS = @CXXFLAGS@
|
||||
CYGPATH_W = @CYGPATH_W@
|
||||
DEFS = @DEFS@
|
||||
DEPDIR = @DEPDIR@
|
||||
ECHO_C = @ECHO_C@
|
||||
ECHO_N = @ECHO_N@
|
||||
ECHO_T = @ECHO_T@
|
||||
EGREP = @EGREP@
|
||||
EXEEXT = @EXEEXT@
|
||||
GREP = @GREP@
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
LIBS = @LIBS@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAKEINFO = @MAKEINFO@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
PACKAGE_NAME = @PACKAGE_NAME@
|
||||
PACKAGE_STRING = @PACKAGE_STRING@
|
||||
PACKAGE_TARNAME = @PACKAGE_TARNAME@
|
||||
PACKAGE_URL = @PACKAGE_URL@
|
||||
PACKAGE_VERSION = @PACKAGE_VERSION@
|
||||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
SET_MAKE = @SET_MAKE@
|
||||
SHELL = @SHELL@
|
||||
STRIP = @STRIP@
|
||||
VERSION = @VERSION@
|
||||
abs_builddir = @abs_builddir@
|
||||
abs_srcdir = @abs_srcdir@
|
||||
abs_top_builddir = @abs_top_builddir@
|
||||
abs_top_srcdir = @abs_top_srcdir@
|
||||
ac_ct_CC = @ac_ct_CC@
|
||||
ac_ct_CXX = @ac_ct_CXX@
|
||||
am__include = @am__include@
|
||||
am__leading_dot = @am__leading_dot@
|
||||
am__quote = @am__quote@
|
||||
am__tar = @am__tar@
|
||||
am__untar = @am__untar@
|
||||
bindir = @bindir@
|
||||
build_alias = @build_alias@
|
||||
builddir = @builddir@
|
||||
datadir = @datadir@
|
||||
datarootdir = @datarootdir@
|
||||
docdir = @docdir@
|
||||
dvidir = @dvidir@
|
||||
exec_prefix = @exec_prefix@
|
||||
host_alias = @host_alias@
|
||||
htmldir = @htmldir@
|
||||
includedir = @includedir@
|
||||
infodir = @infodir@
|
||||
install_sh = @install_sh@
|
||||
libdir = @libdir@
|
||||
libexecdir = @libexecdir@
|
||||
localedir = @localedir@
|
||||
localstatedir = @localstatedir@
|
||||
mandir = @mandir@
|
||||
mkdir_p = @mkdir_p@
|
||||
oldincludedir = @oldincludedir@
|
||||
pdfdir = @pdfdir@
|
||||
prefix = @prefix@
|
||||
program_transform_name = @program_transform_name@
|
||||
psdir = @psdir@
|
||||
sbindir = @sbindir@
|
||||
sharedstatedir = @sharedstatedir@
|
||||
srcdir = @srcdir@
|
||||
sysconfdir = @sysconfdir@
|
||||
target_alias = @target_alias@
|
||||
top_build_prefix = @top_build_prefix@
|
||||
top_builddir = @top_builddir@
|
||||
top_srcdir = @top_srcdir@
|
||||
AM_CXXFLAGS = -DCRCUTIL_USE_MM_CRC32=1 -Wall -msse2 -Icode
|
||||
AM_CFLAGS = $(AM_CXXFLAGS)
|
||||
crcutil_ut_SOURCES = code/base_types.h code/crc32c_sse4.cc code/crc32c_sse4.h code/crc32c_sse4_intrin.h code/crc_casts.h code/generic_crc.h code/gf_util.h code/multiword_128_64_gcc_amd64_sse2.cc code/multiword_64_64_cl_i386_mmx.cc code/multiword_64_64_gcc_amd64_asm.cc code/multiword_64_64_gcc_i386_mmx.cc code/platform.h code/protected_crc.h code/rolling_crc.h code/std_headers.h code/uint128_sse2.h tests/aligned_alloc.h tests/bob_jenkins_rng.h tests/rdtsc.h tests/set_hi_pri.c tests/unittest.cc tests/unittest.h tests/unittest_helper.h
|
||||
tmpdir = /tmp
|
||||
usage_CXXFLAGS = $(AM_CXXFLAGS) -Itests
|
||||
usage_SOURCES = code/base_types.h code/crc32c_sse4.cc code/crc32c_sse4.h code/crc32c_sse4_intrin.h code/crc_casts.h code/generic_crc.h code/gf_util.h code/multiword_128_64_gcc_amd64_sse2.cc code/multiword_64_64_cl_i386_mmx.cc code/multiword_64_64_gcc_amd64_asm.cc code/multiword_64_64_gcc_i386_mmx.cc code/platform.h code/protected_crc.h code/rolling_crc.h code/std_headers.h code/uint128_sse2.h examples/interface.cc examples/interface.h examples/usage.cc tests/aligned_alloc.h
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .cc .o .obj
|
||||
am--refresh:
|
||||
@:
|
||||
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
|
||||
@for dep in $?; do \
|
||||
case '$(am__configure_deps)' in \
|
||||
*$$dep*) \
|
||||
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
|
||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
|
||||
&& exit 0; \
|
||||
exit 1;; \
|
||||
esac; \
|
||||
done; \
|
||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
|
||||
$(am__cd) $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
.PRECIOUS: Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
@case '$?' in \
|
||||
*config.status*) \
|
||||
echo ' $(SHELL) ./config.status'; \
|
||||
$(SHELL) ./config.status;; \
|
||||
*) \
|
||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
|
||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
|
||||
esac;
|
||||
|
||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||
$(SHELL) ./config.status --recheck
|
||||
|
||||
$(top_srcdir)/configure: $(am__configure_deps)
|
||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
||||
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
|
||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||
$(am__aclocal_m4_deps):
|
||||
|
||||
config.h: stamp-h1
|
||||
@if test ! -f $@; then \
|
||||
rm -f stamp-h1; \
|
||||
$(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
|
||||
else :; fi
|
||||
|
||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
||||
@rm -f stamp-h1
|
||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||
$(srcdir)/config.h.in: $(am__configure_deps)
|
||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||
rm -f stamp-h1
|
||||
touch $@
|
||||
|
||||
distclean-hdr:
|
||||
-rm -f config.h stamp-h1
|
||||
|
||||
clean-checkPROGRAMS:
|
||||
-test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
|
||||
install-tmpPROGRAMS: $(tmp_PROGRAMS)
|
||||
@$(NORMAL_INSTALL)
|
||||
test -z "$(tmpdir)" || $(MKDIR_P) "$(DESTDIR)$(tmpdir)"
|
||||
@list='$(tmp_PROGRAMS)'; test -n "$(tmpdir)" || list=; \
|
||||
for p in $$list; do echo "$$p $$p"; done | \
|
||||
sed 's/$(EXEEXT)$$//' | \
|
||||
while read p p1; do if test -f $$p; \
|
||||
then echo "$$p"; echo "$$p"; else :; fi; \
|
||||
done | \
|
||||
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
|
||||
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
|
||||
sed 'N;N;N;s,\n, ,g' | \
|
||||
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
|
||||
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
|
||||
if ($$2 == $$4) files[d] = files[d] " " $$1; \
|
||||
else { print "f", $$3 "/" $$4, $$1; } } \
|
||||
END { for (d in files) print "f", d, files[d] }' | \
|
||||
while read type dir files; do \
|
||||
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
|
||||
test -z "$$files" || { \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(tmpdir)$$dir'"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(tmpdir)$$dir" || exit $$?; \
|
||||
} \
|
||||
; done
|
||||
|
||||
uninstall-tmpPROGRAMS:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(tmp_PROGRAMS)'; test -n "$(tmpdir)" || list=; \
|
||||
files=`for p in $$list; do echo "$$p"; done | \
|
||||
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
|
||||
-e 's/$$/$(EXEEXT)/' `; \
|
||||
test -n "$$list" || exit 0; \
|
||||
echo " ( cd '$(DESTDIR)$(tmpdir)' && rm -f" $$files ")"; \
|
||||
cd "$(DESTDIR)$(tmpdir)" && rm -f $$files
|
||||
|
||||
clean-tmpPROGRAMS:
|
||||
-test -z "$(tmp_PROGRAMS)" || rm -f $(tmp_PROGRAMS)
|
||||
crcutil_ut$(EXEEXT): $(crcutil_ut_OBJECTS) $(crcutil_ut_DEPENDENCIES)
|
||||
@rm -f crcutil_ut$(EXEEXT)
|
||||
$(CXXLINK) $(crcutil_ut_OBJECTS) $(crcutil_ut_LDADD) $(LIBS)
|
||||
usage$(EXEEXT): $(usage_OBJECTS) $(usage_DEPENDENCIES)
|
||||
@rm -f usage$(EXEEXT)
|
||||
$(usage_LINK) $(usage_OBJECTS) $(usage_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT)
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32c_sse4.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiword_64_64_cl_i386_mmx.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiword_64_64_gcc_amd64_asm.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multiword_64_64_gcc_i386_mmx.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_hi_pri.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unittest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usage-crc32c_sse4.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usage-interface.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usage-usage.Po@am__quote@
|
||||
|
||||
.c.o:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
|
||||
|
||||
.c.obj:
|
||||
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
|
||||
|
||||
set_hi_pri.o: tests/set_hi_pri.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_hi_pri.o -MD -MP -MF $(DEPDIR)/set_hi_pri.Tpo -c -o set_hi_pri.o `test -f 'tests/set_hi_pri.c' || echo '$(srcdir)/'`tests/set_hi_pri.c
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/set_hi_pri.Tpo $(DEPDIR)/set_hi_pri.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tests/set_hi_pri.c' object='set_hi_pri.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_hi_pri.o `test -f 'tests/set_hi_pri.c' || echo '$(srcdir)/'`tests/set_hi_pri.c
|
||||
|
||||
set_hi_pri.obj: tests/set_hi_pri.c
|
||||
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT set_hi_pri.obj -MD -MP -MF $(DEPDIR)/set_hi_pri.Tpo -c -o set_hi_pri.obj `if test -f 'tests/set_hi_pri.c'; then $(CYGPATH_W) 'tests/set_hi_pri.c'; else $(CYGPATH_W) '$(srcdir)/tests/set_hi_pri.c'; fi`
|
||||
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/set_hi_pri.Tpo $(DEPDIR)/set_hi_pri.Po
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tests/set_hi_pri.c' object='set_hi_pri.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o set_hi_pri.obj `if test -f 'tests/set_hi_pri.c'; then $(CYGPATH_W) 'tests/set_hi_pri.c'; else $(CYGPATH_W) '$(srcdir)/tests/set_hi_pri.c'; fi`
|
||||
|
||||
.cc.o:
|
||||
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
|
||||
|
||||
.cc.obj:
|
||||
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
|
||||
|
||||
crc32c_sse4.o: code/crc32c_sse4.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT crc32c_sse4.o -MD -MP -MF $(DEPDIR)/crc32c_sse4.Tpo -c -o crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/crc32c_sse4.Tpo $(DEPDIR)/crc32c_sse4.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/crc32c_sse4.cc' object='crc32c_sse4.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
|
||||
crc32c_sse4.obj: code/crc32c_sse4.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT crc32c_sse4.obj -MD -MP -MF $(DEPDIR)/crc32c_sse4.Tpo -c -o crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/crc32c_sse4.Tpo $(DEPDIR)/crc32c_sse4.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/crc32c_sse4.cc' object='crc32c_sse4.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
|
||||
multiword_128_64_gcc_amd64_sse2.o: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_128_64_gcc_amd64_sse2.o -MD -MP -MF $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo -c -o multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_128_64_gcc_amd64_sse2.cc' object='multiword_128_64_gcc_amd64_sse2.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
|
||||
multiword_128_64_gcc_amd64_sse2.obj: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_128_64_gcc_amd64_sse2.obj -MD -MP -MF $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo -c -o multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/multiword_128_64_gcc_amd64_sse2.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_128_64_gcc_amd64_sse2.cc' object='multiword_128_64_gcc_amd64_sse2.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
|
||||
multiword_64_64_cl_i386_mmx.o: code/multiword_64_64_cl_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_cl_i386_mmx.o -MD -MP -MF $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo -c -o multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_cl_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_cl_i386_mmx.cc' object='multiword_64_64_cl_i386_mmx.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
|
||||
multiword_64_64_cl_i386_mmx.obj: code/multiword_64_64_cl_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_cl_i386_mmx.obj -MD -MP -MF $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo -c -o multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_cl_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_cl_i386_mmx.cc' object='multiword_64_64_cl_i386_mmx.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
|
||||
multiword_64_64_gcc_amd64_asm.o: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_amd64_asm.o -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo -c -o multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_amd64_asm.cc' object='multiword_64_64_gcc_amd64_asm.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
|
||||
multiword_64_64_gcc_amd64_asm.obj: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_amd64_asm.obj -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo -c -o multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/multiword_64_64_gcc_amd64_asm.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_amd64_asm.cc' object='multiword_64_64_gcc_amd64_asm.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
|
||||
multiword_64_64_gcc_i386_mmx.o: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_i386_mmx.o -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo -c -o multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_i386_mmx.cc' object='multiword_64_64_gcc_i386_mmx.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
|
||||
multiword_64_64_gcc_i386_mmx.obj: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multiword_64_64_gcc_i386_mmx.obj -MD -MP -MF $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo -c -o multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/multiword_64_64_gcc_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_i386_mmx.cc' object='multiword_64_64_gcc_i386_mmx.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
|
||||
unittest.o: tests/unittest.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unittest.o -MD -MP -MF $(DEPDIR)/unittest.Tpo -c -o unittest.o `test -f 'tests/unittest.cc' || echo '$(srcdir)/'`tests/unittest.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/unittest.Tpo $(DEPDIR)/unittest.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/unittest.cc' object='unittest.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unittest.o `test -f 'tests/unittest.cc' || echo '$(srcdir)/'`tests/unittest.cc
|
||||
|
||||
unittest.obj: tests/unittest.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unittest.obj -MD -MP -MF $(DEPDIR)/unittest.Tpo -c -o unittest.obj `if test -f 'tests/unittest.cc'; then $(CYGPATH_W) 'tests/unittest.cc'; else $(CYGPATH_W) '$(srcdir)/tests/unittest.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/unittest.Tpo $(DEPDIR)/unittest.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='tests/unittest.cc' object='unittest.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unittest.obj `if test -f 'tests/unittest.cc'; then $(CYGPATH_W) 'tests/unittest.cc'; else $(CYGPATH_W) '$(srcdir)/tests/unittest.cc'; fi`
|
||||
|
||||
usage-crc32c_sse4.o: code/crc32c_sse4.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-crc32c_sse4.o -MD -MP -MF $(DEPDIR)/usage-crc32c_sse4.Tpo -c -o usage-crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-crc32c_sse4.Tpo $(DEPDIR)/usage-crc32c_sse4.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/crc32c_sse4.cc' object='usage-crc32c_sse4.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-crc32c_sse4.o `test -f 'code/crc32c_sse4.cc' || echo '$(srcdir)/'`code/crc32c_sse4.cc
|
||||
|
||||
usage-crc32c_sse4.obj: code/crc32c_sse4.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-crc32c_sse4.obj -MD -MP -MF $(DEPDIR)/usage-crc32c_sse4.Tpo -c -o usage-crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-crc32c_sse4.Tpo $(DEPDIR)/usage-crc32c_sse4.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/crc32c_sse4.cc' object='usage-crc32c_sse4.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-crc32c_sse4.obj `if test -f 'code/crc32c_sse4.cc'; then $(CYGPATH_W) 'code/crc32c_sse4.cc'; else $(CYGPATH_W) '$(srcdir)/code/crc32c_sse4.cc'; fi`
|
||||
|
||||
usage-multiword_128_64_gcc_amd64_sse2.o: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_128_64_gcc_amd64_sse2.o -MD -MP -MF $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo -c -o usage-multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_128_64_gcc_amd64_sse2.cc' object='usage-multiword_128_64_gcc_amd64_sse2.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_128_64_gcc_amd64_sse2.o `test -f 'code/multiword_128_64_gcc_amd64_sse2.cc' || echo '$(srcdir)/'`code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
|
||||
usage-multiword_128_64_gcc_amd64_sse2.obj: code/multiword_128_64_gcc_amd64_sse2.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_128_64_gcc_amd64_sse2.obj -MD -MP -MF $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo -c -o usage-multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Tpo $(DEPDIR)/usage-multiword_128_64_gcc_amd64_sse2.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_128_64_gcc_amd64_sse2.cc' object='usage-multiword_128_64_gcc_amd64_sse2.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_128_64_gcc_amd64_sse2.obj `if test -f 'code/multiword_128_64_gcc_amd64_sse2.cc'; then $(CYGPATH_W) 'code/multiword_128_64_gcc_amd64_sse2.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_128_64_gcc_amd64_sse2.cc'; fi`
|
||||
|
||||
usage-multiword_64_64_cl_i386_mmx.o: code/multiword_64_64_cl_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_cl_i386_mmx.o -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo -c -o usage-multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_cl_i386_mmx.cc' object='usage-multiword_64_64_cl_i386_mmx.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_cl_i386_mmx.o `test -f 'code/multiword_64_64_cl_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_cl_i386_mmx.cc
|
||||
|
||||
usage-multiword_64_64_cl_i386_mmx.obj: code/multiword_64_64_cl_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_cl_i386_mmx.obj -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo -c -o usage-multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_cl_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_cl_i386_mmx.cc' object='usage-multiword_64_64_cl_i386_mmx.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_cl_i386_mmx.obj `if test -f 'code/multiword_64_64_cl_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_cl_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_cl_i386_mmx.cc'; fi`
|
||||
|
||||
usage-multiword_64_64_gcc_amd64_asm.o: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_amd64_asm.o -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo -c -o usage-multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_amd64_asm.cc' object='usage-multiword_64_64_gcc_amd64_asm.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_amd64_asm.o `test -f 'code/multiword_64_64_gcc_amd64_asm.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_amd64_asm.cc
|
||||
|
||||
usage-multiword_64_64_gcc_amd64_asm.obj: code/multiword_64_64_gcc_amd64_asm.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_amd64_asm.obj -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo -c -o usage-multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_amd64_asm.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_amd64_asm.cc' object='usage-multiword_64_64_gcc_amd64_asm.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_amd64_asm.obj `if test -f 'code/multiword_64_64_gcc_amd64_asm.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_amd64_asm.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_amd64_asm.cc'; fi`
|
||||
|
||||
usage-multiword_64_64_gcc_i386_mmx.o: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_i386_mmx.o -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo -c -o usage-multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_i386_mmx.cc' object='usage-multiword_64_64_gcc_i386_mmx.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_i386_mmx.o `test -f 'code/multiword_64_64_gcc_i386_mmx.cc' || echo '$(srcdir)/'`code/multiword_64_64_gcc_i386_mmx.cc
|
||||
|
||||
usage-multiword_64_64_gcc_i386_mmx.obj: code/multiword_64_64_gcc_i386_mmx.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-multiword_64_64_gcc_i386_mmx.obj -MD -MP -MF $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo -c -o usage-multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Tpo $(DEPDIR)/usage-multiword_64_64_gcc_i386_mmx.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='code/multiword_64_64_gcc_i386_mmx.cc' object='usage-multiword_64_64_gcc_i386_mmx.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-multiword_64_64_gcc_i386_mmx.obj `if test -f 'code/multiword_64_64_gcc_i386_mmx.cc'; then $(CYGPATH_W) 'code/multiword_64_64_gcc_i386_mmx.cc'; else $(CYGPATH_W) '$(srcdir)/code/multiword_64_64_gcc_i386_mmx.cc'; fi`
|
||||
|
||||
usage-interface.o: examples/interface.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-interface.o -MD -MP -MF $(DEPDIR)/usage-interface.Tpo -c -o usage-interface.o `test -f 'examples/interface.cc' || echo '$(srcdir)/'`examples/interface.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-interface.Tpo $(DEPDIR)/usage-interface.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='examples/interface.cc' object='usage-interface.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-interface.o `test -f 'examples/interface.cc' || echo '$(srcdir)/'`examples/interface.cc
|
||||
|
||||
usage-interface.obj: examples/interface.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-interface.obj -MD -MP -MF $(DEPDIR)/usage-interface.Tpo -c -o usage-interface.obj `if test -f 'examples/interface.cc'; then $(CYGPATH_W) 'examples/interface.cc'; else $(CYGPATH_W) '$(srcdir)/examples/interface.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-interface.Tpo $(DEPDIR)/usage-interface.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='examples/interface.cc' object='usage-interface.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-interface.obj `if test -f 'examples/interface.cc'; then $(CYGPATH_W) 'examples/interface.cc'; else $(CYGPATH_W) '$(srcdir)/examples/interface.cc'; fi`
|
||||
|
||||
usage-usage.o: examples/usage.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-usage.o -MD -MP -MF $(DEPDIR)/usage-usage.Tpo -c -o usage-usage.o `test -f 'examples/usage.cc' || echo '$(srcdir)/'`examples/usage.cc
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-usage.Tpo $(DEPDIR)/usage-usage.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='examples/usage.cc' object='usage-usage.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-usage.o `test -f 'examples/usage.cc' || echo '$(srcdir)/'`examples/usage.cc
|
||||
|
||||
usage-usage.obj: examples/usage.cc
|
||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -MT usage-usage.obj -MD -MP -MF $(DEPDIR)/usage-usage.Tpo -c -o usage-usage.obj `if test -f 'examples/usage.cc'; then $(CYGPATH_W) 'examples/usage.cc'; else $(CYGPATH_W) '$(srcdir)/examples/usage.cc'; fi`
|
||||
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/usage-usage.Tpo $(DEPDIR)/usage-usage.Po
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='examples/usage.cc' object='usage-usage.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(usage_CXXFLAGS) $(CXXFLAGS) -c -o usage-usage.obj `if test -f 'examples/usage.cc'; then $(CYGPATH_W) 'examples/usage.cc'; else $(CYGPATH_W) '$(srcdir)/examples/usage.cc'; fi`
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
mkid -fID $$unique
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
set x; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
shift; \
|
||||
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
|
||||
test -n "$$unique" || unique=$$empty_fix; \
|
||||
if test $$# -gt 0; then \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
"$$@" $$unique; \
|
||||
else \
|
||||
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
|
||||
$$unique; \
|
||||
fi; \
|
||||
fi
|
||||
ctags: CTAGS
|
||||
CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
|
||||
END { if (nonempty) { for (i in files) print i; }; }'`; \
|
||||
test -z "$(CTAGS_ARGS)$$unique" \
|
||||
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
|
||||
$$unique
|
||||
|
||||
GTAGS:
|
||||
here=`$(am__cd) $(top_builddir) && pwd` \
|
||||
&& $(am__cd) $(top_srcdir) \
|
||||
&& gtags -i $(GTAGS_ARGS) "$$here"
|
||||
|
||||
distclean-tags:
|
||||
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
|
||||
|
||||
check-TESTS: $(TESTS)
|
||||
@failed=0; all=0; xfail=0; xpass=0; skip=0; \
|
||||
srcdir=$(srcdir); export srcdir; \
|
||||
list=' $(TESTS) '; \
|
||||
$(am__tty_colors); \
|
||||
if test -n "$$list"; then \
|
||||
for tst in $$list; do \
|
||||
if test -f ./$$tst; then dir=./; \
|
||||
elif test -f $$tst; then dir=; \
|
||||
else dir="$(srcdir)/"; fi; \
|
||||
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
|
||||
all=`expr $$all + 1`; \
|
||||
case " $(XFAIL_TESTS) " in \
|
||||
*[\ \ ]$$tst[\ \ ]*) \
|
||||
xpass=`expr $$xpass + 1`; \
|
||||
failed=`expr $$failed + 1`; \
|
||||
col=$$red; res=XPASS; \
|
||||
;; \
|
||||
*) \
|
||||
col=$$grn; res=PASS; \
|
||||
;; \
|
||||
esac; \
|
||||
elif test $$? -ne 77; then \
|
||||
all=`expr $$all + 1`; \
|
||||
case " $(XFAIL_TESTS) " in \
|
||||
*[\ \ ]$$tst[\ \ ]*) \
|
||||
xfail=`expr $$xfail + 1`; \
|
||||
col=$$lgn; res=XFAIL; \
|
||||
;; \
|
||||
*) \
|
||||
failed=`expr $$failed + 1`; \
|
||||
col=$$red; res=FAIL; \
|
||||
;; \
|
||||
esac; \
|
||||
else \
|
||||
skip=`expr $$skip + 1`; \
|
||||
col=$$blu; res=SKIP; \
|
||||
fi; \
|
||||
echo "$${col}$$res$${std}: $$tst"; \
|
||||
done; \
|
||||
if test "$$all" -eq 1; then \
|
||||
tests="test"; \
|
||||
All=""; \
|
||||
else \
|
||||
tests="tests"; \
|
||||
All="All "; \
|
||||
fi; \
|
||||
if test "$$failed" -eq 0; then \
|
||||
if test "$$xfail" -eq 0; then \
|
||||
banner="$$All$$all $$tests passed"; \
|
||||
else \
|
||||
if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \
|
||||
banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \
|
||||
fi; \
|
||||
else \
|
||||
if test "$$xpass" -eq 0; then \
|
||||
banner="$$failed of $$all $$tests failed"; \
|
||||
else \
|
||||
if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \
|
||||
banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \
|
||||
fi; \
|
||||
fi; \
|
||||
dashes="$$banner"; \
|
||||
skipped=""; \
|
||||
if test "$$skip" -ne 0; then \
|
||||
if test "$$skip" -eq 1; then \
|
||||
skipped="($$skip test was not run)"; \
|
||||
else \
|
||||
skipped="($$skip tests were not run)"; \
|
||||
fi; \
|
||||
test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||
dashes="$$skipped"; \
|
||||
fi; \
|
||||
report=""; \
|
||||
if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
|
||||
report="Please report to $(PACKAGE_BUGREPORT)"; \
|
||||
test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
|
||||
dashes="$$report"; \
|
||||
fi; \
|
||||
dashes=`echo "$$dashes" | sed s/./=/g`; \
|
||||
if test "$$failed" -eq 0; then \
|
||||
echo "$$grn$$dashes"; \
|
||||
else \
|
||||
echo "$$red$$dashes"; \
|
||||
fi; \
|
||||
echo "$$banner"; \
|
||||
test -z "$$skipped" || echo "$$skipped"; \
|
||||
test -z "$$report" || echo "$$report"; \
|
||||
echo "$$dashes$$std"; \
|
||||
test "$$failed" -eq 0; \
|
||||
else :; fi
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
$(am__remove_distdir)
|
||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
||||
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
|
||||
list='$(DISTFILES)'; \
|
||||
dist_files=`for file in $$list; do echo $$file; done | \
|
||||
sed -e "s|^$$srcdirstrip/||;t" \
|
||||
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
|
||||
case $$dist_files in \
|
||||
*/*) $(MKDIR_P) `echo "$$dist_files" | \
|
||||
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
|
||||
sort -u` ;; \
|
||||
esac; \
|
||||
for file in $$dist_files; do \
|
||||
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
|
||||
if test -d $$d/$$file; then \
|
||||
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
|
||||
if test -d "$(distdir)/$$file"; then \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
|
||||
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
|
||||
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
|
||||
fi; \
|
||||
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
|
||||
else \
|
||||
test -f "$(distdir)/$$file" \
|
||||
|| cp -p $$d/$$file "$(distdir)/$$file" \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-test -n "$(am__skip_mode_fix)" \
|
||||
|| find "$(distdir)" -type d ! -perm -755 \
|
||||
-exec chmod u+rwx,go+rx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r "$(distdir)"
|
||||
dist-gzip: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-bzip2: distdir
|
||||
tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-lzma: distdir
|
||||
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-xz: distdir
|
||||
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-tarZ: distdir
|
||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-shar: distdir
|
||||
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist-zip: distdir
|
||||
-rm -f $(distdir).zip
|
||||
zip -rq $(distdir).zip $(distdir)
|
||||
$(am__remove_distdir)
|
||||
|
||||
dist dist-all: distdir
|
||||
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
|
||||
$(am__remove_distdir)
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
case '$(DIST_ARCHIVES)' in \
|
||||
*.tar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||
*.tar.bz2*) \
|
||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||
*.tar.lzma*) \
|
||||
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
|
||||
*.tar.xz*) \
|
||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
||||
*.tar.Z*) \
|
||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
||||
*.shar.gz*) \
|
||||
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
|
||||
*.zip*) \
|
||||
unzip $(distdir).zip ;;\
|
||||
esac
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/_build
|
||||
mkdir $(distdir)/_inst
|
||||
chmod a-w $(distdir)
|
||||
test -d $(distdir)/_build || exit 0; \
|
||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
||||
&& am__cwd=`pwd` \
|
||||
&& $(am__cd) $(distdir)/_build \
|
||||
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
|
||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
||||
distuninstallcheck \
|
||||
&& chmod -R a-w "$$dc_install_base" \
|
||||
&& ({ \
|
||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
||||
&& rm -rf "$$dc_destdir" \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& rm -rf $(DIST_ARCHIVES) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
||||
&& cd "$$am__cwd" \
|
||||
|| exit 1
|
||||
$(am__remove_distdir)
|
||||
@(echo "$(distdir) archives ready for distribution: "; \
|
||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
||||
distuninstallcheck:
|
||||
@$(am__cd) '$(distuninstallcheck_dir)' \
|
||||
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|
||||
|| { echo "ERROR: files left after uninstall:" ; \
|
||||
if test -n "$(DESTDIR)"; then \
|
||||
echo " (check DESTDIR support)"; \
|
||||
fi ; \
|
||||
$(distuninstallcheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
distcleancheck: distclean
|
||||
@if test '$(srcdir)' = . ; then \
|
||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
||||
$(distcleancheck_listfiles) ; \
|
||||
exit 1; } >&2
|
||||
check-am: all-am
|
||||
$(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
|
||||
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) config.h
|
||||
installdirs:
|
||||
for dir in "$(DESTDIR)$(tmpdir)"; do \
|
||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
||||
done
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
|
||||
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
|
||||
`test -z '$(STRIP)' || \
|
||||
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
|
||||
mostlyclean-generic:
|
||||
|
||||
clean-generic:
|
||||
|
||||
distclean-generic:
|
||||
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
|
||||
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-checkPROGRAMS clean-generic clean-tmpPROGRAMS \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
distclean-am: clean-am distclean-compile distclean-generic \
|
||||
distclean-hdr distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
html: html-am
|
||||
|
||||
html-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-tmpPROGRAMS
|
||||
|
||||
install-dvi: install-dvi-am
|
||||
|
||||
install-dvi-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-html: install-html-am
|
||||
|
||||
install-html-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am:
|
||||
|
||||
install-man:
|
||||
|
||||
install-pdf: install-pdf-am
|
||||
|
||||
install-pdf-am:
|
||||
|
||||
install-ps: install-ps-am
|
||||
|
||||
install-ps-am:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
||||
-rm -rf $(top_srcdir)/autom4te.cache
|
||||
-rm -rf ./$(DEPDIR)
|
||||
-rm -f Makefile
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-compile mostlyclean-generic
|
||||
|
||||
pdf: pdf-am
|
||||
|
||||
pdf-am:
|
||||
|
||||
ps: ps-am
|
||||
|
||||
ps-am:
|
||||
|
||||
uninstall-am: uninstall-tmpPROGRAMS
|
||||
|
||||
.MAKE: all check-am install-am install-strip
|
||||
|
||||
.PHONY: CTAGS GTAGS all all-am am--refresh check check-TESTS check-am \
|
||||
clean clean-checkPROGRAMS clean-generic clean-tmpPROGRAMS \
|
||||
ctags dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \
|
||||
dist-tarZ dist-xz dist-zip distcheck distclean \
|
||||
distclean-compile distclean-generic distclean-hdr \
|
||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
||||
dvi-am html html-am info info-am install install-am \
|
||||
install-data install-data-am install-dvi install-dvi-am \
|
||||
install-exec install-exec-am install-html install-html-am \
|
||||
install-info install-info-am install-man install-pdf \
|
||||
install-pdf-am install-ps install-ps-am install-strip \
|
||||
install-tmpPROGRAMS installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
|
||||
tags uninstall uninstall-am uninstall-tmpPROGRAMS
|
||||
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
79
crcutil-1.0/Makefile.win
Normal file
79
crcutil-1.0/Makefile.win
Normal file
@@ -0,0 +1,79 @@
|
||||
Makefile=Makefile.win
|
||||
|
||||
CL_FLAGS=-Wall -O2 -nologo -DCRCUTIL_USE_MM_CRC32=0
|
||||
ICL_FLAGS=-Wall -O3 -Qdiag-disable:181 -Qdiag-disable:185 -Qdiag-disable:442 -Qdiag-disable:vec -DCRCUTIL_USE_MM_CRC32=0
|
||||
INCLUDES=-Icode
|
||||
|
||||
all:
|
||||
@echo Please run "nmake target" where "target" is one of:
|
||||
@echo cl64 - 64-bit Microsoft compiler
|
||||
@echo cl32 - 32-bit Microsoft compiler
|
||||
@echo icl64 - 64-bit Intel compiler
|
||||
@echo icl32 - 32-bit Intel compiler
|
||||
|
||||
|
||||
cl64:
|
||||
@call "%VCINSTALLDIR%\bin\amd64\vcvarsamd64.bat" && nmake -nologo -f $(Makefile) CC_FLAGS="$(CL_FLAGS) -Icode -Itests" CC=cl.exe configured
|
||||
|
||||
cl32:
|
||||
@call "%VCINSTALLDIR%\bin\vcvars32.bat" && nmake -nologo -f $(Makefile) CC_FLAGS="$(CL_FLAGS) -Icode -Itests" CC=cl.exe configured
|
||||
|
||||
icl64:
|
||||
@call "%ICPP_COMPILER11%bin\iclvars.bat" intel64 && nmake -nologo -f $(Makefile) CC_FLAGS="$(ICL_FLAGS) -Icode -Itests" CC=icl.exe configured
|
||||
|
||||
icl32:
|
||||
@call "%ICPP_COMPILER11%bin\iclvars.bat" ia32 && nmake -nologo -f $(Makefile) CC_FLAGS="$(ICL_FLAGS) -Icode -Itests" CC=icl.exe configured
|
||||
|
||||
|
||||
clean:
|
||||
del /q *.obj *.asm *.exe *.pdb *.suo
|
||||
|
||||
|
||||
TARGETS=unittest.exe example.exe
|
||||
|
||||
COMMON_CODE=\
|
||||
code/crc32c_sse4.cc \
|
||||
code/multiword_64_64_cl_i386_mmx.cc
|
||||
|
||||
COMMON_HEADERS=\
|
||||
code/base_types.h \
|
||||
code/crc32c_sse4.h \
|
||||
code/crc32c_sse4_intrin.h \
|
||||
code/crc_casts.h \
|
||||
code/generic_crc.h \
|
||||
code/gf_util.h \
|
||||
code/platform.h \
|
||||
code/protected_crc.h \
|
||||
code/rolling_crc.h \
|
||||
code/std_headers.h \
|
||||
code/uint128_sse2.h
|
||||
|
||||
UNITTEST_CODE=\
|
||||
tests/unittest.cc \
|
||||
tests/set_hi_pri.c \
|
||||
$(COMMON_CODE)
|
||||
|
||||
UNITTEST_HEADERS=\
|
||||
tests/aligned_alloc.h \
|
||||
tests/bob_jenkins_rng.h \
|
||||
tests/rdtsc.h \
|
||||
tests/unittest.h \
|
||||
tests/unittest_helper.h \
|
||||
$(COMMON_HEADERS)
|
||||
|
||||
EXAMPLE_CODE=\
|
||||
examples/usage.cc \
|
||||
examples/interface.cc \
|
||||
$(COMMON_CODE)
|
||||
|
||||
EXAMPLE_HEADERS=\
|
||||
examples/interface.h \
|
||||
$(COMMON_HEADERS)
|
||||
|
||||
configured: $(TARGETS)
|
||||
|
||||
unittest.exe: $(Makefile) $(UNITTEST_CODE) $(UNITTEST_HEADERS)
|
||||
$(CC) $(CC_FLAGS) $(UNITTEST_CODE)
|
||||
|
||||
example.exe: $(Makefile) $(EXAMPLE_CODE) $(EXAMPLE_HEADERS)
|
||||
$(CC) $(CC_FLAGS) -Iexamples $(EXAMPLE_CODE)
|
||||
3
crcutil-1.0/NEWS
Normal file
3
crcutil-1.0/NEWS
Normal file
@@ -0,0 +1,3 @@
|
||||
10 Jan 2010: automake is working
|
||||
|
||||
[The end of the document]
|
||||
185
crcutil-1.0/README
Normal file
185
crcutil-1.0/README
Normal file
@@ -0,0 +1,185 @@
|
||||
Goals
|
||||
-----
|
||||
|
||||
1. Performance. In distributed systems the data is CRC'ed
|
||||
on every breath in and out, and often multiple times.
|
||||
Having entire cluster spend 10% of all CPU computing
|
||||
CRCs is not something unheard of.
|
||||
|
||||
2. Functionality. Computing CRC is not enough. Oftentimes,
|
||||
distributed systems need to perform various operations
|
||||
using known CRC values (concatenation, data replacement,
|
||||
etc.) without touching the actual data.
|
||||
|
||||
3. Functionality verification: ability to catch even the most
|
||||
subtle bugs in CRC implementation.
|
||||
|
||||
4. Performance benchmarking: ability to evaluate performance
|
||||
of known CRC algorithms and choose the right one for given
|
||||
architecture and/or compiler.
|
||||
|
||||
5. Support most popular and most advanced CPUs [typically
|
||||
used in distributed environments]. That is, AMD64 and X86.
|
||||
|
||||
6. Support most popular compilers used to compile code running
|
||||
in distributed environments. That is, Microsoft's CL, GCC,
|
||||
and Intel's ICL.
|
||||
|
||||
7. Ability to easily (at run-time) create CRCs for arbitrary
|
||||
generating polynomials. Many complex projects have to deal
|
||||
with multiple CRC generating polynomials. Adding support
|
||||
yet another one should be 1-line change, not 2-week journey.
|
||||
|
||||
|
||||
Caveats
|
||||
-------
|
||||
|
||||
1. Only little-endian CPUs are supported. Reason: all the
|
||||
optimizations makes sense only when CPU has multiple ALUs
|
||||
and may execute multiple instructions in parallel. I cannot
|
||||
easily recall big-endian CPUs like that (probably PPC and
|
||||
IBM's Z-series?) -- and, unless CPU is powerful enough,
|
||||
trivial byte-by-byte Sarwate algorithm is hard to beat.
|
||||
|
||||
2. The only CPUs the code was tested are AMD64 and X86 family.
|
||||
I do not have access to Itanium. I tried to do my best to
|
||||
allow the code to work on Itanium as is, but I will not
|
||||
be very surprised if I overlooked something.
|
||||
|
||||
|
||||
How it all works
|
||||
----------------
|
||||
|
||||
Please read crc.pdf in "docs" directory -- it explains, slowly,
|
||||
step-by-step, how it all works, and provides small listings
|
||||
of respective algorithms that (hopefully, clearly) demonstrate
|
||||
how specific algorithm is implemented -- actual implementation
|
||||
is heavily optimized, a lot of loops are unrolled, and comments
|
||||
explain only the most subtle details of implementation.
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
"unittest.cc" is standalone unit test which perform extensive
|
||||
functionality validation and also tests performance of key scenarios.
|
||||
Please keep in mind that it takes almost a minute for GCC to compile
|
||||
it. Full performance test takes a couple of hours.
|
||||
|
||||
"generic_crc.h" provides a set of implemenations of generic CRCs.
|
||||
"crc32c*" set of files implements CRC using Intel's CRC32 instruction.
|
||||
"multiword*" set of files implements specialized -- and heavily
|
||||
optimized -- versions of multiword CRC.
|
||||
|
||||
However, including these files directly into your project may be
|
||||
a bad idea -- there is a lot of quite heavy-weight template code
|
||||
that you probably do not want to see included into every file that
|
||||
uses CRCs.
|
||||
|
||||
Instead, use "interface.h" which hides all the details of the
|
||||
implementation. It declares on namespace, two types in that
|
||||
namespace, and brings in a couple of standard ANSI C headers.
|
||||
|
||||
Another advantage of using "interface.h" is that actual
|
||||
implementation will pick the most efficient implementation
|
||||
of CRC for specific platform and compiler (applies to
|
||||
AMD64 and X86 platform and CL, ICL, and GCC compilers only).
|
||||
|
||||
Please see "usage.cc" which provides an example how to use
|
||||
crcutil_interface::CRC class.
|
||||
|
||||
|
||||
Compiler optimization settings
|
||||
------------------------------
|
||||
|
||||
Recommended compiler flags:
|
||||
CL: -O2 -Wall
|
||||
ICL: -O3 -Wall -Qdiag-disable:181 -Qdiag-disable:185 -Qdiag-disable:442 -Qdiag-disable:vec
|
||||
GCC 4.5+: -O3 -Wall -msse2 -mcrc32
|
||||
GCC 4.4-, AMD64: -O3 -Wall -msse2 -DCRCUTIL_USE_MM_CRC32=1
|
||||
GCC 4.4-, I386: -O3 -Wall -msse2 -DCRCUTIL_USE_MM_CRC32=1 -fomit-frame-pointer
|
||||
|
||||
|
||||
Compile-time constants
|
||||
----------------------
|
||||
|
||||
CRCUTIL_USE_ASM
|
||||
Allows the use of inline ASM for GCC on AMD64 and I386 platforms,
|
||||
32-bit Intel and Microsoft compilers on Windows.
|
||||
|
||||
See multiword*.cc files.
|
||||
|
||||
By default, turned on.
|
||||
|
||||
|
||||
HAVE_MMX
|
||||
MMX and respective intrinsics are available. When MMX is available, it
|
||||
will be used on I386 platform to speed up computation of up to 64-bit
|
||||
CRCs (1.3 CPU cycles/byte, see see *i386_mmx.cc files).
|
||||
|
||||
By default, enabled on AMD64 and I386 platforms, disabled otherwise.
|
||||
|
||||
|
||||
HAVE_SSE
|
||||
By default, enabled on AMD64 and I386 platforms, disabled otherwise.
|
||||
|
||||
|
||||
HAVE_SSE2
|
||||
By default, enabled on AMD64 and I386 platforms, disabled otherwise.
|
||||
|
||||
Allows the use of SSE2 instructions to compute 128-bit CRCs efficiently
|
||||
(see uint128_sse2.h, multiword_128_64_gcc_amd64_sse2.cc).
|
||||
|
||||
|
||||
CRCUTIL_PREFETCH_WIDTH
|
||||
Prefetch width (default is 0 -- read platform.h to see why).
|
||||
|
||||
When CRCUTIL_PREFETCH_WIDTH > 0 and HAVE_SSE, the code will try to
|
||||
prefetch CRCUTIL_PREFETCH_WIDTH bytes ahead.
|
||||
|
||||
|
||||
CRCUTIL_MIN_ALIGN_SIZE
|
||||
Align input pointer on word boundary when input length exceeds
|
||||
CRCUTIL_MIN_ALIGN_SIZE bytes and when CRC implementation will read
|
||||
input data by words.
|
||||
|
||||
Non-AMD64/I386 do not allow misaligned reads, so default value of
|
||||
CRCUTIL_MIN_ALIGN_SIZE is 0.
|
||||
|
||||
On AMD64 and I386 platforms, default value is 1KB. Even though AMD64
|
||||
and I386 allow non-aligned reads, crossing cache line boundary is not
|
||||
free, and it makes sense to align large inputs first before processing
|
||||
them (see generic_crc.h for more details).
|
||||
|
||||
|
||||
CRCUTIL_USE_MM_CRC32
|
||||
Allows the use SSE4.2 crc32 instruction when computing CRC32C (0.13 CPU
|
||||
cycles per byte, see crc32c_sse4* files).
|
||||
|
||||
If set to false (i.e. 0), _mm_crc32_u*() intrinsics will be simulated
|
||||
(useful for debugging crc32_sse4 code on machines that do not support
|
||||
SSE 4.2).
|
||||
|
||||
Hardware-assisted CRC32C is supported on AMD64 and I386 platforms only.
|
||||
|
||||
By default, enabled for Windows and for "g++ -msse4".
|
||||
|
||||
With GCC 4.5, it is possible to compile the code using "-msse2 -mcrc32
|
||||
-DCRCUTIL_USE_MM_CRC32=1" flags.
|
||||
|
||||
GCC 4.4 and earlier do not support "-mcrc32" flag, but it is still
|
||||
possible to use crc32c_sse4 code by compiling the code using "-msse2
|
||||
-DCRCUTIL_USE_MM_CRC32=1" flags. In this case, inline asm code will be
|
||||
used (see crc32c_sse4_intrin.h).
|
||||
|
||||
|
||||
CRCUTIL_FORCE_ASM_CRC32C
|
||||
GCC 4.4 and earlier versions do not have -mcrc32 flag, so
|
||||
_mm_crc32_u64/32/8 intrinsics there are not available from standard
|
||||
headers. They are replaced by inline asm code (see
|
||||
crc32c_sse4_intrin.h). To test backward compatibility using GCC 4.5+,
|
||||
use "-Wall -O3 -msse2 --DCRCUTIL_USE_MM_CRC32=1
|
||||
-DCRCUTIL_FORCE_ASM_CRC32C=1".
|
||||
|
||||
|
||||
[The end of the document]
|
||||
951
crcutil-1.0/aclocal.m4
vendored
Normal file
951
crcutil-1.0/aclocal.m4
vendored
Normal file
@@ -0,0 +1,951 @@
|
||||
# generated automatically by aclocal 1.11.1 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],,
|
||||
[m4_warning([this file was generated for autoconf 2.65.
|
||||
You have another version of autoconf. It may work, but is not guaranteed to.
|
||||
If you have problems, you may need to regenerate the build system entirely.
|
||||
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||
|
||||
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_AUTOMAKE_VERSION(VERSION)
|
||||
# ----------------------------
|
||||
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||
# generated from the m4 files accompanying Automake X.Y.
|
||||
# (This private macro should not be called outside this file.)
|
||||
AC_DEFUN([AM_AUTOMAKE_VERSION],
|
||||
[am__api_version='1.11'
|
||||
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
|
||||
dnl require some minimum version. Point them to the right macro.
|
||||
m4_if([$1], [1.11.1], [],
|
||||
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
|
||||
])
|
||||
|
||||
# _AM_AUTOCONF_VERSION(VERSION)
|
||||
# -----------------------------
|
||||
# aclocal traces this macro to find the Autoconf version.
|
||||
# This is a private macro too. Using m4_define simplifies
|
||||
# the logic in aclocal, which can simply ignore this definition.
|
||||
m4_define([_AM_AUTOCONF_VERSION], [])
|
||||
|
||||
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||
# -------------------------------
|
||||
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
|
||||
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.11.1])dnl
|
||||
m4_ifndef([AC_AUTOCONF_VERSION],
|
||||
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
|
||||
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
|
||||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||
#
|
||||
# Of course, Automake must honor this variable whenever it calls a
|
||||
# tool from the auxiliary directory. The problem is that $srcdir (and
|
||||
# therefore $ac_aux_dir as well) can be either absolute or relative,
|
||||
# depending on how configure is run. This is pretty annoying, since
|
||||
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
||||
# source directory, any form will work fine, but in subdirectories a
|
||||
# relative path needs to be adjusted first.
|
||||
#
|
||||
# $ac_aux_dir/missing
|
||||
# fails when called from a subdirectory if $ac_aux_dir is relative
|
||||
# $top_srcdir/$ac_aux_dir/missing
|
||||
# fails if $ac_aux_dir is absolute,
|
||||
# fails when called from a subdirectory in a VPATH build with
|
||||
# a relative $ac_aux_dir
|
||||
#
|
||||
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
||||
# are both prefixed by $srcdir. In an in-source build this is usually
|
||||
# harmless because $srcdir is `.', but things will broke when you
|
||||
# start a VPATH build or use an absolute $srcdir.
|
||||
#
|
||||
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
||||
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
||||
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
||||
# and then we would define $MISSING as
|
||||
# MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# This will work as long as MISSING is not called from configure, because
|
||||
# unfortunately $(top_srcdir) has no meaning in configure.
|
||||
# However there are other variables, like CC, which are often used in
|
||||
# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
||||
#
|
||||
# Another solution, used here, is to always expand $ac_aux_dir to an
|
||||
# absolute PATH. The drawback is that using absolute paths prevent a
|
||||
# configured tree to be moved without reconfiguration.
|
||||
|
||||
AC_DEFUN([AM_AUX_DIR_EXPAND],
|
||||
[dnl Rely on autoconf to set up CDPATH properly.
|
||||
AC_PREREQ([2.50])dnl
|
||||
# expand $ac_aux_dir to an absolute path
|
||||
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
])
|
||||
|
||||
# AM_CONDITIONAL -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 9
|
||||
|
||||
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
||||
# -------------------------------------
|
||||
# Define a conditional.
|
||||
AC_DEFUN([AM_CONDITIONAL],
|
||||
[AC_PREREQ(2.52)dnl
|
||||
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
|
||||
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
|
||||
AC_SUBST([$1_TRUE])dnl
|
||||
AC_SUBST([$1_FALSE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
|
||||
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
|
||||
m4_define([_AM_COND_VALUE_$1], [$2])dnl
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
$1_FALSE='#'
|
||||
else
|
||||
$1_TRUE='#'
|
||||
$1_FALSE=
|
||||
fi
|
||||
AC_CONFIG_COMMANDS_PRE(
|
||||
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
|
||||
AC_MSG_ERROR([[conditional "$1" was never defined.
|
||||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 10
|
||||
|
||||
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
||||
# written in clear, in which case automake, when reading aclocal.m4,
|
||||
# will think it sees a *use*, and therefore will trigger all it's
|
||||
# C support machinery. Also note that it means that autoscan, seeing
|
||||
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
||||
|
||||
|
||||
# _AM_DEPENDENCIES(NAME)
|
||||
# ----------------------
|
||||
# See how the compiler implements dependency checking.
|
||||
# NAME is "CC", "CXX", "GCJ", or "OBJC".
|
||||
# We try a few techniques and use that to set a single cache variable.
|
||||
#
|
||||
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
|
||||
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
|
||||
# dependency, and given that the user is not expected to run this macro,
|
||||
# just rely on AC_PROG_CC.
|
||||
AC_DEFUN([_AM_DEPENDENCIES],
|
||||
[AC_REQUIRE([AM_SET_DEPDIR])dnl
|
||||
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
|
||||
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
|
||||
AC_REQUIRE([AM_DEP_TRACK])dnl
|
||||
|
||||
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
|
||||
[$1], CXX, [depcc="$CXX" am_compiler_list=],
|
||||
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
|
||||
[$1], UPC, [depcc="$UPC" am_compiler_list=],
|
||||
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
|
||||
[depcc="$$1" am_compiler_list=])
|
||||
|
||||
AC_CACHE_CHECK([dependency style of $depcc],
|
||||
[am_cv_$1_dependencies_compiler_type],
|
||||
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
||||
# We make a subdir and do the tests there. Otherwise we can end up
|
||||
# making bogus files that we don't know about and never remove. For
|
||||
# instance it was reported that on HP-UX the gcc test will end up
|
||||
# making a dummy file named `D' -- because `-MD' means `put the output
|
||||
# in D'.
|
||||
mkdir conftest.dir
|
||||
# Copy depcomp to subdir because otherwise we won't find it if we're
|
||||
# using a relative directory.
|
||||
cp "$am_depcomp" conftest.dir
|
||||
cd conftest.dir
|
||||
# We will build objects and dependencies in a subdirectory because
|
||||
# it helps to detect inapplicable dependency modes. For instance
|
||||
# both Tru64's cc and ICC support -MD to output dependencies as a
|
||||
# side effect of compilation, but ICC will put the dependencies in
|
||||
# the current directory while Tru64 will put them in the object
|
||||
# directory.
|
||||
mkdir sub
|
||||
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
if test "$am_compiler_list" = ""; then
|
||||
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
|
||||
fi
|
||||
am__universal=false
|
||||
m4_case([$1], [CC],
|
||||
[case " $depcc " in #(
|
||||
*\ -arch\ *\ -arch\ *) am__universal=true ;;
|
||||
esac],
|
||||
[CXX],
|
||||
[case " $depcc " in #(
|
||||
*\ -arch\ *\ -arch\ *) am__universal=true ;;
|
||||
esac])
|
||||
|
||||
for depmode in $am_compiler_list; do
|
||||
# Setup a source with many dependencies, because some compilers
|
||||
# like to wrap large dependency lists on column 80 (with \), and
|
||||
# we should not choose a depcomp mode which is confused by this.
|
||||
#
|
||||
# We need to recreate these files for each test, as the compiler may
|
||||
# overwrite some of them when testing with obscure command lines.
|
||||
# This happens at least with the AIX C compiler.
|
||||
: > sub/conftest.c
|
||||
for i in 1 2 3 4 5 6; do
|
||||
echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
||||
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
||||
# Solaris 8's {/usr,}/bin/sh.
|
||||
touch sub/conftst$i.h
|
||||
done
|
||||
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
||||
|
||||
# We check with `-c' and `-o' for the sake of the "dashmstdout"
|
||||
# mode. It turns out that the SunPro C++ compiler does not properly
|
||||
# handle `-M -o', and we need to detect this. Also, some Intel
|
||||
# versions had trouble with output in subdirs
|
||||
am__obj=sub/conftest.${OBJEXT-o}
|
||||
am__minus_obj="-o $am__obj"
|
||||
case $depmode in
|
||||
gcc)
|
||||
# This depmode causes a compiler race in universal mode.
|
||||
test "$am__universal" = false || continue
|
||||
;;
|
||||
nosideeffect)
|
||||
# after this tag, mechanisms are not by side-effect, so they'll
|
||||
# only be used when explicitly requested
|
||||
if test "x$enable_dependency_tracking" = xyes; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
msvisualcpp | msvcmsys)
|
||||
# This compiler won't grok `-c -o', but also, the minuso test has
|
||||
# not run yet. These depmodes are late enough in the game, and
|
||||
# so weak that their functioning should not be impacted.
|
||||
am__obj=conftest.${OBJEXT-o}
|
||||
am__minus_obj=
|
||||
;;
|
||||
none) break ;;
|
||||
esac
|
||||
if depmode=$depmode \
|
||||
source=sub/conftest.c object=$am__obj \
|
||||
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
||||
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
|
||||
>/dev/null 2>conftest.err &&
|
||||
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
|
||||
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
||||
# icc doesn't choke on unknown options, it will just issue warnings
|
||||
# or remarks (even with -Werror). So we grep stderr for any message
|
||||
# that says an option was ignored or not supported.
|
||||
# When given -MP, icc 7.0 and 7.1 complain thusly:
|
||||
# icc: Command line warning: ignoring option '-M'; no argument required
|
||||
# The diagnosis changed in icc 8.0:
|
||||
# icc: Command line remark: option '-MP' not supported
|
||||
if (grep 'ignoring option' conftest.err ||
|
||||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
||||
am_cv_$1_dependencies_compiler_type=$depmode
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
cd ..
|
||||
rm -rf conftest.dir
|
||||
else
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
fi
|
||||
])
|
||||
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
|
||||
AM_CONDITIONAL([am__fastdep$1], [
|
||||
test "x$enable_dependency_tracking" != xno \
|
||||
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
|
||||
])
|
||||
|
||||
|
||||
# AM_SET_DEPDIR
|
||||
# -------------
|
||||
# Choose a directory name for dependency files.
|
||||
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
|
||||
AC_DEFUN([AM_SET_DEPDIR],
|
||||
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_DEP_TRACK
|
||||
# ------------
|
||||
AC_DEFUN([AM_DEP_TRACK],
|
||||
[AC_ARG_ENABLE(dependency-tracking,
|
||||
[ --disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors])
|
||||
if test "x$enable_dependency_tracking" != xno; then
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
AMDEPBACKSLASH='\'
|
||||
fi
|
||||
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
||||
AC_SUBST([AMDEPBACKSLASH])dnl
|
||||
_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
|
||||
])
|
||||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
#serial 5
|
||||
|
||||
# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# ------------------------------
|
||||
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[{
|
||||
# Autoconf 2.62 quotes --file arguments for eval, but not when files
|
||||
# are listed without --file. Let's play safe and only enable the eval
|
||||
# if we detect the quoting.
|
||||
case $CONFIG_FILES in
|
||||
*\'*) eval set x "$CONFIG_FILES" ;;
|
||||
*) set x $CONFIG_FILES ;;
|
||||
esac
|
||||
shift
|
||||
for mf
|
||||
do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named `Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# Grep'ing the first line is not enough: some people post-process
|
||||
# each Makefile.in and add a new line on top of each file to say so.
|
||||
# Grep'ing the whole file is not good either: AIX grep has a line
|
||||
# limit of 2048, but all sed's we know have understand at least 4000.
|
||||
if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
|
||||
dirpart=`AS_DIRNAME("$mf")`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running `make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n 's/^U = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
# simplest approach to changing $(DEPDIR) to its actual value in the
|
||||
# expansion.
|
||||
for file in `sed -n "
|
||||
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`AS_DIRNAME(["$file"])`
|
||||
AS_MKDIR_P([$dirpart/$fdir])
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
}
|
||||
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
|
||||
|
||||
# AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# -----------------------------
|
||||
# This macro should only be invoked once -- use via AC_REQUIRE.
|
||||
#
|
||||
# This code is only required when automatic dependency tracking
|
||||
# is enabled. FIXME. This creates each `.P' file that we will
|
||||
# need in order to bootstrap the dependency handling code.
|
||||
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AC_CONFIG_COMMANDS([depfiles],
|
||||
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
||||
])
|
||||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 16
|
||||
|
||||
# This macro actually does too much. Some checks are only needed if
|
||||
# your package does certain things. But this isn't really a big deal.
|
||||
|
||||
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
||||
# AM_INIT_AUTOMAKE([OPTIONS])
|
||||
# -----------------------------------------------
|
||||
# The call with PACKAGE and VERSION arguments is the old style
|
||||
# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
||||
# and VERSION should now be passed to AC_INIT and removed from
|
||||
# the call to AM_INIT_AUTOMAKE.
|
||||
# We support both call styles for the transition. After
|
||||
# the next Automake release, Autoconf can make the AC_INIT
|
||||
# arguments mandatory, and then we can depend on a new Autoconf
|
||||
# release and drop the old call support.
|
||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||
[AC_PREREQ([2.62])dnl
|
||||
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||
dnl the ones we care about.
|
||||
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`"; then
|
||||
# Use -I$(srcdir) only when $(srcdir) != ., so that make's output
|
||||
# is not polluted with repeated "-I."
|
||||
AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
|
||||
# test to see if srcdir already configured
|
||||
if test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
fi
|
||||
|
||||
# test whether we have cygpath
|
||||
if test -z "$CYGPATH_W"; then
|
||||
if (cygpath --version) >/dev/null 2>/dev/null; then
|
||||
CYGPATH_W='cygpath -w'
|
||||
else
|
||||
CYGPATH_W=echo
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([CYGPATH_W])
|
||||
|
||||
# Define the identity of the package.
|
||||
dnl Distinguish between old-style and new-style calls.
|
||||
m4_ifval([$2],
|
||||
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||
AC_SUBST([PACKAGE], [$1])dnl
|
||||
AC_SUBST([VERSION], [$2])],
|
||||
[_AM_SET_OPTIONS([$1])dnl
|
||||
dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
|
||||
m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
|
||||
[m4_fatal([AC_INIT should be called with package and version arguments])])dnl
|
||||
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
||||
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
||||
|
||||
_AM_IF_OPTION([no-define],,
|
||||
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
||||
|
||||
# Some tools Automake needs.
|
||||
AC_REQUIRE([AM_SANITY_CHECK])dnl
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
|
||||
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
AC_REQUIRE([AC_PROG_AWK])dnl
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
||||
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
||||
[_AM_PROG_TAR([v7])])])
|
||||
_AM_IF_OPTION([no-dependencies],,
|
||||
[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
||||
[_AM_DEPENDENCIES(CC)],
|
||||
[define([AC_PROG_CC],
|
||||
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
||||
[_AM_DEPENDENCIES(CXX)],
|
||||
[define([AC_PROG_CXX],
|
||||
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_OBJC],
|
||||
[_AM_DEPENDENCIES(OBJC)],
|
||||
[define([AC_PROG_OBJC],
|
||||
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
|
||||
])
|
||||
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
|
||||
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
|
||||
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
|
||||
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
|
||||
AC_CONFIG_COMMANDS_PRE(dnl
|
||||
[m4_provide_if([_AM_COMPILER_EXEEXT],
|
||||
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
|
||||
])
|
||||
|
||||
dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
|
||||
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
|
||||
dnl mangled by Autoconf and run in a shell conditional statement.
|
||||
m4_define([_AC_COMPILER_EXEEXT],
|
||||
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
|
||||
|
||||
|
||||
# When config.status generates a header, we must update the stamp-h file.
|
||||
# This file resides in the same directory as the config header
|
||||
# that is generated. The stamp files are numbered to have different names.
|
||||
|
||||
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
||||
# loop where config.status creates the headers, so we can generate
|
||||
# our stamp files there.
|
||||
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
||||
[# Compute $1's index in $config_headers.
|
||||
_am_arg=$1
|
||||
_am_stamp_count=1
|
||||
for _am_header in $config_headers :; do
|
||||
case $_am_header in
|
||||
$_am_arg | $_am_arg:* )
|
||||
break ;;
|
||||
* )
|
||||
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||
esac
|
||||
done
|
||||
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_SH
|
||||
# ------------------
|
||||
# Define $install_sh.
|
||||
AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
if test x"${install_sh}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
|
||||
*)
|
||||
install_sh="\${SHELL} $am_aux_dir/install-sh"
|
||||
esac
|
||||
fi
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# Check whether the underlying file-system supports filenames
|
||||
# with a leading dot. For instance MS-DOS doesn't.
|
||||
AC_DEFUN([AM_SET_LEADING_DOT],
|
||||
[rm -rf .tst 2>/dev/null
|
||||
mkdir .tst 2>/dev/null
|
||||
if test -d .tst; then
|
||||
am__leading_dot=.
|
||||
else
|
||||
am__leading_dot=_
|
||||
fi
|
||||
rmdir .tst 2>/dev/null
|
||||
AC_SUBST([am__leading_dot])])
|
||||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_MAKE_INCLUDE()
|
||||
# -----------------
|
||||
# Check to see how make treats includes.
|
||||
AC_DEFUN([AM_MAKE_INCLUDE],
|
||||
[am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
am__doit:
|
||||
@echo this is the am__doit target
|
||||
.PHONY: am__doit
|
||||
END
|
||||
# If we don't find an include directive, just comment out the code.
|
||||
AC_MSG_CHECKING([for style of include used by $am_make])
|
||||
am__include="#"
|
||||
am__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# Ignore all kinds of additional output from `make'.
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
;;
|
||||
esac
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
case `$am_make -s -f confmf 2> /dev/null` in #(
|
||||
*the\ am__doit\ target*)
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
AC_SUBST([am__include])
|
||||
AC_SUBST([am__quote])
|
||||
AC_MSG_RESULT([$_am_result])
|
||||
rm -f confinc confmf
|
||||
])
|
||||
|
||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 6
|
||||
|
||||
# AM_MISSING_PROG(NAME, PROGRAM)
|
||||
# ------------------------------
|
||||
AC_DEFUN([AM_MISSING_PROG],
|
||||
[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
$1=${$1-"${am_missing_run}$2"}
|
||||
AC_SUBST($1)])
|
||||
|
||||
|
||||
# AM_MISSING_HAS_RUN
|
||||
# ------------------
|
||||
# Define MISSING if not defined so far and test if it supports --run.
|
||||
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
AC_REQUIRE_AUX_FILE([missing])dnl
|
||||
if test x"${MISSING+set}" != xset; then
|
||||
case $am_aux_dir in
|
||||
*\ * | *\ *)
|
||||
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
|
||||
*)
|
||||
MISSING="\${SHELL} $am_aux_dir/missing" ;;
|
||||
esac
|
||||
fi
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN([`missing' script is too old or missing])
|
||||
fi
|
||||
])
|
||||
|
||||
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_MKDIR_P
|
||||
# ---------------
|
||||
# Check for `mkdir -p'.
|
||||
AC_DEFUN([AM_PROG_MKDIR_P],
|
||||
[AC_PREREQ([2.60])dnl
|
||||
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
|
||||
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
|
||||
dnl while keeping a definition of mkdir_p for backward compatibility.
|
||||
dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
|
||||
dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
|
||||
dnl Makefile.ins that do not define MKDIR_P, so we do our own
|
||||
dnl adjustment using top_builddir (which is defined more often than
|
||||
dnl MKDIR_P).
|
||||
AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
|
||||
case $mkdir_p in
|
||||
[[\\/$]]* | ?:[[\\/]]*) ;;
|
||||
*/*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
|
||||
esac
|
||||
])
|
||||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# _AM_MANGLE_OPTION(NAME)
|
||||
# -----------------------
|
||||
AC_DEFUN([_AM_MANGLE_OPTION],
|
||||
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
# _AM_SET_OPTION(NAME)
|
||||
# ------------------------------
|
||||
# Set option NAME. Presently that only means defining a flag for this option.
|
||||
AC_DEFUN([_AM_SET_OPTION],
|
||||
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||
|
||||
# _AM_SET_OPTIONS(OPTIONS)
|
||||
# ----------------------------------
|
||||
# OPTIONS is a space-separated list of Automake options.
|
||||
AC_DEFUN([_AM_SET_OPTIONS],
|
||||
[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||
|
||||
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
||||
# -------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 5
|
||||
|
||||
# AM_SANITY_CHECK
|
||||
# ---------------
|
||||
AC_DEFUN([AM_SANITY_CHECK],
|
||||
[AC_MSG_CHECKING([whether build environment is sane])
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftest.file
|
||||
# Reject unsafe characters in $srcdir or the absolute working directory
|
||||
# name. Accept space and tab only in the latter.
|
||||
am_lf='
|
||||
'
|
||||
case `pwd` in
|
||||
*[[\\\"\#\$\&\'\`$am_lf]]*)
|
||||
AC_MSG_ERROR([unsafe absolute working directory name]);;
|
||||
esac
|
||||
case $srcdir in
|
||||
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
|
||||
AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
|
||||
esac
|
||||
|
||||
# Do `set' in a subshell so we don't clobber the current shell's
|
||||
# arguments. Must try -L first in case configure is actually a
|
||||
# symlink; some systems play weird games with the mod time of symlinks
|
||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||
# directory).
|
||||
if (
|
||||
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
|
||||
if test "$[*]" = "X"; then
|
||||
# -L didn't work.
|
||||
set X `ls -t "$srcdir/configure" conftest.file`
|
||||
fi
|
||||
rm -f conftest.file
|
||||
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||
|
||||
# If neither matched, then we have a broken ls. This can happen
|
||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||
# broken ls alias from the environment. This has actually
|
||||
# happened. Such a system could not be considered "sane".
|
||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||
alias in your environment])
|
||||
fi
|
||||
|
||||
test "$[2]" = conftest.file
|
||||
)
|
||||
then
|
||||
# Ok.
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||
Check your system clock])
|
||||
fi
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_STRIP
|
||||
# ---------------------
|
||||
# One issue with vendor `install' (even GNU) is that you can't
|
||||
# specify the program used to strip binaries. This is especially
|
||||
# annoying in cross-compiling environments, where the build's strip
|
||||
# is unlikely to handle the host's binaries.
|
||||
# Fortunately install-sh will honor a STRIPPROG variable, so we
|
||||
# always use install-sh in `make install-strip', and initialize
|
||||
# STRIPPROG with the value of the STRIP variable (set by the user).
|
||||
AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
||||
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
# Installed binaries are usually stripped using `strip' when the user
|
||||
# run `make install-strip'. However `strip' might not be the right
|
||||
# tool to use in cross-compilation environments, therefore Automake
|
||||
# will honor the `STRIP' environment variable to overrule this program.
|
||||
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
||||
if test "$cross_compiling" != no; then
|
||||
AC_CHECK_TOOL([STRIP], [strip], :)
|
||||
fi
|
||||
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
|
||||
# This macro is traced by Automake.
|
||||
AC_DEFUN([_AM_SUBST_NOTMAKE])
|
||||
|
||||
# AM_SUBST_NOTMAKE(VARIABLE)
|
||||
# ---------------------------
|
||||
# Public sister of _AM_SUBST_NOTMAKE.
|
||||
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
|
||||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_PROG_TAR(FORMAT)
|
||||
# --------------------
|
||||
# Check how to create a tarball in format FORMAT.
|
||||
# FORMAT should be one of `v7', `ustar', or `pax'.
|
||||
#
|
||||
# Substitute a variable $(am__tar) that is a command
|
||||
# writing to stdout a FORMAT-tarball containing the directory
|
||||
# $tardir.
|
||||
# tardir=directory && $(am__tar) > result.tar
|
||||
#
|
||||
# Substitute a variable $(am__untar) that extract such
|
||||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility.
|
||||
AM_MISSING_PROG([AMTAR], [tar])
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
[m4_fatal([Unknown tar format])])
|
||||
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||
# Loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
||||
# Do not fold the above two line into one, because Tru64 sh and
|
||||
# Solaris sh will not grok spaces in the rhs of `-'.
|
||||
for _am_tool in $_am_tools
|
||||
do
|
||||
case $_am_tool in
|
||||
gnutar)
|
||||
for _am_tar in tar gnutar gtar;
|
||||
do
|
||||
AM_RUN_LOG([$_am_tar --version]) && break
|
||||
done
|
||||
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
||||
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
||||
am__untar="$_am_tar -xf -"
|
||||
;;
|
||||
plaintar)
|
||||
# Must skip GNU tar: if it does not support --format= it doesn't create
|
||||
# ustar tarball either.
|
||||
(tar --version) >/dev/null 2>&1 && continue
|
||||
am__tar='tar chf - "$$tardir"'
|
||||
am__tar_='tar chf - "$tardir"'
|
||||
am__untar='tar xf -'
|
||||
;;
|
||||
pax)
|
||||
am__tar='pax -L -x $1 -w "$$tardir"'
|
||||
am__tar_='pax -L -x $1 -w "$tardir"'
|
||||
am__untar='pax -r'
|
||||
;;
|
||||
cpio)
|
||||
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
||||
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
||||
am__untar='cpio -i -H $1 -d'
|
||||
;;
|
||||
none)
|
||||
am__tar=false
|
||||
am__tar_=false
|
||||
am__untar=false
|
||||
;;
|
||||
esac
|
||||
|
||||
# If the value was cached, stop now. We just wanted to have am__tar
|
||||
# and am__untar set.
|
||||
test -n "${am_cv_prog_tar_$1}" && break
|
||||
|
||||
# tar/untar a dummy directory, and stop if the command works
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
echo GrepMe > conftest.dir/file
|
||||
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
||||
rm -rf conftest.dir
|
||||
if test -s conftest.tar; then
|
||||
AM_RUN_LOG([$am__untar <conftest.tar])
|
||||
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
||||
fi
|
||||
done
|
||||
rm -rf conftest.dir
|
||||
|
||||
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||
AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
110
crcutil-1.0/autogen.sh
Executable file
110
crcutil-1.0/autogen.sh
Executable file
@@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
# See http://mij.oltrelinux.com/devel/autoconf-automake/
|
||||
|
||||
if [ -f "Makefile" ] && [ -f "Makefile.am" ] && [ -f "Makefile.in" ] && [ -d ".deps" ] ; then
|
||||
make clean
|
||||
fi
|
||||
|
||||
echo "Removing old garbage"
|
||||
if [ "${1}" != "clean" ] || [ "${2}" == "clean" ]; then
|
||||
# "./mk.sh clean" leave all the files needed for "./configure && make".
|
||||
# "./mk.sh clean clean" deletes them as well.
|
||||
# Full clean build starts from removing all generated files.
|
||||
rm -f Makefile
|
||||
rm -f Makefile.am
|
||||
rm -f Makefile.in
|
||||
rm -f aclocal.m4
|
||||
rm -f config.h.in
|
||||
rm -f configure
|
||||
rm -f configure.ac
|
||||
rm -f depcomp
|
||||
rm -f install-sh
|
||||
rm -f missing
|
||||
fi
|
||||
|
||||
rm -f autoscan.log
|
||||
rm -f config.h
|
||||
rm -f config.log
|
||||
rm -f config.status
|
||||
rm -f stamp-h1
|
||||
if [ -d "autom4te.cache" ]; then
|
||||
rm -r autom4te.cache
|
||||
fi
|
||||
if [ -d ".deps" ]; then
|
||||
rm -r .deps
|
||||
fi
|
||||
|
||||
if [ "${1}" == "clean" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
echo "Generating preliminary configure.ac"
|
||||
autoscan
|
||||
|
||||
sed 's/^AC_INIT(.*$/AC_INIT(crcutil, 1.0, crcutil@googlegroups.com)\
|
||||
AM_INIT_AUTOMAKE(crcutil, 1.0)\
|
||||
AC_CONFIG_FILES([Makefile]) \
|
||||
AC_OUTPUT()/' configure.scan >configure.ac
|
||||
|
||||
# AC_OUTPUT(Makefile)/' configure.scan >configure.ac
|
||||
rm -f configure.scan
|
||||
|
||||
echo "Generating final configure.ac"
|
||||
aclocal
|
||||
autoconf
|
||||
|
||||
echo "Generating config.h.in"
|
||||
autoheader
|
||||
|
||||
target=./Makefile.am
|
||||
echo "Generating ${target}"
|
||||
echo>${target} "AUTOMAKE_OPTIONS=foreign"
|
||||
|
||||
# --pedantic -std=c99?
|
||||
crcutil_flags="-DCRCUTIL_USE_MM_CRC32=1 -Wall -msse2 -Icode"
|
||||
echo>${target} "AM_CXXFLAGS=${crcutil_flags}"
|
||||
if [ "$(uname -a | grep ^Darwin)" == "" ] && [[ "$(c++ -dumpversion)" > "4.4.9" ]]; then
|
||||
# Static linking is not supported on Mac OS X.
|
||||
# Use static linking on Linux, otherwise GCC 4.5.0 linker produces
|
||||
# obscure warning (well, the code works but nevertheless).
|
||||
echo>>${target} "AM_LDFLAGS=-static"
|
||||
fi
|
||||
echo>>${target} 'AM_CFLAGS=$(AM_CXXFLAGS)'
|
||||
echo>>${target} "check_PROGRAMS=crcutil_ut"
|
||||
echo>>${target} "TESTS=crcutil_ut"
|
||||
sources=$(ls tests/*.cc tests/*.c tests/*.h code/*.cc code/*.h | grep -v intrinsic | tr "\n" " ")
|
||||
echo>>${target} "crcutil_ut_SOURCES=${sources}"
|
||||
|
||||
echo>>${target} "tmpdir=/tmp"
|
||||
echo>>${target} "tmp_PROGRAMS=usage"
|
||||
echo>>${target} 'usage_CXXFLAGS=$(AM_CXXFLAGS) -Itests'
|
||||
sources=$(ls examples/*.cc examples/*.h code/*.cc code/*.h tests/aligned_alloc.h | grep -v intrinsic | tr "\n" " ")
|
||||
echo>>${target} "usage_SOURCES=${sources}"
|
||||
|
||||
echo "Creating Makefile.in"
|
||||
aclocal
|
||||
automake --add-missing
|
||||
autoconf
|
||||
|
||||
cflags="-O3"
|
||||
if [[ "$(c++ -dumpversion)" > "4.4.9" ]]; then
|
||||
cflags="${cflags} -mcrc32"
|
||||
fi
|
||||
|
||||
cflags="${cflags} $2"
|
||||
|
||||
./configure CXXFLAGS="${cflags}" CFLAGS="${cflags}"
|
||||
|
||||
echo ""
|
||||
echo "Configured the library. Compiler flags:"
|
||||
echo " ${cflags}"
|
||||
echo "Library configuration flags:"
|
||||
echo " ${crcutil_flags}"
|
||||
echo ""
|
||||
|
||||
if [ "${1}" == "configure" ]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
make $1
|
||||
73
crcutil-1.0/code/base_types.h
Normal file
73
crcutil-1.0/code/base_types.h
Normal file
@@ -0,0 +1,73 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Defines 8/16/32/64-bit integer types.
|
||||
//
|
||||
// Either uint64 or uint32 will map to size_t.
|
||||
// This way, specialized variants of CRC implementation
|
||||
// parameterized by "size_t" will be reused when
|
||||
// parameterized by "uint64" or "uint32".
|
||||
// In their turn, specialized verisons are parameterized
|
||||
// by "size_t" so that one version of the code is optimal
|
||||
// both on 32-bit and 64-bit platforms.
|
||||
|
||||
#ifndef CRCUTIL_BASE_TYPES_H_
|
||||
#define CRCUTIL_BASE_TYPES_H_
|
||||
|
||||
#include "std_headers.h" // size_t, ptrdiff_t
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
template<typename A, typename B> class ChooseFirstIfSame {
|
||||
public:
|
||||
template<bool same_size, typename AA, typename BB> class ChooseFirstIfTrue {
|
||||
public:
|
||||
typedef AA Type;
|
||||
};
|
||||
template<typename AA, typename BB> class ChooseFirstIfTrue<false, AA, BB> {
|
||||
public:
|
||||
typedef BB Type;
|
||||
};
|
||||
|
||||
typedef typename ChooseFirstIfTrue<sizeof(A) == sizeof(B), A, B>::Type Type;
|
||||
};
|
||||
|
||||
typedef unsigned char uint8;
|
||||
typedef signed char int8;
|
||||
|
||||
typedef unsigned short uint16;
|
||||
typedef short int16;
|
||||
|
||||
typedef ChooseFirstIfSame<size_t, unsigned int>::Type uint32;
|
||||
typedef ChooseFirstIfSame<ptrdiff_t, int>::Type int32;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
typedef ChooseFirstIfSame<size_t, unsigned __int64>::Type uint64;
|
||||
typedef ChooseFirstIfSame<ptrdiff_t, __int64>::Type int64;
|
||||
#define HAVE_UINT64 1
|
||||
#elif defined(__GNUC__)
|
||||
typedef ChooseFirstIfSame<size_t, unsigned long long>::Type uint64;
|
||||
typedef ChooseFirstIfSame<ptrdiff_t, long long>::Type int64;
|
||||
#define HAVE_UINT64 1
|
||||
#else
|
||||
// TODO: ensure that everything compiles and works when HAVE_UINT64 is false.
|
||||
// TODO: remove HAVE_UINT64 and use sizeof(uint64) instead?
|
||||
#define HAVE_UINT64 0
|
||||
typedef uint32 uint64;
|
||||
typedef int32 int64;
|
||||
#endif
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_BASE_TYPES_H_
|
||||
366
crcutil-1.0/code/crc32c_sse4.cc
Normal file
366
crcutil-1.0/code/crc32c_sse4.cc
Normal file
@@ -0,0 +1,366 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements CRC32C using Intel's SSE4 crc32 instruction.
|
||||
// Uses _mm_crc32_u64/32/8 intrinsics if CRCUTIL_USE_MM_CRC32 is not zero,
|
||||
// emilates intrinsics via CRC_WORD/CRC_BYTE otherwise.
|
||||
|
||||
#include "crc32c_sse4.h"
|
||||
|
||||
#if HAVE_I386 || HAVE_AMD64
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#define UPDATE_STRIPE_CRCS(index, block_size, num_stripes) do { \
|
||||
CRC_UPDATE_WORD(crc0, \
|
||||
reinterpret_cast<const size_t *>(src + \
|
||||
0 * CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes))[index]); \
|
||||
CRC_UPDATE_WORD(crc1, \
|
||||
reinterpret_cast<const size_t *>(src + \
|
||||
1 * CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes))[index]); \
|
||||
CRC_UPDATE_WORD(crc2, \
|
||||
reinterpret_cast<const size_t *>(src + \
|
||||
2 * CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes))[index]); \
|
||||
if (num_stripes > 3) { \
|
||||
CRC_UPDATE_WORD(crc3, \
|
||||
reinterpret_cast<const size_t *>(src + \
|
||||
3 * CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes))[index]); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
// Multiplies "crc" by "x**(8 * STRIPE_SIZE(block_size)"
|
||||
// using appropriate multiplication table(s).
|
||||
//
|
||||
#if 0
|
||||
|
||||
// This variant is for illustration purposes only.
|
||||
// Actual implementation below:
|
||||
// 1. Splits the computation into 2 data-independent paths
|
||||
// by independently multiplying lower and upper halves
|
||||
// of "crc0" in interleaved manner, and combining the
|
||||
// results in the end.
|
||||
// 2. Removing redundant "crc0 = 0" etc. in the beginning.
|
||||
// 3. Removing redundant shifts of "tmp0" and "tmp1" in the last round.
|
||||
#define MULTIPLY_CRC(crc0, block_size, num_stripes) do { \
|
||||
size_t tmp0 = crc0; \
|
||||
crc0 = 0; \
|
||||
for (size_t i = 0; i < kNumTables; ++i) { \
|
||||
crc0 ^= CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[i][tmp0 & (kTableEntries - 1)]; \
|
||||
tmp0 >>= kTableEntryBits; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#else
|
||||
|
||||
#define MULTIPLY_CRC(crc0, block_size, num_stripes) do { \
|
||||
size_t tmp0 = crc0; \
|
||||
size_t tmp1 = crc0 >> (kTableEntryBits * kNumTablesHalfHi); \
|
||||
crc0 = CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[0][tmp0 & (kTableEntries - 1)]; \
|
||||
tmp0 >>= kTableEntryBits; \
|
||||
size_t crc1 = CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[kNumTablesHalfHi][tmp1 & (kTableEntries - 1)]; \
|
||||
tmp1 >>= kTableEntryBits; \
|
||||
for (size_t i = 1; i < kNumTablesHalfLo - 1; ++i) { \
|
||||
crc0 ^= CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[i][tmp0 & (kTableEntries - 1)]; \
|
||||
tmp0 >>= kTableEntryBits; \
|
||||
crc1 ^= CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[i + kNumTablesHalfHi][tmp1 & (kTableEntries - 1)]; \
|
||||
tmp1 >>= kTableEntryBits; \
|
||||
} \
|
||||
crc0 ^= CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[kNumTablesHalfLo - 1][tmp0 & (kTableEntries - 1)]; \
|
||||
if (kNumTables & 1) { \
|
||||
tmp0 >>= kTableEntryBits; \
|
||||
} \
|
||||
crc1 ^= CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[kNumTables - 1][tmp1]; \
|
||||
if (kNumTables & 1) { \
|
||||
crc0 ^= CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[kNumTablesHalfLo][tmp0 & (kTableEntries - 1)]; \
|
||||
} \
|
||||
crc0 ^= crc1; \
|
||||
} while (0)
|
||||
|
||||
#endif
|
||||
|
||||
// Given CRCs (crc0, crc1, etc.) of consequitive
|
||||
// stripes of STRIPE_SIZE(block_size) bytes each,
|
||||
// produces CRC of concatenated stripes.
|
||||
#define COMBINE_STRIPE_CRCS(block_size, num_stripes) do { \
|
||||
MULTIPLY_CRC(crc0, block_size, num_stripes); \
|
||||
crc0 ^= crc1; \
|
||||
MULTIPLY_CRC(crc0, block_size, num_stripes); \
|
||||
crc0 ^= crc2; \
|
||||
if (num_stripes > 3) { \
|
||||
MULTIPLY_CRC(crc0, block_size, num_stripes); \
|
||||
crc0 ^= crc3; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
// Processes input BLOCK_SIZE(block) bytes per iteration
|
||||
// by splitting a block of BLOCK_SIZE(block) bytes into N
|
||||
// equally-sized stripes of STRIPE_SIZE(block_size) each,
|
||||
// computing CRC of each stripe, and concatenating stripe CRCs.
|
||||
#define PROCESS_BLOCK(block_size, num_stripes) do { \
|
||||
while (bytes >= CRC32C_SSE4_BLOCK_SIZE(block_size, num_stripes)) { \
|
||||
Crc crc1 = 0; \
|
||||
Crc crc2 = 0; \
|
||||
Crc crc3; \
|
||||
if (num_stripes > 3) crc3 = 0; \
|
||||
{ \
|
||||
const uint8 *stripe_end = src + \
|
||||
(CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes) / \
|
||||
kUnrolledLoopBytes) * kUnrolledLoopBytes; \
|
||||
do { \
|
||||
UPDATE_STRIPE_CRCS(0, block_size, num_stripes); \
|
||||
UPDATE_STRIPE_CRCS(1, block_size, num_stripes); \
|
||||
UPDATE_STRIPE_CRCS(2, block_size, num_stripes); \
|
||||
UPDATE_STRIPE_CRCS(3, block_size, num_stripes); \
|
||||
UPDATE_STRIPE_CRCS(4, block_size, num_stripes); \
|
||||
UPDATE_STRIPE_CRCS(5, block_size, num_stripes); \
|
||||
UPDATE_STRIPE_CRCS(6, block_size, num_stripes); \
|
||||
UPDATE_STRIPE_CRCS(7, block_size, num_stripes); \
|
||||
src += kUnrolledLoopBytes; \
|
||||
} while (src < stripe_end); \
|
||||
if ((CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes) % \
|
||||
kUnrolledLoopBytes) != 0) { \
|
||||
stripe_end += \
|
||||
CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes) % \
|
||||
kUnrolledLoopBytes; \
|
||||
do { \
|
||||
UPDATE_STRIPE_CRCS(0, block_size, num_stripes); \
|
||||
src += sizeof(size_t); \
|
||||
} while (src < stripe_end); \
|
||||
} \
|
||||
} \
|
||||
COMBINE_STRIPE_CRCS(block_size, num_stripes); \
|
||||
src += CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes) * \
|
||||
((num_stripes) - 1); \
|
||||
bytes = static_cast<size_t>(end - src); \
|
||||
} \
|
||||
no_more_##block_size##_##num_stripes:; \
|
||||
} while (0)
|
||||
|
||||
size_t Crc32cSSE4::Crc32c(const void *data, size_t bytes, Crc crc0) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
crc0 ^= Base().Canonize();
|
||||
|
||||
// If we don't have too much data to process,
|
||||
// do not waste time trying to align input etc.
|
||||
// Noticeably improves performance on small inputs.
|
||||
if (bytes < 4 * sizeof(size_t)) goto less_than_4_size_t;
|
||||
if (bytes < 8 * sizeof(size_t)) goto less_than_8_size_t;
|
||||
if (bytes < 16 * sizeof(size_t)) goto less_than_16_size_t;
|
||||
|
||||
#define PROCESS_TAIL_IF_SMALL(block_size, num_stripes) do { \
|
||||
if (bytes < CRC32C_SSE4_BLOCK_SIZE(block_size, num_stripes)) { \
|
||||
goto no_more_##block_size##_##num_stripes; \
|
||||
} \
|
||||
} while (0)
|
||||
#define NOOP(block_size, num_stripes)
|
||||
|
||||
CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_ASCENDING(PROCESS_TAIL_IF_SMALL,
|
||||
NOOP,
|
||||
NOOP);
|
||||
|
||||
#undef PROCESS_TAIL_IF_SMALL
|
||||
|
||||
|
||||
// Do not use ALIGN_ON_WORD_BOUNDARY_IF_NEEDED() here because:
|
||||
// 1. It uses CRC_BYTE() which won't work.
|
||||
// 2. Its threshold may be incorrect becuase Crc32 that uses
|
||||
// native CPU crc32 instruction is much faster than
|
||||
// generic table-based CRC computation.
|
||||
//
|
||||
// In case of X5550 CPU, break even point is at 2KB -- exactly.
|
||||
if (bytes >= 2 * 1024) {
|
||||
while ((reinterpret_cast<size_t>(src) & (sizeof(Word) - 1)) != 0) {
|
||||
if (src >= end) {
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
CRC_UPDATE_BYTE(crc0, src[0]);
|
||||
src += 1;
|
||||
}
|
||||
bytes = static_cast<size_t>(end - src);
|
||||
}
|
||||
if (src >= end) {
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Quickly skip processing of too large blocks
|
||||
// Noticeably improves performance on small inputs.
|
||||
#define SKIP_BLOCK_IF_NEEDED(block_size, num_stripes) do { \
|
||||
if (bytes < CRC32C_SSE4_BLOCK_SIZE(block_size, num_stripes)) { \
|
||||
goto no_more_##block_size##_##num_stripes; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_ASCENDING(NOOP,
|
||||
SKIP_BLOCK_IF_NEEDED,
|
||||
SKIP_BLOCK_IF_NEEDED);
|
||||
|
||||
#undef SKIP_BLOCK_IF_NEEDED
|
||||
|
||||
// Process data in all blocks.
|
||||
CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_DESCENDING(PROCESS_BLOCK,
|
||||
PROCESS_BLOCK,
|
||||
PROCESS_BLOCK);
|
||||
|
||||
// Finish the tail word-by-word and then byte-by-byte.
|
||||
#define CRC_UPDATE_WORD_4(index) do { \
|
||||
CRC_UPDATE_WORD(crc0, reinterpret_cast<const size_t *>(src)[index]); \
|
||||
CRC_UPDATE_WORD(crc0, reinterpret_cast<const size_t *>(src)[index + 1]); \
|
||||
CRC_UPDATE_WORD(crc0, reinterpret_cast<const size_t *>(src)[index + 2]); \
|
||||
CRC_UPDATE_WORD(crc0, reinterpret_cast<const size_t *>(src)[index + 3]); \
|
||||
} while (0)
|
||||
|
||||
if (bytes >= 4 * 4 * sizeof(size_t)) {
|
||||
end -= 4 * 4 * sizeof(size_t);
|
||||
do {
|
||||
CRC_UPDATE_WORD_4(4 * 0);
|
||||
CRC_UPDATE_WORD_4(4 * 1);
|
||||
CRC_UPDATE_WORD_4(4 * 2);
|
||||
CRC_UPDATE_WORD_4(4 * 3);
|
||||
src += 4 * 4 * sizeof(size_t);
|
||||
} while (src <= end);
|
||||
end += 4 * 4 * sizeof(size_t);
|
||||
bytes = static_cast<size_t>(end - src);
|
||||
}
|
||||
less_than_16_size_t:
|
||||
|
||||
if (bytes >= 4 * 2 * sizeof(size_t)) {
|
||||
CRC_UPDATE_WORD_4(4 * 0);
|
||||
CRC_UPDATE_WORD_4(4 * 1);
|
||||
src += 4 * 2 * sizeof(size_t);
|
||||
bytes -= 4 * 2 * sizeof(size_t);
|
||||
}
|
||||
less_than_8_size_t:
|
||||
|
||||
if (bytes >= 4 * sizeof(size_t)) {
|
||||
CRC_UPDATE_WORD_4(0);
|
||||
src += 4 * sizeof(size_t);
|
||||
bytes -= 4 * sizeof(size_t);
|
||||
}
|
||||
less_than_4_size_t:
|
||||
|
||||
if (bytes >= 1 * sizeof(size_t)) {
|
||||
end -= 1 * sizeof(size_t);
|
||||
do {
|
||||
CRC_UPDATE_WORD(crc0, reinterpret_cast<const size_t *>(src)[0]);
|
||||
src += 1 * sizeof(size_t);
|
||||
} while (src <= end);
|
||||
end += 1 * sizeof(size_t);
|
||||
}
|
||||
|
||||
while (src < end) {
|
||||
CRC_UPDATE_BYTE(crc0, src[0]);
|
||||
src += 1;
|
||||
}
|
||||
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
|
||||
void Crc32cSSE4::Init(bool constant) {
|
||||
base_.Init(FixedGeneratingPolynomial(), FixedDegree(), constant);
|
||||
|
||||
#define INIT_MUL_TABLE(block_size, num_stripes) do { \
|
||||
size_t multiplier = \
|
||||
Base().Xpow8N(CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes)); \
|
||||
for (size_t table = 0; table < kNumTables; ++table) { \
|
||||
for (size_t entry = 0; entry < kTableEntries; ++entry) { \
|
||||
size_t value = static_cast<uint32>(entry << (kTableEntryBits * table)); \
|
||||
CRC32C_SSE4_MUL_TABLE(block_size, num_stripes)[table][entry] = \
|
||||
static_cast<Entry>(Base().Multiply(value, multiplier)); \
|
||||
} \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
CRC32C_SSE4_ENUMERATE_ALL_BLOCKS(INIT_MUL_TABLE);
|
||||
|
||||
#undef INIT_MUL_TABLE
|
||||
|
||||
#if !CRCUTIL_USE_MM_CRC32
|
||||
for (size_t j = 0; j < sizeof(Word); ++j) {
|
||||
Crc k = Base().XpowN((sizeof(Word) - 1 - j) * 8 + 32);
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
crc_word_[j][i] = Base().MultiplyUnnormalized(i, 8, k);
|
||||
}
|
||||
}
|
||||
#endif // !CRCUTIL_USE_MM_CRC32
|
||||
}
|
||||
|
||||
|
||||
bool Crc32cSSE4::IsSSE42Available() {
|
||||
#if defined(_MSC_VER)
|
||||
int cpu_info[4];
|
||||
__cpuid(cpu_info, 1);
|
||||
return ((cpu_info[3] & (1 << 20)) != 0);
|
||||
#elif defined(__GNUC__) && (HAVE_AMD64 || HAVE_I386)
|
||||
// Not using "cpuid.h" intentionally: it is missing from
|
||||
// too many installations.
|
||||
uint32 eax;
|
||||
uint32 ecx;
|
||||
uint32 edx;
|
||||
__asm__ volatile(
|
||||
#if HAVE_I386 && defined(__PIC__)
|
||||
"push ebx\n"
|
||||
"cpuid\n"
|
||||
"pop ebx\n"
|
||||
#else
|
||||
"cpuid\n"
|
||||
#endif // HAVE_I386 && defined(__PIC__)
|
||||
: "=a" (eax), "=c" (ecx), "=d" (edx)
|
||||
: "a" (1), "2" (0)
|
||||
: "%ebx"
|
||||
);
|
||||
return ((ecx & (1 << 20)) != 0);
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void RollingCrc32cSSE4::Init(const Crc32cSSE4 &crc,
|
||||
size_t roll_window_bytes,
|
||||
const Crc &start_value) {
|
||||
crc_ = &crc;
|
||||
roll_window_bytes_ = roll_window_bytes;
|
||||
start_value_ = start_value;
|
||||
|
||||
Crc add = crc.Base().Canonize() ^ start_value;
|
||||
add = crc.Base().Multiply(add, crc.Base().Xpow8N(roll_window_bytes));
|
||||
add ^= crc.Base().Canonize();
|
||||
Crc mul = crc.Base().One() ^ crc.Base().Xpow8N(1);
|
||||
add = crc.Base().Multiply(add, mul);
|
||||
|
||||
mul = crc.Base().XpowN(8 * roll_window_bytes + crc.Base().Degree());
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
out_[i] = static_cast<Entry>(
|
||||
crc.Base().MultiplyUnnormalized(
|
||||
static_cast<Crc>(i), 8, mul) ^ add);
|
||||
}
|
||||
|
||||
#if !CRCUTIL_USE_MM_CRC32
|
||||
memcpy(crc_word_, crc_->crc_word_, sizeof(crc_word_));
|
||||
#endif // !CRCUTIL_USE_MM_CRC32
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // HAVE_I386 || HAVE_AMD64
|
||||
252
crcutil-1.0/code/crc32c_sse4.h
Normal file
252
crcutil-1.0/code/crc32c_sse4.h
Normal file
@@ -0,0 +1,252 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements CRC32C using Intel's SSE4 crc32 instruction.
|
||||
// Uses _mm_crc32_u64/32/8 intrinsics if CRCUTIL_USE_MM_CRC32 is not zero,
|
||||
// emilates intrinsics via CRC_WORD/CRC_BYTE otherwise.
|
||||
|
||||
#ifndef CRCUTIL_CRC32C_SSE4_H_
|
||||
#define CRCUTIL_CRC32C_SSE4_H_
|
||||
|
||||
#include "gf_util.h" // base types, gf_util class, etc.
|
||||
#include "crc32c_sse4_intrin.h" // _mm_crc32_u* intrinsics
|
||||
|
||||
#if HAVE_I386 || HAVE_AMD64
|
||||
|
||||
#if CRCUTIL_USE_MM_CRC32
|
||||
|
||||
#if HAVE_I386
|
||||
#define CRC_UPDATE_WORD(crc, value) (crc = _mm_crc32_u32(crc, (value)))
|
||||
#else
|
||||
#define CRC_UPDATE_WORD(crc, value) (crc = _mm_crc32_u64(crc, (value)))
|
||||
#endif // HAVE_I386
|
||||
|
||||
#define CRC_UPDATE_BYTE(crc, value) \
|
||||
(crc = _mm_crc32_u8(static_cast<uint32>(crc), static_cast<uint8>(value)))
|
||||
|
||||
#else
|
||||
|
||||
#include "generic_crc.h"
|
||||
|
||||
#define CRC_UPDATE_WORD(crc, value) do { \
|
||||
size_t buf = (value); \
|
||||
CRC_WORD(this, crc, buf); \
|
||||
} while (0)
|
||||
#define CRC_UPDATE_BYTE(crc, value) do { \
|
||||
CRC_BYTE(this, crc, (value)); \
|
||||
} while (0)
|
||||
|
||||
#endif // CRCUTIL_USE_MM_CRC32
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#pragma pack(push, 16)
|
||||
|
||||
// Since the same pieces should be parameterized in many different places
|
||||
// and we do not want to introduce a mistake which is rather hard to find,
|
||||
// use a macro to enumerate all block sizes.
|
||||
//
|
||||
// Block sizes and number of stripes were tuned for best performance.
|
||||
//
|
||||
// All constants should be literal constants (too lazy to fix the macro).
|
||||
//
|
||||
// The use of different "macro_first", "macro", and "macro_last"
|
||||
// allows generation of different code for smallest, in between,
|
||||
// and largest block sizes.
|
||||
//
|
||||
// This macro shall be kept in sync with
|
||||
// CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_DESCENDING.
|
||||
// Failure to do so will cause compile-time error.
|
||||
#define CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_ASCENDING( \
|
||||
macro_smallest, macro, macro_largest) \
|
||||
macro_smallest(512, 3); \
|
||||
macro(1024, 3); \
|
||||
macro(4096, 3); \
|
||||
macro_largest(32768, 3)
|
||||
|
||||
// This macro shall be kept in sync with
|
||||
// CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_ASCENDING.
|
||||
// Failure to do so will cause compile-time error.
|
||||
#define CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_DESCENDING( \
|
||||
macro_smallest, macro, macro_largest) \
|
||||
macro_largest(32768, 3); \
|
||||
macro(4096, 3); \
|
||||
macro(1024, 3); \
|
||||
macro_smallest(512, 3)
|
||||
|
||||
// Enumerates all block sizes.
|
||||
#define CRC32C_SSE4_ENUMERATE_ALL_BLOCKS(macro) \
|
||||
CRC32C_SSE4_ENUMERATE_ALL_BLOCKS_ASCENDING(macro, macro, macro)
|
||||
|
||||
#define CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes) \
|
||||
(((block_size) / (num_stripes)) & ~(sizeof(size_t) - 1))
|
||||
|
||||
#define CRC32C_SSE4_BLOCK_SIZE(block_size, num_stripes) \
|
||||
(CRC32C_SSE4_STRIPE_SIZE(block_size, num_stripes) * (num_stripes))
|
||||
|
||||
#define CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
mul_table_##block_size##_##num_blocks##_
|
||||
|
||||
class RollingCrc32cSSE4;
|
||||
|
||||
class Crc32cSSE4 {
|
||||
public:
|
||||
// Exports Crc, TableEntry, and Word (needed by RollingCrc).
|
||||
typedef size_t Crc;
|
||||
typedef Crc Word;
|
||||
typedef Crc TableEntry;
|
||||
|
||||
Crc32cSSE4() {}
|
||||
|
||||
// Initializes the tables given generating polynomial of degree (degree).
|
||||
// If "canonical" is true, crc value will be XOR'ed with (-1) before and
|
||||
// after actual CRC computation.
|
||||
explicit Crc32cSSE4(bool canonical) {
|
||||
Init(canonical);
|
||||
}
|
||||
void Init(bool canonical);
|
||||
|
||||
// Initializes the tables given generating polynomial of degree.
|
||||
// If "canonical" is true, crc value will be XOR'ed with (-1) before and
|
||||
// after actual CRC computation.
|
||||
// Provided for compatibility with GenericCrc.
|
||||
Crc32cSSE4(const Crc &generating_polynomial,
|
||||
size_t degree,
|
||||
bool canonical) {
|
||||
Init(generating_polynomial, degree, canonical);
|
||||
}
|
||||
void Init(const Crc &generating_polynomial,
|
||||
size_t degree,
|
||||
bool canonical) {
|
||||
if (generating_polynomial == FixedGeneratingPolynomial() &&
|
||||
degree == FixedDegree()) {
|
||||
Init(canonical);
|
||||
}
|
||||
}
|
||||
|
||||
// Returns fixed generating polymonial the class implements.
|
||||
static Crc FixedGeneratingPolynomial() {
|
||||
return 0x82f63b78;
|
||||
}
|
||||
|
||||
// Returns degree of fixed generating polymonial the class implements.
|
||||
static Crc FixedDegree() {
|
||||
return 32;
|
||||
}
|
||||
|
||||
// Returns base class.
|
||||
const GfUtil<Crc> &Base() const { return base_; }
|
||||
|
||||
// Computes CRC32.
|
||||
size_t CrcDefault(const void *data, size_t bytes, const Crc &crc) const {
|
||||
return Crc32c(data, bytes, crc);
|
||||
}
|
||||
|
||||
// Returns true iff crc32 instruction is available.
|
||||
static bool IsSSE42Available();
|
||||
|
||||
protected:
|
||||
// Actual implementation.
|
||||
size_t Crc32c(const void *data, size_t bytes, Crc crc) const;
|
||||
|
||||
enum {
|
||||
kTableEntryBits = 8,
|
||||
kTableEntries = 1 << kTableEntryBits,
|
||||
kNumTables = (32 + kTableEntryBits - 1) / kTableEntryBits,
|
||||
kNumTablesHalfLo = kNumTables / 2,
|
||||
kNumTablesHalfHi = (kNumTables + 1) / 2,
|
||||
|
||||
kUnrolledLoopCount = 8,
|
||||
kUnrolledLoopBytes = kUnrolledLoopCount * sizeof(size_t),
|
||||
};
|
||||
|
||||
// May be set to size_t or uint32, whichever is faster.
|
||||
typedef uint32 Entry;
|
||||
|
||||
#define DECLARE_MUL_TABLE(block_size, num_stripes) \
|
||||
Entry CRC32C_SSE4_MUL_TABLE(block_size, num_stripes) \
|
||||
[kNumTables][kTableEntries]
|
||||
|
||||
CRC32C_SSE4_ENUMERATE_ALL_BLOCKS(DECLARE_MUL_TABLE);
|
||||
|
||||
#undef DECLARE_MUL_TABLE
|
||||
|
||||
GfUtil<Crc> base_;
|
||||
|
||||
#if !CRCUTIL_USE_MM_CRC32
|
||||
TableEntry crc_word_[sizeof(Word)][256];
|
||||
friend class RollingCrc32cSSE4;
|
||||
#endif // !CRCUTIL_USE_MM_CRC32
|
||||
} GCC_ALIGN_ATTRIBUTE(16);
|
||||
|
||||
class RollingCrc32cSSE4 {
|
||||
public:
|
||||
typedef Crc32cSSE4::Crc Crc;
|
||||
typedef Crc32cSSE4::TableEntry TableEntry;
|
||||
typedef Crc32cSSE4::Word Word;
|
||||
|
||||
RollingCrc32cSSE4() {}
|
||||
|
||||
// Initializes internal data structures.
|
||||
// Retains reference to "crc" instance -- it is used by Start().
|
||||
RollingCrc32cSSE4(const Crc32cSSE4 &crc,
|
||||
size_t roll_window_bytes,
|
||||
const Crc &start_value) {
|
||||
Init(crc, roll_window_bytes, start_value);
|
||||
}
|
||||
void Init(const Crc32cSSE4 &crc,
|
||||
size_t roll_window_bytes,
|
||||
const Crc &start_value);
|
||||
|
||||
// Computes crc of "roll_window_bytes" using
|
||||
// "start_value" of "crc" (see Init()).
|
||||
Crc Start(const void *data) const {
|
||||
return crc_->CrcDefault(data, roll_window_bytes_, start_value_);
|
||||
}
|
||||
|
||||
// Computes CRC of "roll_window_bytes" starting in next position.
|
||||
Crc Roll(const Crc &old_crc, size_t byte_out, size_t byte_in) const {
|
||||
Crc crc = old_crc;
|
||||
CRC_UPDATE_BYTE(crc, byte_in);
|
||||
crc ^= out_[byte_out];
|
||||
return crc;
|
||||
}
|
||||
|
||||
// Returns start value.
|
||||
Crc StartValue() const { return start_value_; }
|
||||
|
||||
// Returns length of roll window.
|
||||
size_t WindowBytes() const { return roll_window_bytes_; }
|
||||
|
||||
protected:
|
||||
typedef Crc Entry;
|
||||
Entry out_[256];
|
||||
|
||||
// Used only by Start().
|
||||
Crc start_value_;
|
||||
const Crc32cSSE4 *crc_;
|
||||
size_t roll_window_bytes_;
|
||||
|
||||
#if !CRCUTIL_USE_MM_CRC32
|
||||
TableEntry crc_word_[sizeof(Word)][256];
|
||||
#endif // !CRCUTIL_USE_MM_CRC32
|
||||
} GCC_ALIGN_ATTRIBUTE(16);
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // HAVE_I386 || HAVE_AMD64
|
||||
|
||||
#endif // CRCUTIL_CRC32C_SSE4_H_
|
||||
99
crcutil-1.0/code/crc32c_sse4_intrin.h
Normal file
99
crcutil-1.0/code/crc32c_sse4_intrin.h
Normal file
@@ -0,0 +1,99 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Provides _mm_crc32_u64/32/8 intrinsics.
|
||||
|
||||
#ifndef CRCUTIL_CRC32C_SSE4_INTRIN_H_
|
||||
#define CRCUTIL_CRC32C_SSE4_INTRIN_H_
|
||||
|
||||
#include "platform.h"
|
||||
#include "base_types.h"
|
||||
|
||||
#if CRCUTIL_USE_MM_CRC32 && (HAVE_I386 || HAVE_AMD64)
|
||||
|
||||
#if defined(_MSC_VER) || defined(__SSE4_2__)
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(push)
|
||||
// '_M_IA64' is not defined as a preprocessor macro
|
||||
#pragma warning(disable: 4668)
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
#include <nmmintrin.h>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(pop)
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
#elif GCC_VERSION_AVAILABLE(4, 5) && !defined(CRCUTIL_FORCE_ASM_CRC32C)
|
||||
// Allow the use of _mm_crc32_u* intrinsic when CRCUTIL_USE_MM_CRC32
|
||||
// is set irrespective of "-msse*" settings. This way, the sources
|
||||
// may be compiled with "-msse2 -mcrc32" and work on older CPUs,
|
||||
// while taking full advantage of "crc32" instruction on newer
|
||||
// CPUs (requires dynamic CPU detection). See "interface.cc".
|
||||
//
|
||||
// If neither -msse4 or -mcrc32 is provided and CRCUTIL_USE_MM_CRC32 is set
|
||||
// and CRCUTIL_FORCE_ASM_CRC32 is not set, compile-time error will happen.
|
||||
// Why? Becuase GCC disables __builtin_ia32_crc32* intrinsics when compiled
|
||||
// without -msse4 or -mcrc32. -msse4 could be detected at run time by checking
|
||||
// whether __SSE4_2__ is defined, but there is no way to tell whether the
|
||||
// sources are compiled with -mcrc32.
|
||||
|
||||
extern __inline unsigned int __attribute__((
|
||||
__gnu_inline__, __always_inline__, __artificial__))
|
||||
_mm_crc32_u8(unsigned int __C, unsigned char __V) {
|
||||
return __builtin_ia32_crc32qi(__C, __V);
|
||||
}
|
||||
#ifdef __x86_64__
|
||||
extern __inline unsigned long long __attribute__((
|
||||
__gnu_inline__, __always_inline__, __artificial__))
|
||||
_mm_crc32_u64(unsigned long long __C, unsigned long long __V) {
|
||||
return __builtin_ia32_crc32di(__C, __V);
|
||||
}
|
||||
#else
|
||||
extern __inline unsigned int __attribute__((
|
||||
__gnu_inline__, __always_inline__, __artificial__))
|
||||
_mm_crc32_u32(unsigned int __C, unsigned int __V) {
|
||||
return __builtin_ia32_crc32si (__C, __V);
|
||||
}
|
||||
#endif // __x86_64__
|
||||
|
||||
#else
|
||||
|
||||
// GCC 4.4.x and earlier: use inline asm.
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
__forceinline uint64 _mm_crc32_u64(uint64 crc, uint64 value) {
|
||||
asm("crc32q %[value], %[crc]\n" : [crc] "+r" (crc) : [value] "rm" (value));
|
||||
return crc;
|
||||
}
|
||||
|
||||
__forceinline uint32 _mm_crc32_u32(uint32 crc, uint64 value) {
|
||||
asm("crc32l %[value], %[crc]\n" : [crc] "+r" (crc) : [value] "rm" (value));
|
||||
return crc;
|
||||
}
|
||||
|
||||
__forceinline uint32 _mm_crc32_u8(uint32 crc, uint8 value) {
|
||||
asm("crc32b %[value], %[crc]\n" : [crc] "+r" (crc) : [value] "rm" (value));
|
||||
return crc;
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif
|
||||
|
||||
#endif // CRCUTIL_USE_MM_CRC32 && (HAVE_I386 || HAVE_AMD64)
|
||||
|
||||
#endif // CRCUTIL_CRC32C_SSE4_INTRIN_H_
|
||||
68
crcutil-1.0/code/crc_casts.h
Normal file
68
crcutil-1.0/code/crc_casts.h
Normal file
@@ -0,0 +1,68 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Casting between integers and compound CRC types.
|
||||
|
||||
#ifndef CRCUTIL_CRC_CASTS_H_
|
||||
#define CRCUTIL_CRC_CASTS_H_
|
||||
|
||||
#include "base_types.h" // uint8, uint64
|
||||
#include "platform.h" // __forceinline
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
// Downcasts a value of (oftentimes larger) Crc type to (smaller base integer)
|
||||
// Result type, enabling specialized downcasts implemented by "large integer"
|
||||
// classes (e.g. uint128_sse2).
|
||||
template<typename Crc, typename Result>
|
||||
__forceinline Result Downcast(const Crc &x) {
|
||||
return static_cast<Result>(x);
|
||||
}
|
||||
|
||||
// Extracts 8 least significant bits from a value of Crc type.
|
||||
#define TO_BYTE(x) Downcast<Crc, uint8>(x)
|
||||
|
||||
// Converts a pair of uint64 bit values into single value of CRC type.
|
||||
// It is caller's responsibility to ensure that the input is correct.
|
||||
template<typename Crc>
|
||||
__forceinline Crc CrcFromUint64(uint64 lo, uint64 hi = 0) {
|
||||
if (sizeof(Crc) <= sizeof(lo)) {
|
||||
return static_cast<Crc>(lo);
|
||||
} else {
|
||||
// static_cast to keep compiler happy.
|
||||
Crc result = static_cast<Crc>(hi);
|
||||
result = SHIFT_LEFT_SAFE(result, 8 * sizeof(lo));
|
||||
result ^= lo;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// Converts Crc value to a pair of uint64 values.
|
||||
template<typename Crc>
|
||||
__forceinline void Uint64FromCrc(const Crc &crc,
|
||||
uint64 *lo, uint64 *hi = NULL) {
|
||||
if (sizeof(*lo) >= sizeof(crc)) {
|
||||
*lo = Downcast<Crc, uint64>(crc);
|
||||
if (hi != NULL) {
|
||||
*hi = 0;
|
||||
}
|
||||
} else {
|
||||
*lo = Downcast<Crc, uint64>(crc);
|
||||
*hi = Downcast<Crc, uint64>(SHIFT_RIGHT_SAFE(crc, 8 * sizeof(lo)));
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_CRC_CASTS_H_
|
||||
687
crcutil-1.0/code/generic_crc.h
Normal file
687
crcutil-1.0/code/generic_crc.h
Normal file
@@ -0,0 +1,687 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Defines GenericCrc class which implements arbitrary CRCs.
|
||||
//
|
||||
// Please read crc.pdf to understand how it all works.
|
||||
|
||||
#ifndef CRCUTIL_GENERIC_CRC_H_
|
||||
#define CRCUTIL_GENERIC_CRC_H_
|
||||
|
||||
#include "base_types.h" // uint8
|
||||
#include "crc_casts.h" // TO_BYTE(), Downcast<>.
|
||||
#include "gf_util.h" // GfUtil<Crc> class.
|
||||
#include "platform.h" // GCC_ALIGN_ATTRIBUTE(16)
|
||||
#include "uint128_sse2.h" // uint128_sse2 type (if necessary)
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#pragma pack(push, 16)
|
||||
|
||||
// Extends CRC by one byte.
|
||||
// Technically, if degree of a polynomial does not exceed 8,
|
||||
// right shift by 8 bits is not required, but who cares about CRC-8?
|
||||
#define CRC_BYTE(table, crc, byte) do { \
|
||||
crc = ((sizeof(crc) > 1) ? SHIFT_RIGHT_SAFE(crc, 8) : 0) ^ \
|
||||
table->crc_word_[sizeof(Word) - 1][TO_BYTE(crc) ^ (byte)]; \
|
||||
} while (0)
|
||||
|
||||
#define TABLE_ENTRY(table, byte, buf) \
|
||||
table[byte][Downcast<Word, uint8>(buf)]
|
||||
|
||||
#define TABLE_ENTRY_LAST(table, buf) \
|
||||
table[sizeof(Word) - 1][buf]
|
||||
|
||||
// Extends CRC by one word.
|
||||
#define CRC_WORD(table, crc, buf) do { \
|
||||
buf ^= Downcast<Crc, Word>(crc); \
|
||||
if (sizeof(crc) > sizeof(buf)) { \
|
||||
crc = SHIFT_RIGHT_SAFE(crc, sizeof(buf) * 8); \
|
||||
crc ^= TABLE_ENTRY(table->crc_word_, 0, buf); \
|
||||
} else { \
|
||||
crc = TABLE_ENTRY(table->crc_word_, 0, buf); \
|
||||
} \
|
||||
buf >>= 8; \
|
||||
for (size_t byte = 1; byte < sizeof(buf) - 1; ++byte) { \
|
||||
crc ^= TABLE_ENTRY(table->crc_word_, byte, buf); \
|
||||
buf >>= 8; \
|
||||
} \
|
||||
crc ^= TABLE_ENTRY_LAST(table->crc_word_, buf); \
|
||||
} while (0)
|
||||
|
||||
// Process beginning of data block byte by byte until source pointer
|
||||
// becomes perfectly aligned on Word boundary.
|
||||
#define ALIGN_ON_WORD_BOUNDARY(table, src, end, crc, Word) do { \
|
||||
while ((reinterpret_cast<size_t>(src) & (sizeof(Word) - 1)) != 0) { \
|
||||
if (src >= end) { \
|
||||
return (crc ^ table->Base().Canonize()); \
|
||||
} \
|
||||
CRC_BYTE(table, crc, *src); \
|
||||
src += 1; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
// On amd64, enforcing alignment is 2-4% slower on small (<= 64 bytes) blocks
|
||||
// but 6-10% faster on larger blocks (>= 2KB).
|
||||
// Break-even point (+-1%) is around 1KB (Q9650, E6600).
|
||||
//
|
||||
#define ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, table, src, end, crc, Word) \
|
||||
do { \
|
||||
if (sizeof(Word) > 8 || (bytes) > CRCUTIL_MIN_ALIGN_SIZE) { \
|
||||
ALIGN_ON_WORD_BOUNDARY(table, src, end, crc, Word); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable: 4127) // conditional expression is constant
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
// Forward declarations.
|
||||
template<typename CrcImplementation> class RollingCrc;
|
||||
|
||||
// Crc is the type used internally and to return values of N-bit CRC.
|
||||
// It should be at least as large as "TableEntry" and "Word" but
|
||||
// may be larger (e.g. for 16-bit CRC, TableEntry and Word may be
|
||||
// set to uint16 but Crc may be set to uint32).
|
||||
//
|
||||
// TableEntry is the type of values stored in the tables.
|
||||
// To implement N-bit CRC, TableEntry should be large enough
|
||||
// to store N bits.
|
||||
//
|
||||
// Word is the type used to read data sizeof(Word) at a time.
|
||||
// Ideally, it shoulde be "most suitable for given architecture"
|
||||
// integer type -- typically "size_t".
|
||||
//
|
||||
// kStride is the number of words processed in interleaved manner by
|
||||
// CrcMultiword() and CrcWordblock(). Shall be either 3 or 4.
|
||||
// Optimal value depends on hardware architecture (AMD64, ARM, etc).
|
||||
//
|
||||
template<typename _Crc, typename _TableEntry, typename _Word, int kStride>
|
||||
class GenericCrc {
|
||||
public:
|
||||
// Make Crc, TableEntry, and Word types visible (used by RollingCrc etc.)
|
||||
typedef _Crc Crc;
|
||||
typedef _TableEntry TableEntry;
|
||||
typedef _Word Word;
|
||||
|
||||
GenericCrc() {}
|
||||
|
||||
// Initializes the tables given generating polynomial of degree.
|
||||
// If "canonical" is true, crc value will be XOR'ed with (-1) before and
|
||||
// after actual CRC computation.
|
||||
GenericCrc(const Crc &generating_polynomial, size_t degree, bool canonical) {
|
||||
Init(generating_polynomial, degree, canonical);
|
||||
}
|
||||
void Init(const Crc &generating_polynomial, size_t degree, bool canonical) {
|
||||
base_.Init(generating_polynomial, degree, canonical);
|
||||
|
||||
// Instead of computing
|
||||
// table[j][i] = MultiplyUnnormalized(i, 8, k),
|
||||
// for all i = 0...255, we may notice that
|
||||
// if i = 2**n then for all m = 1...(i-1)
|
||||
// MultiplyUnnormalized(i + m, 8, k) =
|
||||
// MultiplyUnnormalized(i ^ m, 8, k) =
|
||||
// MultiplyUnnormalized(i, 8, k) ^ MultiplyUnnormalized(m, 8, k) =
|
||||
// MultiplyUnnormalized(i, 8, k) ^ crc_word_interleaved[j][m] =
|
||||
// table[i] ^ table[m].
|
||||
#if 0
|
||||
for (size_t j = 0; j < sizeof(Word); ++j) {
|
||||
Crc k = Base().XpowN((sizeof(Word) * kStride - 1 - j) * 8 + degree);
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
Crc temp = Base().MultiplyUnnormalized(static_cast<Crc>(i), 8, k);
|
||||
this->crc_word_interleaved_[j][i] = Downcast<Crc, TableEntry>(temp);
|
||||
}
|
||||
}
|
||||
#else
|
||||
for (size_t j = 0; j < sizeof(Word); ++j) {
|
||||
Crc k = Base().XpowN((sizeof(Word) * kStride - 1 - j) * 8 + degree);
|
||||
TableEntry *table = this->crc_word_interleaved_[j];
|
||||
table[0] = 0; // Init 0s entry -- multiply 0 by anything yields 0.
|
||||
for (size_t i = 1; i < 256; i <<= 1) {
|
||||
TableEntry value = Downcast<Crc, TableEntry>(
|
||||
Base().MultiplyUnnormalized(static_cast<Crc>(i), 8, k));
|
||||
table[i] = value;
|
||||
for (size_t m = 1; m < i; ++m) {
|
||||
table[i + m] = value ^ table[m];
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
for (size_t j = 0; j < sizeof(Word); ++j) {
|
||||
Crc k = Base().XpowN((sizeof(Word) - 1 - j) * 8 + degree);
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
Crc temp = Base().MultiplyUnnormalized(static_cast<Crc>(i), 8, k);
|
||||
this->crc_word_[j][i] = Downcast<Crc, TableEntry>(temp);
|
||||
}
|
||||
}
|
||||
#else
|
||||
for (size_t j = 0; j < sizeof(Word); ++j) {
|
||||
Crc k = Base().XpowN((sizeof(Word) - 1 - j) * 8 + degree);
|
||||
TableEntry *table = this->crc_word_[j];
|
||||
table[0] = 0; // Init 0s entry -- multiply 0 by anything yields 0.
|
||||
for (size_t i = 1; i < 256; i <<= 1) {
|
||||
TableEntry value = Downcast<Crc, TableEntry>(
|
||||
Base().MultiplyUnnormalized(static_cast<Crc>(i), 8, k));
|
||||
table[i] = value;
|
||||
for (size_t m = 1; m < i; ++m) {
|
||||
table[i + m] = value ^ table[m];
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// Default CRC implementation
|
||||
Crc CrcDefault(const void *data, size_t bytes, const Crc &start) const {
|
||||
#if HAVE_AMD64 || HAVE_I386
|
||||
return CrcMultiword(data, bytes, start);
|
||||
#else
|
||||
// Very few CPUs have multiple ALUs and speculative execution
|
||||
// (Itanium is an exception) so sophisticated algorithms will
|
||||
// not perform better than good old Sarwate algorithm.
|
||||
return CrcByteUnrolled(data, bytes, start);
|
||||
#endif // HAVE_AMD64 || HAVE_I386
|
||||
}
|
||||
|
||||
// Returns base class.
|
||||
const GfUtil<Crc> &Base() const { return base_; }
|
||||
|
||||
protected:
|
||||
// Canonical, byte-by-byte CRC computation.
|
||||
Crc CrcByte(const void *data, size_t bytes, const Crc &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
Crc crc = start ^ Base().Canonize();
|
||||
for (const uint8 *end = src + bytes; src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
return (crc ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Byte-by-byte CRC with main loop unrolled.
|
||||
Crc CrcByteUnrolled(const void *data, size_t bytes, const Crc &start) const {
|
||||
if (bytes == 0) {
|
||||
return start;
|
||||
}
|
||||
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
Crc crc = start ^ Base().Canonize();
|
||||
|
||||
// Unroll loop 4 times.
|
||||
end -= 3;
|
||||
for (; src < end; src += 4) {
|
||||
PREFETCH(src);
|
||||
CRC_BYTE(this, crc, src[0]);
|
||||
CRC_BYTE(this, crc, src[1]);
|
||||
CRC_BYTE(this, crc, src[2]);
|
||||
CRC_BYTE(this, crc, src[3]);
|
||||
}
|
||||
end += 3;
|
||||
|
||||
// Compute CRC of remaining bytes.
|
||||
for (; src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
|
||||
return (crc ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Canonical, byte-by-byte CRC computation.
|
||||
Crc CrcByteWord(const void *data, size_t bytes, const Crc &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
Crc crc0 = start ^ Base().Canonize();
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc0, Crc);
|
||||
if (src >= end) {
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Process 4*sizeof(Crc) bytes at a time.
|
||||
end -= 4 * sizeof(Crc) - 1;
|
||||
for (; src < end; src += 4 * sizeof(Crc)) {
|
||||
for (size_t i = 0; i < 4; ++i) {
|
||||
crc0 ^= reinterpret_cast<const Crc *>(src)[i];
|
||||
if (i == 0) {
|
||||
PREFETCH(src);
|
||||
}
|
||||
for (size_t byte = 0; byte < sizeof(crc0); ++byte) {
|
||||
CRC_BYTE(this, crc0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
end += 4 * sizeof(Crc) - 1;
|
||||
|
||||
// Process sizeof(Crc) bytes at a time.
|
||||
end -= sizeof(Crc) - 1;
|
||||
for (; src < end; src += sizeof(Crc)) {
|
||||
crc0 ^= reinterpret_cast<const Crc *>(src)[0];
|
||||
for (size_t byte = 0; byte < sizeof(crc0); ++byte) {
|
||||
CRC_BYTE(this, crc0, 0);
|
||||
}
|
||||
}
|
||||
end += sizeof(Crc) - 1;
|
||||
|
||||
// Compute CRC of remaining bytes.
|
||||
for (;src < end; ++src) {
|
||||
CRC_BYTE(this, crc0, *src);
|
||||
}
|
||||
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Faster, word-by-word CRC.
|
||||
Crc CrcWord(const void *data, size_t bytes, const Crc &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
Crc crc0 = start ^ Base().Canonize();
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc0, Word);
|
||||
if (src >= end) {
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Process 4 sizeof(Word) bytes at once.
|
||||
end -= 4 * sizeof(Word) - 1;
|
||||
for (; src < end; src += 4 * sizeof(Word)) {
|
||||
Word buf0 = reinterpret_cast<const Word *>(src)[0];
|
||||
PREFETCH(src);
|
||||
CRC_WORD(this, crc0, buf0);
|
||||
buf0 = reinterpret_cast<const Word *>(src)[1];
|
||||
CRC_WORD(this, crc0, buf0);
|
||||
buf0 = reinterpret_cast<const Word *>(src)[2];
|
||||
CRC_WORD(this, crc0, buf0);
|
||||
buf0 = reinterpret_cast<const Word *>(src)[3];
|
||||
CRC_WORD(this, crc0, buf0);
|
||||
}
|
||||
end += 4 * sizeof(Word) - 1;
|
||||
|
||||
// Process sizeof(Word) bytes at a time.
|
||||
end -= sizeof(Word) - 1;
|
||||
for (; src < end; src += sizeof(Word)) {
|
||||
Word buf0 = reinterpret_cast<const Word *>(src)[0];
|
||||
CRC_WORD(this, crc0, buf0);
|
||||
}
|
||||
end += sizeof(Word) - 1;
|
||||
|
||||
// Compute CRC of remaining bytes.
|
||||
for (;src < end; ++src) {
|
||||
CRC_BYTE(this, crc0, *src);
|
||||
}
|
||||
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
#define REPEAT_FROM_1(macro) \
|
||||
macro(1); \
|
||||
macro(2); \
|
||||
macro(3); \
|
||||
macro(4); \
|
||||
macro(5); \
|
||||
macro(6); \
|
||||
macro(7);
|
||||
|
||||
#define REPEAT_FROM_0(macro) \
|
||||
macro(0); \
|
||||
REPEAT_FROM_1(macro)
|
||||
|
||||
// Faster, process adjusent blocks in parallel and concatenate CRCs.
|
||||
Crc CrcBlockword(const void *data, size_t bytes, const Crc &start) const {
|
||||
if (kStride < 2 || kStride > 8) {
|
||||
// Unsupported configuration;
|
||||
// fall back to something sensible.
|
||||
return CrcWord(data, bytes, start);
|
||||
}
|
||||
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
Crc crc0 = start ^ Base().Canonize();
|
||||
enum {
|
||||
// Add 16 to avoid false L1 cache collisions.
|
||||
kStripe = (15*1024 + 16) & ~(sizeof(Word) - 1),
|
||||
};
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc0, Word);
|
||||
if (src >= end) {
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
end -= kStride * kStripe - 1;
|
||||
if (src < end) {
|
||||
Crc x_pow_8kStripe = Base().Xpow8N(kStripe);
|
||||
do {
|
||||
const uint8 *stripe_end = src + kStripe;
|
||||
|
||||
#define INIT_CRC(reg) \
|
||||
Crc crc##reg; \
|
||||
if (kStride >= reg) { \
|
||||
crc##reg = 0; \
|
||||
}
|
||||
REPEAT_FROM_1(INIT_CRC);
|
||||
#undef INIT_CRC
|
||||
|
||||
do {
|
||||
#define FIRST(reg) \
|
||||
Word buf##reg; \
|
||||
if (kStride > reg) { \
|
||||
buf##reg = reinterpret_cast<const Word *>(src + reg * kStripe)[0]; \
|
||||
buf##reg ^= Downcast<Crc, Word>(crc##reg); \
|
||||
if (sizeof(crc##reg) > sizeof(buf##reg)) { \
|
||||
crc##reg = SHIFT_RIGHT_SAFE(crc##reg, sizeof(buf##reg) * 8); \
|
||||
crc##reg ^= TABLE_ENTRY(this->crc_word_, 0, buf##reg); \
|
||||
} else { \
|
||||
crc##reg = TABLE_ENTRY(this->crc_word_, 0, buf##reg); \
|
||||
} \
|
||||
buf##reg >>= 8; \
|
||||
}
|
||||
REPEAT_FROM_0(FIRST);
|
||||
#undef FIRST
|
||||
|
||||
for (size_t byte = 1; byte < sizeof(buf0) - 1; ++byte) {
|
||||
#define NEXT(reg) do { \
|
||||
if (kStride > reg) { \
|
||||
crc##reg ^= TABLE_ENTRY(this->crc_word_, byte, buf##reg); \
|
||||
buf##reg >>= 8; \
|
||||
} \
|
||||
} while (0)
|
||||
REPEAT_FROM_0(NEXT);
|
||||
#undef NEXT
|
||||
}
|
||||
|
||||
#define LAST(reg) do { \
|
||||
if (kStride > reg) { \
|
||||
crc##reg ^= TABLE_ENTRY_LAST(this->crc_word_, buf##reg); \
|
||||
} \
|
||||
} while (0)
|
||||
REPEAT_FROM_0(LAST);
|
||||
#undef LAST
|
||||
|
||||
src += sizeof(Word);
|
||||
} while (src < stripe_end);
|
||||
|
||||
#if 0
|
||||
// The code is left for illustrational purposes only.
|
||||
#define COMBINE(reg) do { \
|
||||
if (reg > 0 && kStride > reg) { \
|
||||
crc0 = Base().ChangeStartValue(crc##reg, kStripe, 0, crc0); \
|
||||
} \
|
||||
} while (0)
|
||||
#else
|
||||
#define COMBINE(reg) do { \
|
||||
if (reg > 0 && kStride > reg) { \
|
||||
crc0 = crc##reg ^ Base().Multiply(crc0, x_pow_8kStripe); \
|
||||
} \
|
||||
} while (0)
|
||||
#endif
|
||||
REPEAT_FROM_0(COMBINE);
|
||||
#undef COMBINE
|
||||
|
||||
src += (kStride - 1) * kStripe;
|
||||
}
|
||||
while (src < end);
|
||||
}
|
||||
end += kStride * kStripe - 1;
|
||||
|
||||
// Process sizeof(Word) bytes at a time.
|
||||
end -= sizeof(Word) - 1;
|
||||
for (; src < end; src += sizeof(Word)) {
|
||||
Word buf0 = reinterpret_cast<const Word *>(src)[0];
|
||||
CRC_WORD(this, crc0, buf0);
|
||||
}
|
||||
end += sizeof(Word) - 1;
|
||||
|
||||
// Compute CRC of remaining bytes.
|
||||
for (;src < end; ++src) {
|
||||
CRC_BYTE(this, crc0, *src);
|
||||
}
|
||||
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Fastest, interleaved multi-byte CRC.
|
||||
Crc CrcMultiword(const void *data, size_t bytes, const Crc &start) const {
|
||||
if (kStride < 2 || kStride > 8) {
|
||||
// Unsupported configuration;
|
||||
// fall back to something sensible.
|
||||
return CrcWord(data, bytes, start);
|
||||
}
|
||||
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
Crc crc0 = start ^ Base().Canonize();
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc0, Word);
|
||||
if (src >= end) {
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Process kStride Word registers at once;
|
||||
// should have have at least 2*kInterleaveBytes of data to start.
|
||||
end -= 2*kInterleaveBytes - 1;
|
||||
if (src < end) {
|
||||
Crc crc_carryover;
|
||||
if (sizeof(Crc) > sizeof(Word)) {
|
||||
// crc_carryover is used if and only if Crc is wider than Word.
|
||||
crc_carryover = 0;
|
||||
}
|
||||
#define INIT_CRC(reg) \
|
||||
Crc crc##reg; \
|
||||
if (reg > 0 && kStride > reg) { \
|
||||
crc##reg = 0; \
|
||||
}
|
||||
REPEAT_FROM_1(INIT_CRC);
|
||||
#undef INIT_CRC
|
||||
|
||||
#define INIT_BUF(reg) \
|
||||
Word buf##reg; \
|
||||
if (kStride > reg) { \
|
||||
buf##reg = reinterpret_cast<const Word *>(src)[reg]; \
|
||||
}
|
||||
REPEAT_FROM_0(INIT_BUF);
|
||||
#undef INIT_BUF
|
||||
|
||||
do {
|
||||
PREFETCH(src);
|
||||
src += kInterleaveBytes;
|
||||
|
||||
if (sizeof(Crc) > sizeof(Word)) {
|
||||
crc0 ^= crc_carryover;
|
||||
}
|
||||
|
||||
#define FIRST(reg, next_reg) do { \
|
||||
if (kStride > reg) { \
|
||||
buf##reg ^= Downcast<Crc, Word>(crc##reg); \
|
||||
if (sizeof(Crc) > sizeof(Word)) { \
|
||||
if (reg < kStride - 1) { \
|
||||
crc##next_reg ^= SHIFT_RIGHT_SAFE(crc##reg, 8 * sizeof(buf0)); \
|
||||
} else { \
|
||||
crc_carryover = SHIFT_RIGHT_SAFE(crc##reg, 8 * sizeof(buf0)); \
|
||||
} \
|
||||
} \
|
||||
crc##reg = TABLE_ENTRY(this->crc_word_interleaved_, 0, buf##reg); \
|
||||
buf##reg >>= 8; \
|
||||
} \
|
||||
} while (0)
|
||||
FIRST(0, 1);
|
||||
FIRST(1, 2);
|
||||
FIRST(2, 3);
|
||||
FIRST(3, 4);
|
||||
FIRST(4, 5);
|
||||
FIRST(5, 6);
|
||||
FIRST(6, 7);
|
||||
FIRST(7, 0);
|
||||
#undef FIRST
|
||||
|
||||
for (size_t byte = 1; byte < sizeof(Word) - 1; ++byte) {
|
||||
#define NEXT(reg) do { \
|
||||
if (kStride > reg) { \
|
||||
crc##reg ^= \
|
||||
TABLE_ENTRY(this->crc_word_interleaved_, byte, buf##reg); \
|
||||
buf##reg >>= 8; \
|
||||
} \
|
||||
} while(0)
|
||||
REPEAT_FROM_0(NEXT);
|
||||
#undef NEXT
|
||||
}
|
||||
|
||||
#define LAST(reg) do { \
|
||||
if (kStride > reg) { \
|
||||
crc##reg ^= TABLE_ENTRY_LAST(this->crc_word_interleaved_, buf##reg); \
|
||||
buf##reg = reinterpret_cast<const Word *>(src)[reg]; \
|
||||
} \
|
||||
} while(0)
|
||||
REPEAT_FROM_0(LAST);
|
||||
#undef LAST
|
||||
}
|
||||
while (src < end);
|
||||
|
||||
if (sizeof(Crc) > sizeof(Word)) {
|
||||
crc0 ^= crc_carryover;
|
||||
}
|
||||
|
||||
#define COMBINE(reg) do { \
|
||||
if (kStride > reg) { \
|
||||
if (reg != 0) { \
|
||||
crc0 ^= crc##reg; \
|
||||
} \
|
||||
CRC_WORD(this, crc0, buf##reg); \
|
||||
} \
|
||||
} while (0)
|
||||
REPEAT_FROM_0(COMBINE);
|
||||
#undef COMBINE
|
||||
|
||||
src += kInterleaveBytes;
|
||||
}
|
||||
end += 2*kInterleaveBytes - 1;
|
||||
|
||||
// Process sizeof(Word) bytes at once.
|
||||
end -= sizeof(Word) - 1;
|
||||
for (; src < end; src += sizeof(Word)) {
|
||||
Word buf0 = reinterpret_cast<const Word *>(src)[0];
|
||||
CRC_WORD(this, crc0, buf0);
|
||||
}
|
||||
end += sizeof(Word) - 1;
|
||||
|
||||
// Compute CRC of remaining bytes.
|
||||
for (;src < end; ++src) {
|
||||
CRC_BYTE(this, crc0, *src);
|
||||
}
|
||||
|
||||
return (crc0 ^ Base().Canonize());
|
||||
}
|
||||
|
||||
protected:
|
||||
enum {
|
||||
kInterleaveBytes = sizeof(Word) * kStride,
|
||||
};
|
||||
|
||||
// Multiplication tables used by CRCs.
|
||||
TableEntry crc_word_interleaved_[sizeof(Word)][256];
|
||||
TableEntry crc_word_[sizeof(Word)][256];
|
||||
|
||||
// Base class stored after CRC tables so that the most frequently
|
||||
// used table is at offset 0 and may be accessed faster.
|
||||
GfUtil<Crc> base_;
|
||||
|
||||
friend class RollingCrc< GenericCrc<Crc, TableEntry, Word, kStride> >;
|
||||
|
||||
private:
|
||||
// CrcMultiword on amd64 may run at 1.2 CPU cycles per byte which is
|
||||
// noticeably faster than CrcWord (2.2-2.6 cycles/byte depending on
|
||||
// hardware and compiler). However, there are problems with compilers.
|
||||
//
|
||||
// Test system: P45 chipset, Intel Q9650 CPU, 800MHz 4-4-4-12 memory.
|
||||
//
|
||||
// 64-bit compiler, <= 64-bit CRC, 64-bit tables, 64-bit reads:
|
||||
// CL 15.00.307291.1 C++ >1.2< CPU cycles/byte
|
||||
// ICL 11.1.051 -O3 C++ 1.5 CPU cycles/byte
|
||||
// GCC 4.5 -O3 C++ 2.0 CPU cycles/byte
|
||||
// GCC 4.x -O3 ASM >1.2< CPU cycles/byte
|
||||
//
|
||||
// 32-bit compiler, MMX used, <= 64-bit CRC, 64-bit tables, 64-bit reads
|
||||
// CL 15.00.307291.1 C++ 2.0 CPU cycles/byte
|
||||
// GCC 4.5 -O3 C++ 1.9 CPU cycles/byte
|
||||
// ICL 11.1.051 -S C++ 1.6 CPU cycles/byte
|
||||
// GCC 4.x -O3 ASM >1.3< CPU cycles/byte
|
||||
//
|
||||
// So, use inline ASM code for GCC for both i386 and amd64.
|
||||
|
||||
Crc CrcMultiwordI386Mmx(
|
||||
const void *data, size_t bytes, const Crc &start) const;
|
||||
Crc CrcMultiwordGccAmd64(
|
||||
const void *data, size_t bytes, const Crc &start) const;
|
||||
Crc CrcMultiwordGccAmd64Sse2(
|
||||
const uint8 *src, const uint8 *end, const Crc &start) const;
|
||||
} GCC_ALIGN_ATTRIBUTE(16);
|
||||
|
||||
#undef REPEAT_FROM_0
|
||||
#undef REPEAT_FROM_1
|
||||
|
||||
|
||||
// Specialized variants.
|
||||
#if CRCUTIL_USE_ASM
|
||||
|
||||
#if (defined(__GNUC__) && (HAVE_AMD64 || (HAVE_I386 && HAVE_MMX)))
|
||||
|
||||
// Declare specialized functions.
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiword(
|
||||
const void *data, size_t bytes, const uint64 &start) const;
|
||||
|
||||
#if HAVE_AMD64 && HAVE_SSE2
|
||||
template<>
|
||||
uint128_sse2
|
||||
GenericCrc<uint128_sse2, uint128_sse2, uint64, 4>::CrcMultiword(
|
||||
const void *data, size_t bytes, const uint128_sse2 &start) const;
|
||||
#endif // HAVE_AMD64 && HAVE_SSE2
|
||||
|
||||
#elif defined(_MSC_FULL_VER) && _MSC_FULL_VER <= 150030729 && \
|
||||
(HAVE_I386 && HAVE_MMX)
|
||||
|
||||
// Work around bug in MSC (present at least in v. 15.00.30729.1)
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordI386Mmx(
|
||||
const void *data,
|
||||
size_t bytes,
|
||||
const uint64 &start) const;
|
||||
template<> __forceinline
|
||||
uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiword(
|
||||
const void *data,
|
||||
size_t bytes,
|
||||
const uint64 &start) const {
|
||||
typedef uint64 Word;
|
||||
typedef uint64 Crc;
|
||||
if (bytes <= 12) {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
uint64 crc = start ^ Base().Canonize();
|
||||
for (const uint8 *end = src + bytes; src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
return (crc ^ Base().Canonize());
|
||||
}
|
||||
return CrcMultiwordI386Mmx(data, bytes, start);
|
||||
}
|
||||
|
||||
#endif // (defined(__GNUC__) && (HAVE_AMD64 || (HAVE_I386 && HAVE_MMX)))
|
||||
|
||||
#endif // CRCUTIL_USE_ASM
|
||||
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_GENERIC_CRC_H_
|
||||
304
crcutil-1.0/code/gf_util.h
Normal file
304
crcutil-1.0/code/gf_util.h
Normal file
@@ -0,0 +1,304 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Defines GfUtil template class which implements
|
||||
// 1. some useful operations in GF(2^n),
|
||||
// 2. CRC helper function (e.g. concatenation of CRCs) which are
|
||||
// not affected by specific implemenation of CRC computation per se.
|
||||
//
|
||||
// Please read crc.pdf to understand how it all works.
|
||||
|
||||
#ifndef CRCUTIL_GF_UTIL_H_
|
||||
#define CRCUTIL_GF_UTIL_H_
|
||||
|
||||
#include "base_types.h" // uint8, uint64
|
||||
#include "crc_casts.h" // TO_BYTE()
|
||||
#include "platform.h" // GCC_ALIGN_ATTRIBUTE(16), SHIFT_*_SAFE
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#pragma pack(push, 16)
|
||||
|
||||
// "Crc" is the type used internally and to return values of N-bit CRC.
|
||||
template<typename Crc> class GfUtil {
|
||||
public:
|
||||
// Initializes the tables given generating polynomial of degree (degree).
|
||||
// If "canonical" is true, starting CRC value and computed CRC value will be
|
||||
// XOR-ed with 111...111.
|
||||
GfUtil() {}
|
||||
GfUtil(const Crc &generating_polynomial, size_t degree, bool canonical) {
|
||||
Init(generating_polynomial, degree, canonical);
|
||||
}
|
||||
void Init(const Crc &generating_polynomial, size_t degree, bool canonical) {
|
||||
Crc one = 1;
|
||||
one <<= degree - 1;
|
||||
this->generating_polynomial_ = generating_polynomial;
|
||||
this->crc_bytes_ = (degree + 7) >> 3;
|
||||
this->degree_ = degree;
|
||||
this->one_ = one;
|
||||
if (canonical) {
|
||||
this->canonize_ = one | (one - 1);
|
||||
} else {
|
||||
this->canonize_ = 0;
|
||||
}
|
||||
this->normalize_[0] = 0;
|
||||
this->normalize_[1] = generating_polynomial;
|
||||
|
||||
Crc k = one >> 1;
|
||||
for (size_t i = 0; i < sizeof(uint64) * 8; ++i) {
|
||||
this->x_pow_2n_[i] = k;
|
||||
k = Multiply(k, k);
|
||||
}
|
||||
|
||||
this->crc_of_crc_ = Multiply(this->canonize_,
|
||||
this->one_ ^ Xpow8N((degree + 7) >> 3));
|
||||
|
||||
FindLCD(Xpow8N(this->crc_bytes_), &this->x_pow_minus_W_);
|
||||
}
|
||||
|
||||
// Returns generating polynomial.
|
||||
Crc GeneratingPolynomial() const {
|
||||
return this->generating_polynomial_;
|
||||
}
|
||||
|
||||
// Returns number of bits in CRC (degree of generating polynomial).
|
||||
size_t Degree() const {
|
||||
return this->degree_;
|
||||
}
|
||||
|
||||
// Returns start/finish adjustment constant.
|
||||
Crc Canonize() const {
|
||||
return this->canonize_;
|
||||
}
|
||||
|
||||
// Returns normalized value of 1.
|
||||
Crc One() const {
|
||||
return this->one_;
|
||||
}
|
||||
|
||||
// Returns value of CRC(A, |A|, start_new) given known
|
||||
// crc=CRC(A, |A|, start_old) -- without touching the data.
|
||||
Crc ChangeStartValue(const Crc &crc, uint64 bytes,
|
||||
const Crc &start_old,
|
||||
const Crc &start_new) const {
|
||||
return (crc ^ Multiply(start_new ^ start_old, Xpow8N(bytes)));
|
||||
}
|
||||
|
||||
// Returns CRC of concatenation of blocks A and B when CRCs
|
||||
// of blocks A and B are known -- without touching the data.
|
||||
//
|
||||
// To be precise, given CRC(A, |A|, startA) and CRC(B, |B|, 0),
|
||||
// returns CRC(AB, |AB|, startA).
|
||||
Crc Concatenate(const Crc &crc_A, const Crc &crc_B, uint64 bytes_B) const {
|
||||
return ChangeStartValue(crc_B, bytes_B, 0 /* start_B */, crc_A);
|
||||
}
|
||||
|
||||
// Returns CRC of sequence of zeroes -- without touching the data.
|
||||
Crc CrcOfZeroes(uint64 bytes, const Crc &start) const {
|
||||
Crc tmp = Multiply(start ^ this->canonize_, Xpow8N(bytes));
|
||||
return (tmp ^ this->canonize_);
|
||||
}
|
||||
|
||||
// Given CRC of a message, stores extra (degree + 7)/8 bytes after
|
||||
// the message so that CRC(message+extra, start) = result.
|
||||
// Does not change CRC start value (use ChangeStartValue for that).
|
||||
// Returns number of stored bytes.
|
||||
size_t StoreComplementaryCrc(void *dst,
|
||||
const Crc &message_crc,
|
||||
const Crc &result) const {
|
||||
Crc crc0 = Multiply(result ^ this->canonize_, this->x_pow_minus_W_);
|
||||
crc0 ^= message_crc ^ this->canonize_;
|
||||
uint8 *d = reinterpret_cast<uint8 *>(dst);
|
||||
for (size_t i = 0; i < this->crc_bytes_; ++i) {
|
||||
d[i] = TO_BYTE(crc0);
|
||||
crc0 >>= 8;
|
||||
}
|
||||
return this->crc_bytes_;
|
||||
}
|
||||
|
||||
// Stores given CRC of a message as (degree + 7)/8 bytes filled
|
||||
// with 0s to the right. Returns number of stored bytes.
|
||||
// CRC of the message and stored CRC is a constant value returned
|
||||
// by CrcOfCrc() -- it does not depend on contents of the message.
|
||||
size_t StoreCrc(void *dst, const Crc &crc) const {
|
||||
uint8 *d = reinterpret_cast<uint8 *>(dst);
|
||||
Crc crc0 = crc;
|
||||
for (size_t i = 0; i < this->crc_bytes_; ++i) {
|
||||
d[i] = TO_BYTE(crc0);
|
||||
crc0 >>= 8;
|
||||
}
|
||||
return this->crc_bytes_;
|
||||
}
|
||||
|
||||
// Returns expected CRC value of CRC(Message,CRC(Message))
|
||||
// when CRC is stored after the message. This value is fixed
|
||||
// and does not depend on the message or CRC start value.
|
||||
Crc CrcOfCrc() const {
|
||||
return this->crc_of_crc_;
|
||||
}
|
||||
|
||||
// Returns ((a * b) mod P) where "a" and "b" are of degree <= (D-1).
|
||||
Crc Multiply(const Crc &aa, const Crc &bb) const {
|
||||
Crc a = aa;
|
||||
Crc b = bb;
|
||||
if ((a ^ (a - 1)) < (b ^ (b - 1))) {
|
||||
Crc temp = a;
|
||||
a = b;
|
||||
b = temp;
|
||||
}
|
||||
|
||||
if (a == 0) {
|
||||
return a;
|
||||
}
|
||||
|
||||
Crc product = 0;
|
||||
Crc one = this->one_;
|
||||
for (; a != 0; a <<= 1) {
|
||||
if ((a & one) != 0) {
|
||||
product ^= b;
|
||||
a ^= one;
|
||||
}
|
||||
b = (b >> 1) ^ this->normalize_[Downcast<Crc, size_t>(b & 1)];
|
||||
}
|
||||
|
||||
return product;
|
||||
}
|
||||
|
||||
// Returns ((unnorm * m) mod P) where degree of m is <= (D-1)
|
||||
// and degree of value "unnorm" is provided explicitly.
|
||||
Crc MultiplyUnnormalized(const Crc &unnorm, size_t degree,
|
||||
const Crc &m) const {
|
||||
Crc v = unnorm;
|
||||
Crc result = 0;
|
||||
while (degree > this->degree_) {
|
||||
degree -= this->degree_;
|
||||
Crc value = v & (this->one_ | (this->one_ - 1));
|
||||
result ^= Multiply(value, Multiply(m, XpowN(degree)));
|
||||
v >>= this->degree_;
|
||||
}
|
||||
result ^= Multiply(v << (this->degree_ - degree), m);
|
||||
return result;
|
||||
}
|
||||
|
||||
// returns ((x ** n) mod P).
|
||||
Crc XpowN(uint64 n) const {
|
||||
Crc one = this->one_;
|
||||
Crc result = one;
|
||||
|
||||
for (size_t i = 0; n != 0; ++i, n >>= 1) {
|
||||
if (n & 1) {
|
||||
result = Multiply(result, this->x_pow_2n_[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Returns (x ** (8 * n) mod P).
|
||||
Crc Xpow8N(uint64 n) const {
|
||||
return XpowN(n << 3);
|
||||
}
|
||||
|
||||
// Returns remainder (A mod B) and sets *q = (A/B) of division
|
||||
// of two polynomials:
|
||||
// A = dividend + dividend_x_pow_D_coef * x**degree,
|
||||
// B = divisor.
|
||||
Crc Divide(const Crc ÷nd0, int dividend_x_pow_D_coef,
|
||||
const Crc &divisor0, Crc *q) const {
|
||||
Crc divisor = divisor0;
|
||||
Crc dividend = dividend0;
|
||||
Crc quotient = 0;
|
||||
Crc coef = this->one_;
|
||||
|
||||
while ((divisor & 1) == 0) {
|
||||
divisor >>= 1;
|
||||
coef >>= 1;
|
||||
}
|
||||
|
||||
if (dividend_x_pow_D_coef) {
|
||||
quotient = coef >> 1;
|
||||
dividend ^= divisor >> 1;
|
||||
}
|
||||
|
||||
Crc x_pow_degree_b = 1;
|
||||
for (;;) {
|
||||
if ((dividend & x_pow_degree_b) != 0) {
|
||||
dividend ^= divisor;
|
||||
quotient ^= coef;
|
||||
}
|
||||
if (coef == this->one_) {
|
||||
break;
|
||||
}
|
||||
coef <<= 1;
|
||||
x_pow_degree_b <<= 1;
|
||||
divisor <<= 1;
|
||||
}
|
||||
|
||||
*q = quotient;
|
||||
return dividend;
|
||||
}
|
||||
|
||||
// Extended Euclid's algorith -- for given A finds LCD(A, P) and
|
||||
// value B such that (A * B) mod P = LCD(A, P).
|
||||
Crc FindLCD(const Crc &A, Crc *B) const {
|
||||
if (A == 0 || A == this->one_) {
|
||||
*B = A;
|
||||
return A;
|
||||
}
|
||||
|
||||
// Actually, generating polynomial is
|
||||
// (generating_polynomial_ + x**degree).
|
||||
int r0_x_pow_D_coef = 1;
|
||||
Crc r0 = this->generating_polynomial_;
|
||||
Crc b0 = 0;
|
||||
Crc r1 = A;
|
||||
Crc b1 = this->one_;
|
||||
|
||||
for (;;) {
|
||||
Crc q;
|
||||
Crc r = Divide(r0, r0_x_pow_D_coef, r1, &q);
|
||||
if (r == 0) {
|
||||
break;
|
||||
}
|
||||
r0_x_pow_D_coef = 0;
|
||||
|
||||
r0 = r1;
|
||||
r1 = r;
|
||||
|
||||
Crc b = b0 ^ Multiply(q, b1);
|
||||
b0 = b1;
|
||||
b1 = b;
|
||||
}
|
||||
|
||||
*B = b1;
|
||||
return r1;
|
||||
}
|
||||
|
||||
protected:
|
||||
Crc canonize_;
|
||||
Crc x_pow_2n_[sizeof(uint64) * 8];
|
||||
Crc generating_polynomial_;
|
||||
Crc one_;
|
||||
Crc x_pow_minus_W_;
|
||||
Crc crc_of_crc_;
|
||||
Crc normalize_[2];
|
||||
size_t crc_bytes_;
|
||||
size_t degree_;
|
||||
} GCC_ALIGN_ATTRIBUTE(16);
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_GF_UTIL_H_
|
||||
291
crcutil-1.0/code/multiword_128_64_gcc_amd64_sse2.cc
Normal file
291
crcutil-1.0/code/multiword_128_64_gcc_amd64_sse2.cc
Normal file
@@ -0,0 +1,291 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements multiword CRC for GCC on i386.
|
||||
//
|
||||
// Small comment: the trick described in
|
||||
// http://software.intel.com/en-us/articles/fast-simd-integer-move-for-the-intel-pentiumr-4-processor
|
||||
// (replace "movdqa dst, src" with "pshufd $0xE4, src, dst")
|
||||
// did not work: execution time increased from
|
||||
// 1.8 CPU cycles/byte to 2.1 CPU cycles/byte.
|
||||
// So it may be good idea on P4 but it's not on newer CPUs.
|
||||
//
|
||||
// movaps/xorps vs. movdqa/pxor did not make any difference.
|
||||
|
||||
#include "generic_crc.h"
|
||||
#include "uint128_sse2.h"
|
||||
|
||||
#if defined(__GNUC__) && CRCUTIL_USE_ASM && HAVE_AMD64 && HAVE_SSE2
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
template<> uint128_sse2
|
||||
GenericCrc<uint128_sse2, uint128_sse2, uint64, 4>::CrcMultiwordGccAmd64Sse2(
|
||||
const uint8 *src, const uint8 *end, const uint128_sse2 &start) const;
|
||||
|
||||
template<>
|
||||
uint128_sse2 GenericCrc<uint128_sse2, uint128_sse2, uint64, 4>::CrcMultiword(
|
||||
const void *data, size_t bytes, const uint128_sse2 &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
uint128_sse2 crc = start ^ this->Base().Canonize();
|
||||
const uint8 *end = src + bytes;
|
||||
if (bytes <= 7) {
|
||||
for (; src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
return (crc ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc, uint64);
|
||||
if (src >= end) {
|
||||
return (crc ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
return CrcMultiwordGccAmd64Sse2(src, end, crc);
|
||||
}
|
||||
|
||||
#define CRC_WORD_ASM() \
|
||||
SSE2_MOVQ " %[crc0], %[tmp0]\n" \
|
||||
"xorq %[tmp0], %[buf0]\n" \
|
||||
"psrldq $8, %[crc0]\n" \
|
||||
"movzbq %b[buf0], %[tmp0]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp0], %[tmp0]\n" \
|
||||
"pxor (%[table_word], %[tmp0], 8), %[crc0]\n" \
|
||||
"movzbq %b[buf0], %[tmp1]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp1], %[tmp1]\n" \
|
||||
"pxor 1*256*16(%[table_word], %[tmp1], 8), %[crc0]\n" \
|
||||
"movzbq %b[buf0], %[tmp0]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp0], %[tmp0]\n" \
|
||||
"pxor 2*256*16(%[table_word], %[tmp0], 8), %[crc0]\n" \
|
||||
"movzbq %b[buf0], %[tmp1]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp1], %[tmp1]\n" \
|
||||
"pxor 3*256*16(%[table_word], %[tmp1], 8), %[crc0]\n" \
|
||||
"movzbq %b[buf0], %[tmp0]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp0], %[tmp0]\n" \
|
||||
"pxor 4*256*16(%[table_word], %[tmp0], 8), %[crc0]\n" \
|
||||
"movzbq %b[buf0], %[tmp1]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp1], %[tmp1]\n" \
|
||||
"pxor 5*256*16(%[table_word], %[tmp1], 8), %[crc0]\n" \
|
||||
"movzbq %b[buf0], %[tmp0]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp0], %[tmp0]\n" \
|
||||
"pxor 6*256*16(%[table_word], %[tmp0], 8), %[crc0]\n" \
|
||||
"addq %[buf0], %[buf0]\n" \
|
||||
"pxor 7*256*16(%[table_word], %[buf0], 8), %[crc0]\n"
|
||||
|
||||
template<> uint128_sse2
|
||||
GenericCrc<uint128_sse2, uint128_sse2, uint64, 4>::CrcMultiwordGccAmd64Sse2(
|
||||
const uint8 *src, const uint8 *end, const uint128_sse2 &start) const {
|
||||
__m128i crc0 = start;
|
||||
__m128i crc1;
|
||||
__m128i crc2;
|
||||
__m128i crc3;
|
||||
__m128i crc_carryover;
|
||||
|
||||
uint64 buf0;
|
||||
uint64 buf1;
|
||||
uint64 buf2;
|
||||
uint64 buf3;
|
||||
|
||||
uint64 tmp0;
|
||||
uint64 tmp1;
|
||||
|
||||
asm(
|
||||
"sub $2*4*8 - 1, %[end]\n"
|
||||
"cmpq %[src], %[end]\n"
|
||||
"jbe 2f\n"
|
||||
|
||||
"pxor %[crc1], %[crc1]\n"
|
||||
"pxor %[crc2], %[crc2]\n"
|
||||
"pxor %[crc3], %[crc3]\n"
|
||||
"pxor %[crc_carryover], %[crc_carryover]\n"
|
||||
"movq (%[src]), %[buf0]\n"
|
||||
"movq 1*8(%[src]), %[buf1]\n"
|
||||
"movq 2*8(%[src]), %[buf2]\n"
|
||||
"movq 3*8(%[src]), %[buf3]\n"
|
||||
|
||||
"1:\n"
|
||||
#if HAVE_SSE && CRCUTIL_PREFETCH_WIDTH > 0
|
||||
"prefetcht0 " TO_STRING(CRCUTIL_PREFETCH_WIDTH) "(%[src])\n"
|
||||
#endif
|
||||
#if GCC_VERSION_AVAILABLE(4, 5)
|
||||
// Bug in GCC 4.2.4?
|
||||
"add $4*8, %[src]\n"
|
||||
#else
|
||||
"lea 4*8(%[src]), %[src]\n"
|
||||
#endif
|
||||
"pxor %[crc_carryover], %[crc0]\n"
|
||||
|
||||
SSE2_MOVQ " %[crc0], %[tmp0]\n"
|
||||
"psrldq $8, %[crc0]\n"
|
||||
"xorq %[tmp0], %[buf0]\n"
|
||||
"movzbq %b[buf0], %[tmp0]\n"
|
||||
"pxor %[crc0], %[crc1]\n"
|
||||
"addq %[tmp0], %[tmp0]\n"
|
||||
"shrq $8, %[buf0]\n"
|
||||
"movdqa (%[table], %[tmp0], 8), %[crc0]\n"
|
||||
|
||||
SSE2_MOVQ " %[crc1], %[tmp1]\n"
|
||||
"psrldq $8, %[crc1]\n"
|
||||
"xorq %[tmp1], %[buf1]\n"
|
||||
"movzbq %b[buf1], %[tmp1]\n"
|
||||
"pxor %[crc1], %[crc2]\n"
|
||||
"addq %[tmp1], %[tmp1]\n"
|
||||
"shrq $8, %[buf1]\n"
|
||||
"movdqa (%[table], %[tmp1], 8), %[crc1]\n"
|
||||
|
||||
SSE2_MOVQ " %[crc2], %[tmp0]\n"
|
||||
"psrldq $8, %[crc2]\n"
|
||||
"xorq %[tmp0], %[buf2]\n"
|
||||
"movzbq %b[buf2], %[tmp0]\n"
|
||||
"pxor %[crc2], %[crc3]\n"
|
||||
"addq %[tmp0], %[tmp0]\n"
|
||||
"shrq $8, %[buf2]\n"
|
||||
"movdqa (%[table], %[tmp0], 8), %[crc2]\n"
|
||||
|
||||
SSE2_MOVQ " %[crc3], %[tmp1]\n"
|
||||
"psrldq $8, %[crc3]\n"
|
||||
"xorq %[tmp1], %[buf3]\n"
|
||||
"movzbq %b[buf3], %[tmp1]\n"
|
||||
"movdqa %[crc3], %[crc_carryover]\n"
|
||||
"addq %[tmp1], %[tmp1]\n"
|
||||
"shrq $8, %[buf3]\n"
|
||||
"movdqa (%[table], %[tmp1], 8), %[crc3]\n"
|
||||
|
||||
#define XOR(byte) \
|
||||
"movzbq %b[buf0], %[tmp0]\n" \
|
||||
"shrq $8, %[buf0]\n" \
|
||||
"addq %[tmp0], %[tmp0]\n" \
|
||||
"pxor " #byte "*256*16(%[table], %[tmp0], 8), %[crc0]\n" \
|
||||
"movzbq %b[buf1], %[tmp1]\n" \
|
||||
"shrq $8, %[buf1]\n" \
|
||||
"addq %[tmp1], %[tmp1]\n" \
|
||||
"pxor " #byte "*256*16(%[table], %[tmp1], 8), %[crc1]\n" \
|
||||
"movzbq %b[buf2], %[tmp0]\n" \
|
||||
"shrq $8, %[buf2]\n" \
|
||||
"addq %[tmp0], %[tmp0]\n" \
|
||||
"pxor " #byte "*256*16(%[table], %[tmp0], 8), %[crc2]\n" \
|
||||
"movzbq %b[buf3], %[tmp1]\n" \
|
||||
"shrq $8, %[buf3]\n" \
|
||||
"addq %[tmp1], %[tmp1]\n" \
|
||||
"pxor " #byte "*256*16(%[table], %[tmp1], 8), %[crc3]\n"
|
||||
|
||||
XOR(1)
|
||||
XOR(2)
|
||||
XOR(3)
|
||||
XOR(4)
|
||||
XOR(5)
|
||||
XOR(6)
|
||||
#undef XOR
|
||||
|
||||
"addq %[buf0], %[buf0]\n"
|
||||
"pxor 7*256*16(%[table], %[buf0], 8), %[crc0]\n"
|
||||
"movq (%[src]), %[buf0]\n"
|
||||
|
||||
"addq %[buf1], %[buf1]\n"
|
||||
"pxor 7*256*16(%[table], %[buf1], 8), %[crc1]\n"
|
||||
"movq 1*8(%[src]), %[buf1]\n"
|
||||
|
||||
"addq %[buf2], %[buf2]\n"
|
||||
"pxor 7*256*16(%[table], %[buf2], 8), %[crc2]\n"
|
||||
"movq 2*8(%[src]), %[buf2]\n"
|
||||
|
||||
"addq %[buf3], %[buf3]\n"
|
||||
"pxor 7*256*16(%[table], %[buf3], 8), %[crc3]\n"
|
||||
"movq 3*8(%[src]), %[buf3]\n"
|
||||
|
||||
"cmpq %[src], %[end]\n"
|
||||
"ja 1b\n"
|
||||
|
||||
"pxor %[crc_carryover], %[crc0]\n"
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"pxor %[crc1], %[crc0]\n"
|
||||
"movq %[buf1], %[buf0]\n"
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"pxor %[crc2], %[crc0]\n"
|
||||
"movq %[buf2], %[buf0]\n"
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"pxor %[crc3], %[crc0]\n"
|
||||
"movq %[buf3], %[buf0]\n"
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"add $4*8, %[src]\n"
|
||||
"2:\n"
|
||||
|
||||
"add $2*4*8 - 8, %[end]\n"
|
||||
|
||||
"cmpq %[src], %[end]\n"
|
||||
"jbe 4f\n"
|
||||
"3:\n"
|
||||
"movq (%[src]), %[buf0]\n"
|
||||
"addq $8, %[src]\n"
|
||||
CRC_WORD_ASM()
|
||||
"cmpq %[src], %[end]\n"
|
||||
"ja 3b\n"
|
||||
|
||||
"4:\n"
|
||||
"add $7, %[end]\n"
|
||||
|
||||
"cmpq %[src], %[end]\n"
|
||||
"jbe 6f\n"
|
||||
|
||||
"5:\n"
|
||||
"movzbq (%[src]), %[buf0]\n"
|
||||
"add $1, %[src]\n"
|
||||
SSE2_MOVQ " %[crc0], %[tmp0]\n"
|
||||
"movzx %b[tmp0], %[tmp0]\n"
|
||||
"psrldq $1, %[crc0]\n"
|
||||
"xor %[buf0], %[tmp0]\n"
|
||||
"addq %[tmp0], %[tmp0]\n"
|
||||
"pxor 7*256*16(%[table_word], %[tmp0], 8), %[crc0]\n"
|
||||
|
||||
"cmpq %[src], %[end]\n"
|
||||
"ja 5b\n"
|
||||
|
||||
"6:\n"
|
||||
|
||||
: // outputs
|
||||
[src] "+r" (src),
|
||||
[end] "+r" (end),
|
||||
[crc0] "+x" (crc0),
|
||||
[crc1] "=&x" (crc1),
|
||||
[crc2] "=&x" (crc2),
|
||||
[crc3] "=&x" (crc3),
|
||||
[crc_carryover] "=&x" (crc_carryover),
|
||||
[buf0] "=&r" (buf0),
|
||||
[buf1] "=&r" (buf1),
|
||||
[buf2] "=&r" (buf2),
|
||||
[buf3] "=&r" (buf3),
|
||||
[tmp0] "=&r" (tmp0),
|
||||
[tmp1] "=&r" (tmp1)
|
||||
|
||||
: // inputs
|
||||
[table_word] "r" (this->crc_word_),
|
||||
[table] "r" (this->crc_word_interleaved_));
|
||||
|
||||
return (this->Base().Canonize() ^ crc0);
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // defined(__GNUC__) && CRCUTIL_USE_ASM && HAVE_AMD64 && HAVE_SSE2
|
||||
304
crcutil-1.0/code/multiword_64_64_cl_i386_mmx.cc
Normal file
304
crcutil-1.0/code/multiword_64_64_cl_i386_mmx.cc
Normal file
@@ -0,0 +1,304 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements 64-bit multiword CRC for Microsoft and Intel compilers
|
||||
// using MMX instructions (i386).
|
||||
|
||||
#include "generic_crc.h"
|
||||
|
||||
#if CRCUTIL_USE_ASM && HAVE_I386 && HAVE_MMX && defined(_MSC_VER)
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#define CRC_WORD_MMX() \
|
||||
__asm pxor BUF0, CRC0 \
|
||||
__asm movd TMP0, BUF0 \
|
||||
__asm psrlq BUF0, 32 \
|
||||
__asm movzx TEMP, TMP0L \
|
||||
__asm shr TMP0, 8 \
|
||||
__asm movq CRC0, [TABLE + TEMP * 8] \
|
||||
__asm movzx TEMP, TMP0L \
|
||||
__asm shr TMP0, 8 \
|
||||
__asm pxor CRC0, [TABLE + TEMP * 8 + 1 * 256 * 8] \
|
||||
__asm movzx TEMP, TMP0L \
|
||||
__asm shr TMP0, 8 \
|
||||
__asm pxor CRC0, [TABLE + TEMP * 8 + 2 * 256 * 8] \
|
||||
__asm pxor CRC0, [TABLE + TMP0 * 8 + 3 * 256 * 8] \
|
||||
__asm movd TMP0, BUF0 \
|
||||
__asm movzx TEMP, TMP0L \
|
||||
__asm shr TMP0, 8 \
|
||||
__asm pxor CRC0, [TABLE + TEMP * 8 + 4 * 256 * 8] \
|
||||
__asm movzx TEMP, TMP0L \
|
||||
__asm shr TMP0, 8 \
|
||||
__asm pxor CRC0, [TABLE + TEMP * 8 + 5 * 256 * 8] \
|
||||
__asm movzx TEMP, TMP0L \
|
||||
__asm shr TMP0, 8 \
|
||||
__asm pxor CRC0, [TABLE + TEMP * 8 + 6 * 256 * 8] \
|
||||
__asm pxor CRC0, [TABLE + TMP0 * 8 + 7 * 256 * 8]
|
||||
|
||||
// frame pointer register 'ebp' modified by inline assembly code
|
||||
#pragma warning(disable: 4731)
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordI386Mmx(
|
||||
const void *data,
|
||||
size_t bytes,
|
||||
const uint64 &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
uint64 crc0 = start ^ this->Base().Canonize();
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc0, uint64);
|
||||
if (src >= end) {
|
||||
return (crc0 ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
#define CRC0 mm0
|
||||
#define CRC1 mm1
|
||||
#define CRC2 mm2
|
||||
#define CRC3 mm3
|
||||
#define BUF0 mm4
|
||||
#define BUF1 mm5
|
||||
#define BUF2 mm6
|
||||
#define BUF3 mm7
|
||||
#define TMP0 eax
|
||||
#define TMP0L al
|
||||
#define TMP0H ah
|
||||
#define TMP1 ebx
|
||||
#define TMP1L bl
|
||||
#define TMP1H bh
|
||||
#define TMP2 ecx
|
||||
#define TMP2L cl
|
||||
#define TMP2H ch
|
||||
#define TMP3 edx
|
||||
#define TMP3L dl
|
||||
#define TMP3H dh
|
||||
#define TEMP edi
|
||||
#define SRC esi
|
||||
#define END [esp]
|
||||
#define TABLE ebp
|
||||
|
||||
|
||||
const uint64 *interleaved_table_address =
|
||||
&this->crc_word_interleaved_[0][0];
|
||||
const uint64 *word_table_address = &this->crc_word_[0][0];
|
||||
|
||||
__asm {
|
||||
push ebp
|
||||
|
||||
mov TMP0, interleaved_table_address
|
||||
|
||||
movq CRC0, crc0
|
||||
mov SRC, src
|
||||
mov TMP1, end
|
||||
sub TMP1, 2*4*8 - 1
|
||||
cmp SRC, TMP1
|
||||
mov TABLE, word_table_address
|
||||
jae end_main_loop
|
||||
|
||||
push TABLE
|
||||
mov TABLE, TMP0
|
||||
push TMP1
|
||||
|
||||
pxor CRC1, CRC1
|
||||
pxor CRC2, CRC2
|
||||
pxor CRC3, CRC3
|
||||
|
||||
movq BUF0, [SRC]
|
||||
movq BUF1, [SRC + 1 * 8]
|
||||
movq BUF2, [SRC + 2 * 8]
|
||||
movq BUF3, [SRC + 3 * 8]
|
||||
|
||||
main_loop:
|
||||
#if HAVE_SSE && CRCUTIL_PREFETCH_WIDTH > 0
|
||||
prefetcht0 [SRC + CRCUTIL_PREFETCH_WIDTH]
|
||||
#endif
|
||||
add SRC, 32
|
||||
pxor BUF0, CRC0
|
||||
pxor BUF1, CRC1
|
||||
pxor BUF2, CRC2
|
||||
pxor BUF3, CRC3
|
||||
|
||||
movd TMP0, BUF0
|
||||
psrlq BUF0, 32
|
||||
movd TMP1, BUF1
|
||||
psrlq BUF1, 32
|
||||
movd TMP2, BUF2
|
||||
psrlq BUF2, 32
|
||||
movd TMP3, BUF3
|
||||
psrlq BUF3, 32
|
||||
|
||||
movzx TEMP, TMP0L
|
||||
movq CRC0, [TABLE + TEMP * 8]
|
||||
movzx TEMP, TMP1L
|
||||
movq CRC1, [TABLE + TEMP * 8]
|
||||
movzx TEMP, TMP2L
|
||||
movq CRC2, [TABLE + TEMP * 8]
|
||||
movzx TEMP, TMP3L
|
||||
movq CRC3, [TABLE + TEMP * 8]
|
||||
|
||||
movzx TEMP, TMP0H
|
||||
shr TMP0, 16
|
||||
pxor CRC0, [TABLE + TEMP * 8 + 1 * 256 * 8]
|
||||
movzx TEMP, TMP1H
|
||||
shr TMP1, 16
|
||||
pxor CRC1, [TABLE + TEMP * 8 + 1 * 256 * 8]
|
||||
movzx TEMP, TMP2H
|
||||
shr TMP2, 16
|
||||
pxor CRC2, [TABLE + TEMP * 8 + 1 * 256 * 8]
|
||||
movzx TEMP, TMP3H
|
||||
shr TMP3, 16
|
||||
pxor CRC3, [TABLE + TEMP * 8 + 1 * 256 * 8]
|
||||
|
||||
movzx TEMP, TMP0L
|
||||
shr TMP0, 8
|
||||
pxor CRC0, [TABLE + TEMP * 8 + 2 * 256 * 8]
|
||||
movzx TEMP, TMP1L
|
||||
shr TMP1, 8
|
||||
pxor CRC1, [TABLE + TEMP * 8 + 2 * 256 * 8]
|
||||
movzx TEMP, TMP2L
|
||||
shr TMP2, 8
|
||||
pxor CRC2, [TABLE + TEMP * 8 + 2 * 256 * 8]
|
||||
movzx TEMP, TMP3L
|
||||
shr TMP3, 8
|
||||
pxor CRC3, [TABLE + TEMP * 8 + 2 * 256 * 8]
|
||||
|
||||
pxor CRC0, [TABLE + TMP0 * 8 + 3 * 256 * 8]
|
||||
movd TMP0, BUF0
|
||||
pxor CRC1, [TABLE + TMP1 * 8 + 3 * 256 * 8]
|
||||
movd TMP1, BUF1
|
||||
pxor CRC2, [TABLE + TMP2 * 8 + 3 * 256 * 8]
|
||||
movd TMP2, BUF2
|
||||
pxor CRC3, [TABLE + TMP3 * 8 + 3 * 256 * 8]
|
||||
movd TMP3, BUF3
|
||||
|
||||
movzx TEMP, TMP0L
|
||||
pxor CRC0, [TABLE + TEMP * 8 + 4 * 256 * 8]
|
||||
movzx TEMP, TMP1L
|
||||
pxor CRC1, [TABLE + TEMP * 8 + 4 * 256 * 8]
|
||||
movzx TEMP, TMP2L
|
||||
pxor CRC2, [TABLE + TEMP * 8 + 4 * 256 * 8]
|
||||
movzx TEMP, TMP3L
|
||||
pxor CRC3, [TABLE + TEMP * 8 + 4 * 256 * 8]
|
||||
|
||||
movzx TEMP, TMP0H
|
||||
shr TMP0, 16
|
||||
pxor CRC0, [TABLE + TEMP * 8 + 5 * 256 * 8]
|
||||
movzx TEMP, TMP1H
|
||||
shr TMP1, 16
|
||||
pxor CRC1, [TABLE + TEMP * 8 + 5 * 256 * 8]
|
||||
movzx TEMP, TMP2H
|
||||
shr TMP2, 16
|
||||
pxor CRC2, [TABLE + TEMP * 8 + 5 * 256 * 8]
|
||||
movzx TEMP, TMP3H
|
||||
shr TMP3, 16
|
||||
pxor CRC3, [TABLE + TEMP * 8 + 5 * 256 * 8]
|
||||
|
||||
movzx TEMP, TMP0L
|
||||
shr TMP0, 8
|
||||
pxor CRC0, [TABLE + TEMP * 8 + 6 * 256 * 8]
|
||||
movzx TEMP, TMP1L
|
||||
shr TMP1, 8
|
||||
pxor CRC1, [TABLE + TEMP * 8 + 6 * 256 * 8]
|
||||
movzx TEMP, TMP2L
|
||||
shr TMP2, 8
|
||||
pxor CRC2, [TABLE + TEMP * 8 + 6 * 256 * 8]
|
||||
movzx TEMP, TMP3L
|
||||
shr TMP3, 8
|
||||
pxor CRC3, [TABLE + TEMP * 8 + 6 * 256 * 8]
|
||||
|
||||
pxor CRC0, [TABLE + TMP0 * 8 + 7 * 256 * 8]
|
||||
movq BUF0, [SRC]
|
||||
pxor CRC1, [TABLE + TMP1 * 8 + 7 * 256 * 8]
|
||||
movq BUF1, [SRC + 1 * 8]
|
||||
pxor CRC2, [TABLE + TMP2 * 8 + 7 * 256 * 8]
|
||||
movq BUF2, [SRC + 2 * 8]
|
||||
pxor CRC3, [TABLE + TMP3 * 8 + 7 * 256 * 8]
|
||||
movq BUF3, [SRC + 3 * 8]
|
||||
|
||||
cmp END, SRC
|
||||
ja main_loop
|
||||
|
||||
#undef END
|
||||
#define END TMP1
|
||||
pop END
|
||||
pop TABLE
|
||||
add SRC, 32
|
||||
|
||||
CRC_WORD_MMX()
|
||||
|
||||
pxor BUF1, CRC1
|
||||
movq BUF0, BUF1
|
||||
CRC_WORD_MMX()
|
||||
|
||||
pxor BUF2, CRC2
|
||||
movq BUF0, BUF2
|
||||
CRC_WORD_MMX()
|
||||
|
||||
pxor BUF3, CRC3
|
||||
movq BUF0, BUF3
|
||||
CRC_WORD_MMX()
|
||||
|
||||
end_main_loop:
|
||||
add END, 2*4*8 - 8
|
||||
cmp SRC, END
|
||||
jae end_word_loop
|
||||
|
||||
word_loop:
|
||||
movq BUF0, [SRC]
|
||||
add SRC, 8
|
||||
CRC_WORD_MMX()
|
||||
cmp END, SRC
|
||||
ja word_loop
|
||||
end_word_loop:
|
||||
|
||||
#if 0 // Plain C version is faster?
|
||||
add END, 7
|
||||
cmp SRC, END
|
||||
jae end_byte_loop
|
||||
|
||||
byte_loop:
|
||||
movd TMP0, CRC0
|
||||
movzx TEMP, byte ptr [SRC]
|
||||
movzx TMP0, TMP0L
|
||||
psrlq CRC0, 8
|
||||
xor TEMP, TMP0
|
||||
add SRC, 1
|
||||
pxor CRC0, [TABLE + TEMP*8 + 7*256*8]
|
||||
cmp END, SRC
|
||||
ja byte_loop
|
||||
end_byte_loop:
|
||||
#endif
|
||||
|
||||
pop ebp
|
||||
|
||||
mov src, SRC
|
||||
movq crc0, CRC0
|
||||
|
||||
emms
|
||||
}
|
||||
|
||||
#if 1
|
||||
// Compute CRC of remaining bytes.
|
||||
for (;src < end; ++src) {
|
||||
CRC_BYTE(this, crc0, *src);
|
||||
}
|
||||
#endif
|
||||
|
||||
return (crc0 ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_USE_ASM && HAVE_I386 && HAVE_MMX && defined(_MSC_VER)
|
||||
298
crcutil-1.0/code/multiword_64_64_gcc_amd64_asm.cc
Normal file
298
crcutil-1.0/code/multiword_64_64_gcc_amd64_asm.cc
Normal file
@@ -0,0 +1,298 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements multiword CRC for GCC on AMD64.
|
||||
//
|
||||
// Accoding to "Software Optimization Guide for AMD Family 10h Processors"
|
||||
// http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf
|
||||
// instead of
|
||||
// movzbq %al, %rsi
|
||||
// shrq $8, %rax
|
||||
// [use %rsi]
|
||||
// movzbq %al, %rsi
|
||||
// shrq $8, %rax
|
||||
// [use %rsi]
|
||||
// it is better to use 32-bit registers
|
||||
// (high 32 bits will be cleared on assignment), i.e.
|
||||
// movzbl %al, %esi
|
||||
// [use %rsi]
|
||||
// movzbl %ah, %esi
|
||||
// shrq $16, %rax
|
||||
// [use %rsi]
|
||||
// Makes instructions shorter and removes one shift
|
||||
// (the latter is not such a big deal as it's execution time
|
||||
// is nicely masked by [use %rsi] instruction).
|
||||
//
|
||||
// Performance difference:
|
||||
// About 10% degradation on bytes = 8 .. 16
|
||||
// (clobbering registers that should be saved)
|
||||
// Break even at 32 bytes.
|
||||
// 3% improvement starting from 64 bytes.
|
||||
|
||||
#include "generic_crc.h"
|
||||
|
||||
#if defined(__GNUC__) && CRCUTIL_USE_ASM && HAVE_AMD64
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordGccAmd64(
|
||||
const void *data, size_t bytes, const uint64 &start) const;
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiword(
|
||||
const void *data,
|
||||
size_t bytes,
|
||||
const uint64 &start) const {
|
||||
if (bytes <= 6 * sizeof(Word) - 1) {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
uint64 crc = start ^ this->Base().Canonize();
|
||||
const uint8 *end = src + bytes;
|
||||
#define PROCESS_ONE_WORD() do { \
|
||||
Word buf = reinterpret_cast<const Word *>(src)[0]; \
|
||||
CRC_WORD(this, crc, buf); \
|
||||
src += sizeof(Word); \
|
||||
} while (0)
|
||||
if (bytes >= 1 * sizeof(Word)) {
|
||||
PROCESS_ONE_WORD();
|
||||
if (bytes >= 2 * sizeof(Word)) {
|
||||
PROCESS_ONE_WORD();
|
||||
if (bytes >= 3 * sizeof(Word)) {
|
||||
PROCESS_ONE_WORD();
|
||||
if (bytes >= 4 * sizeof(Word)) {
|
||||
PROCESS_ONE_WORD();
|
||||
if (bytes >= 5 * sizeof(Word)) {
|
||||
PROCESS_ONE_WORD();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for (; src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
return (crc ^ this->Base().Canonize());
|
||||
}
|
||||
return this->CrcMultiwordGccAmd64(data, bytes, start);
|
||||
}
|
||||
|
||||
#define TMP0 "%%rsi"
|
||||
#define TMP0W "%%esi"
|
||||
|
||||
#define BUF0 "%%rax"
|
||||
#define BUF0L "%%al"
|
||||
#define BUF0H "%%ah"
|
||||
|
||||
#define BUF1 "%%rbx"
|
||||
#define BUF1L "%%bl"
|
||||
#define BUF1H "%%bh"
|
||||
|
||||
#define BUF2 "%%rcx"
|
||||
#define BUF2L "%%cl"
|
||||
#define BUF2H "%%ch"
|
||||
|
||||
#define BUF3 "%%rdx"
|
||||
#define BUF3L "%%dl"
|
||||
#define BUF3H "%%dh"
|
||||
|
||||
#define CRC_WORD_ASM() \
|
||||
"xorq %[crc0], " BUF0 "\n" \
|
||||
"movzbq " BUF0L ", " TMP0 "\n" \
|
||||
"movq (%[table_word], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbl " BUF0H ", " TMP0W "\n" \
|
||||
"shrq $16, " BUF0 "\n" \
|
||||
"xorq 1*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbq " BUF0L ", " TMP0 "\n" \
|
||||
"xorq 2*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbl " BUF0H ", " TMP0W "\n" \
|
||||
"shrq $16, " BUF0 "\n" \
|
||||
"xorq 3*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbq " BUF0L ", " TMP0 "\n" \
|
||||
"xorq 4*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbl " BUF0H ", " TMP0W "\n" \
|
||||
"shrq $16, " BUF0 "\n" \
|
||||
"xorq 5*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbq " BUF0L ", " TMP0 "\n" \
|
||||
"xorq 6*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbl " BUF0H ", " TMP0W "\n" \
|
||||
"xorq 7*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n"
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordGccAmd64(
|
||||
const void *data, size_t bytes, const uint64 &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
uint64 crc0 = start ^ this->Base().Canonize();
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc0, uint64);
|
||||
if (src >= end) {
|
||||
return (crc0 ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
uint64 crc1;
|
||||
uint64 crc2;
|
||||
uint64 crc3;
|
||||
|
||||
asm(
|
||||
"sub $2*4*8 - 1, %[end]\n"
|
||||
"cmpq %[src], %[end]\n"
|
||||
"jbe 2f\n"
|
||||
"xorq %[crc1], %[crc1]\n"
|
||||
"movq (%[src]), " BUF0 "\n"
|
||||
"movq 1*8(%[src]), " BUF1 "\n"
|
||||
"movq 2*8(%[src]), " BUF2 "\n"
|
||||
"movq 3*8(%[src]), " BUF3 "\n"
|
||||
"movq %[crc1], %[crc2]\n"
|
||||
"movq %[crc1], %[crc3]\n"
|
||||
|
||||
"1:\n"
|
||||
#if HAVE_SSE && CRCUTIL_PREFETCH_WIDTH > 0
|
||||
"prefetcht0 " TO_STRING(CRCUTIL_PREFETCH_WIDTH) "(%[src])\n"
|
||||
#endif // HAVE_SSE
|
||||
"add $4*8, %[src]\n"
|
||||
|
||||
// Set buffer data.
|
||||
"xorq %[crc0], " BUF0 "\n"
|
||||
"xorq %[crc1], " BUF1 "\n"
|
||||
"xorq %[crc2], " BUF2 "\n"
|
||||
"xorq %[crc3], " BUF3 "\n"
|
||||
|
||||
// LOAD crc of byte 0 and shift buffers.
|
||||
"movzbl " BUF0L ", " TMP0W "\n"
|
||||
"movq (%[table], " TMP0 ", 8), %[crc0]\n"
|
||||
"movzbl " BUF1L ", " TMP0W "\n"
|
||||
"movq (%[table], " TMP0 ", 8), %[crc1]\n"
|
||||
"movzbl " BUF2L ", " TMP0W "\n"
|
||||
"movq (%[table], " TMP0 ", 8), %[crc2]\n"
|
||||
"movzbl " BUF3L ", " TMP0W "\n"
|
||||
"movq (%[table], " TMP0 ", 8), %[crc3]\n"
|
||||
|
||||
#define XOR1(byte1) \
|
||||
"movzbl " BUF0L ", " TMP0W "\n" \
|
||||
"xorq " #byte1 "*256*8(%[table], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbl " BUF1L ", " TMP0W "\n" \
|
||||
"xorq " #byte1 "*256*8(%[table], " TMP0 ", 8), %[crc1]\n" \
|
||||
"movzbl " BUF2L ", " TMP0W "\n" \
|
||||
"xorq " #byte1 "*256*8(%[table], " TMP0 ", 8), %[crc2]\n" \
|
||||
"movzbl " BUF3L ", " TMP0W "\n" \
|
||||
"xorq " #byte1 "*256*8(%[table], " TMP0 ", 8), %[crc3]\n"
|
||||
|
||||
#define XOR2(byte2) \
|
||||
"movzbl " BUF0H ", " TMP0W "\n" \
|
||||
"shrq $16, " BUF0 "\n" \
|
||||
"xorq " #byte2 "*256*8(%[table], " TMP0 ", 8), %[crc0]\n" \
|
||||
"movzbl " BUF1H ", " TMP0W "\n" \
|
||||
"shrq $16, " BUF1 "\n" \
|
||||
"xorq " #byte2 "*256*8(%[table], " TMP0 ", 8), %[crc1]\n" \
|
||||
"movzbl " BUF2H ", " TMP0W "\n" \
|
||||
"shrq $16, " BUF2 "\n" \
|
||||
"xorq " #byte2 "*256*8(%[table], " TMP0 ", 8), %[crc2]\n" \
|
||||
"movzbl " BUF3H ", " TMP0W "\n" \
|
||||
"shrq $16, " BUF3 "\n" \
|
||||
"xorq " #byte2 "*256*8(%[table], " TMP0 ", 8), %[crc3]\n"
|
||||
|
||||
XOR2(1)
|
||||
XOR1(2)
|
||||
XOR2(3)
|
||||
XOR1(4)
|
||||
XOR2(5)
|
||||
XOR1(6)
|
||||
|
||||
// Update CRC registers and load buffers.
|
||||
"movzbl " BUF0H ", " TMP0W "\n"
|
||||
"xorq 7*256*8(%[table], " TMP0 ", 8), %[crc0]\n"
|
||||
"movq (%[src]), " BUF0 "\n"
|
||||
"movzbl " BUF1H ", " TMP0W "\n"
|
||||
"xorq 7*256*8(%[table], " TMP0 ", 8), %[crc1]\n"
|
||||
"movq 1*8(%[src]), " BUF1 "\n"
|
||||
"movzbl " BUF2H ", " TMP0W "\n"
|
||||
"xorq 7*256*8(%[table], " TMP0 ", 8), %[crc2]\n"
|
||||
"movq 2*8(%[src]), " BUF2 "\n"
|
||||
"movzbl " BUF3H ", " TMP0W "\n"
|
||||
"xorq 7*256*8(%[table], " TMP0 ", 8), %[crc3]\n"
|
||||
"movq 3*8(%[src]), " BUF3 "\n"
|
||||
|
||||
"cmpq %[src], %[end]\n"
|
||||
"ja 1b\n"
|
||||
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"xorq %[crc1], " BUF1 "\n"
|
||||
"movq " BUF1 ", " BUF0 "\n"
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"xorq %[crc2], " BUF2 "\n"
|
||||
"movq " BUF2 ", " BUF0 "\n"
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"xorq %[crc3], " BUF3 "\n"
|
||||
"movq " BUF3 ", " BUF0 "\n"
|
||||
CRC_WORD_ASM()
|
||||
|
||||
"add $4*8, %[src]\n"
|
||||
|
||||
"2:\n"
|
||||
"add $2*4*8 - 8, %[end]\n"
|
||||
"cmpq %[src], %[end]\n"
|
||||
"jbe 4f\n"
|
||||
|
||||
"3:\n"
|
||||
"movq (%[src]), " BUF0 "\n"
|
||||
"add $8, %[src]\n"
|
||||
CRC_WORD_ASM()
|
||||
"cmpq %[src], %[end]\n"
|
||||
"ja 3b\n"
|
||||
|
||||
"4:\n"
|
||||
"add $7, %[end]\n"
|
||||
|
||||
"cmpq %[src], %[end]\n"
|
||||
"jbe 6f\n"
|
||||
|
||||
"5:\n"
|
||||
"movzbq (%[src]), " BUF0 "\n"
|
||||
"movzbq %b[crc0], " TMP0 "\n"
|
||||
"shrq $8, %[crc0]\n"
|
||||
"xorq " BUF0 ", " TMP0 "\n"
|
||||
"add $1, %[src]\n"
|
||||
"xorq 7*256*8(%[table_word], " TMP0 ", 8), %[crc0]\n"
|
||||
"cmpq %[src], %[end]\n"
|
||||
"ja 5b\n"
|
||||
|
||||
"6:\n"
|
||||
|
||||
|
||||
: // outputs
|
||||
[src] "+r" (src),
|
||||
[end] "+r" (end),
|
||||
[crc0] "+r" (crc0),
|
||||
[crc1] "=&r" (crc1),
|
||||
[crc2] "=&r" (crc2),
|
||||
[crc3] "=&r" (crc3)
|
||||
|
||||
: // inputs
|
||||
[table] "r" (&this->crc_word_interleaved_[0][0]),
|
||||
[table_word] "r" (&this->crc_word_[0][0])
|
||||
|
||||
: // clobbers
|
||||
"%rax", // BUF0
|
||||
"%rbx", // BUF1
|
||||
"%rcx", // BUF2
|
||||
"%rdx", // BUF3
|
||||
"%rsi" // TMP0
|
||||
);
|
||||
|
||||
return (crc0 ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // defined(__GNUC__) && HAVE_AMD64 && CRCUTIL_USE_ASM
|
||||
261
crcutil-1.0/code/multiword_64_64_gcc_i386_mmx.cc
Normal file
261
crcutil-1.0/code/multiword_64_64_gcc_i386_mmx.cc
Normal file
@@ -0,0 +1,261 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements multiword CRC for GCC on i386.
|
||||
|
||||
#include "generic_crc.h"
|
||||
|
||||
#if defined(__GNUC__) && CRCUTIL_USE_ASM && HAVE_I386 && HAVE_MMX
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordI386Mmx(
|
||||
const void *data, size_t bytes, const uint64 &start)
|
||||
const GCC_OMIT_FRAME_POINTER;
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiword(
|
||||
const void *data, size_t bytes, const uint64 &start) const {
|
||||
if (bytes <= 7) {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
uint64 crc = start ^ this->Base().Canonize();
|
||||
for (const uint8 *end = src + bytes; src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
return (crc ^ this->Base().Canonize());
|
||||
}
|
||||
return CrcMultiwordI386Mmx(data, bytes, start);
|
||||
}
|
||||
|
||||
#define CRC_WORD_MMX() \
|
||||
"pxor %[crc0], %[buf0]\n" \
|
||||
"movd %[buf0], %[tmp0]\n" \
|
||||
"psrlq $32, %[buf0]\n" \
|
||||
"movzbl %b[tmp0], %[temp]\n" \
|
||||
"shrl $8, %[tmp0]\n" \
|
||||
"movq (%[table], %[temp], 8), %[crc0]\n" \
|
||||
"movzbl %b[tmp0], %[temp]\n" \
|
||||
"shrl $8, %[tmp0]\n" \
|
||||
"pxor 1*256*8(%[table], %[temp], 8), %[crc0]\n" \
|
||||
"movzbl %b[tmp0], %[temp]\n" \
|
||||
"shrl $8, %[tmp0]\n" \
|
||||
"pxor 2*256*8(%[table], %[temp], 8), %[crc0]\n" \
|
||||
"pxor 3*256*8(%[table], %[tmp0], 8), %[crc0]\n" \
|
||||
"movd %[buf0], %[tmp0]\n" \
|
||||
"movzbl %b[tmp0], %[temp]\n" \
|
||||
"shrl $8, %[tmp0]\n" \
|
||||
"pxor 4*256*8(%[table], %[temp], 8), %[crc0]\n" \
|
||||
"movzbl %b[tmp0], %[temp]\n" \
|
||||
"shrl $8, %[tmp0]\n" \
|
||||
"pxor 5*256*8(%[table], %[temp], 8), %[crc0]\n" \
|
||||
"movzbl %b[tmp0], %[temp]\n" \
|
||||
"shrl $8, %[tmp0]\n" \
|
||||
"pxor 6*256*8(%[table], %[temp], 8), %[crc0]\n" \
|
||||
"pxor 7*256*8(%[table], %[tmp0], 8), %[crc0]\n"
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordI386Mmx(
|
||||
const void *data, size_t bytes, const uint64 &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
uint64 crc0 = start ^ this->Base().Canonize();
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc0, uint64);
|
||||
if (src >= end) {
|
||||
return (crc0 ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
uint64 crc1;
|
||||
uint64 crc2;
|
||||
uint64 crc3;
|
||||
|
||||
uint64 buf0;
|
||||
uint64 buf1;
|
||||
uint64 buf2;
|
||||
uint64 buf3;
|
||||
|
||||
uint32 tmp0;
|
||||
uint32 tmp1;
|
||||
uint32 tmp2;
|
||||
uint32 tmp3;
|
||||
|
||||
uint32 temp;
|
||||
|
||||
void *table_ptr;
|
||||
const uint64 *table_interleaved = &this->crc_word_interleaved_[0][0];
|
||||
const uint64 *table_word = &this->crc_word_[0][0];
|
||||
|
||||
asm(
|
||||
"sub $2*4*8 - 1, %[end]\n"
|
||||
"cmpl %[src], %[end]\n"
|
||||
"jbe 2f\n"
|
||||
|
||||
"pxor %[crc1], %[crc1]\n"
|
||||
"pxor %[crc2], %[crc2]\n"
|
||||
"pxor %[crc3], %[crc3]\n"
|
||||
"movq (%[src]), %[buf0]\n"
|
||||
"movq 1*8(%[src]), %[buf1]\n"
|
||||
"movq 2*8(%[src]), %[buf2]\n"
|
||||
"movq 3*8(%[src]), %[buf3]\n"
|
||||
|
||||
"movl %[table_interleaved], %[table]\n"
|
||||
"1:\n"
|
||||
#if HAVE_SSE && CRCUTIL_PREFETCH_WIDTH > 0
|
||||
"prefetcht0 " TO_STRING(CRCUTIL_PREFETCH_WIDTH) "(%[src])\n"
|
||||
#endif
|
||||
"addl $0x20, %[src]\n"
|
||||
"pxor %[crc0], %[buf0]\n"
|
||||
"pxor %[crc1], %[buf1]\n"
|
||||
"pxor %[crc2], %[buf2]\n"
|
||||
"pxor %[crc3], %[buf3]\n"
|
||||
|
||||
"movd %[buf0], %[tmp0]\n"
|
||||
"psrlq $32, %[buf0]\n"
|
||||
"movd %[buf1], %[tmp1]\n"
|
||||
"psrlq $32, %[buf1]\n"
|
||||
"movd %[buf2], %[tmp2]\n"
|
||||
"psrlq $32, %[buf2]\n"
|
||||
"movd %[buf3], %[tmp3]\n"
|
||||
"psrlq $32, %[buf3]\n"
|
||||
|
||||
"movzbl %b[tmp0], %[temp]\n"
|
||||
"shrl $8, %[tmp0]\n"
|
||||
"movq (%[table], %[temp], 8), %[crc0]\n"
|
||||
"movzbl %b[tmp1], %[temp]\n"
|
||||
"shrl $8, %[tmp1]\n"
|
||||
"movq (%[table], %[temp], 8), %[crc1]\n"
|
||||
"movzbl %b[tmp2], %[temp]\n"
|
||||
"shrl $8, %[tmp2]\n"
|
||||
"movq (%[table], %[temp], 8), %[crc2]\n"
|
||||
"movzbl %b[tmp3], %[temp]\n"
|
||||
"shrl $8, %[tmp3]\n"
|
||||
"movq (%[table], %[temp], 8), %[crc3]\n"
|
||||
|
||||
#define XOR(byte) \
|
||||
"movzbl %b[tmp0], %[temp]\n" \
|
||||
"shrl $8, %[tmp0]\n" \
|
||||
"pxor " #byte "*256*8(%[table], %[temp], 8), %[crc0]\n" \
|
||||
"movzbl %b[tmp1], %[temp]\n" \
|
||||
"shrl $8, %[tmp1]\n" \
|
||||
"pxor " #byte "*256*8(%[table], %[temp], 8), %[crc1]\n" \
|
||||
"movzbl %b[tmp2], %[temp]\n" \
|
||||
"shrl $8, %[tmp2]\n" \
|
||||
"pxor " #byte "*256*8(%[table], %[temp], 8), %[crc2]\n" \
|
||||
"movzbl %b[tmp3], %[temp]\n" \
|
||||
"shrl $8, %[tmp3]\n" \
|
||||
"pxor " #byte "*256*8(%[table], %[temp], 8), %[crc3]\n"
|
||||
|
||||
XOR(1)
|
||||
XOR(2)
|
||||
|
||||
"pxor 3*256*8(%[table], %[tmp0], 8), %[crc0]\n"
|
||||
"movd %[buf0], %[tmp0]\n"
|
||||
"pxor 3*256*8(%[table], %[tmp1], 8), %[crc1]\n"
|
||||
"movd %[buf1], %[tmp1]\n"
|
||||
"pxor 3*256*8(%[table], %[tmp2], 8), %[crc2]\n"
|
||||
"movd %[buf2], %[tmp2]\n"
|
||||
"pxor 3*256*8(%[table], %[tmp3], 8), %[crc3]\n"
|
||||
"movd %[buf3], %[tmp3]\n"
|
||||
|
||||
XOR(4)
|
||||
XOR(5)
|
||||
XOR(6)
|
||||
|
||||
"pxor 7*256*8(%[table], %[tmp0], 8), %[crc0]\n"
|
||||
"movq (%[src]), %[buf0]\n"
|
||||
"pxor 7*256*8(%[table], %[tmp1], 8), %[crc1]\n"
|
||||
"movq 1*8(%[src]), %[buf1]\n"
|
||||
"pxor 7*256*8(%[table], %[tmp2], 8), %[crc2]\n"
|
||||
"movq 2*8(%[src]), %[buf2]\n"
|
||||
"pxor 7*256*8(%[table], %[tmp3], 8), %[crc3]\n"
|
||||
"movq 3*8(%[src]), %[buf3]\n"
|
||||
"cmpl %[src], %[end]\n"
|
||||
"ja 1b\n"
|
||||
#undef XOR
|
||||
|
||||
"movl %[table_word], %[table]\n"
|
||||
CRC_WORD_MMX()
|
||||
|
||||
"pxor %[crc1], %[buf1]\n"
|
||||
"movq %[buf1], %[buf0]\n"
|
||||
CRC_WORD_MMX()
|
||||
|
||||
"pxor %[crc2], %[buf2]\n"
|
||||
"movq %[buf2], %[buf0]\n"
|
||||
CRC_WORD_MMX()
|
||||
|
||||
"pxor %[crc3], %[buf3]\n"
|
||||
"movq %[buf3], %[buf0]\n"
|
||||
CRC_WORD_MMX()
|
||||
|
||||
"add $4*8, %[src]\n"
|
||||
"2:\n"
|
||||
"movl %[table_word], %[table]\n"
|
||||
|
||||
"add $2*4*8 - 8, %[end]\n"
|
||||
"cmpl %[src], %[end]\n"
|
||||
"jbe 4f\n"
|
||||
"3:\n"
|
||||
"movq (%[src]), %[buf0]\n"
|
||||
"addl $0x8, %[src]\n"
|
||||
CRC_WORD_MMX()
|
||||
"cmpl %[src], %[end]\n"
|
||||
"ja 3b\n"
|
||||
"4:\n"
|
||||
"add $7, %[end]\n"
|
||||
|
||||
"cmpl %[src], %[end]\n"
|
||||
"jbe 6f\n"
|
||||
|
||||
"5:\n"
|
||||
"movd %[crc0], %[tmp0]\n"
|
||||
"movzbl (%[src]), %[temp]\n"
|
||||
"movzbl %b[tmp0], %[tmp0]\n"
|
||||
"psrlq $8, %[crc0]\n"
|
||||
"xorl %[tmp0], %[temp]\n"
|
||||
"add $1, %[src]\n"
|
||||
"pxor 7*256*8(%[table], %[temp], 8), %[crc0]\n"
|
||||
"cmpl %[src], %[end]\n"
|
||||
"ja 5b\n"
|
||||
|
||||
"6:\n"
|
||||
|
||||
: // outputs
|
||||
[src] "+r" (src),
|
||||
[end] "+m" (end),
|
||||
[crc0] "+y" (crc0),
|
||||
[crc1] "=&y" (crc1),
|
||||
[crc2] "=&y" (crc2),
|
||||
[crc3] "=&y" (crc3),
|
||||
[buf0] "=&y" (buf0),
|
||||
[buf1] "=&y" (buf1),
|
||||
[buf2] "=&y" (buf2),
|
||||
[buf3] "=&y" (buf3),
|
||||
[tmp0] "=&q" (tmp0),
|
||||
[tmp1] "=&q" (tmp1),
|
||||
[tmp2] "=&q" (tmp2),
|
||||
[tmp3] "=&q" (tmp3),
|
||||
[temp] "=&r" (temp),
|
||||
[table] "=&r" (table_ptr)
|
||||
|
||||
: // inputs
|
||||
[table_interleaved] "m" (table_interleaved),
|
||||
[table_word] "m" (table_word));
|
||||
|
||||
asm volatile("emms");
|
||||
|
||||
return (crc0 ^ this->Base().Canonize());
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // defined(__GNUC__) && HAVE_AMD64 && CRCUTIL_USE_ASM
|
||||
243
crcutil-1.0/code/multiword_64_64_intrinsic_i386_mmx.cc
Normal file
243
crcutil-1.0/code/multiword_64_64_intrinsic_i386_mmx.cc
Normal file
@@ -0,0 +1,243 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements 64-bit multiword CRC using MMX built-in functions.
|
||||
|
||||
#include "generic_crc.h"
|
||||
|
||||
#if CRCUTIL_USE_ASM && HAVE_I386 && HAVE_MMX
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordI386Mmx(
|
||||
const void *data, size_t bytes, const uint64 &start)
|
||||
const GCC_OMIT_FRAME_POINTER;
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiword(
|
||||
const void *data,
|
||||
size_t bytes,
|
||||
const uint64 &start) const {
|
||||
if (bytes <= 7) {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
uint64 crc = start ^ Base().Canonize();
|
||||
for (const uint8 *end = src + bytes; src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
return (crc ^ Base().Canonize());
|
||||
}
|
||||
return CrcMultiwordI386Mmx(data, bytes, start);
|
||||
}
|
||||
#else
|
||||
#pragma warning(push)
|
||||
// CL: uninitialized local variable 'crc1' used
|
||||
// Wrong: crc1 = XOR(crc1, crc1) sets it to 0.
|
||||
#pragma warning(disable: 4700)
|
||||
|
||||
#pragma warning(disable: 4619) // there is no warning number '592'
|
||||
|
||||
// ICL: variable "crc1" is used before its value is set
|
||||
// Wrong: crc1 = XOR(crc1, crc1) sets it to 0.
|
||||
#pragma warning(disable: 592)
|
||||
#endif // !defined(_MSC_VER)
|
||||
|
||||
#define MM64(adr) reinterpret_cast<const __m64 *>(adr)
|
||||
#define MM64_TABLE(byte) MM64(crc_word_interleaved_[byte])
|
||||
|
||||
#define CRC_WORD_MMX(this, crc, buf) do { \
|
||||
buf = _mm_xor_si64(buf, crc); \
|
||||
uint32 tmp = static_cast<uint32>(_mm_cvtsi64_si32(buf)); \
|
||||
buf = _mm_srli_si64(buf, 32); \
|
||||
crc = MM64(crc_word_[0])[TO_BYTE(tmp)]; \
|
||||
tmp >>= 8; \
|
||||
crc = _mm_xor_si64(crc, MM64(crc_word_[1])[TO_BYTE(tmp)]); \
|
||||
tmp >>= 8; \
|
||||
crc = _mm_xor_si64(crc, MM64(crc_word_[2])[TO_BYTE(tmp)]); \
|
||||
tmp >>= 8; \
|
||||
crc = _mm_xor_si64(crc, MM64(crc_word_[3])[tmp]); \
|
||||
tmp = static_cast<uint32>(_mm_cvtsi64_si32(buf)); \
|
||||
crc = _mm_xor_si64(crc, MM64(crc_word_[4])[TO_BYTE(tmp)]); \
|
||||
tmp >>= 8; \
|
||||
crc = _mm_xor_si64(crc, MM64(crc_word_[5])[TO_BYTE(tmp)]); \
|
||||
tmp >>= 8; \
|
||||
crc = _mm_xor_si64(crc, MM64(crc_word_[6])[TO_BYTE(tmp)]); \
|
||||
tmp >>= 8; \
|
||||
crc = _mm_xor_si64(crc, MM64(crc_word_[7])[tmp]); \
|
||||
} while (0)
|
||||
|
||||
template<> uint64 GenericCrc<uint64, uint64, uint64, 4>::CrcMultiwordI386Mmx(
|
||||
const void *data, size_t bytes, const uint64 &start) const {
|
||||
const uint8 *src = static_cast<const uint8 *>(data);
|
||||
const uint8 *end = src + bytes;
|
||||
uint64 crc = start ^ Base().Canonize();
|
||||
|
||||
ALIGN_ON_WORD_BOUNDARY_IF_NEEDED(bytes, this, src, end, crc, uint64);
|
||||
if (src >= end) {
|
||||
return (crc ^ Base().Canonize());
|
||||
}
|
||||
|
||||
// Process 4 registers of sizeof(uint64) bytes at once.
|
||||
bytes = static_cast<size_t>(end - src) & ~(4*8 - 1);
|
||||
if (bytes > 4*8) {
|
||||
const uint8 *stop = src + bytes - 4*8;
|
||||
union {
|
||||
__m64 m64;
|
||||
uint64 u64;
|
||||
} temp;
|
||||
__m64 crc0;
|
||||
__m64 crc1;
|
||||
__m64 crc2;
|
||||
__m64 crc3;
|
||||
__m64 buf0 = MM64(src)[0];
|
||||
__m64 buf1 = MM64(src)[1];
|
||||
__m64 buf2 = MM64(src)[2];
|
||||
__m64 buf3 = MM64(src)[3];
|
||||
|
||||
temp.u64 = crc;
|
||||
crc0 = temp.m64;
|
||||
#if defined(__GNUC__) && !GCC_VERSION_AVAILABLE(4, 4)
|
||||
// There is no way to suppress a warning in GCC;
|
||||
// generate extra assignments.
|
||||
temp.u64 = 0;
|
||||
crc1 = temp.m64;
|
||||
crc2 = temp.m64;
|
||||
crc3 = temp.m64;
|
||||
#else
|
||||
crc1 = _mm_xor_si64(crc1, crc1);
|
||||
crc2 = _mm_xor_si64(crc2, crc2);
|
||||
crc3 = _mm_xor_si64(crc3, crc3);
|
||||
#endif // defined(__GNUC__) && !GCC_VERSION_AVAILABLE(4, 4)
|
||||
|
||||
do {
|
||||
PREFETCH(src);
|
||||
src += 4*8;
|
||||
|
||||
buf0 = _mm_xor_si64(buf0, crc0);
|
||||
buf1 = _mm_xor_si64(buf1, crc1);
|
||||
buf2 = _mm_xor_si64(buf2, crc2);
|
||||
buf3 = _mm_xor_si64(buf3, crc3);
|
||||
|
||||
uint32 tmp0 = static_cast<uint32>(_mm_cvtsi64_si32(buf0));
|
||||
uint32 tmp1 = static_cast<uint32>(_mm_cvtsi64_si32(buf1));
|
||||
uint32 tmp2 = static_cast<uint32>(_mm_cvtsi64_si32(buf2));
|
||||
uint32 tmp3 = static_cast<uint32>(_mm_cvtsi64_si32(buf3));
|
||||
|
||||
buf0 = _mm_srli_si64(buf0, 32);
|
||||
buf1 = _mm_srli_si64(buf1, 32);
|
||||
buf2 = _mm_srli_si64(buf2, 32);
|
||||
buf3 = _mm_srli_si64(buf3, 32);
|
||||
|
||||
crc0 = MM64_TABLE(0)[TO_BYTE(tmp0)];
|
||||
tmp0 >>= 8;
|
||||
crc1 = MM64_TABLE(0)[TO_BYTE(tmp1)];
|
||||
tmp1 >>= 8;
|
||||
crc2 = MM64_TABLE(0)[TO_BYTE(tmp2)];
|
||||
tmp2 >>= 8;
|
||||
crc3 = MM64_TABLE(0)[TO_BYTE(tmp3)];
|
||||
tmp3 >>= 8;
|
||||
|
||||
#define XOR(byte) do { \
|
||||
crc0 = _mm_xor_si64(crc0, MM64_TABLE(byte)[TO_BYTE(tmp0)]); \
|
||||
tmp0 >>= 8; \
|
||||
crc1 = _mm_xor_si64(crc1, MM64_TABLE(byte)[TO_BYTE(tmp1)]); \
|
||||
tmp1 >>= 8; \
|
||||
crc2 = _mm_xor_si64(crc2, MM64_TABLE(byte)[TO_BYTE(tmp2)]); \
|
||||
tmp2 >>= 8; \
|
||||
crc3 = _mm_xor_si64(crc3, MM64_TABLE(byte)[TO_BYTE(tmp3)]); \
|
||||
tmp3 >>= 8; \
|
||||
} while (0)
|
||||
|
||||
XOR(1);
|
||||
XOR(2);
|
||||
|
||||
crc0 = _mm_xor_si64(crc0, MM64_TABLE(3)[tmp0]);
|
||||
tmp0 = static_cast<uint32>(_mm_cvtsi64_si32(buf0));
|
||||
crc1 = _mm_xor_si64(crc1, MM64_TABLE(3)[tmp1]);
|
||||
tmp1 = static_cast<uint32>(_mm_cvtsi64_si32(buf1));
|
||||
crc2 = _mm_xor_si64(crc2, MM64_TABLE(3)[tmp2]);
|
||||
tmp2 = static_cast<uint32>(_mm_cvtsi64_si32(buf2));
|
||||
crc3 = _mm_xor_si64(crc3, MM64_TABLE(3)[tmp3]);
|
||||
tmp3 = static_cast<uint32>(_mm_cvtsi64_si32(buf3));
|
||||
|
||||
XOR(4);
|
||||
XOR(5);
|
||||
XOR(6);
|
||||
|
||||
#undef XOR
|
||||
|
||||
crc0 = _mm_xor_si64(crc0, MM64_TABLE(sizeof(uint64) - 1)[tmp0]);
|
||||
buf0 = MM64(src)[0];
|
||||
crc1 = _mm_xor_si64(crc1, MM64_TABLE(sizeof(uint64) - 1)[tmp1]);
|
||||
buf1 = MM64(src)[1];
|
||||
crc2 = _mm_xor_si64(crc2, MM64_TABLE(sizeof(uint64) - 1)[tmp2]);
|
||||
buf2 = MM64(src)[2];
|
||||
crc3 = _mm_xor_si64(crc3, MM64_TABLE(sizeof(uint64) - 1)[tmp3]);
|
||||
buf3 = MM64(src)[3];
|
||||
}
|
||||
while (src < stop);
|
||||
|
||||
CRC_WORD_MMX(this, crc0, buf0);
|
||||
buf1 = _mm_xor_si64(buf1, crc1);
|
||||
CRC_WORD_MMX(this, crc0, buf1);
|
||||
buf2 = _mm_xor_si64(buf2, crc2);
|
||||
CRC_WORD_MMX(this, crc0, buf2);
|
||||
buf3 = _mm_xor_si64(buf3, crc3);
|
||||
CRC_WORD_MMX(this, crc0, buf3);
|
||||
|
||||
temp.m64 = crc0;
|
||||
crc = temp.u64;
|
||||
|
||||
_mm_empty();
|
||||
|
||||
src += 4*8;
|
||||
}
|
||||
|
||||
// Process sizeof(uint64) bytes at once.
|
||||
bytes = static_cast<size_t>(end - src) & ~(sizeof(uint64) - 1);
|
||||
if (bytes > 0) {
|
||||
union {
|
||||
__m64 m64;
|
||||
uint64 u64;
|
||||
} temp;
|
||||
__m64 crc0;
|
||||
|
||||
temp.u64 = crc;
|
||||
crc0 = temp.m64;
|
||||
|
||||
for (const uint8 *stop = src + bytes; src < stop; src += sizeof(uint64)) {
|
||||
__m64 buf0 = MM64(src)[0];
|
||||
CRC_WORD_MMX(this, crc0, buf0);
|
||||
}
|
||||
|
||||
temp.m64 = crc0;
|
||||
crc = temp.u64;
|
||||
|
||||
_mm_empty();
|
||||
}
|
||||
|
||||
// Compute CRC of remaining bytes.
|
||||
for (;src < end; ++src) {
|
||||
CRC_BYTE(this, crc, *src);
|
||||
}
|
||||
|
||||
return (crc ^ Base().Canonize());
|
||||
}
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(pop)
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_USE_ASM && HAVE_I386 && HAVE_MMX
|
||||
245
crcutil-1.0/code/platform.h
Normal file
245
crcutil-1.0/code/platform.h
Normal file
@@ -0,0 +1,245 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Detects configuration and defines compiler-specific macros.
|
||||
// Also, sets user-defined CRUTIL_USE_* macros to default values.
|
||||
|
||||
#ifndef CRCUTIL_PLATFORM_H_
|
||||
#define CRCUTIL_PLATFORM_H_
|
||||
|
||||
// Permanently disable some annoying warnings generated
|
||||
// by Microsoft CL when compiling Microsoft's headers.
|
||||
#include "std_headers.h"
|
||||
|
||||
// Use inline asm version of the code?
|
||||
#if !defined(CRCUTIL_USE_ASM)
|
||||
#define CRCUTIL_USE_ASM 1
|
||||
#endif // !defined(CRCUTIL_USE_ASM)
|
||||
|
||||
|
||||
#if !defined(HAVE_I386)
|
||||
#if defined(__i386__) || defined(_M_IX86)
|
||||
#define HAVE_I386 1
|
||||
#else
|
||||
#define HAVE_I386 0
|
||||
#endif // defined(__i386__) || defined(_M_IX86)
|
||||
#endif // defined(HAVE_I386)
|
||||
|
||||
|
||||
#if !defined(HAVE_AMD64)
|
||||
#if defined(__amd64__) || defined(_M_AMD64)
|
||||
#define HAVE_AMD64 1
|
||||
#else
|
||||
#define HAVE_AMD64 0
|
||||
#endif // defined(__amd64__) || defined(_M_AMD64)
|
||||
#endif // defined(HAVE_AMD64)
|
||||
|
||||
|
||||
#if HAVE_AMD64 || HAVE_I386
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(push)
|
||||
// '_M_IX86' is not defined as a preprocessor macro
|
||||
#pragma warning(disable: 4668)
|
||||
#include <intrin.h>
|
||||
#pragma warning(pop)
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
|
||||
#if !defined(HAVE_MMX)
|
||||
#if defined(_MSC_VER) || (defined(__GNUC__) && defined(__MMX__))
|
||||
#define HAVE_MMX 1
|
||||
#else
|
||||
#define HAVE_MMX 0
|
||||
#endif // defined(_MSC_VER) || (defined(__GNUC__) && defined(__MMX__))
|
||||
#endif // !defined(HAVE_MMX)
|
||||
|
||||
|
||||
#if !defined(HAVE_SSE)
|
||||
#if defined(_MSC_VER) || (defined(__GNUC__) && defined(__SSE__))
|
||||
#include <xmmintrin.h>
|
||||
#define HAVE_SSE 1
|
||||
#else
|
||||
#define HAVE_SSE 0
|
||||
#endif // defined(_MSC_VER) || (defined(__GNUC__) && defined(__SSE__))
|
||||
#endif // !defined(HAVE_SSE)
|
||||
|
||||
|
||||
#if !defined(HAVE_SSE2)
|
||||
#if defined(_MSC_VER) || (defined(__GNUC__) && defined(__SSE2__))
|
||||
#include <emmintrin.h>
|
||||
#define HAVE_SSE2 1
|
||||
#else
|
||||
#define HAVE_SSE2 0
|
||||
#endif // defined(_MSC_VER) || (defined(__GNUC__) && defined(__SSE2__))
|
||||
#endif // !defined(HAVE_SSE2)
|
||||
|
||||
#else
|
||||
|
||||
#if !defined(HAVE_MMX)
|
||||
#define HAVE_MMX 0
|
||||
#endif // !defined(HAVE_MMX)
|
||||
|
||||
#if !defined(HAVE_SSE)
|
||||
#define HAVE_SSE 0
|
||||
#endif // !defined(HAVE_SSE)
|
||||
|
||||
#if !defined(HAVE_SSE2)
|
||||
#define HAVE_SSE2 0
|
||||
#endif // !defined(HAVE_SSE2)
|
||||
|
||||
#endif // HAVE_AMD64 || HAVE_I386
|
||||
|
||||
// Error checking
|
||||
#if HAVE_SSE && !HAVE_MMX
|
||||
#error SSE is available but not MMX?
|
||||
#endif // HAVE_SSE && !HAVE_MMX
|
||||
|
||||
#if HAVE_SSE2 && (!HAVE_SSE || !HAVE_MMX)
|
||||
#error SSE2 is available but not SSE or MMX?
|
||||
#endif // HAVE_SSE2 && (!HAVE_SSE || !HAVE_MMX)
|
||||
|
||||
|
||||
#if !defined(CRCUTIL_PREFETCH_WIDTH)
|
||||
// On newer X5550 CPU, heavily optimized CrcMultiword is 3% faster without
|
||||
// prefetch for inputs smaller than 8MB and less than 1% slower for 8MB and
|
||||
// larger blocks. On older Q9650 CPU, the code is 2-3% faster for inputs
|
||||
// smaller than 8MB, 4-5% slower when length >= 8MB.
|
||||
// Tested with prefetch length 256, 512, and 4096.
|
||||
//
|
||||
// At this moment there is no compelling reason to use prefetching.
|
||||
//
|
||||
#define CRCUTIL_PREFETCH_WIDTH 0
|
||||
#endif // !defined(CRCUTIL_PREFETCH_WIDTH)
|
||||
|
||||
|
||||
#if HAVE_SSE && CRCUTIL_PREFETCH_WIDTH > 0
|
||||
#define PREFETCH(src) \
|
||||
_mm_prefetch(reinterpret_cast<const char *>(src) + CRCUTIL_PREFETCH_WIDTH, \
|
||||
_MM_HINT_T0)
|
||||
#else
|
||||
#define PREFETCH(src)
|
||||
#endif // HAVE_SSE && CRCUTIL_PREFETCH_WIDTH > 0
|
||||
|
||||
|
||||
// If block size exceeds CRCUTIL_MIN_ALIGN_SIZE, align the data
|
||||
// before accessing it at word boundary. See generic_crc.cc,
|
||||
// ALIGN_ON_WORD_BOUNDARY_IF_NEEDED() macro.
|
||||
#if !defined(CRCUTIL_MIN_ALIGN_SIZE)
|
||||
#if HAVE_AMD64 || HAVE_I386
|
||||
#define CRCUTIL_MIN_ALIGN_SIZE (1024)
|
||||
#else
|
||||
#define CRCUTIL_MIN_ALIGN_SIZE 0
|
||||
#endif // HAVE_AMD64 || HAVE_I386
|
||||
#endif // !defined(CRCUTIL_MIN_ALIGN_SIZE)
|
||||
|
||||
|
||||
// Use _mm_crc32_u64/32/8 intrinics?
|
||||
// If not, they will be implemented in software.
|
||||
#if !HAVE_I386 && !HAVE_AMD64
|
||||
|
||||
#undef CRCUTIL_USE_MM_CRC32
|
||||
#define CRCUTIL_USE_MM_CRC32 0
|
||||
|
||||
#else
|
||||
|
||||
#if !defined(CRCUTIL_USE_MM_CRC32)
|
||||
#if defined(_MSC_VER) || defined(__GNUC__)
|
||||
#define CRCUTIL_USE_MM_CRC32 1
|
||||
#else
|
||||
#define CRCUTIL_USE_MM_CRC32 0
|
||||
#endif // defined(_MSC_VER) || defined(__GNUC__)
|
||||
#endif // !defined(CRCUTIL_USE_MM_CRC32)
|
||||
|
||||
#endif // !HAVE_I386 && !HAVE_AMD64
|
||||
|
||||
|
||||
// Stringize -- always handy.
|
||||
#define TO_STRING_VALUE(arg) #arg
|
||||
#define TO_STRING(arg) TO_STRING_VALUE(arg)
|
||||
|
||||
|
||||
// Compilers give "right shift count >= width of type" warning even
|
||||
// though the shift happens only under appropriate "if".
|
||||
#define SHIFT_RIGHT_NO_WARNING(value, bits) \
|
||||
((value) >> (((bits) < (8 * sizeof(value))) ? (bits) : 0))
|
||||
#define SHIFT_RIGHT_SAFE(value, bits) \
|
||||
((bits) < (8 * sizeof(value)) ? SHIFT_RIGHT_NO_WARNING(value, bits) : 0)
|
||||
|
||||
// The same for left shifts.
|
||||
#define SHIFT_LEFT_NO_WARNING(value, bits) \
|
||||
((value) << (((bits) < (8 * sizeof(value))) ? (bits) : 0))
|
||||
#define SHIFT_LEFT_SAFE(value, bits) \
|
||||
((bits) < (8 * sizeof(value)) ? SHIFT_LEFT_NO_WARNING(value, bits) : 0)
|
||||
|
||||
// GCC-specific macros.
|
||||
//
|
||||
#define GCC_VERSION_AVAILABLE(major, minor) \
|
||||
(defined(__GNUC__) && \
|
||||
(__GNUC__ > (major) || \
|
||||
(__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))))
|
||||
|
||||
|
||||
#if defined(__GNUC__)
|
||||
|
||||
// The GenericCrc tables must be properly aligned.
|
||||
// Penalty for misalignment? 50% performance degradation.
|
||||
// For 128-bit SSE2, the penalty is access violation.
|
||||
#define GCC_ALIGN_ATTRIBUTE(n) __attribute__((aligned(n)))
|
||||
|
||||
#if GCC_VERSION_AVAILABLE(4, 4)
|
||||
// If not marked as "omit frame pointer",
|
||||
// GCC won't be able to find enough registers.
|
||||
#define GCC_OMIT_FRAME_POINTER \
|
||||
__attribute__((__optimize__(2, "omit-frame-pointer")))
|
||||
#endif // GCC_VERSION_AVAILABLE(4, 4)
|
||||
|
||||
#if !defined(__forceinline)
|
||||
#define __forceinline __attribute__((__always_inline__)) inline
|
||||
#endif // !defined(__forceinline)
|
||||
|
||||
#if defined(__APPLE_CC__)
|
||||
// The version of GCC used by Max OS X xCode v 5664 does not understand
|
||||
// "movq xmm, r64" instruction and requires the use of "movd" (probably
|
||||
// because of the bug in GCC which treats "movq/movd xmm,r64 or r64,xmm"
|
||||
// the same).
|
||||
//
|
||||
// Leaving common sense aside, let's peek into Intel's instruction
|
||||
// reference manual. That's what description of MOVD command says:
|
||||
// MOVD xmm, r/m32 (opcode 66 0F 6E /r)
|
||||
// MOVD r/m32, xmm (opcode 66 0F 7E /r)
|
||||
// MOVQ xmm, r/m64 (opcode 66 REX.W 0F 6E /r)
|
||||
// MOVQ r/m64, xmm (opcode 66 REX.W 0F 7E /r)
|
||||
#define SSE2_MOVQ "movd"
|
||||
#else
|
||||
#define SSE2_MOVQ "movq"
|
||||
#endif // defined(__APPLE_CC__)
|
||||
|
||||
#endif // defined(__GNUC__)
|
||||
|
||||
|
||||
// Define compiler-specific macros that were not set yet.
|
||||
#if !defined(_MSC_VER) && !defined(__forceinline)
|
||||
#define __forceinline inline
|
||||
#endif // !defined(_MSC_VER) && !defined(__forceinline)
|
||||
|
||||
#if !defined(GCC_OMIT_FRAME_POINTER)
|
||||
#define GCC_OMIT_FRAME_POINTER
|
||||
#endif // !defined(GCC_OMIT_FRAME_POINTER)
|
||||
|
||||
#if !defined(GCC_ALIGN_ATTRIBUTE)
|
||||
#define GCC_ALIGN_ATTRIBUTE(n)
|
||||
#endif // !defined(GCC_ALIGN_ATTRIBUTE)
|
||||
|
||||
|
||||
#endif // CRCUTIL_PLATFORM_H_
|
||||
61
crcutil-1.0/code/protected_crc.h
Normal file
61
crcutil-1.0/code/protected_crc.h
Normal file
@@ -0,0 +1,61 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Protects CRC tables with its own CRC.
|
||||
// CRC tables get corrupted too, and if corruption is
|
||||
// not caught, data poisoning becomes a reality.
|
||||
|
||||
#ifndef CRCUTIL_PROTECTED_CRC_H_
|
||||
#define CRCUTIL_PROTECTED_CRC_H_
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#pragma pack(push, 16)
|
||||
|
||||
// Class CrcImplementation should not have virtual functions:
|
||||
// vptr is stored as the very first field, vptr value is defined
|
||||
// at runtime, so it is impossible to CRC(*this) once and
|
||||
// guarantee that this value will not change from run to run.
|
||||
//
|
||||
template<typename CrcImplementation> class ProtectedCrc
|
||||
: public CrcImplementation {
|
||||
public:
|
||||
typedef typename CrcImplementation::Crc Crc;
|
||||
|
||||
// Returns check value that the caller should compare
|
||||
// against pre-computed, trusted constant.
|
||||
//
|
||||
// Computing SelfCheckValue() after CRC initialization,
|
||||
// storing it in memory, and periodically checking against
|
||||
// stored value may not work: if CRC tables were initialized
|
||||
// incorrectly and/or had been corrupted during initialization,
|
||||
// CheckValue() will return garbage. Garbage in, garbage out.
|
||||
// Consequitive checks will not detect a problem, the application
|
||||
// will happily produce and save the data with corrupt CRC.
|
||||
//
|
||||
// The application should call SelfCheckValue() regularly:
|
||||
// 1. First and foremost, on every CRC mismatch.
|
||||
// 2. After CRC'ing the data but before sending it out or writing it.
|
||||
// 3. Worst case, every Nth CRC'ed byte or every Nth call to CRC.
|
||||
//
|
||||
Crc SelfCheckValue() const {
|
||||
return CrcDefault(this, sizeof(*this), 0);
|
||||
}
|
||||
} GCC_ALIGN_ATTRIBUTE(16);
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_PROTECTED_CRC_H_
|
||||
106
crcutil-1.0/code/rolling_crc.h
Normal file
106
crcutil-1.0/code/rolling_crc.h
Normal file
@@ -0,0 +1,106 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements rolling CRC (e.g. for Rabin fingerprinting).
|
||||
|
||||
#ifndef CRCUTIL_ROLLING_CRC_H_
|
||||
#define CRCUTIL_ROLLING_CRC_H_
|
||||
|
||||
#include "base_types.h" // size_t, uint8
|
||||
#include "crc_casts.h" // TO_BYTE
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#pragma pack(push, 16)
|
||||
|
||||
// CrcImplementation should provide:
|
||||
// - typename Crc
|
||||
// - typename TableEntry
|
||||
// - typename Word
|
||||
// - Crc CrcDefault(const void *data, size_t bytes, const Crc &start)
|
||||
// - const GfUtil<Crc> &Base() const
|
||||
template<typename CrcImplementation> class RollingCrc {
|
||||
public:
|
||||
typedef typename CrcImplementation::Crc Crc;
|
||||
typedef typename CrcImplementation::TableEntry TableEntry;
|
||||
typedef typename CrcImplementation::Word Word;
|
||||
|
||||
RollingCrc() {}
|
||||
|
||||
// Initializes internal data structures.
|
||||
// Retains reference to "crc" instance -- it is used by Start().
|
||||
RollingCrc(const CrcImplementation &crc,
|
||||
size_t roll_window_bytes,
|
||||
const Crc &start_value) {
|
||||
Init(crc, roll_window_bytes, start_value);
|
||||
}
|
||||
|
||||
// Computes crc of "roll_window_bytes" using
|
||||
// "start_value" of "crc" (see Init()).
|
||||
Crc Start(const void *data) const {
|
||||
return crc_->CrcDefault(data, roll_window_bytes_, start_value_);
|
||||
}
|
||||
|
||||
// Computes CRC of "roll_window_bytes" starting in next position.
|
||||
Crc Roll(const Crc &old_crc, size_t byte_out, size_t byte_in) const {
|
||||
return (old_crc >> 8) ^ in_[TO_BYTE(old_crc) ^ byte_in] ^ out_[byte_out];
|
||||
}
|
||||
|
||||
// Initializes internal data structures.
|
||||
// Retains reference to "crc" instance -- it is used by Start().
|
||||
void Init(const CrcImplementation &crc,
|
||||
size_t roll_window_bytes,
|
||||
const Crc &start_value) {
|
||||
crc_ = &crc;
|
||||
roll_window_bytes_ = roll_window_bytes;
|
||||
start_value_ = start_value;
|
||||
|
||||
Crc add = crc.Base().Canonize() ^ start_value;
|
||||
add = crc.Base().Multiply(add, crc.Base().Xpow8N(roll_window_bytes));
|
||||
add ^= crc.Base().Canonize();
|
||||
Crc mul = crc.Base().One() ^ crc.Base().Xpow8N(1);
|
||||
add = crc.Base().Multiply(add, mul);
|
||||
|
||||
mul = crc.Base().XpowN(8 * roll_window_bytes + crc.Base().Degree());
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
out_[i] = static_cast<TableEntry>(
|
||||
crc.Base().MultiplyUnnormalized(
|
||||
static_cast<Crc>(i), 8, mul) ^ add);
|
||||
}
|
||||
for (size_t i = 0; i < 256; ++i) {
|
||||
in_[i] = crc.crc_word_[sizeof(Word) - 1][i];
|
||||
}
|
||||
}
|
||||
|
||||
// Returns start value.
|
||||
Crc StartValue() const { return start_value_; }
|
||||
|
||||
// Returns length of roll window.
|
||||
size_t WindowBytes() const { return roll_window_bytes_; }
|
||||
|
||||
protected:
|
||||
TableEntry in_[256];
|
||||
TableEntry out_[256];
|
||||
|
||||
// Used only by Start().
|
||||
Crc start_value_;
|
||||
const CrcImplementation *crc_;
|
||||
size_t roll_window_bytes_;
|
||||
} GCC_ALIGN_ATTRIBUTE(16);
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_ROLLING_CRC_H_
|
||||
51
crcutil-1.0/code/std_headers.h
Normal file
51
crcutil-1.0/code/std_headers.h
Normal file
@@ -0,0 +1,51 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Includes some standard C headers for size_t, memset, etc.
|
||||
//
|
||||
// Also, permanently disables a number of warnings produced
|
||||
// by Microsoft's compiler when it includes standard headers
|
||||
// (surprisingly, also by Microsoft).
|
||||
|
||||
#ifndef CRCUTIL_STD_HEADERS_H_
|
||||
#define CRCUTIL_STD_HEADERS_H_
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
// '4' bytes padding added after data member ...
|
||||
#pragma warning(disable:4820)
|
||||
|
||||
// unreferenced inline function has been removed ...
|
||||
#pragma warning(disable:4514)
|
||||
|
||||
// conditional expression is constant
|
||||
#pragma warning(disable: 4127)
|
||||
|
||||
// function ... not inlined
|
||||
#pragma warning(disable: 4710)
|
||||
|
||||
// function ... selected for automatic inline expansion
|
||||
#pragma warning(disable: 4711)
|
||||
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
// #define _CSTDLIB_
|
||||
#include <stdio.h> // always handy
|
||||
#include <string.h> // memset
|
||||
#include <stdlib.h> // size_t, _rotl/_rotl64(MSC)
|
||||
#include <stddef.h> // ptrdiff_t (GNUC)
|
||||
#include <stdarg.h> // va_list
|
||||
|
||||
#endif // CRCUTIL_STD_HEADERS_H_
|
||||
310
crcutil-1.0/code/uint128_sse2.h
Normal file
310
crcutil-1.0/code/uint128_sse2.h
Normal file
@@ -0,0 +1,310 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Implements a limited set of 128-bit arithmetic operations
|
||||
// (the ones that are used by CRC) using SSE2 intrinsics.
|
||||
|
||||
#ifndef CRCUTIL_UINT128_SSE2_H_
|
||||
#define CRCUTIL_UINT128_SSE2_H_
|
||||
|
||||
#include "base_types.h"
|
||||
#include "crc_casts.h" // Downcast, CrcFromUint64, Uint64FromCrc
|
||||
#include "platform.h"
|
||||
|
||||
#if HAVE_SSE2
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
// Specialized functions handling __m128i.
|
||||
template<> __forceinline uint64 Downcast(const __m128i &value) {
|
||||
#if HAVE_AMD64 && defined(__GNUC__)
|
||||
// GCC 4.4.x is too smart and, instead of MOVQ, generates SSE4 PEXTRQ
|
||||
// instruction when the code is compiled with -mmsse4.
|
||||
// Fixed in 4.5 which generates conversion through memory (why?).
|
||||
// And -- yes, it makes quite measurable difference.
|
||||
uint64 temp;
|
||||
asm(SSE2_MOVQ " %[i128], %[u64]\n" : [u64] "=r" (temp) : [i128] "x" (value));
|
||||
return temp;
|
||||
#elif HAVE_AMD64 && (!defined(_MSC_FULL_VER) || _MSC_FULL_VER > 150030729)
|
||||
return static_cast<uint64>(_mm_cvtsi128_si64(value));
|
||||
#else
|
||||
// 64-bit CL 15.00.30729.1 -O2 generates incorrect code (tests fail).
|
||||
// _mm_cvtsi128_si64() is not available on i386.
|
||||
uint64 temp;
|
||||
_mm_storel_epi64(reinterpret_cast<__m128i *>(&temp), value);
|
||||
return temp;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
class uint128_sse2 {
|
||||
public:
|
||||
uint128_sse2() {}
|
||||
~uint128_sse2() {}
|
||||
|
||||
// Default casts to uint128_sse2 and assignment operator.
|
||||
__forceinline void operator =(uint64 value) {
|
||||
#if HAVE_AMD64 && defined(__GNUC__) && !GCC_VERSION_AVAILABLE(4, 5)
|
||||
// Prevent generation of SSE4 pinsrq insruction when
|
||||
// compiling with GCC 4.4.x with -msse4 flag.
|
||||
asm(SSE2_MOVQ " %[u64], %[i128]\n" : [i128] "=x" (x_) : [u64] "r" (value));
|
||||
#elif HAVE_AMD64
|
||||
x_ = _mm_cvtsi64_si128(static_cast<int64>(value));
|
||||
#else
|
||||
x_ = _mm_loadl_epi64(reinterpret_cast<const __m128i *>(&value));
|
||||
#endif
|
||||
}
|
||||
__forceinline uint128_sse2(uint64 x) {
|
||||
*this = x;
|
||||
}
|
||||
__forceinline uint128_sse2(const __m128i x) : x_(x) {
|
||||
}
|
||||
__forceinline operator __m128i() const {
|
||||
return x_;
|
||||
}
|
||||
__forceinline void operator =(const uint128_sse2 &x) {
|
||||
x_ = x.x_;
|
||||
}
|
||||
|
||||
// Extracts 64 less significant bits.
|
||||
__forceinline uint64 to_uint64() const {
|
||||
return Downcast<__m128i, uint64>(x_);
|
||||
}
|
||||
|
||||
// Comparisons.
|
||||
__forceinline bool operator ==(const uint128_sse2 &y) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} t;
|
||||
t.i128 = _mm_xor_si128(x_, y.x_);
|
||||
return (t.u64[0] | t.u64[1]) == 0;
|
||||
}
|
||||
__forceinline bool operator ==(uint64 value) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} t;
|
||||
t.i128 = x_;
|
||||
return (t.u64[0] == value && t.u64[1] == 0);
|
||||
}
|
||||
__forceinline bool operator !=(const uint128_sse2 &y) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} t;
|
||||
t.i128 = _mm_xor_si128(x_, y.x_);
|
||||
return (t.u64[0] | t.u64[1]) != 0;
|
||||
}
|
||||
__forceinline bool operator !=(uint64 value) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} t;
|
||||
t.i128 = x_;
|
||||
return (t.u64[0] != value || t.u64[1] != 0);
|
||||
}
|
||||
|
||||
__forceinline bool operator <(const uint128_sse2 &y) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} xx, yy;
|
||||
xx.i128 = x_;
|
||||
yy.i128 = y.x_;
|
||||
return (xx.u64[0] < yy.u64[0] ||
|
||||
(xx.u64[0] == yy.u64[0] && xx.u64[1] < yy.u64[1]));
|
||||
}
|
||||
|
||||
// Bitwise logic operators.
|
||||
__forceinline uint128_sse2 operator ^(const uint128_sse2 &y) const {
|
||||
return _mm_xor_si128(x_, y.x_);
|
||||
}
|
||||
__forceinline uint128_sse2 operator &(const uint128_sse2 &y) const {
|
||||
return _mm_and_si128(x_, y.x_);
|
||||
}
|
||||
__forceinline uint128_sse2 operator |(const uint128_sse2 &y) const {
|
||||
return _mm_or_si128(x_, y.x_);
|
||||
}
|
||||
|
||||
__forceinline void operator ^=(const uint128_sse2 &y) {
|
||||
*this = *this ^ y.x_;
|
||||
}
|
||||
__forceinline void operator &=(const uint128_sse2 &y) {
|
||||
*this = *this & y.x_;
|
||||
}
|
||||
__forceinline void operator |=(const uint128_sse2 &y) {
|
||||
*this = *this | y.x_;
|
||||
}
|
||||
|
||||
// Arithmetic operators.
|
||||
__forceinline uint128_sse2 operator +(uint64 y) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} temp;
|
||||
temp.i128 = x_;
|
||||
// a + b >= 2**64 iff
|
||||
// a + b > (2**64 - 1) iff
|
||||
// a > (2**64 - 1) - b iff
|
||||
// a > ~b
|
||||
if (temp.u64[0] > ~y) {
|
||||
temp.u64[1] += 1;
|
||||
}
|
||||
temp.u64[0] += y;
|
||||
return temp.i128;
|
||||
}
|
||||
__forceinline void operator +=(uint64 x) {
|
||||
*this = *this + x;
|
||||
}
|
||||
__forceinline uint128_sse2 operator -(uint64 y) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} temp;
|
||||
temp.i128 = x_;
|
||||
if (temp.u64[0] < y) {
|
||||
temp.u64[1] -= 1;
|
||||
}
|
||||
temp.u64[0] -= y;
|
||||
return temp.i128;
|
||||
}
|
||||
__forceinline void operator -=(uint64 x) {
|
||||
*this = *this - x;
|
||||
}
|
||||
|
||||
// Bitwise logical shifts.
|
||||
__forceinline uint128_sse2 operator >>(const int bits) const {
|
||||
if (bits == 8) {
|
||||
return _mm_srli_si128(x_, 1);
|
||||
} else if (bits == 16) {
|
||||
return _mm_srli_si128(x_, 2);
|
||||
} else if (bits == 32) {
|
||||
return _mm_srli_si128(x_, 4);
|
||||
} else if (bits == 64) {
|
||||
return _mm_srli_si128(x_, 8);
|
||||
} else {
|
||||
return long_shift_right(bits);
|
||||
}
|
||||
}
|
||||
__forceinline uint128_sse2 operator >>(const size_t bits) const {
|
||||
return *this >> static_cast<int>(bits);
|
||||
}
|
||||
__forceinline void operator >>=(const int bits) {
|
||||
*this = *this >> bits;
|
||||
}
|
||||
__forceinline void operator >>=(const size_t bits) {
|
||||
*this = *this >> static_cast<int>(bits);
|
||||
}
|
||||
|
||||
__forceinline uint128_sse2 operator <<(int bits) const {
|
||||
if (bits == 8) {
|
||||
return _mm_slli_si128(x_, 1);
|
||||
} else if (bits == 16) {
|
||||
return _mm_slli_si128(x_, 2);
|
||||
} else if (bits == 32) {
|
||||
return _mm_slli_si128(x_, 4);
|
||||
} else if (bits == 64) {
|
||||
return _mm_slli_si128(x_, 8);
|
||||
} else {
|
||||
return long_shift_left(bits);
|
||||
}
|
||||
}
|
||||
__forceinline uint128_sse2 operator <<(size_t bits) const {
|
||||
return *this << static_cast<int>(bits);
|
||||
}
|
||||
__forceinline void operator <<=(int bits) {
|
||||
*this = *this << bits;
|
||||
}
|
||||
__forceinline void operator <<=(size_t bits) {
|
||||
*this = *this << static_cast<int>(bits);
|
||||
}
|
||||
|
||||
protected:
|
||||
__forceinline uint128_sse2 long_shift_right(int bits) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} x;
|
||||
x.i128 = x_;
|
||||
for (; bits > 0; --bits) {
|
||||
x.u64[0] >>= 1;
|
||||
if (x.u64[1] & 1) {
|
||||
x.u64[0] |= static_cast<uint64>(1) << 63;
|
||||
}
|
||||
x.u64[1] >>= 1;
|
||||
}
|
||||
return x.i128;
|
||||
}
|
||||
|
||||
__forceinline uint128_sse2 long_shift_left(int bits) const {
|
||||
union {
|
||||
__m128i i128;
|
||||
int64 i64[2];
|
||||
} x;
|
||||
x.i128 = x_;
|
||||
for (; bits > 0; --bits) {
|
||||
x.i64[1] <<= 1;
|
||||
if (x.i64[0] < 0) {
|
||||
x.i64[1] |= 1;
|
||||
}
|
||||
x.i64[0] <<= 1;
|
||||
}
|
||||
return x.i128;
|
||||
}
|
||||
|
||||
__m128i x_;
|
||||
} GCC_ALIGN_ATTRIBUTE(16);
|
||||
|
||||
|
||||
// Specialized versions.
|
||||
template<> __forceinline uint64 Downcast(const uint128_sse2 &x) {
|
||||
return x.to_uint64();
|
||||
}
|
||||
template<> __forceinline uint32 Downcast(const uint128_sse2 &x) {
|
||||
return static_cast<uint32>(x.to_uint64());
|
||||
}
|
||||
template<> __forceinline uint16 Downcast(const uint128_sse2 &x) {
|
||||
return static_cast<uint16>(x.to_uint64());
|
||||
}
|
||||
template<> __forceinline uint8 Downcast(const uint128_sse2 &x) {
|
||||
return static_cast<uint8>(x.to_uint64());
|
||||
}
|
||||
|
||||
template<> __forceinline uint128_sse2 CrcFromUint64(uint64 lo, uint64 hi) {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} temp;
|
||||
temp.u64[0] = lo;
|
||||
temp.u64[1] = hi;
|
||||
return temp.i128;
|
||||
}
|
||||
|
||||
template<> __forceinline void Uint64FromCrc(const uint128_sse2 &crc,
|
||||
uint64 *lo, uint64 *hi) {
|
||||
union {
|
||||
__m128i i128;
|
||||
uint64 u64[2];
|
||||
} temp;
|
||||
temp.i128 = crc;
|
||||
*lo = temp.u64[0];
|
||||
*hi = temp.u64[1];
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // HAVE_SSE2
|
||||
|
||||
#endif // CRCUTIL_UINT128_SSE2_H_
|
||||
85
crcutil-1.0/config.h.in
Normal file
85
crcutil-1.0/config.h.in
Normal file
@@ -0,0 +1,85 @@
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the `memset' function. */
|
||||
#undef HAVE_MEMSET
|
||||
|
||||
/* Define to 1 if the system has the type `ptrdiff_t'. */
|
||||
#undef HAVE_PTRDIFF_T
|
||||
|
||||
/* Define to 1 if stdbool.h conforms to C99. */
|
||||
#undef HAVE_STDBOOL_H
|
||||
|
||||
/* Define to 1 if you have the <stddef.h> header file. */
|
||||
#undef HAVE_STDDEF_H
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the `strchr' function. */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the `strrchr' function. */
|
||||
#undef HAVE_STRRCHR
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if the system has the type `_Bool'. */
|
||||
#undef HAVE__BOOL
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
#ifndef __cplusplus
|
||||
#undef inline
|
||||
#endif
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
7307
crcutil-1.0/configure
vendored
Executable file
7307
crcutil-1.0/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
32
crcutil-1.0/configure.ac
Normal file
32
crcutil-1.0/configure.ac
Normal file
@@ -0,0 +1,32 @@
|
||||
# -*- Autoconf -*-
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ([2.65])
|
||||
AC_INIT(crcutil, 1.0, crcutil@googlegroups.com)
|
||||
AM_INIT_AUTOMAKE(crcutil, 1.0)
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT()
|
||||
AC_CONFIG_SRCDIR([tests/aligned_alloc.h])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CXX
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
AC_PROG_MAKE_SET
|
||||
|
||||
# Checks for libraries.
|
||||
|
||||
# Checks for header files.
|
||||
AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
|
||||
|
||||
# Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_HEADER_STDBOOL
|
||||
AC_C_INLINE
|
||||
AC_TYPE_SIZE_T
|
||||
AC_CHECK_TYPES([ptrdiff_t])
|
||||
|
||||
# Checks for library functions.
|
||||
AC_CHECK_FUNCS([memset strchr strrchr])
|
||||
|
||||
AC_OUTPUT
|
||||
630
crcutil-1.0/depcomp
Executable file
630
crcutil-1.0/depcomp
Executable file
@@ -0,0 +1,630 @@
|
||||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
|
||||
# Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try \`$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by `PROGRAMS ARGS'.
|
||||
object Object file output by `PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputing dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
cygpath_u="cygpath -u -f -"
|
||||
if test "$depmode" = msvcmsys; then
|
||||
# This is just like msvisualcpp but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u="sed s,\\\\\\\\,/,g"
|
||||
depmode=msvisualcpp
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||
## the command line argument order; so add the flags where they
|
||||
## appear in depend2.am. Note that the slowdown incurred here
|
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||
*) set fnord "$@" "$arg" ;;
|
||||
esac
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
done
|
||||
"$@"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
||||
## The second -e expression handles DOS-style file names with drive letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
||||
tr '
|
||||
' ' ' >> "$depfile"
|
||||
echo >> "$depfile"
|
||||
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts `$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$base.u
|
||||
tmpdepfile3=$dir.libs/$base.u
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$dir$base.u
|
||||
tmpdepfile3=$dir$base.u
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form `foo.o: dependent.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
# The sourcefile does not contain any dependencies, so just
|
||||
# store a dummy comment line, to avoid errors with the Makefile
|
||||
# "include basename.Plo" scheme.
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
icc)
|
||||
# Intel's C compiler understands `-MD -MF file'. However on
|
||||
# icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
|
||||
# ICC 7.0 will fill foo.d with something like
|
||||
# foo.o: sub/foo.c
|
||||
# foo.o: sub/foo.h
|
||||
# which is wrong. We want:
|
||||
# sub/foo.o: sub/foo.c
|
||||
# sub/foo.o: sub/foo.h
|
||||
# sub/foo.c:
|
||||
# sub/foo.h:
|
||||
# ICC 7.1 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using \ :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
|
||||
sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp2)
|
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||
# compilers, which have integrated preprocessors. The correct option
|
||||
# to use with these is +Maked; it writes dependencies to a file named
|
||||
# 'foo.d', which lands next to the object file, wherever that
|
||||
# happens to be.
|
||||
# Much of this is similar to the tru64 case; see comments there.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir.libs/$base.d
|
||||
"$@" -Wc,+Maked
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
"$@" +Maked
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||
# Add `dependent.h:' lines.
|
||||
sed -ne '2,${
|
||||
s/^ *//
|
||||
s/ \\*$//
|
||||
s/$/:/
|
||||
p
|
||||
}' "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in `foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
|
||||
test "x$dir" = "x$object" && dir=
|
||||
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# With Tru64 cc, shared objects can also be used to make a
|
||||
# static library. This mechanism is used in libtool 1.4 series to
|
||||
# handle both shared and static libraries in a single compilation.
|
||||
# With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
|
||||
#
|
||||
# With libtool 1.5 this exception was removed, and libtool now
|
||||
# generates 2 separate objects for the 2 libraries. These two
|
||||
# compilations output dependencies in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
|
||||
tmpdepfile2=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
|
||||
tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.o.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
tmpdepfile4=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
||||
# That's a tab and a space in the [].
|
||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
echo "#dummy" > "$depfile"
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for `:'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no eat=no
|
||||
for arg
|
||||
do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
if test $eat = yes; then
|
||||
eat=no
|
||||
continue
|
||||
fi
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-arch)
|
||||
eat=yes ;;
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed '1,2d' "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove `-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E |
|
||||
sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
||||
sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E 2>/dev/null |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
||||
echo " " >> "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvcmsys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
BIN
crcutil-1.0/doc/crc.pdf
Normal file
BIN
crcutil-1.0/doc/crc.pdf
Normal file
Binary file not shown.
310
crcutil-1.0/doc/data/test-cl-32-1.csv
Normal file
310
crcutil-1.0/doc/data/test-cl-32-1.csv
Normal file
@@ -0,0 +1,310 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 128, 16, 16, 8, 4, 0, 66736, 1477341
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 13.002, 32.502, 33.419, 33.502, 32.752, 33.252, 33.002,, 32.502, Byte
|
||||
8, 6.313, 22.751, 23.001, 23.064, 13.912, 17.501, 14.970,, 13.912, Word
|
||||
16, 3.719, 17.376, 17.751, 16.626, 9.688, 12.438, 9.969,, 9.688, Word
|
||||
32, 3.157, 14.969, 15.094, 14.001, 7.188, 9.751, 7.376,, 7.188, Word
|
||||
64, 1.938, 13.675, 13.743, 12.782, 5.923, 8.438, 6.565,, 5.923, Word
|
||||
128, 1.313, 13.141, 13.008, 12.133, 5.297, 7.664, 5.315,, 5.297, Word
|
||||
256, 1.024, 12.774, 12.665, 11.747, 5.039, 7.309, 4.680,, 4.680, Multiword
|
||||
512, 0.884, 12.586, 12.522, 11.549, 4.882, 7.146, 4.436,, 4.436, Multiword
|
||||
1024, 0.807, 12.491, 12.424, 11.451, 5.013, 7.209, 4.365,, 4.365, Multiword
|
||||
2048, 0.772, 12.445, 12.377, 11.401, 4.987, 7.220, 4.318,, 4.318, Multiword
|
||||
4096, 0.759, 12.414, 12.351, 11.377, 4.994, 7.177, 4.251,, 4.251, Multiword
|
||||
8192, 0.747, 12.394, 12.340, 11.375, 4.991, 7.179, 4.217,, 4.217, Multiword
|
||||
16384, 0.741, 12.153, 12.333, 11.360, 5.036, 7.197, 4.204,, 4.204, Multiword
|
||||
32768, 0.739, 12.204, 12.330, 11.356, 5.029, 7.188, 4.187,, 4.187, Multiword
|
||||
65536, 0.737, 12.074, 12.329, 11.354, 5.024, 5.517, 4.187,, 4.187, Multiword
|
||||
131072, 0.736, 12.257, 12.332, 11.354, 5.035, 5.177, 4.191,, 4.191, Multiword
|
||||
262144, 0.735, 12.379, 12.420, 11.418, 5.050, 5.021, 4.196,, 4.196, Multiword
|
||||
524288, 0.735, 12.507, 12.450, 11.467, 5.100, 4.982, 4.235,, 4.235, Multiword
|
||||
1048576, 0.735, 12.615, 12.486, 11.492, 5.127, 4.799, 4.241,, 4.241, Multiword
|
||||
2097152, 0.736, 12.726, 12.511, 11.500, 5.141, 4.798, 4.251,, 4.251, Multiword
|
||||
4194304, 0.741, 12.756, 12.541, 11.535, 5.157, 4.801, 4.269,, 4.269, Multiword
|
||||
8388608, 0.850, 13.046, 12.788, 11.777, 5.323, 4.951, 4.418,, 4.418, Multiword
|
||||
16777216, 0.849, 13.036, 12.798, 11.789, 5.337, 4.948, 4.423,, 4.423, Multiword
|
||||
33554432, 0.852, 13.067, 12.785, 11.808, 5.343, 4.954, 4.438,, 4.438, Multiword
|
||||
67108864, 0.851, 13.086, 12.813, 11.808, 5.338, 4.944, 4.434,, 4.434, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 128, 16, 16, 8, 3, 0, 66736, 1424205
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 33.254, 34.003,, 33.254, Blockword
|
||||
8, 15.502, 14.752,, 14.752, Multiword
|
||||
16, 10.002, 9.970,, 9.970, Multiword
|
||||
32, 7.532, 7.376,, 7.376, Multiword
|
||||
64, 6.032, 6.376,, 6.032, Blockword
|
||||
128, 5.402, 5.116,, 5.116, Multiword
|
||||
256, 4.961, 4.490,, 4.490, Multiword
|
||||
512, 4.923, 4.180,, 4.180, Multiword
|
||||
1024, 4.978, 4.210,, 4.210, Multiword
|
||||
2048, 5.046, 4.135,, 4.135, Multiword
|
||||
4096, 4.973, 4.076,, 4.076, Multiword
|
||||
8192, 5.003, 4.029,, 4.029, Multiword
|
||||
16384, 5.044, 4.013,, 4.013, Multiword
|
||||
32768, 5.040, 3.999,, 3.999, Multiword
|
||||
65536, 5.178, 4.009,, 4.009, Multiword
|
||||
131072, 4.855, 4.013,, 4.013, Multiword
|
||||
262144, 4.570, 4.016,, 4.016, Multiword
|
||||
524288, 4.435, 4.059,, 4.059, Multiword
|
||||
1048576, 4.443, 4.062,, 4.062, Multiword
|
||||
2097152, 4.407, 4.083,, 4.083, Multiword
|
||||
4194304, 4.431, 4.099,, 4.099, Multiword
|
||||
8388608, 4.554, 4.245,, 4.245, Multiword
|
||||
16777216, 4.563, 4.252,, 4.252, Multiword
|
||||
33554432, 4.550, 4.263,, 4.263, Multiword
|
||||
67108864, 4.534, 4.261,, 4.261, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 128, 16, 16, 4, 4, 0, 33968, 1328148
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 11.503, 32.504, 33.420, 33.502, 26.821, 27.253, 26.289,, 26.289, Multiword
|
||||
8, 6.501, 22.752, 22.939, 23.064, 15.064, 15.755, 15.501,, 15.064, Word
|
||||
16, 6.063, 17.376, 17.751, 16.626, 10.001, 10.938, 10.125,, 10.001, Word
|
||||
32, 3.376, 14.969, 15.094, 14.001, 7.157, 7.751, 7.657,, 7.157, Word
|
||||
64, 1.985, 13.674, 13.743, 12.782, 6.084, 6.297, 5.110,, 5.110, Multiword
|
||||
128, 1.399, 13.250, 13.008, 12.133, 5.407, 5.501, 3.964,, 3.964, Multiword
|
||||
256, 1.098, 13.050, 12.665, 11.747, 5.064, 5.184, 3.379,, 3.379, Multiword
|
||||
512, 0.956, 12.951, 12.522, 11.550, 4.925, 5.032, 3.095,, 3.095, Multiword
|
||||
1024, 0.884, 12.892, 12.424, 11.451, 4.843, 4.929, 2.950,, 2.950, Multiword
|
||||
2048, 0.857, 12.861, 12.377, 11.402, 4.841, 4.822, 2.872,, 2.872, Multiword
|
||||
4096, 0.835, 12.823, 12.351, 11.377, 4.806, 4.805, 2.823,, 2.823, Multiword
|
||||
8192, 0.824, 12.691, 12.340, 11.375, 4.796, 4.801, 2.808,, 2.808, Multiword
|
||||
16384, 0.818, 12.513, 12.333, 11.360, 4.791, 4.794, 2.802,, 2.802, Multiword
|
||||
32768, 0.817, 12.522, 12.330, 11.356, 4.793, 4.813, 2.797,, 2.797, Multiword
|
||||
65536, 0.815, 12.422, 12.329, 11.354, 4.793, 3.882, 2.795,, 2.795, Multiword
|
||||
131072, 0.814, 12.259, 12.332, 11.351, 4.789, 3.548, 2.794,, 2.794, Multiword
|
||||
262144, 0.813, 12.302, 12.417, 11.434, 4.792, 3.387, 2.795,, 2.795, Multiword
|
||||
524288, 0.813, 12.408, 12.462, 11.480, 4.831, 3.306, 2.796,, 2.796, Multiword
|
||||
1048576, 0.813, 12.434, 12.492, 11.491, 4.838, 3.190, 2.814,, 2.814, Multiword
|
||||
2097152, 0.814, 12.465, 12.511, 11.504, 4.846, 3.181, 2.832,, 2.832, Multiword
|
||||
4194304, 0.819, 12.544, 12.558, 11.551, 4.868, 3.181, 2.840,, 2.840, Multiword
|
||||
8388608, 0.930, 12.757, 12.798, 11.721, 5.019, 3.306, 2.971,, 2.971, Multiword
|
||||
16777216, 0.928, 12.799, 12.801, 11.798, 5.045, 3.321, 2.981,, 2.981, Multiword
|
||||
33554432, 0.932, 12.792, 12.790, 11.807, 5.042, 3.311, 2.988,, 2.988, Multiword
|
||||
67108864, 0.936, 12.800, 12.824, 11.809, 5.055, 3.309, 2.978,, 2.978, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 128, 16, 16, 4, 3, 0, 33968, 1304055
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 27.337, 26.163,, 26.163, Multiword
|
||||
8, 15.254, 15.252,, 15.252, Multiword
|
||||
16, 10.070, 10.453,, 10.070, Blockword
|
||||
32, 7.501, 8.157,, 7.501, Blockword
|
||||
64, 5.954, 5.344,, 5.344, Multiword
|
||||
128, 5.340, 4.072,, 4.072, Multiword
|
||||
256, 4.989, 3.399,, 3.399, Multiword
|
||||
512, 4.899, 3.066,, 3.066, Multiword
|
||||
1024, 4.818, 2.864,, 2.864, Multiword
|
||||
2048, 4.758, 2.785,, 2.785, Multiword
|
||||
4096, 4.730, 2.736,, 2.736, Multiword
|
||||
8192, 4.718, 2.725,, 2.725, Multiword
|
||||
16384, 4.713, 2.721,, 2.721, Multiword
|
||||
32768, 4.710, 2.720,, 2.720, Multiword
|
||||
65536, 4.176, 2.719,, 2.719, Multiword
|
||||
131072, 3.856, 2.717,, 2.717, Multiword
|
||||
262144, 3.391, 2.717,, 2.717, Multiword
|
||||
524288, 3.160, 2.717,, 2.717, Multiword
|
||||
1048576, 3.141, 2.739,, 2.739, Multiword
|
||||
2097152, 3.096, 2.752,, 2.752, Multiword
|
||||
4194304, 3.095, 2.753,, 2.753, Multiword
|
||||
8388608, 3.186, 2.884,, 2.884, Multiword
|
||||
16777216, 3.214, 2.901,, 2.901, Multiword
|
||||
33554432, 3.213, 2.909,, 2.909, Multiword
|
||||
67108864, 3.214, 2.907,, 2.907, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 64, 8, 8, 8, 4, 0, 33368, 121356
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 7.388, 10.170, 10.184, 10.877, 10.857, 10.789, 10.439,, 10.170, Byte
|
||||
8, 2.948, 8.160, 8.290, 7.980, 8.238, 8.501, 8.716,, 7.980, ByteWord
|
||||
16, 1.500, 7.933, 7.910, 7.360, 7.219, 7.048, 5.126,, 5.126, Multiword
|
||||
32, 0.844, 7.729, 7.566, 7.001, 5.133, 6.594, 3.719,, 3.719, Multiword
|
||||
64, 0.547, 6.504, 7.469, 6.648, 4.699, 6.318, 2.438,, 2.438, Multiword
|
||||
128, 0.399, 7.594, 7.470, 6.512, 4.622, 6.130, 1.829,, 1.829, Multiword
|
||||
256, 0.325, 7.578, 7.445, 6.361, 4.520, 6.032, 1.508,, 1.508, Multiword
|
||||
512, 0.288, 7.601, 7.460, 6.378, 4.434, 6.042, 1.391,, 1.391, Multiword
|
||||
1024, 0.269, 7.516, 7.450, 6.363, 4.435, 6.091, 1.316,, 1.316, Multiword
|
||||
2048, 0.260, 7.426, 7.440, 6.347, 4.444, 6.129, 1.282,, 1.282, Multiword
|
||||
4096, 0.259, 7.434, 7.415, 6.363, 4.436, 6.073, 1.270,, 1.270, Multiword
|
||||
8192, 0.255, 7.419, 7.410, 6.359, 4.433, 6.046, 1.270,, 1.270, Multiword
|
||||
16384, 0.253, 7.362, 7.419, 6.332, 4.432, 6.053, 1.280,, 1.280, Multiword
|
||||
32768, 0.260, 7.401, 7.341, 6.337, 4.432, 6.078, 1.287,, 1.287, Multiword
|
||||
65536, 0.302, 7.407, 7.489, 6.347, 4.434, 6.853, 1.288,, 1.288, Multiword
|
||||
131072, 0.302, 7.406, 7.332, 6.335, 4.436, 6.823, 1.287,, 1.287, Multiword
|
||||
262144, 0.302, 7.456, 7.518, 6.346, 4.443, 6.810, 1.287,, 1.287, Multiword
|
||||
524288, 0.301, 7.492, 7.545, 6.393, 4.482, 6.847, 1.287,, 1.287, Multiword
|
||||
1048576, 0.302, 7.487, 7.556, 6.420, 4.488, 6.914, 1.288,, 1.288, Multiword
|
||||
2097152, 0.304, 7.519, 7.545, 6.431, 4.502, 6.932, 1.301,, 1.301, Multiword
|
||||
4194304, 0.304, 7.521, 7.580, 6.453, 4.520, 6.940, 1.302,, 1.302, Multiword
|
||||
8388608, 0.546, 7.754, 7.808, 6.638, 4.687, 7.102, 1.406,, 1.406, Multiword
|
||||
16777216, 0.555, 7.754, 7.809, 6.586, 4.695, 7.119, 1.409,, 1.409, Multiword
|
||||
33554432, 0.556, 7.739, 7.787, 6.666, 4.700, 7.120, 1.414,, 1.414, Multiword
|
||||
67108864, 0.561, 7.760, 7.817, 6.657, 4.657, 7.129, 1.416,, 1.416, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 64, 8, 8, 8, 3, 0, 33368, 130167
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 10.593, 10.796,, 10.593, Blockword
|
||||
8, 6.215, 8.126,, 6.215, Blockword
|
||||
16, 4.860, 7.201,, 4.860, Blockword
|
||||
32, 4.153, 6.593,, 4.153, Blockword
|
||||
64, 3.703, 7.501,, 3.703, Blockword
|
||||
128, 3.642, 8.064,, 3.642, Blockword
|
||||
256, 3.535, 8.221,, 3.535, Blockword
|
||||
512, 3.495, 8.374,, 3.495, Blockword
|
||||
1024, 3.487, 8.380,, 3.487, Blockword
|
||||
2048, 3.490, 8.421,, 3.490, Blockword
|
||||
4096, 3.474, 8.435,, 3.474, Blockword
|
||||
8192, 3.470, 8.453,, 3.470, Blockword
|
||||
16384, 3.466, 8.467,, 3.466, Blockword
|
||||
32768, 3.469, 8.476,, 3.469, Blockword
|
||||
65536, 5.142, 8.476,, 5.142, Blockword
|
||||
131072, 5.107, 8.474,, 5.107, Blockword
|
||||
262144, 5.494, 8.531,, 5.494, Blockword
|
||||
524288, 5.730, 8.557,, 5.730, Blockword
|
||||
1048576, 5.731, 8.566,, 5.731, Blockword
|
||||
2097152, 5.800, 8.582,, 5.800, Blockword
|
||||
4194304, 5.817, 8.619,, 5.817, Blockword
|
||||
8388608, 5.930, 8.842,, 5.930, Blockword
|
||||
16777216, 6.030, 8.854,, 6.030, Blockword
|
||||
33554432, 6.032, 8.857,, 6.032, Blockword
|
||||
67108864, 6.040, 8.854,, 6.040, Blockword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 32, 8, 8, 8, 4, 0, 33368, 955008
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 7.367, 10.289, 10.174, 10.934, 11.626, 10.853, 10.593, 8.819,, 8.819, CRC32C
|
||||
8, 2.751, 8.168, 8.280, 8.116, 8.189, 8.501, 8.782, 6.292,, 6.292, CRC32C
|
||||
16, 1.491, 7.932, 7.926, 7.360, 7.220, 7.048, 5.126, 3.969,, 3.969, CRC32C
|
||||
32, 0.845, 7.729, 7.564, 7.000, 4.983, 6.621, 3.719, 3.282,, 3.282, CRC32C
|
||||
64, 0.547, 7.582, 7.493, 6.650, 4.722, 6.387, 2.438, 2.782,, 2.438, Multiword
|
||||
128, 0.399, 7.594, 7.469, 6.688, 4.602, 6.157, 1.829, 2.727,, 1.829, Multiword
|
||||
256, 0.325, 7.578, 7.439, 6.361, 4.520, 6.145, 1.508, 2.641,, 1.508, Multiword
|
||||
512, 0.288, 7.602, 7.461, 6.378, 4.426, 6.081, 1.389, 1.594,, 1.389, Multiword
|
||||
1024, 0.269, 7.518, 7.449, 6.379, 4.457, 6.040, 1.316, 1.510,, 1.316, Multiword
|
||||
2048, 0.260, 7.431, 7.438, 6.351, 4.440, 6.012, 1.277, 1.477,, 1.277, Multiword
|
||||
4096, 0.259, 7.433, 7.429, 6.363, 4.468, 6.050, 1.273, 1.455,, 1.273, Multiword
|
||||
8192, 0.255, 7.430, 7.416, 6.360, 4.439, 6.043, 1.264, 1.452,, 1.264, Multiword
|
||||
16384, 0.253, 7.379, 7.389, 6.331, 4.442, 6.071, 1.275, 1.455,, 1.275, Multiword
|
||||
32768, 0.260, 7.384, 7.340, 6.338, 4.436, 6.084, 1.286, 1.451,, 1.286, Multiword
|
||||
65536, 0.302, 7.403, 7.403, 6.339, 4.443, 6.797, 1.288, 1.456,, 1.288, Multiword
|
||||
131072, 0.301, 7.401, 7.442, 6.334, 4.444, 6.782, 1.287, 1.459,, 1.287, Multiword
|
||||
262144, 0.301, 7.457, 7.518, 6.344, 4.444, 6.777, 1.287, 1.460,, 1.287, Multiword
|
||||
524288, 0.301, 7.465, 7.545, 6.391, 4.485, 6.844, 1.287, 1.462,, 1.287, Multiword
|
||||
1048576, 0.302, 7.503, 7.552, 6.419, 4.491, 6.896, 1.288, 1.463,, 1.288, Multiword
|
||||
2097152, 0.304, 7.508, 7.554, 6.430, 4.496, 6.896, 1.298, 1.475,, 1.298, Multiword
|
||||
4194304, 0.305, 7.525, 7.594, 6.460, 4.513, 6.919, 1.306, 1.480,, 1.306, Multiword
|
||||
8388608, 0.545, 7.745, 7.704, 6.651, 4.674, 7.081, 1.411, 1.596,, 1.411, Multiword
|
||||
16777216, 0.557, 7.752, 7.807, 6.654, 4.688, 7.091, 1.412, 1.573,, 1.412, Multiword
|
||||
33554432, 0.560, 7.761, 7.817, 6.663, 4.702, 7.095, 1.413, 1.602,, 1.413, Multiword
|
||||
67108864, 0.559, 7.760, 7.816, 6.663, 4.702, 7.105, 1.408, 1.606,, 1.408, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 32, 8, 8, 8, 3, 0, 33368, 957186
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 10.628, 10.797, 8.821,, 8.821, CRC32C
|
||||
8, 6.279, 8.126, 6.126,, 6.126, CRC32C
|
||||
16, 4.860, 7.201, 3.969,, 3.969, CRC32C
|
||||
32, 4.168, 6.601, 3.282,, 3.282, CRC32C
|
||||
64, 3.689, 7.439, 2.813,, 2.813, CRC32C
|
||||
128, 3.634, 8.074, 2.735,, 2.735, CRC32C
|
||||
256, 3.559, 8.217, 2.641,, 2.641, CRC32C
|
||||
512, 3.489, 8.350, 1.594,, 1.594, CRC32C
|
||||
1024, 3.487, 8.381, 1.496,, 1.496, CRC32C
|
||||
2048, 3.486, 8.437, 1.489,, 1.489, CRC32C
|
||||
4096, 3.470, 8.418, 1.455,, 1.455, CRC32C
|
||||
8192, 3.468, 8.449, 1.454,, 1.454, CRC32C
|
||||
16384, 3.464, 8.464, 1.458,, 1.458, CRC32C
|
||||
32768, 3.468, 8.469, 1.454,, 1.454, CRC32C
|
||||
65536, 5.093, 8.473, 1.457,, 1.457, CRC32C
|
||||
131072, 5.076, 8.477, 1.459,, 1.459, CRC32C
|
||||
262144, 5.464, 8.530, 1.460,, 1.460, CRC32C
|
||||
524288, 5.704, 8.565, 1.461,, 1.461, CRC32C
|
||||
1048576, 5.725, 8.571, 1.463,, 1.463, CRC32C
|
||||
2097152, 5.778, 8.590, 1.475,, 1.475, CRC32C
|
||||
4194304, 5.786, 8.615, 1.480,, 1.480, CRC32C
|
||||
8388608, 5.975, 8.835, 1.593,, 1.593, CRC32C
|
||||
16777216, 6.001, 8.839, 1.600,, 1.600, CRC32C
|
||||
33554432, 6.005, 8.845, 1.605,, 1.605, CRC32C
|
||||
67108864, 6.007, 8.861, 1.606,, 1.606, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 32, 4, 4, 4, 4, 0, 8500, 917064
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 4.459, 6.636, 6.665, 6.676, 6.376, 6.127, 6.252, 7.564,, 6.127, Blockword
|
||||
8, 2.626, 5.677, 5.817, 4.663, 3.892, 3.993, 3.752, 5.251,, 3.752, Multiword
|
||||
16, 1.243, 5.501, 5.928, 4.940, 3.071, 3.063, 3.038, 3.691,, 3.038, Multiword
|
||||
32, 0.719, 6.193, 6.170, 5.239, 2.750, 2.810, 3.470, 3.146,, 2.750, Word
|
||||
64, 0.485, 6.380, 6.335, 5.427, 2.651, 2.718, 3.359, 2.762,, 2.651, Word
|
||||
128, 0.368, 6.774, 6.360, 5.520, 2.591, 2.656, 3.300, 2.717,, 2.591, Word
|
||||
256, 0.309, 6.664, 6.342, 5.566, 2.547, 2.597, 3.262, 2.637,, 2.547, Word
|
||||
512, 0.280, 6.687, 6.504, 5.561, 2.561, 2.764, 3.240, 1.559,, 1.559, CRC32C
|
||||
1024, 0.265, 6.650, 6.469, 5.614, 2.541, 2.741, 3.232, 1.520,, 1.520, CRC32C
|
||||
2048, 0.269, 6.635, 6.385, 5.696, 2.534, 2.728, 3.219, 1.502,, 1.502, CRC32C
|
||||
4096, 0.259, 6.619, 6.438, 5.697, 2.525, 2.715, 3.229, 1.455,, 1.455, CRC32C
|
||||
8192, 0.255, 6.585, 6.429, 5.689, 2.519, 2.709, 3.230, 1.454,, 1.454, CRC32C
|
||||
16384, 0.253, 6.411, 6.149, 5.565, 2.491, 2.703, 3.237, 1.455,, 1.455, CRC32C
|
||||
32768, 0.261, 6.437, 6.178, 5.580, 2.486, 2.703, 3.251, 1.456,, 1.456, CRC32C
|
||||
65536, 0.308, 6.477, 6.251, 5.583, 2.486, 2.698, 3.252, 1.456,, 1.456, CRC32C
|
||||
131072, 0.307, 6.469, 6.251, 5.585, 2.485, 2.692, 3.254, 1.459,, 1.459, CRC32C
|
||||
262144, 0.308, 6.471, 6.289, 5.658, 2.485, 2.688, 3.251, 1.460,, 1.460, CRC32C
|
||||
524288, 0.307, 6.574, 6.299, 5.705, 2.493, 2.688, 3.256, 1.461,, 1.461, CRC32C
|
||||
1048576, 0.309, 6.622, 6.353, 5.709, 2.517, 2.708, 3.279, 1.463,, 1.463, CRC32C
|
||||
2097152, 0.311, 6.657, 6.346, 5.731, 2.532, 2.720, 3.292, 1.475,, 1.475, CRC32C
|
||||
4194304, 0.312, 6.680, 6.469, 5.762, 2.588, 2.741, 3.333, 1.487,, 1.487, CRC32C
|
||||
8388608, 0.547, 6.874, 6.652, 5.954, 2.682, 2.827, 3.383, 1.566,, 1.566, CRC32C
|
||||
16777216, 0.553, 6.880, 6.664, 5.891, 2.688, 2.868, 3.449, 1.603,, 1.603, CRC32C
|
||||
33554432, 0.552, 6.875, 6.699, 5.970, 2.708, 2.861, 3.466, 1.595,, 1.595, CRC32C
|
||||
67108864, 0.580, 6.847, 6.657, 5.943, 2.699, 2.862, 3.449, 1.608,, 1.608, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 32, 32, 4, 4, 4, 3, 0, 8500, 917523
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 6.253, 6.502, 7.563,, 6.253, Blockword
|
||||
8, 3.969, 4.050, 5.251,, 3.969, Blockword
|
||||
16, 3.054, 3.065, 3.691,, 3.054, Blockword
|
||||
32, 2.752, 3.206, 3.146,, 2.752, Blockword
|
||||
64, 2.714, 3.033, 2.762,, 2.714, Blockword
|
||||
128, 2.670, 2.907, 2.717,, 2.670, Blockword
|
||||
256, 2.624, 2.873, 2.637,, 2.624, Blockword
|
||||
512, 2.762, 2.844, 1.559,, 1.559, CRC32C
|
||||
1024, 2.739, 2.852, 1.493,, 1.493, CRC32C
|
||||
2048, 2.718, 2.838, 1.485,, 1.485, CRC32C
|
||||
4096, 2.711, 2.828, 1.456,, 1.456, CRC32C
|
||||
8192, 2.706, 2.828, 1.455,, 1.455, CRC32C
|
||||
16384, 2.704, 2.828, 1.455,, 1.455, CRC32C
|
||||
32768, 2.703, 2.852, 1.455,, 1.455, CRC32C
|
||||
65536, 2.405, 2.857, 1.456,, 1.456, CRC32C
|
||||
131072, 2.397, 2.860, 1.459,, 1.459, CRC32C
|
||||
262144, 2.316, 2.861, 1.460,, 1.460, CRC32C
|
||||
524288, 2.276, 2.864, 1.462,, 1.462, CRC32C
|
||||
1048576, 2.288, 2.885, 1.462,, 1.462, CRC32C
|
||||
2097152, 2.291, 2.898, 1.475,, 1.475, CRC32C
|
||||
4194304, 2.304, 2.912, 1.480,, 1.480, CRC32C
|
||||
8388608, 2.416, 3.002, 1.583,, 1.583, CRC32C
|
||||
16777216, 2.402, 3.054, 1.610,, 1.610, CRC32C
|
||||
33554432, 2.425, 3.054, 1.603,, 1.603, CRC32C
|
||||
67108864, 2.427, 3.052, 1.611,, 1.611, CRC32C
|
||||
|
||||
|
310
crcutil-1.0/doc/data/test-cl-64-1.csv
Normal file
310
crcutil-1.0/doc/data/test-cl-64-1.csv
Normal file
@@ -0,0 +1,310 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 128, 16, 16, 8, 4, 0, 66736, 991683
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 8.251, 11.910, 11.655, 12.222, 12.535, 16.253, 12.803,, 11.655, ByteUnrolled
|
||||
8, 5.126, 10.787, 10.758, 10.251, 6.501, 6.876, 7.001,, 6.501, Word
|
||||
16, 3.625, 11.553, 11.535, 10.407, 4.877, 5.126, 4.875,, 4.875, Multiword
|
||||
32, 1.751, 11.867, 11.844, 10.782, 4.212, 4.428, 4.339,, 4.212, Word
|
||||
64, 1.297, 12.134, 12.094, 11.010, 4.018, 4.071, 3.285,, 3.285, Multiword
|
||||
128, 1.071, 12.602, 12.172, 11.143, 3.824, 3.945, 2.748,, 2.748, Multiword
|
||||
256, 0.958, 12.492, 12.188, 11.205, 3.786, 3.865, 2.453,, 2.453, Multiword
|
||||
512, 0.901, 12.419, 12.323, 11.198, 3.892, 3.881, 2.363,, 2.363, Multiword
|
||||
1024, 0.873, 12.377, 12.276, 11.248, 4.065, 4.093, 2.340,, 2.340, Multiword
|
||||
2048, 0.858, 12.355, 12.252, 11.257, 4.105, 4.204, 2.322,, 2.322, Multiword
|
||||
4096, 0.857, 12.339, 12.240, 11.261, 4.080, 4.121, 2.286,, 2.286, Multiword
|
||||
8192, 0.850, 12.327, 12.226, 11.269, 4.100, 4.157, 2.272,, 2.272, Multiword
|
||||
16384, 0.847, 12.281, 12.222, 11.258, 4.151, 4.209, 2.265,, 2.265, Multiword
|
||||
32768, 0.846, 12.233, 12.221, 11.266, 4.151, 4.166, 2.258,, 2.258, Multiword
|
||||
65536, 0.845, 12.198, 12.223, 11.266, 4.138, 3.116, 2.255,, 2.255, Multiword
|
||||
131072, 0.845, 12.104, 12.224, 11.270, 4.190, 2.928, 2.254,, 2.254, Multiword
|
||||
262144, 0.844, 12.271, 12.315, 11.311, 4.196, 2.820, 2.245,, 2.245, Multiword
|
||||
524288, 0.844, 12.364, 12.338, 11.391, 4.186, 2.774, 2.255,, 2.255, Multiword
|
||||
1048576, 0.844, 12.469, 12.371, 11.403, 4.249, 2.673, 2.281,, 2.281, Multiword
|
||||
2097152, 0.845, 12.478, 12.389, 11.415, 4.267, 2.678, 2.284,, 2.284, Multiword
|
||||
4194304, 0.851, 12.508, 12.410, 11.442, 4.273, 2.671, 2.292,, 2.292, Multiword
|
||||
8388608, 0.950, 12.742, 12.652, 11.677, 4.413, 2.777, 2.383,, 2.383, Multiword
|
||||
16777216, 0.950, 12.756, 12.680, 11.694, 4.415, 2.793, 2.407,, 2.407, Multiword
|
||||
33554432, 0.950, 12.776, 12.668, 11.703, 4.431, 2.791, 2.418,, 2.418, Multiword
|
||||
67108864, 0.951, 12.775, 12.689, 11.702, 4.432, 2.796, 2.402,, 2.402, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 128, 16, 16, 8, 3, 0, 66736, 957753
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 13.885, 12.628,, 12.628, Multiword
|
||||
8, 7.001, 6.501,, 6.501, Multiword
|
||||
16, 5.098, 4.777,, 4.777, Multiword
|
||||
32, 4.415, 4.331,, 4.331, Multiword
|
||||
64, 4.109, 3.652,, 3.652, Multiword
|
||||
128, 3.938, 2.892,, 2.892, Multiword
|
||||
256, 3.785, 2.633,, 2.633, Multiword
|
||||
512, 3.878, 2.527,, 2.527, Multiword
|
||||
1024, 4.110, 2.605,, 2.605, Multiword
|
||||
2048, 4.199, 2.535,, 2.535, Multiword
|
||||
4096, 4.132, 2.495,, 2.495, Multiword
|
||||
8192, 4.150, 2.462,, 2.462, Multiword
|
||||
16384, 4.184, 2.459,, 2.459, Multiword
|
||||
32768, 4.191, 2.455,, 2.455, Multiword
|
||||
65536, 3.608, 2.448,, 2.448, Multiword
|
||||
131072, 3.375, 2.445,, 2.445, Multiword
|
||||
262144, 3.035, 2.450,, 2.450, Multiword
|
||||
524288, 2.863, 2.449,, 2.449, Multiword
|
||||
1048576, 2.855, 2.474,, 2.474, Multiword
|
||||
2097152, 2.824, 2.477,, 2.477, Multiword
|
||||
4194304, 2.820, 2.484,, 2.484, Multiword
|
||||
8388608, 2.935, 2.605,, 2.605, Multiword
|
||||
16777216, 2.934, 2.616,, 2.616, Multiword
|
||||
33554432, 2.939, 2.619,, 2.619, Multiword
|
||||
67108864, 2.937, 2.626,, 2.626, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 128, 16, 16, 4, 4, 0, 33968, 912312
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 8.001, 11.924, 11.666, 12.207, 10.251, 11.252, 10.251,, 10.251, Word
|
||||
8, 5.001, 10.779, 10.657, 10.251, 6.922, 7.376, 7.104,, 6.922, Word
|
||||
16, 2.750, 11.553, 11.438, 10.407, 5.915, 6.070, 5.918,, 5.915, Word
|
||||
32, 1.813, 11.893, 11.844, 10.782, 5.412, 5.446, 4.251,, 4.251, Multiword
|
||||
64, 1.360, 12.134, 12.079, 11.010, 5.195, 5.135, 3.319,, 3.319, Multiword
|
||||
128, 1.133, 12.602, 12.172, 11.143, 5.051, 4.989, 2.836,, 2.836, Multiword
|
||||
256, 1.020, 12.492, 12.188, 11.205, 4.976, 4.895, 2.606,, 2.606, Multiword
|
||||
512, 0.964, 12.419, 12.323, 11.198, 4.955, 4.919, 2.478,, 2.478, Multiword
|
||||
1024, 0.935, 12.377, 12.276, 11.248, 4.949, 4.861, 2.414,, 2.414, Multiword
|
||||
2048, 0.931, 12.354, 12.253, 11.257, 4.949, 4.833, 2.388,, 2.388, Multiword
|
||||
4096, 0.919, 12.341, 12.240, 11.261, 4.930, 4.817, 2.369,, 2.369, Multiword
|
||||
8192, 0.913, 12.327, 12.226, 11.269, 4.925, 4.808, 2.364,, 2.364, Multiword
|
||||
16384, 0.910, 12.251, 12.223, 11.259, 4.920, 4.808, 2.364,, 2.364, Multiword
|
||||
32768, 0.909, 12.124, 12.223, 11.266, 4.928, 4.806, 2.360,, 2.360, Multiword
|
||||
65536, 0.908, 12.198, 12.225, 11.265, 4.928, 3.254, 2.359,, 2.359, Multiword
|
||||
131072, 0.907, 12.219, 12.228, 11.270, 4.927, 3.062, 2.358,, 2.358, Multiword
|
||||
262144, 0.907, 12.305, 12.314, 11.355, 4.929, 2.962, 2.359,, 2.359, Multiword
|
||||
524288, 0.906, 12.419, 12.343, 11.387, 4.968, 2.913, 2.359,, 2.359, Multiword
|
||||
1048576, 0.907, 12.446, 12.360, 11.402, 4.976, 2.787, 2.383,, 2.383, Multiword
|
||||
2097152, 0.918, 12.482, 12.388, 11.415, 4.990, 2.779, 2.384,, 2.384, Multiword
|
||||
4194304, 0.918, 12.495, 12.405, 11.443, 5.000, 2.779, 2.395,, 2.395, Multiword
|
||||
8388608, 1.018, 12.745, 12.625, 11.681, 5.172, 2.903, 2.504,, 2.504, Multiword
|
||||
16777216, 1.015, 12.757, 12.643, 11.689, 5.191, 2.914, 2.521,, 2.521, Multiword
|
||||
33554432, 1.017, 12.763, 12.688, 11.677, 5.193, 2.911, 2.525,, 2.525, Multiword
|
||||
67108864, 1.018, 12.777, 12.689, 11.704, 5.201, 2.911, 2.530,, 2.530, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 128, 16, 16, 4, 3, 0, 33968, 899532
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 10.846, 10.102,, 10.102, Multiword
|
||||
8, 7.381, 7.031,, 7.031, Multiword
|
||||
16, 6.126, 5.963,, 5.963, Multiword
|
||||
32, 5.446, 4.662,, 4.662, Multiword
|
||||
64, 5.033, 3.495,, 3.495, Multiword
|
||||
128, 4.956, 3.144,, 3.144, Multiword
|
||||
256, 4.891, 2.844,, 2.844, Multiword
|
||||
512, 4.909, 2.753,, 2.753, Multiword
|
||||
1024, 4.856, 2.670,, 2.670, Multiword
|
||||
2048, 4.832, 2.665,, 2.665, Multiword
|
||||
4096, 4.818, 2.643,, 2.643, Multiword
|
||||
8192, 4.807, 2.624,, 2.624, Multiword
|
||||
16384, 4.807, 2.635,, 2.635, Multiword
|
||||
32768, 4.807, 2.636,, 2.636, Multiword
|
||||
65536, 3.886, 2.638,, 2.638, Multiword
|
||||
131072, 3.684, 2.637,, 2.637, Multiword
|
||||
262144, 3.267, 2.638,, 2.638, Multiword
|
||||
524288, 3.037, 2.638,, 2.638, Multiword
|
||||
1048576, 3.034, 2.662,, 2.662, Multiword
|
||||
2097152, 2.992, 2.672,, 2.672, Multiword
|
||||
4194304, 2.986, 2.675,, 2.675, Multiword
|
||||
8388608, 3.110, 2.799,, 2.799, Multiword
|
||||
16777216, 3.116, 2.813,, 2.813, Multiword
|
||||
33554432, 3.116, 2.815,, 2.815, Multiword
|
||||
67108864, 3.113, 2.817,, 2.817, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 64, 8, 8, 8, 4, 0, 33384, 82494
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.250, 6.127, 6.308, 7.501, 7.327, 7.802, 7.501,, 6.127, Byte
|
||||
8, 2.000, 6.044, 5.879, 5.027, 3.007, 3.376, 2.949,, 2.949, Multiword
|
||||
16, 1.125, 6.426, 6.225, 5.129, 2.708, 2.613, 2.491,, 2.491, Multiword
|
||||
32, 0.625, 6.764, 6.465, 5.378, 2.370, 2.365, 2.289,, 2.289, Multiword
|
||||
64, 0.392, 6.867, 6.574, 5.438, 2.257, 2.228, 1.741,, 1.741, Multiword
|
||||
128, 0.308, 7.207, 6.613, 5.417, 2.134, 2.188, 1.425,, 1.425, Multiword
|
||||
256, 0.281, 7.119, 6.618, 5.455, 2.110, 2.153, 1.290,, 1.290, Multiword
|
||||
512, 0.266, 7.099, 6.733, 5.454, 2.074, 2.136, 1.218,, 1.218, Multiword
|
||||
1024, 0.257, 7.047, 6.703, 5.470, 2.070, 2.150, 1.180,, 1.180, Multiword
|
||||
2048, 0.254, 7.027, 6.690, 5.464, 2.082, 2.153, 1.162,, 1.162, Multiword
|
||||
4096, 0.257, 7.011, 6.679, 5.493, 2.093, 2.141, 1.157,, 1.157, Multiword
|
||||
8192, 0.253, 7.006, 6.672, 5.482, 2.078, 2.133, 1.157,, 1.157, Multiword
|
||||
16384, 0.252, 7.000, 6.669, 5.465, 2.080, 2.130, 1.163,, 1.163, Multiword
|
||||
32768, 0.259, 6.998, 6.662, 5.464, 2.078, 2.130, 1.180,, 1.180, Multiword
|
||||
65536, 0.302, 6.983, 6.658, 5.463, 2.082, 1.620, 1.182,, 1.182, Multiword
|
||||
131072, 0.302, 6.992, 6.651, 5.463, 2.084, 1.594, 1.180,, 1.180, Multiword
|
||||
262144, 0.302, 7.020, 6.660, 5.464, 2.082, 1.582, 1.182,, 1.182, Multiword
|
||||
524288, 0.301, 7.034, 6.717, 5.507, 2.084, 1.576, 1.181,, 1.181, Multiword
|
||||
1048576, 0.302, 7.053, 6.742, 5.531, 2.098, 1.540, 1.182,, 1.182, Multiword
|
||||
2097152, 0.304, 7.075, 6.760, 5.543, 2.106, 1.553, 1.196,, 1.196, Multiword
|
||||
4194304, 0.304, 7.111, 6.774, 5.561, 2.108, 1.559, 1.196,, 1.196, Multiword
|
||||
8388608, 0.543, 7.299, 6.952, 5.745, 2.239, 1.664, 1.300,, 1.300, Multiword
|
||||
16777216, 0.557, 7.331, 6.952, 5.760, 2.247, 1.673, 1.297,, 1.297, Multiword
|
||||
33554432, 0.558, 7.322, 6.962, 5.763, 2.247, 1.681, 1.304,, 1.304, Multiword
|
||||
67108864, 0.562, 7.328, 6.971, 5.768, 2.252, 1.678, 1.305,, 1.305, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 64, 8, 8, 8, 3, 0, 33384, 88803
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 7.785, 7.501,, 7.501, Multiword
|
||||
8, 3.435, 3.164,, 3.164, Multiword
|
||||
16, 2.664, 2.577,, 2.577, Multiword
|
||||
32, 2.367, 2.314,, 2.314, Multiword
|
||||
64, 2.265, 1.860,, 1.860, Multiword
|
||||
128, 2.186, 1.493,, 1.493, Multiword
|
||||
256, 2.138, 1.376,, 1.376, Multiword
|
||||
512, 2.149, 1.280,, 1.280, Multiword
|
||||
1024, 2.143, 1.250,, 1.250, Multiword
|
||||
2048, 2.134, 1.236,, 1.236, Multiword
|
||||
4096, 2.129, 1.225,, 1.225, Multiword
|
||||
8192, 2.129, 1.222,, 1.222, Multiword
|
||||
16384, 2.130, 1.231,, 1.231, Multiword
|
||||
32768, 2.130, 1.230,, 1.230, Multiword
|
||||
65536, 1.589, 1.232,, 1.232, Multiword
|
||||
131072, 1.565, 1.230,, 1.230, Multiword
|
||||
262144, 1.409, 1.230,, 1.230, Multiword
|
||||
524288, 1.330, 1.230,, 1.230, Multiword
|
||||
1048576, 1.327, 1.231,, 1.231, Multiword
|
||||
2097152, 1.320, 1.244,, 1.244, Multiword
|
||||
4194304, 1.320, 1.244,, 1.244, Multiword
|
||||
8388608, 1.425, 1.361,, 1.361, Multiword
|
||||
16777216, 1.429, 1.369,, 1.369, Multiword
|
||||
33554432, 1.431, 1.371,, 1.371, Multiword
|
||||
67108864, 1.435, 1.373,, 1.373, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 32, 8, 8, 8, 4, 0, 33384, 1106208
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 6.250, 6.208, 6.313, 7.501, 7.331, 7.802, 7.501, 7.251,, 6.208, Byte
|
||||
8, 2.000, 6.044, 5.884, 5.027, 3.001, 3.376, 2.955, 3.250,, 2.955, Multiword
|
||||
16, 1.125, 6.428, 6.225, 5.126, 2.514, 2.613, 2.500, 2.527,, 2.500, Multiword
|
||||
32, 0.625, 6.762, 6.466, 5.377, 2.250, 2.365, 2.303, 2.241,, 2.241, CRC32C
|
||||
64, 0.399, 6.868, 6.590, 5.438, 2.153, 2.228, 1.739, 2.150,, 1.739, Multiword
|
||||
128, 0.308, 7.207, 6.606, 5.447, 2.083, 2.186, 1.425, 2.126,, 1.425, Multiword
|
||||
256, 0.281, 7.119, 6.620, 5.456, 2.099, 2.153, 1.287, 2.097,, 1.287, Multiword
|
||||
512, 0.266, 7.099, 6.733, 5.454, 2.084, 2.141, 1.216, 1.446,, 1.216, Multiword
|
||||
1024, 0.257, 7.047, 6.703, 5.471, 2.086, 2.158, 1.180, 1.417,, 1.180, Multiword
|
||||
2048, 0.254, 7.027, 6.690, 5.463, 2.075, 2.159, 1.161, 1.400,, 1.161, Multiword
|
||||
4096, 0.257, 7.011, 6.679, 5.494, 2.092, 2.137, 1.157, 1.380,, 1.157, Multiword
|
||||
8192, 0.253, 7.006, 6.673, 5.484, 2.078, 2.136, 1.156, 1.379,, 1.156, Multiword
|
||||
16384, 0.252, 7.002, 6.669, 5.471, 2.079, 2.130, 1.163, 1.389,, 1.163, Multiword
|
||||
32768, 0.259, 6.994, 6.662, 5.463, 2.081, 2.130, 1.181, 1.381,, 1.181, Multiword
|
||||
65536, 0.302, 6.982, 6.655, 5.463, 2.083, 1.569, 1.182, 1.385,, 1.182, Multiword
|
||||
131072, 0.302, 6.976, 6.656, 5.463, 2.082, 1.559, 1.181, 1.385,, 1.181, Multiword
|
||||
262144, 0.301, 7.009, 6.658, 5.465, 2.083, 1.557, 1.181, 1.386,, 1.181, Multiword
|
||||
524288, 0.301, 7.044, 6.717, 5.508, 2.082, 1.555, 1.181, 1.386,, 1.181, Multiword
|
||||
1048576, 0.302, 7.049, 6.742, 5.532, 2.104, 1.521, 1.182, 1.388,, 1.182, Multiword
|
||||
2097152, 0.304, 7.079, 6.754, 5.544, 2.106, 1.534, 1.196, 1.400,, 1.196, Multiword
|
||||
4194304, 0.304, 7.111, 6.774, 5.558, 2.107, 1.539, 1.196, 1.406,, 1.196, Multiword
|
||||
8388608, 0.547, 7.303, 6.941, 5.748, 2.226, 1.646, 1.296, 1.523,, 1.296, Multiword
|
||||
16777216, 0.561, 7.320, 6.965, 5.756, 2.245, 1.645, 1.297, 1.516,, 1.297, Multiword
|
||||
33554432, 0.561, 7.318, 6.969, 5.724, 2.251, 1.660, 1.300, 1.531,, 1.300, Multiword
|
||||
67108864, 0.560, 7.332, 6.969, 5.756, 2.254, 1.662, 1.303, 1.532,, 1.303, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 32, 8, 8, 8, 3, 0, 33384, 1106505
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 7.918, 7.501, 7.251,, 7.251, CRC32C
|
||||
8, 3.421, 3.155, 3.250,, 3.155, Multiword
|
||||
16, 2.673, 2.576, 2.527,, 2.527, CRC32C
|
||||
32, 2.332, 2.315, 2.240,, 2.240, CRC32C
|
||||
64, 2.261, 1.860, 2.143,, 1.860, Multiword
|
||||
128, 2.180, 1.483, 2.126,, 1.483, Multiword
|
||||
256, 2.139, 1.379, 2.097,, 1.379, Multiword
|
||||
512, 2.149, 1.279, 1.450,, 1.279, Multiword
|
||||
1024, 2.151, 1.252, 1.409,, 1.252, Multiword
|
||||
2048, 2.134, 1.235, 1.408,, 1.235, Multiword
|
||||
4096, 2.132, 1.226, 1.379,, 1.226, Multiword
|
||||
8192, 2.131, 1.224, 1.381,, 1.224, Multiword
|
||||
16384, 2.129, 1.227, 1.390,, 1.227, Multiword
|
||||
32768, 2.129, 1.231, 1.381,, 1.231, Multiword
|
||||
65536, 1.551, 1.231, 1.383,, 1.231, Multiword
|
||||
131072, 1.541, 1.230, 1.384,, 1.230, Multiword
|
||||
262144, 1.388, 1.230, 1.384,, 1.230, Multiword
|
||||
524288, 1.311, 1.230, 1.386,, 1.230, Multiword
|
||||
1048576, 1.310, 1.231, 1.388,, 1.231, Multiword
|
||||
2097152, 1.304, 1.244, 1.400,, 1.244, Multiword
|
||||
4194304, 1.309, 1.247, 1.406,, 1.247, Multiword
|
||||
8388608, 1.406, 1.363, 1.525,, 1.363, Multiword
|
||||
16777216, 1.417, 1.365, 1.528,, 1.365, Multiword
|
||||
33554432, 1.412, 1.369, 1.530,, 1.369, Multiword
|
||||
67108864, 1.418, 1.369, 1.532,, 1.369, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 32, 4, 4, 4, 4, 0, 8528, 1093401
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 4.000, 6.340, 6.307, 5.876, 5.501, 6.251, 5.501, 7.252,, 5.501, Word
|
||||
8, 2.250, 6.046, 5.884, 5.024, 3.418, 3.647, 3.375, 3.043,, 3.043, CRC32C
|
||||
16, 1.000, 6.431, 6.225, 5.361, 2.771, 3.044, 2.885, 2.528,, 2.528, CRC32C
|
||||
32, 0.594, 6.752, 6.475, 5.505, 2.672, 2.865, 2.095, 2.235,, 2.095, Multiword
|
||||
64, 0.406, 6.868, 6.568, 5.586, 2.651, 2.797, 1.715, 2.147,, 1.715, Multiword
|
||||
128, 0.317, 7.207, 6.606, 5.613, 2.625, 2.759, 1.477, 2.126,, 1.477, Multiword
|
||||
256, 0.282, 7.119, 6.618, 5.622, 2.609, 2.755, 1.376, 2.097,, 1.376, Multiword
|
||||
512, 0.266, 7.098, 6.742, 5.613, 2.608, 2.801, 1.327, 1.451,, 1.327, Multiword
|
||||
1024, 0.258, 7.047, 6.706, 5.618, 2.613, 2.759, 1.301, 1.418,, 1.301, Multiword
|
||||
2048, 0.264, 7.027, 6.684, 5.640, 2.628, 2.759, 1.295, 1.404,, 1.295, Multiword
|
||||
4096, 0.256, 7.011, 6.677, 5.627, 2.621, 2.752, 1.284, 1.379,, 1.284, Multiword
|
||||
8192, 0.253, 7.006, 6.668, 5.623, 2.616, 2.759, 1.280, 1.380,, 1.280, Multiword
|
||||
16384, 0.252, 7.001, 6.666, 5.621, 2.614, 2.755, 1.282, 1.389,, 1.282, Multiword
|
||||
32768, 0.260, 6.995, 6.668, 5.619, 2.614, 2.754, 1.299, 1.381,, 1.299, Multiword
|
||||
65536, 0.308, 6.987, 6.655, 5.618, 2.613, 1.498, 1.301, 1.384,, 1.301, Multiword
|
||||
131072, 0.308, 6.983, 6.647, 5.619, 2.613, 1.489, 1.302, 1.385,, 1.302, Multiword
|
||||
262144, 0.308, 7.018, 6.663, 5.620, 2.613, 1.491, 1.303, 1.385,, 1.303, Multiword
|
||||
524288, 0.309, 7.075, 6.716, 5.641, 2.613, 1.488, 1.303, 1.386,, 1.303, Multiword
|
||||
1048576, 0.309, 7.091, 6.744, 5.675, 2.635, 1.409, 1.304, 1.388,, 1.304, Multiword
|
||||
2097152, 0.312, 7.101, 6.756, 5.685, 2.636, 1.421, 1.317, 1.400,, 1.317, Multiword
|
||||
4194304, 0.312, 7.114, 6.769, 5.702, 2.650, 1.426, 1.321, 1.406,, 1.321, Multiword
|
||||
8388608, 0.545, 7.315, 6.952, 5.878, 2.774, 1.524, 1.425, 1.520,, 1.425, Multiword
|
||||
16777216, 0.556, 7.327, 6.952, 5.813, 2.774, 1.530, 1.427, 1.526,, 1.427, Multiword
|
||||
33554432, 0.557, 7.327, 6.853, 5.884, 2.757, 1.516, 1.426, 1.531,, 1.426, Multiword
|
||||
67108864, 0.556, 7.316, 6.951, 5.883, 2.776, 1.538, 1.428, 1.529,, 1.428, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
CL-150030729, 64, 32, 4, 4, 4, 3, 0, 8528, 1094247
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 6.251, 5.501, 7.251,, 5.501, Multiword
|
||||
8, 3.643, 3.397, 3.064,, 3.064, CRC32C
|
||||
16, 2.977, 2.935, 2.527,, 2.527, CRC32C
|
||||
32, 2.825, 2.310, 2.250,, 2.250, CRC32C
|
||||
64, 2.797, 1.758, 2.141,, 1.758, Multiword
|
||||
128, 2.758, 1.587, 2.126,, 1.587, Multiword
|
||||
256, 2.752, 1.455, 2.097,, 1.455, Multiword
|
||||
512, 2.785, 1.405, 1.454,, 1.405, Multiword
|
||||
1024, 2.752, 1.385, 1.413,, 1.385, Multiword
|
||||
2048, 2.754, 1.379, 1.400,, 1.379, Multiword
|
||||
4096, 2.754, 1.369, 1.378,, 1.369, Multiword
|
||||
8192, 2.756, 1.362, 1.380,, 1.362, Multiword
|
||||
16384, 2.752, 1.361, 1.389,, 1.361, Multiword
|
||||
32768, 2.755, 1.372, 1.382,, 1.372, Multiword
|
||||
65536, 1.929, 1.376, 1.384,, 1.376, Multiword
|
||||
131072, 1.920, 1.377, 1.385,, 1.377, Multiword
|
||||
262144, 1.711, 1.377, 1.385,, 1.377, Multiword
|
||||
524288, 1.599, 1.377, 1.387,, 1.377, Multiword
|
||||
1048576, 1.599, 1.379, 1.387,, 1.379, Multiword
|
||||
2097152, 1.587, 1.387, 1.400,, 1.387, Multiword
|
||||
4194304, 1.592, 1.397, 1.409,, 1.397, Multiword
|
||||
8388608, 1.688, 1.497, 1.523,, 1.497, Multiword
|
||||
16777216, 1.694, 1.502, 1.501,, 1.501, CRC32C
|
||||
33554432, 1.696, 1.505, 1.532,, 1.505, Multiword
|
||||
67108864, 1.683, 1.490, 1.529,, 1.490, Multiword
|
||||
|
||||
|
310
crcutil-1.0/doc/data/test-gcc-32-1.csv
Normal file
310
crcutil-1.0/doc/data/test-gcc-32-1.csv
Normal file
@@ -0,0 +1,310 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 8, 4, 0, 66720, 1420551
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.001, 14.602, 15.273, 15.549, 16.727, 15.716, 15.223,, 14.602, Byte
|
||||
8, 4.251, 12.393, 12.361, 12.410, 7.875, 7.542, 7.177,, 7.177, Multiword
|
||||
16, 2.375, 12.368, 12.297, 11.396, 6.092, 5.610, 5.489,, 5.489, Multiword
|
||||
32, 1.626, 12.380, 12.284, 11.282, 5.194, 4.726, 4.688,, 4.688, Multiword
|
||||
64, 1.188, 12.429, 12.302, 11.735, 4.724, 4.255, 4.835,, 4.255, Blockword
|
||||
128, 1.032, 12.828, 12.364, 11.560, 4.342, 4.035, 4.594,, 4.035, Blockword
|
||||
256, 0.954, 12.692, 12.373, 11.506, 4.225, 3.932, 4.541,, 3.932, Blockword
|
||||
512, 0.914, 12.619, 12.453, 11.477, 4.281, 3.913, 4.628,, 3.913, Blockword
|
||||
1024, 0.893, 12.636, 12.550, 11.452, 4.634, 4.190, 4.732,, 4.190, Blockword
|
||||
2048, 0.885, 12.590, 12.585, 11.450, 4.678, 4.247, 4.714,, 4.247, Blockword
|
||||
4096, 0.885, 12.562, 12.601, 11.442, 4.630, 4.177, 4.658,, 4.177, Blockword
|
||||
8192, 0.880, 12.555, 12.517, 11.452, 4.651, 4.192, 4.647,, 4.192, Blockword
|
||||
16384, 0.878, 12.494, 12.452, 11.452, 4.729, 4.262, 4.658,, 4.262, Blockword
|
||||
32768, 0.876, 12.522, 12.446, 11.453, 4.737, 4.255, 4.645,, 4.255, Blockword
|
||||
65536, 0.876, 12.526, 12.440, 11.451, 4.713, 5.458, 4.644,, 4.644, Multiword
|
||||
131072, 0.873, 12.521, 12.435, 11.456, 4.747, 5.154, 4.646,, 4.646, Multiword
|
||||
262144, 0.875, 12.614, 12.529, 11.549, 4.781, 5.000, 4.642,, 4.642, Multiword
|
||||
524288, 0.875, 12.664, 12.589, 11.588, 4.833, 4.967, 4.679,, 4.679, Multiword
|
||||
1048576, 0.875, 12.689, 12.629, 11.597, 4.854, 4.967, 4.690,, 4.690, Multiword
|
||||
2097152, 0.887, 12.719, 12.690, 11.624, 4.863, 4.965, 4.710,, 4.710, Multiword
|
||||
4194304, 0.894, 12.773, 12.763, 11.667, 4.885, 4.984, 4.727,, 4.727, Multiword
|
||||
8388608, 0.994, 13.041, 13.033, 11.942, 5.055, 5.143, 4.912,, 4.912, Multiword
|
||||
16777216, 0.998, 13.058, 13.042, 11.932, 5.058, 5.143, 4.927,, 4.927, Multiword
|
||||
33554432, 0.999, 13.054, 13.003, 11.950, 5.073, 5.138, 4.919,, 4.919, Multiword
|
||||
67108864, 1.008, 13.076, 13.051, 11.965, 5.053, 5.140, 4.914,, 4.914, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 8, 3, 0, 66720, 1375020
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 17.491, 15.685,, 15.685, Multiword
|
||||
8, 8.001, 7.390,, 7.390, Multiword
|
||||
16, 5.907, 5.650,, 5.650, Multiword
|
||||
32, 4.936, 4.490,, 4.490, Multiword
|
||||
64, 4.357, 5.172,, 4.357, Blockword
|
||||
128, 4.048, 4.597,, 4.048, Blockword
|
||||
256, 3.969, 4.286,, 3.969, Blockword
|
||||
512, 3.956, 4.225,, 3.956, Blockword
|
||||
1024, 4.247, 4.363,, 4.247, Blockword
|
||||
2048, 4.250, 4.352,, 4.250, Blockword
|
||||
4096, 4.139, 4.311,, 4.139, Blockword
|
||||
8192, 4.228, 4.287,, 4.228, Blockword
|
||||
16384, 4.271, 4.286,, 4.271, Blockword
|
||||
32768, 4.237, 4.274,, 4.237, Blockword
|
||||
65536, 5.284, 4.261,, 4.261, Multiword
|
||||
131072, 4.970, 4.264,, 4.264, Multiword
|
||||
262144, 4.914, 4.268,, 4.268, Multiword
|
||||
524288, 4.907, 4.295,, 4.295, Multiword
|
||||
1048576, 4.884, 4.313,, 4.313, Multiword
|
||||
2097152, 4.893, 4.332,, 4.332, Multiword
|
||||
4194304, 4.895, 4.346,, 4.346, Multiword
|
||||
8388608, 5.052, 4.514,, 4.514, Multiword
|
||||
16777216, 5.085, 4.531,, 4.531, Multiword
|
||||
33554432, 5.086, 4.527,, 4.527, Multiword
|
||||
67108864, 5.086, 4.505,, 4.505, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 4, 4, 0, 33952, 1282032
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 8.335, 14.506, 14.508, 15.689, 9.751, 14.208, 10.675,, 9.751, Word
|
||||
8, 4.501, 12.385, 12.269, 12.410, 6.813, 8.169, 7.402,, 6.813, Word
|
||||
16, 2.563, 12.367, 12.364, 11.396, 5.438, 6.021, 5.781,, 5.438, Word
|
||||
32, 1.500, 12.379, 12.235, 11.282, 4.840, 5.105, 4.250,, 4.250, Multiword
|
||||
64, 0.991, 12.423, 12.344, 11.733, 4.470, 4.706, 3.292,, 3.292, Multiword
|
||||
128, 0.914, 12.828, 12.411, 11.559, 4.365, 4.454, 2.868,, 2.868, Multiword
|
||||
256, 0.795, 12.692, 12.441, 11.506, 4.265, 4.411, 2.643,, 2.643, Multiword
|
||||
512, 0.839, 12.729, 12.561, 11.491, 4.219, 4.505, 2.544,, 2.544, Multiword
|
||||
1024, 0.831, 12.636, 12.468, 11.466, 4.213, 4.433, 2.471,, 2.471, Multiword
|
||||
2048, 0.726, 12.592, 12.422, 11.470, 4.206, 4.387, 2.434,, 2.434, Multiword
|
||||
4096, 0.815, 12.568, 12.398, 11.473, 4.193, 4.369, 2.435,, 2.435, Multiword
|
||||
8192, 0.709, 12.561, 12.498, 11.443, 4.186, 4.338, 2.432,, 2.432, Multiword
|
||||
16384, 0.706, 12.552, 12.454, 11.438, 4.178, 4.355, 2.453,, 2.453, Multiword
|
||||
32768, 0.733, 12.541, 12.448, 11.444, 4.174, 4.351, 2.473,, 2.473, Multiword
|
||||
65536, 0.711, 12.528, 12.443, 11.449, 4.164, 3.557, 2.476,, 2.476, Multiword
|
||||
131072, 0.711, 12.520, 12.448, 11.454, 4.157, 3.254, 2.474,, 2.474, Multiword
|
||||
262144, 0.717, 12.612, 12.523, 11.501, 4.182, 3.103, 2.477,, 2.477, Multiword
|
||||
524288, 0.709, 12.659, 12.584, 11.578, 4.212, 3.022, 2.478,, 2.478, Multiword
|
||||
1048576, 0.717, 12.681, 12.660, 11.603, 4.233, 2.920, 2.504,, 2.504, Multiword
|
||||
2097152, 0.764, 12.698, 12.705, 11.614, 4.244, 2.915, 2.505,, 2.505, Multiword
|
||||
4194304, 0.789, 12.777, 12.748, 11.674, 4.278, 2.912, 2.514,, 2.514, Multiword
|
||||
8388608, 0.888, 13.055, 13.006, 11.949, 4.428, 3.046, 2.652,, 2.652, Multiword
|
||||
16777216, 0.906, 13.058, 13.031, 11.945, 4.460, 3.052, 2.664,, 2.664, Multiword
|
||||
33554432, 0.914, 13.063, 13.043, 11.953, 4.461, 3.017, 2.661,, 2.661, Multiword
|
||||
67108864, 0.923, 13.071, 13.047, 11.956, 4.445, 3.055, 2.668,, 2.668, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 4, 3, 0, 33952, 1273275
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 12.098, 9.876,, 9.876, Multiword
|
||||
8, 7.937, 6.827,, 6.827, Multiword
|
||||
16, 6.077, 5.441,, 5.441, Multiword
|
||||
32, 5.146, 4.157,, 4.157, Multiword
|
||||
64, 4.704, 2.992,, 2.992, Multiword
|
||||
128, 4.510, 2.587,, 2.587, Multiword
|
||||
256, 4.483, 2.315,, 2.315, Multiword
|
||||
512, 4.469, 2.210,, 2.210, Multiword
|
||||
1024, 4.401, 2.166,, 2.166, Multiword
|
||||
2048, 4.375, 2.120,, 2.120, Multiword
|
||||
4096, 4.364, 2.096,, 2.096, Multiword
|
||||
8192, 4.358, 2.092,, 2.092, Multiword
|
||||
16384, 4.336, 2.088,, 2.088, Multiword
|
||||
32768, 4.347, 2.093,, 2.093, Multiword
|
||||
65536, 3.739, 2.093,, 2.093, Multiword
|
||||
131072, 3.435, 2.092,, 2.092, Multiword
|
||||
262144, 2.979, 2.092,, 2.092, Multiword
|
||||
524288, 2.743, 2.092,, 2.092, Multiword
|
||||
1048576, 2.730, 2.117,, 2.117, Multiword
|
||||
2097152, 2.683, 2.119,, 2.119, Multiword
|
||||
4194304, 2.680, 2.127,, 2.127, Multiword
|
||||
8388608, 2.801, 2.257,, 2.257, Multiword
|
||||
16777216, 2.796, 2.259,, 2.259, Multiword
|
||||
33554432, 2.800, 2.267,, 2.267, Multiword
|
||||
67108864, 2.802, 2.262,, 2.262, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 64, 8, 8, 8, 4, 0, 33376, 149688
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 10.532, 15.753, 18.663, 17.473, 17.825, 21.770, 14.752,, 14.752, Multiword
|
||||
8, 3.179, 12.451, 15.771, 15.191, 9.626, 11.017, 8.126,, 8.126, Multiword
|
||||
16, 1.825, 10.685, 14.914, 13.574, 7.504, 8.612, 5.275,, 5.275, Multiword
|
||||
32, 1.485, 9.881, 14.202, 12.751, 6.667, 7.386, 3.732,, 3.732, Multiword
|
||||
64, 0.886, 9.280, 13.863, 12.298, 6.172, 6.817, 2.366,, 2.366, Multiword
|
||||
128, 0.599, 9.360, 13.738, 12.100, 5.833, 6.574, 1.809,, 1.809, Multiword
|
||||
256, 0.455, 9.145, 13.656, 12.039, 5.713, 6.460, 1.551,, 1.551, Multiword
|
||||
512, 0.385, 9.075, 13.641, 11.956, 5.730, 6.388, 1.407,, 1.407, Multiword
|
||||
1024, 0.372, 9.045, 13.672, 11.940, 5.718, 6.366, 1.339,, 1.339, Multiword
|
||||
2048, 0.341, 9.036, 13.618, 11.926, 5.676, 6.298, 1.300,, 1.300, Multiword
|
||||
4096, 0.333, 9.014, 13.590, 11.919, 5.692, 6.316, 1.288,, 1.288, Multiword
|
||||
8192, 0.325, 9.011, 13.585, 11.915, 5.690, 6.323, 1.283,, 1.283, Multiword
|
||||
16384, 0.322, 9.015, 13.584, 11.912, 5.706, 6.338, 1.292,, 1.292, Multiword
|
||||
32768, 0.328, 9.047, 13.581, 11.917, 5.720, 6.360, 1.304,, 1.304, Multiword
|
||||
65536, 0.358, 9.069, 13.584, 11.916, 5.723, 8.064, 1.304,, 1.304, Multiword
|
||||
131072, 0.358, 9.077, 13.594, 11.920, 5.726, 8.039, 1.302,, 1.302, Multiword
|
||||
262144, 0.357, 9.151, 13.695, 11.978, 5.731, 8.113, 1.302,, 1.302, Multiword
|
||||
524288, 0.357, 9.174, 13.744, 12.019, 5.766, 8.120, 1.302,, 1.302, Multiword
|
||||
1048576, 0.358, 9.189, 13.761, 12.057, 5.801, 8.239, 1.303,, 1.303, Multiword
|
||||
2097152, 0.361, 9.199, 13.790, 12.084, 5.806, 8.235, 1.317,, 1.317, Multiword
|
||||
4194304, 0.361, 9.262, 13.835, 12.137, 5.852, 8.256, 1.321,, 1.321, Multiword
|
||||
8388608, 0.586, 9.493, 14.077, 12.388, 6.037, 8.419, 1.438,, 1.438, Multiword
|
||||
16777216, 0.587, 9.496, 14.108, 12.423, 6.046, 8.438, 1.438,, 1.438, Multiword
|
||||
33554432, 0.587, 9.500, 14.132, 12.417, 6.048, 8.454, 1.444,, 1.444, Multiword
|
||||
67108864, 0.599, 9.512, 14.131, 12.424, 6.025, 8.469, 1.441,, 1.441, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 64, 8, 8, 8, 3, 0, 33376, 161667
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 21.787, 18.251,, 18.251, Multiword
|
||||
8, 10.376, 9.532,, 9.532, Multiword
|
||||
16, 8.522, 7.496,, 7.496, Multiword
|
||||
32, 7.396, 6.587,, 6.587, Multiword
|
||||
64, 6.839, 7.204,, 6.839, Blockword
|
||||
128, 6.594, 7.579,, 6.594, Blockword
|
||||
256, 6.504, 7.547,, 6.504, Blockword
|
||||
512, 6.430, 7.567,, 6.430, Blockword
|
||||
1024, 6.396, 7.562,, 6.396, Blockword
|
||||
2048, 6.405, 7.588,, 6.405, Blockword
|
||||
4096, 6.390, 7.609,, 6.390, Blockword
|
||||
8192, 6.383, 7.564,, 6.383, Blockword
|
||||
16384, 6.398, 7.579,, 6.398, Blockword
|
||||
32768, 6.417, 7.619,, 6.417, Blockword
|
||||
65536, 7.486, 7.586,, 7.486, Blockword
|
||||
131072, 7.450, 7.582,, 7.450, Blockword
|
||||
262144, 7.750, 7.651,, 7.651, Multiword
|
||||
524288, 7.859, 7.660,, 7.660, Multiword
|
||||
1048576, 7.882, 7.702,, 7.702, Multiword
|
||||
2097152, 7.927, 7.716,, 7.716, Multiword
|
||||
4194304, 7.964, 7.770,, 7.770, Multiword
|
||||
8388608, 8.174, 7.958,, 7.958, Multiword
|
||||
16777216, 8.175, 8.006,, 8.006, Multiword
|
||||
33554432, 8.238, 8.001,, 8.001, Multiword
|
||||
67108864, 8.219, 8.016,, 8.016, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 8, 8, 8, 4, 0, 33376, 1155186
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 10.547, 15.091, 18.248, 17.474, 17.086, 21.882, 14.530, 11.376,, 11.376, CRC32C
|
||||
8, 3.513, 11.815, 15.771, 15.199, 9.626, 11.001, 8.126, 6.870,, 6.870, CRC32C
|
||||
16, 1.825, 10.688, 14.914, 13.565, 7.750, 8.675, 5.288, 4.340,, 4.340, CRC32C
|
||||
32, 1.477, 9.346, 14.205, 12.751, 6.615, 7.508, 3.677, 3.385,, 3.385, CRC32C
|
||||
64, 0.884, 9.325, 13.820, 12.297, 6.183, 6.940, 2.366, 2.985,, 2.366, Multiword
|
||||
128, 0.594, 9.321, 13.737, 12.155, 5.868, 6.540, 1.803, 2.861,, 1.803, Multiword
|
||||
256, 0.458, 9.161, 13.655, 12.053, 5.762, 6.478, 1.550, 2.709,, 1.550, Multiword
|
||||
512, 0.388, 9.075, 13.633, 11.969, 5.657, 6.412, 1.407, 3.472,, 1.407, Multiword
|
||||
1024, 0.371, 9.053, 13.669, 11.954, 5.714, 6.364, 1.338, 3.446,, 1.338, Multiword
|
||||
2048, 0.342, 9.025, 13.617, 11.934, 5.695, 6.323, 1.303, 3.460,, 1.303, Multiword
|
||||
4096, 0.333, 9.015, 13.590, 11.927, 5.692, 6.322, 1.290, 3.426,, 1.290, Multiword
|
||||
8192, 0.326, 9.014, 13.583, 11.924, 5.688, 6.320, 1.289, 3.426,, 1.289, Multiword
|
||||
16384, 0.322, 9.014, 13.582, 11.917, 5.708, 6.346, 1.292, 3.428,, 1.292, Multiword
|
||||
32768, 0.328, 9.047, 13.582, 11.917, 5.719, 6.357, 1.301, 3.441,, 1.301, Multiword
|
||||
65536, 0.358, 9.072, 13.583, 11.917, 5.722, 8.026, 1.305, 3.445,, 1.305, Multiword
|
||||
131072, 0.356, 9.079, 13.586, 11.920, 5.727, 8.018, 1.302, 3.446,, 1.302, Multiword
|
||||
262144, 0.358, 9.127, 13.683, 12.010, 5.731, 8.069, 1.302, 3.447,, 1.302, Multiword
|
||||
524288, 0.357, 9.155, 13.736, 12.054, 5.779, 8.100, 1.301, 3.449,, 1.301, Multiword
|
||||
1048576, 0.359, 9.187, 13.760, 12.069, 5.804, 8.208, 1.304, 3.473,, 1.304, Multiword
|
||||
2097152, 0.361, 9.206, 13.793, 12.081, 5.802, 8.194, 1.317, 3.491,, 1.317, Multiword
|
||||
4194304, 0.363, 9.242, 13.836, 12.126, 5.850, 8.244, 1.324, 3.504,, 1.324, Multiword
|
||||
8388608, 0.589, 9.466, 14.127, 12.392, 6.013, 8.418, 1.435, 3.654,, 1.435, Multiword
|
||||
16777216, 0.593, 9.490, 14.133, 12.419, 6.053, 8.414, 1.435, 3.670,, 1.435, Multiword
|
||||
33554432, 0.590, 9.509, 14.132, 12.428, 6.047, 8.424, 1.444, 3.669,, 1.444, Multiword
|
||||
67108864, 0.591, 9.514, 14.118, 12.419, 6.053, 8.434, 1.441, 3.672,, 1.441, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 8, 8, 8, 3, 0, 33376, 1166436
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 21.802, 17.772, 11.251,, 11.251, CRC32C
|
||||
8, 10.376, 9.584, 7.051,, 7.051, CRC32C
|
||||
16, 8.439, 7.725, 4.338,, 4.338, CRC32C
|
||||
32, 7.282, 6.640, 3.399,, 3.399, CRC32C
|
||||
64, 6.751, 7.375, 2.990,, 2.990, CRC32C
|
||||
128, 6.649, 7.649, 2.843,, 2.843, CRC32C
|
||||
256, 6.495, 7.493, 2.728,, 2.728, CRC32C
|
||||
512, 6.423, 7.553, 3.448,, 3.448, CRC32C
|
||||
1024, 6.436, 7.512, 3.463,, 3.463, CRC32C
|
||||
2048, 6.374, 7.591, 3.465,, 3.465, CRC32C
|
||||
4096, 6.388, 7.586, 3.424,, 3.424, CRC32C
|
||||
8192, 6.387, 7.558, 3.423,, 3.423, CRC32C
|
||||
16384, 6.391, 7.603, 3.429,, 3.429, CRC32C
|
||||
32768, 6.415, 7.584, 3.440,, 3.440, CRC32C
|
||||
65536, 7.423, 7.580, 3.445,, 3.445, CRC32C
|
||||
131072, 7.405, 7.580, 3.447,, 3.447, CRC32C
|
||||
262144, 7.721, 7.635, 3.447,, 3.447, CRC32C
|
||||
524288, 7.828, 7.675, 3.469,, 3.469, CRC32C
|
||||
1048576, 7.852, 7.701, 3.488,, 3.488, CRC32C
|
||||
2097152, 7.931, 7.722, 3.485,, 3.485, CRC32C
|
||||
4194304, 7.955, 7.722, 3.502,, 3.502, CRC32C
|
||||
8388608, 8.134, 7.973, 3.658,, 3.658, CRC32C
|
||||
16777216, 8.158, 7.996, 3.666,, 3.666, CRC32C
|
||||
33554432, 8.133, 8.000, 3.673,, 3.673, CRC32C
|
||||
67108864, 8.193, 8.007, 3.680,, 3.680, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 4, 4, 4, 4, 0, 8528, 1097415
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 5.747, 8.411, 8.605, 8.666, 8.377, 10.244, 8.626, 9.001,, 8.377, Word
|
||||
8, 3.095, 6.972, 7.111, 6.337, 6.224, 6.138, 5.595, 5.789,, 5.595, Multiword
|
||||
16, 1.761, 7.288, 7.387, 5.881, 3.688, 4.657, 4.094, 3.851,, 3.688, Word
|
||||
32, 0.924, 7.397, 7.400, 6.240, 3.280, 4.064, 4.172, 3.177,, 3.177, CRC32C
|
||||
64, 0.654, 7.437, 7.457, 6.193, 2.946, 3.752, 3.626, 2.805,, 2.805, CRC32C
|
||||
128, 0.450, 7.563, 7.526, 6.218, 2.766, 3.624, 3.400, 2.751,, 2.751, CRC32C
|
||||
256, 0.350, 7.481, 7.568, 6.228, 2.725, 3.547, 3.293, 2.672,, 2.672, CRC32C
|
||||
512, 0.301, 7.412, 7.659, 6.220, 2.694, 3.522, 3.231, 3.461,, 2.694, Word
|
||||
1024, 0.275, 7.388, 7.625, 6.221, 2.669, 3.476, 3.208, 3.472,, 2.669, Word
|
||||
2048, 0.270, 7.346, 7.607, 6.238, 2.635, 3.475, 3.205, 3.456,, 2.635, Word
|
||||
4096, 0.259, 7.348, 7.596, 6.204, 2.612, 3.464, 3.192, 3.423,, 2.612, Word
|
||||
8192, 0.255, 7.338, 7.594, 6.213, 2.600, 3.465, 3.188, 3.422,, 2.600, Word
|
||||
16384, 0.253, 7.335, 7.597, 6.198, 2.592, 3.460, 3.180, 3.425,, 2.592, Word
|
||||
32768, 0.262, 7.337, 7.606, 6.218, 2.593, 3.462, 3.190, 3.434,, 2.593, Word
|
||||
65536, 0.308, 7.336, 7.608, 6.202, 2.590, 2.995, 3.193, 3.438,, 2.590, Word
|
||||
131072, 0.308, 7.335, 7.600, 6.200, 2.590, 2.993, 3.198, 3.440,, 2.590, Word
|
||||
262144, 0.309, 7.384, 7.695, 6.205, 2.589, 2.991, 3.200, 3.442,, 2.589, Word
|
||||
524288, 0.308, 7.413, 7.727, 6.255, 2.589, 2.989, 3.202, 3.444,, 2.589, Word
|
||||
1048576, 0.309, 7.422, 7.725, 6.275, 2.623, 2.981, 3.225, 3.466,, 2.623, Word
|
||||
2097152, 0.312, 7.424, 7.749, 6.294, 2.647, 2.995, 3.240, 3.480,, 2.647, Word
|
||||
4194304, 0.314, 7.460, 7.783, 6.308, 2.669, 3.002, 3.247, 3.492,, 2.669, Word
|
||||
8388608, 0.551, 7.701, 7.866, 6.526, 2.795, 3.153, 3.409, 3.662,, 2.795, Word
|
||||
16777216, 0.553, 7.635, 8.019, 6.532, 2.804, 3.156, 3.407, 3.667,, 2.804, Word
|
||||
33554432, 0.556, 7.720, 8.019, 6.539, 2.803, 3.163, 3.415, 3.672,, 2.803, Word
|
||||
67108864, 0.558, 7.718, 8.019, 6.545, 2.813, 3.162, 3.422, 3.661,, 2.813, Word
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 4, 4, 4, 3, 0, 8528, 1098198
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 9.687, 13.251, 8.938,, 8.938, CRC32C
|
||||
8, 6.293, 5.936, 5.711,, 5.711, CRC32C
|
||||
16, 4.708, 4.477, 3.852,, 3.852, CRC32C
|
||||
32, 4.027, 3.735, 3.169,, 3.169, CRC32C
|
||||
64, 3.760, 3.332, 2.805,, 2.805, CRC32C
|
||||
128, 3.543, 3.164, 2.757,, 2.757, CRC32C
|
||||
256, 3.484, 3.084, 2.657,, 2.657, CRC32C
|
||||
512, 3.485, 3.050, 3.471,, 3.050, Multiword
|
||||
1024, 3.444, 3.018, 3.464,, 3.018, Multiword
|
||||
2048, 3.406, 3.002, 3.449,, 3.002, Multiword
|
||||
4096, 3.407, 2.982, 3.428,, 2.982, Multiword
|
||||
8192, 3.409, 2.991, 3.425,, 2.991, Multiword
|
||||
16384, 3.398, 2.997, 3.429,, 2.997, Multiword
|
||||
32768, 3.409, 3.018, 3.436,, 3.018, Multiword
|
||||
65536, 2.839, 3.020, 3.441,, 2.839, Blockword
|
||||
131072, 2.825, 3.019, 3.444,, 2.825, Blockword
|
||||
262144, 2.675, 3.018, 3.445,, 2.675, Blockword
|
||||
524288, 2.603, 3.021, 3.447,, 2.603, Blockword
|
||||
1048576, 2.616, 3.044, 3.472,, 2.616, Blockword
|
||||
2097152, 2.615, 3.056, 3.487,, 2.615, Blockword
|
||||
4194304, 2.619, 3.080, 3.501,, 2.619, Blockword
|
||||
8388608, 2.753, 3.172, 3.656,, 2.753, Blockword
|
||||
16777216, 2.759, 3.227, 3.671,, 2.759, Blockword
|
||||
33554432, 2.767, 3.226, 3.673,, 2.767, Blockword
|
||||
67108864, 2.770, 3.223, 3.674,, 2.770, Blockword
|
||||
|
||||
|
310
crcutil-1.0/doc/data/test-gcc-32-noasm-1.csv
Normal file
310
crcutil-1.0/doc/data/test-gcc-32-noasm-1.csv
Normal file
@@ -0,0 +1,310 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 8, 4, 0, 66720, 1424088
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.001, 14.502, 15.081, 15.643, 16.746, 15.720, 15.710,, 14.502, Byte
|
||||
8, 4.251, 12.385, 12.267, 12.341, 7.875, 7.633, 7.177,, 7.177, Multiword
|
||||
16, 2.375, 12.366, 12.345, 11.397, 6.119, 5.610, 5.489,, 5.489, Multiword
|
||||
32, 1.625, 12.386, 12.328, 11.282, 5.194, 4.727, 4.689,, 4.689, Multiword
|
||||
64, 1.188, 12.425, 12.335, 11.657, 4.724, 4.255, 4.835,, 4.255, Blockword
|
||||
128, 0.993, 12.828, 12.407, 11.565, 4.347, 4.035, 4.602,, 4.035, Blockword
|
||||
256, 0.934, 12.691, 12.421, 11.506, 4.231, 3.927, 4.572,, 3.927, Blockword
|
||||
512, 0.914, 12.619, 12.453, 11.477, 4.332, 3.886, 4.633,, 3.886, Blockword
|
||||
1024, 0.890, 12.635, 12.550, 11.451, 4.661, 4.187, 4.718,, 4.187, Blockword
|
||||
2048, 0.883, 12.591, 12.586, 11.449, 4.692, 4.237, 4.725,, 4.237, Blockword
|
||||
4096, 0.885, 12.565, 12.596, 11.442, 4.642, 4.162, 4.659,, 4.162, Blockword
|
||||
8192, 0.880, 12.554, 12.507, 11.452, 4.689, 4.241, 4.661,, 4.241, Blockword
|
||||
16384, 0.878, 12.494, 12.449, 11.443, 4.752, 4.252, 4.660,, 4.252, Blockword
|
||||
32768, 0.876, 12.532, 12.444, 11.453, 4.769, 4.288, 4.647,, 4.288, Blockword
|
||||
65536, 0.876, 12.531, 12.437, 11.458, 4.785, 5.461, 4.645,, 4.645, Multiword
|
||||
131072, 0.875, 12.522, 12.434, 11.457, 4.777, 5.158, 4.639,, 4.639, Multiword
|
||||
262144, 0.875, 12.610, 12.517, 11.517, 4.805, 5.001, 4.641,, 4.641, Multiword
|
||||
524288, 0.875, 12.656, 12.583, 11.589, 4.788, 4.970, 4.678,, 4.678, Multiword
|
||||
1048576, 0.875, 12.687, 12.620, 11.594, 4.854, 4.965, 4.691,, 4.691, Multiword
|
||||
2097152, 0.875, 12.694, 12.678, 11.616, 4.880, 4.972, 4.701,, 4.701, Multiword
|
||||
4194304, 0.913, 12.753, 12.815, 11.664, 4.910, 4.969, 4.734,, 4.734, Multiword
|
||||
8388608, 0.999, 13.047, 12.996, 11.876, 5.061, 5.131, 4.909,, 4.909, Multiword
|
||||
16777216, 0.998, 13.072, 13.012, 11.930, 4.976, 5.129, 4.911,, 4.911, Multiword
|
||||
33554432, 0.999, 13.055, 13.040, 11.947, 5.092, 5.152, 4.886,, 4.886, Multiword
|
||||
67108864, 1.001, 13.072, 13.025, 11.944, 5.058, 5.138, 4.923,, 4.923, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 8, 3, 0, 66720, 1368999
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 17.492, 15.757,, 15.757, Multiword
|
||||
8, 8.001, 7.388,, 7.388, Multiword
|
||||
16, 5.950, 5.669,, 5.669, Multiword
|
||||
32, 4.933, 4.671,, 4.671, Multiword
|
||||
64, 4.357, 5.172,, 4.357, Blockword
|
||||
128, 4.049, 4.599,, 4.049, Blockword
|
||||
256, 3.969, 4.286,, 3.969, Blockword
|
||||
512, 3.939, 4.267,, 3.939, Blockword
|
||||
1024, 4.193, 4.396,, 4.193, Blockword
|
||||
2048, 4.243, 4.352,, 4.243, Blockword
|
||||
4096, 4.193, 4.309,, 4.193, Blockword
|
||||
8192, 4.219, 4.292,, 4.219, Blockword
|
||||
16384, 4.278, 4.289,, 4.278, Blockword
|
||||
32768, 4.276, 4.272,, 4.272, Multiword
|
||||
65536, 5.288, 4.272,, 4.272, Multiword
|
||||
131072, 4.973, 4.264,, 4.264, Multiword
|
||||
262144, 4.916, 4.269,, 4.269, Multiword
|
||||
524288, 4.913, 4.296,, 4.296, Multiword
|
||||
1048576, 4.886, 4.316,, 4.316, Multiword
|
||||
2097152, 4.893, 4.323,, 4.323, Multiword
|
||||
4194304, 4.902, 4.349,, 4.349, Multiword
|
||||
8388608, 5.061, 4.511,, 4.511, Multiword
|
||||
16777216, 5.080, 4.527,, 4.527, Multiword
|
||||
33554432, 5.082, 4.471,, 4.471, Multiword
|
||||
67108864, 5.086, 4.531,, 4.531, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 4, 4, 0, 33952, 1295964
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 8.251, 14.510, 15.110, 15.641, 9.752, 11.874, 11.015,, 9.752, Word
|
||||
8, 4.501, 12.388, 12.332, 12.493, 6.813, 7.872, 7.375,, 6.813, Word
|
||||
16, 2.563, 12.369, 12.260, 11.396, 5.438, 5.966, 5.798,, 5.438, Word
|
||||
32, 1.500, 12.389, 12.235, 11.285, 4.830, 5.105, 4.212,, 4.212, Multiword
|
||||
64, 1.034, 12.424, 12.301, 11.657, 4.473, 4.706, 3.305,, 3.305, Multiword
|
||||
128, 0.938, 12.828, 12.405, 11.550, 4.365, 4.441, 2.871,, 2.871, Multiword
|
||||
256, 0.813, 12.692, 12.372, 11.506, 4.266, 4.452, 2.641,, 2.641, Multiword
|
||||
512, 0.756, 12.619, 12.453, 11.477, 4.191, 4.496, 2.544,, 2.544, Multiword
|
||||
1024, 0.829, 12.636, 12.550, 11.448, 4.214, 4.421, 2.470,, 2.470, Multiword
|
||||
2048, 0.726, 12.592, 12.583, 11.449, 4.165, 4.371, 2.428,, 2.428, Multiword
|
||||
4096, 0.715, 12.566, 12.594, 11.442, 4.131, 4.364, 2.440,, 2.440, Multiword
|
||||
8192, 0.709, 12.558, 12.503, 11.452, 4.156, 4.358, 2.427,, 2.427, Multiword
|
||||
16384, 0.803, 12.494, 12.449, 11.453, 4.184, 4.346, 2.452,, 2.452, Multiword
|
||||
32768, 0.705, 12.534, 12.445, 11.453, 4.182, 4.355, 2.470,, 2.470, Multiword
|
||||
65536, 0.710, 12.530, 12.437, 11.452, 4.175, 3.577, 2.475,, 2.475, Multiword
|
||||
131072, 0.705, 12.522, 12.413, 11.459, 4.158, 3.261, 2.475,, 2.475, Multiword
|
||||
262144, 0.713, 12.620, 12.521, 11.544, 4.176, 3.108, 2.477,, 2.477, Multiword
|
||||
524288, 0.712, 12.652, 12.550, 11.594, 4.212, 3.028, 2.479,, 2.479, Multiword
|
||||
1048576, 0.717, 12.684, 12.610, 11.598, 4.234, 2.923, 2.502,, 2.502, Multiword
|
||||
2097152, 0.725, 12.717, 12.703, 11.618, 4.252, 2.919, 2.506,, 2.506, Multiword
|
||||
4194304, 0.775, 12.761, 12.770, 11.666, 4.260, 2.913, 2.515,, 2.515, Multiword
|
||||
8388608, 0.886, 13.036, 12.999, 11.924, 4.442, 3.040, 2.658,, 2.658, Multiword
|
||||
16777216, 0.908, 13.057, 13.019, 11.891, 4.447, 3.045, 2.652,, 2.652, Multiword
|
||||
33554432, 0.911, 13.066, 13.039, 11.893, 4.458, 3.056, 2.668,, 2.668, Multiword
|
||||
67108864, 0.920, 13.059, 13.041, 11.946, 4.460, 3.049, 2.667,, 2.667, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 128, 16, 16, 4, 3, 0, 33952, 1268838
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 12.167, 9.874,, 9.874, Multiword
|
||||
8, 7.907, 6.833,, 6.833, Multiword
|
||||
16, 6.077, 5.517,, 5.517, Multiword
|
||||
32, 5.137, 4.162,, 4.162, Multiword
|
||||
64, 4.696, 2.987,, 2.987, Multiword
|
||||
128, 4.510, 2.587,, 2.587, Multiword
|
||||
256, 4.483, 2.312,, 2.312, Multiword
|
||||
512, 4.473, 2.210,, 2.210, Multiword
|
||||
1024, 4.401, 2.166,, 2.166, Multiword
|
||||
2048, 4.375, 2.121,, 2.121, Multiword
|
||||
4096, 4.366, 2.096,, 2.096, Multiword
|
||||
8192, 4.357, 2.089,, 2.089, Multiword
|
||||
16384, 4.350, 2.091,, 2.091, Multiword
|
||||
32768, 4.347, 2.094,, 2.094, Multiword
|
||||
65536, 3.749, 2.093,, 2.093, Multiword
|
||||
131072, 3.436, 2.092,, 2.092, Multiword
|
||||
262144, 2.979, 2.091,, 2.091, Multiword
|
||||
524288, 2.749, 2.092,, 2.092, Multiword
|
||||
1048576, 2.723, 2.108,, 2.108, Multiword
|
||||
2097152, 2.686, 2.118,, 2.118, Multiword
|
||||
4194304, 2.680, 2.124,, 2.124, Multiword
|
||||
8388608, 2.803, 2.253,, 2.253, Multiword
|
||||
16777216, 2.800, 2.262,, 2.262, Multiword
|
||||
33554432, 2.804, 2.266,, 2.266, Multiword
|
||||
67108864, 2.804, 2.268,, 2.268, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 64, 8, 8, 8, 4, 0, 33376, 150786
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 10.630, 14.502, 18.405, 18.031, 17.502, 21.509, 17.426,, 14.502, Byte
|
||||
8, 3.286, 11.851, 15.812, 15.002, 10.011, 11.025, 9.887,, 9.887, Multiword
|
||||
16, 1.751, 10.420, 15.033, 13.799, 7.627, 8.852, 7.503,, 7.503, Multiword
|
||||
32, 1.438, 9.713, 14.205, 12.812, 6.824, 7.395, 6.583,, 6.583, Multiword
|
||||
64, 0.860, 9.304, 13.834, 12.297, 6.144, 6.864, 7.859,, 6.144, Word
|
||||
128, 0.590, 9.289, 13.737, 12.199, 5.990, 6.528, 8.149,, 5.990, Word
|
||||
256, 0.456, 9.182, 13.657, 12.015, 5.673, 6.426, 8.120,, 5.673, Word
|
||||
512, 0.382, 9.095, 13.647, 11.973, 5.733, 6.378, 8.107,, 5.733, Word
|
||||
1024, 0.373, 9.095, 13.671, 11.961, 5.722, 6.355, 8.106,, 5.722, Word
|
||||
2048, 0.343, 9.057, 13.617, 11.931, 5.701, 6.338, 8.099,, 5.701, Word
|
||||
4096, 0.332, 9.076, 13.592, 11.921, 5.698, 6.315, 8.114,, 5.698, Word
|
||||
8192, 0.326, 9.071, 13.653, 11.920, 5.689, 6.329, 8.109,, 5.689, Word
|
||||
16384, 0.322, 9.064, 13.618, 11.914, 5.712, 6.349, 8.142,, 5.712, Word
|
||||
32768, 0.328, 9.064, 13.640, 11.916, 5.721, 6.361, 8.161,, 5.721, Word
|
||||
65536, 0.359, 9.056, 13.622, 11.915, 5.726, 8.104, 8.168,, 5.726, Word
|
||||
131072, 0.359, 9.052, 13.629, 11.919, 5.722, 8.017, 8.169,, 5.722, Word
|
||||
262144, 0.359, 9.157, 13.689, 11.975, 5.732, 8.084, 8.215,, 5.732, Word
|
||||
524288, 0.359, 9.166, 13.742, 12.049, 5.775, 8.076, 8.231,, 5.775, Word
|
||||
1048576, 0.359, 9.204, 13.761, 12.061, 5.799, 8.178, 8.262,, 5.799, Word
|
||||
2097152, 0.362, 9.222, 13.791, 12.082, 5.807, 8.197, 8.275,, 5.807, Word
|
||||
4194304, 0.363, 9.266, 13.825, 12.127, 5.840, 8.213, 8.316,, 5.840, Word
|
||||
8388608, 0.586, 9.517, 14.090, 12.391, 6.030, 8.392, 8.545,, 6.030, Word
|
||||
16777216, 0.593, 9.530, 14.095, 12.409, 6.049, 8.421, 8.506,, 6.049, Word
|
||||
33554432, 0.589, 9.533, 14.106, 12.410, 6.044, 8.438, 8.570,, 6.044, Word
|
||||
67108864, 0.600, 9.531, 14.122, 12.422, 6.055, 8.453, 8.573,, 6.055, Word
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 64, 8, 8, 8, 3, 0, 33376, 162837
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 27.251, 17.522,, 17.522, Multiword
|
||||
8, 10.376, 9.675,, 9.675, Multiword
|
||||
16, 8.524, 7.611,, 7.611, Multiword
|
||||
32, 7.397, 6.640,, 6.640, Multiword
|
||||
64, 6.852, 7.344,, 6.852, Blockword
|
||||
128, 6.595, 7.525,, 6.595, Blockword
|
||||
256, 6.516, 7.548,, 6.516, Blockword
|
||||
512, 6.441, 7.557,, 6.441, Blockword
|
||||
1024, 6.402, 7.576,, 6.402, Blockword
|
||||
2048, 6.395, 7.544,, 6.395, Blockword
|
||||
4096, 6.380, 7.568,, 6.380, Blockword
|
||||
8192, 6.384, 7.561,, 6.384, Blockword
|
||||
16384, 6.391, 7.575,, 6.391, Blockword
|
||||
32768, 6.416, 7.584,, 6.416, Blockword
|
||||
65536, 7.477, 7.587,, 7.477, Blockword
|
||||
131072, 7.451, 7.602,, 7.451, Blockword
|
||||
262144, 7.719, 7.666,, 7.666, Multiword
|
||||
524288, 7.882, 7.672,, 7.672, Multiword
|
||||
1048576, 7.902, 7.711,, 7.711, Multiword
|
||||
2097152, 7.953, 7.678,, 7.678, Multiword
|
||||
4194304, 7.976, 7.771,, 7.771, Multiword
|
||||
8388608, 8.199, 7.972,, 7.972, Multiword
|
||||
16777216, 8.196, 7.980,, 7.980, Multiword
|
||||
33554432, 8.217, 7.988,, 7.988, Multiword
|
||||
67108864, 8.246, 7.989,, 7.989, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 8, 8, 8, 4, 0, 33376, 1145943
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 10.795, 14.376, 18.322, 18.045, 17.503, 21.513, 17.763, 11.251,, 11.251, CRC32C
|
||||
8, 3.221, 11.973, 15.797, 15.002, 10.030, 11.042, 9.868, 7.014,, 7.014, CRC32C
|
||||
16, 1.718, 10.420, 15.032, 13.802, 7.699, 8.806, 7.882, 4.308,, 4.308, CRC32C
|
||||
32, 1.449, 9.713, 14.208, 12.750, 6.671, 7.317, 6.783, 3.394,, 3.394, CRC32C
|
||||
64, 0.864, 9.332, 13.909, 12.432, 6.105, 6.898, 7.938, 2.954,, 2.954, CRC32C
|
||||
128, 0.595, 9.375, 13.656, 12.162, 5.938, 6.515, 8.016, 2.845,, 2.845, CRC32C
|
||||
256, 0.460, 9.194, 13.655, 12.024, 5.819, 6.462, 8.028, 2.697,, 2.697, CRC32C
|
||||
512, 0.382, 9.135, 13.651, 11.956, 5.783, 6.343, 8.117, 3.478,, 3.478, CRC32C
|
||||
1024, 0.372, 9.121, 13.671, 11.941, 5.700, 6.364, 8.084, 3.475,, 3.475, CRC32C
|
||||
2048, 0.343, 9.093, 13.613, 11.924, 5.705, 6.308, 8.091, 3.458,, 3.458, CRC32C
|
||||
4096, 0.332, 9.082, 13.588, 11.924, 5.707, 6.306, 8.108, 3.436,, 3.436, CRC32C
|
||||
8192, 0.325, 9.071, 13.586, 11.909, 5.697, 6.325, 8.115, 3.427,, 3.427, CRC32C
|
||||
16384, 0.322, 9.066, 13.601, 11.909, 5.710, 6.348, 8.137, 3.432,, 3.432, CRC32C
|
||||
32768, 0.328, 9.071, 13.611, 11.912, 5.721, 6.362, 8.158, 3.443,, 3.443, CRC32C
|
||||
65536, 0.359, 9.064, 13.608, 11.915, 5.724, 7.972, 8.163, 3.444,, 3.444, CRC32C
|
||||
131072, 0.359, 9.085, 13.596, 11.918, 5.726, 7.961, 8.156, 3.447,, 3.447, CRC32C
|
||||
262144, 0.359, 9.150, 13.677, 12.005, 5.730, 8.047, 8.221, 3.447,, 3.447, CRC32C
|
||||
524288, 0.358, 9.183, 13.733, 12.036, 5.776, 8.094, 8.247, 3.449,, 3.449, CRC32C
|
||||
1048576, 0.359, 9.214, 13.765, 12.060, 5.793, 8.148, 8.258, 3.472,, 3.472, CRC32C
|
||||
2097152, 0.362, 9.224, 13.786, 12.072, 5.805, 8.169, 8.288, 3.484,, 3.484, CRC32C
|
||||
4194304, 0.363, 9.286, 13.844, 12.135, 5.841, 8.240, 8.322, 3.501,, 3.501, CRC32C
|
||||
8388608, 0.592, 9.542, 14.102, 12.407, 6.024, 8.394, 8.523, 3.660,, 3.660, CRC32C
|
||||
16777216, 0.588, 9.493, 14.099, 12.416, 5.969, 8.431, 8.586, 3.686,, 3.686, CRC32C
|
||||
33554432, 0.598, 9.512, 14.099, 12.409, 5.940, 8.407, 8.474, 3.627,, 3.627, CRC32C
|
||||
67108864, 0.597, 9.524, 14.108, 12.406, 6.050, 8.436, 8.571, 3.676,, 3.676, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 8, 8, 8, 3, 0, 33376, 1164897
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 27.001, 17.511, 11.251,, 11.251, CRC32C
|
||||
8, 12.626, 10.234, 7.047,, 7.047, CRC32C
|
||||
16, 9.501, 7.849, 4.302,, 4.302, CRC32C
|
||||
32, 7.875, 6.659, 3.406,, 3.406, CRC32C
|
||||
64, 7.125, 7.454, 2.988,, 2.988, CRC32C
|
||||
128, 6.821, 7.603, 2.844,, 2.844, CRC32C
|
||||
256, 6.518, 7.477, 2.696,, 2.696, CRC32C
|
||||
512, 6.417, 7.507, 3.448,, 3.448, CRC32C
|
||||
1024, 6.410, 7.508, 3.475,, 3.475, CRC32C
|
||||
2048, 6.386, 7.559, 3.463,, 3.463, CRC32C
|
||||
4096, 6.398, 7.553, 3.424,, 3.424, CRC32C
|
||||
8192, 6.390, 7.561, 3.427,, 3.427, CRC32C
|
||||
16384, 6.407, 7.574, 3.428,, 3.428, CRC32C
|
||||
32768, 6.417, 7.582, 3.440,, 3.440, CRC32C
|
||||
65536, 7.423, 7.579, 3.444,, 3.444, CRC32C
|
||||
131072, 7.406, 7.580, 3.447,, 3.447, CRC32C
|
||||
262144, 7.728, 7.679, 3.447,, 3.447, CRC32C
|
||||
524288, 7.850, 7.671, 3.449,, 3.449, CRC32C
|
||||
1048576, 7.871, 7.678, 3.472,, 3.472, CRC32C
|
||||
2097152, 7.900, 7.691, 3.495,, 3.495, CRC32C
|
||||
4194304, 7.960, 7.709, 3.503,, 3.503, CRC32C
|
||||
8388608, 8.151, 7.997, 3.660,, 3.660, CRC32C
|
||||
16777216, 8.131, 7.990, 3.679,, 3.679, CRC32C
|
||||
33554432, 8.187, 8.004, 3.692,, 3.692, CRC32C
|
||||
67108864, 8.196, 7.963, 3.637,, 3.637, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 4, 4, 4, 4, 0, 8528, 1101600
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 5.508, 8.411, 9.418, 8.922, 8.401, 9.790, 8.627, 9.001,, 8.401, Word
|
||||
8, 2.796, 6.972, 7.035, 6.292, 5.957, 6.138, 5.672, 5.818,, 5.672, Multiword
|
||||
16, 1.643, 7.256, 7.387, 5.896, 3.579, 4.690, 4.094, 3.851,, 3.579, Word
|
||||
32, 0.826, 7.404, 7.392, 6.251, 3.209, 4.077, 4.172, 3.164,, 3.164, CRC32C
|
||||
64, 0.563, 7.480, 7.457, 6.225, 2.914, 3.752, 3.620, 2.805,, 2.805, CRC32C
|
||||
128, 0.391, 7.555, 7.525, 6.242, 2.789, 3.604, 3.407, 2.700,, 2.700, CRC32C
|
||||
256, 0.328, 7.426, 7.568, 6.218, 2.714, 3.524, 3.280, 2.682,, 2.682, CRC32C
|
||||
512, 0.301, 7.391, 7.653, 6.229, 2.656, 3.524, 3.231, 3.464,, 2.656, Word
|
||||
1024, 0.277, 7.385, 7.623, 6.210, 2.644, 3.505, 3.209, 3.470,, 2.644, Word
|
||||
2048, 0.269, 7.356, 7.607, 6.233, 2.659, 3.473, 3.200, 3.451,, 2.659, Word
|
||||
4096, 0.260, 7.340, 7.596, 6.231, 2.620, 3.465, 3.189, 3.423,, 2.620, Word
|
||||
8192, 0.255, 7.336, 7.594, 6.224, 2.606, 3.463, 3.189, 3.422,, 2.606, Word
|
||||
16384, 0.253, 7.335, 7.611, 6.208, 2.592, 3.464, 3.183, 3.425,, 2.592, Word
|
||||
32768, 0.262, 7.337, 7.606, 6.216, 2.592, 3.461, 3.193, 3.436,, 2.592, Word
|
||||
65536, 0.308, 7.336, 7.608, 6.207, 2.591, 2.999, 3.195, 3.439,, 2.591, Word
|
||||
131072, 0.308, 7.335, 7.597, 6.204, 2.590, 2.993, 3.200, 3.440,, 2.590, Word
|
||||
262144, 0.309, 7.352, 7.671, 6.205, 2.589, 2.990, 3.200, 3.441,, 2.589, Word
|
||||
524288, 0.309, 7.401, 7.699, 6.250, 2.589, 2.989, 3.203, 3.444,, 2.589, Word
|
||||
1048576, 0.309, 7.428, 7.729, 6.275, 2.629, 2.981, 3.226, 3.472,, 2.629, Word
|
||||
2097152, 0.312, 7.434, 7.745, 6.294, 2.652, 2.993, 3.242, 3.478,, 2.652, Word
|
||||
4194304, 0.312, 7.462, 7.780, 6.325, 2.677, 3.006, 3.251, 3.497,, 2.677, Word
|
||||
8388608, 0.554, 7.684, 7.906, 6.523, 2.794, 3.143, 3.399, 3.643,, 2.794, Word
|
||||
16777216, 0.558, 7.694, 8.007, 6.478, 2.816, 3.150, 3.397, 3.663,, 2.816, Word
|
||||
33554432, 0.564, 7.702, 7.996, 6.497, 2.827, 3.160, 3.418, 3.669,, 2.827, Word
|
||||
67108864, 0.568, 7.640, 7.984, 6.464, 2.772, 3.137, 3.369, 3.652,, 2.772, Word
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 32, 32, 4, 4, 4, 3, 0, 8528, 1098342
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 9.712, 8.364, 9.001,, 8.364, Multiword
|
||||
8, 6.285, 5.884, 5.906,, 5.884, Multiword
|
||||
16, 4.683, 4.250, 3.871,, 3.871, CRC32C
|
||||
32, 4.027, 3.736, 3.165,, 3.165, CRC32C
|
||||
64, 3.729, 3.337, 2.805,, 2.805, CRC32C
|
||||
128, 3.543, 3.164, 2.774,, 2.774, CRC32C
|
||||
256, 3.484, 3.072, 2.695,, 2.695, CRC32C
|
||||
512, 3.441, 3.050, 3.464,, 3.050, Multiword
|
||||
1024, 3.433, 3.015, 3.465,, 3.015, Multiword
|
||||
2048, 3.434, 2.998, 3.439,, 2.998, Multiword
|
||||
4096, 3.367, 2.982, 3.426,, 2.982, Multiword
|
||||
8192, 3.388, 2.987, 3.426,, 2.987, Multiword
|
||||
16384, 3.396, 2.992, 3.428,, 2.992, Multiword
|
||||
32768, 3.404, 3.020, 3.439,, 3.020, Multiword
|
||||
65536, 2.841, 3.020, 3.442,, 2.841, Blockword
|
||||
131072, 2.828, 3.021, 3.444,, 2.828, Blockword
|
||||
262144, 2.676, 3.020, 3.445,, 2.676, Blockword
|
||||
524288, 2.603, 3.025, 3.448,, 2.603, Blockword
|
||||
1048576, 2.621, 3.048, 3.482,, 2.621, Blockword
|
||||
2097152, 2.606, 3.058, 3.482,, 2.606, Blockword
|
||||
4194304, 2.626, 3.081, 3.501,, 2.626, Blockword
|
||||
8388608, 2.749, 3.218, 3.647,, 2.749, Blockword
|
||||
16777216, 2.706, 3.240, 3.624,, 2.706, Blockword
|
||||
33554432, 2.773, 3.226, 3.647,, 2.773, Blockword
|
||||
67108864, 2.749, 3.228, 3.658,, 2.749, Blockword
|
||||
|
||||
|
434
crcutil-1.0/doc/data/test-gcc-64-1.csv
Normal file
434
crcutil-1.0/doc/data/test-gcc-64-1.csv
Normal file
@@ -0,0 +1,434 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 4, 0, 66736, 1122039
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.772, 9.074, 9.324, 9.261, 9.503, 12.238, 10.009,, 9.074, Byte
|
||||
8, 3.192, 8.603, 8.619, 8.739, 4.241, 5.405, 4.646,, 4.241, Word
|
||||
16, 1.890, 8.987, 8.998, 8.075, 3.369, 3.944, 3.626,, 3.369, Word
|
||||
32, 1.380, 9.222, 9.230, 8.116, 2.835, 3.211, 3.287,, 2.835, Word
|
||||
64, 1.102, 9.329, 9.323, 8.289, 2.645, 2.829, 2.580,, 2.580, Multiword
|
||||
128, 0.961, 9.672, 9.378, 8.326, 2.537, 2.651, 2.069,, 2.069, Multiword
|
||||
256, 0.887, 9.568, 9.389, 8.338, 2.452, 2.559, 1.824,, 1.824, Multiword
|
||||
512, 0.849, 9.517, 9.455, 8.360, 2.446, 2.522, 1.771,, 1.771, Multiword
|
||||
1024, 0.832, 9.483, 9.448, 8.350, 2.659, 2.782, 1.812,, 1.812, Multiword
|
||||
2048, 0.821, 9.474, 9.435, 8.360, 2.904, 2.935, 1.813,, 1.813, Multiword
|
||||
4096, 0.821, 9.458, 9.391, 8.360, 2.804, 2.826, 1.751,, 1.751, Multiword
|
||||
8192, 0.813, 9.462, 9.422, 8.366, 2.887, 2.880, 1.756,, 1.756, Multiword
|
||||
16384, 0.807, 9.446, 9.365, 8.308, 2.932, 2.965, 1.751,, 1.751, Multiword
|
||||
32768, 0.808, 9.421, 9.386, 8.362, 2.937, 2.968, 1.740,, 1.740, Multiword
|
||||
65536, 0.800, 9.447, 9.386, 8.360, 2.942, 2.689, 1.730,, 1.730, Multiword
|
||||
131072, 0.782, 9.451, 9.412, 8.358, 2.950, 2.437, 1.734,, 1.734, Multiword
|
||||
262144, 0.782, 9.492, 9.505, 8.421, 2.989, 2.316, 1.737,, 1.737, Multiword
|
||||
524288, 0.781, 9.518, 9.512, 8.429, 3.003, 2.249, 1.737,, 1.737, Multiword
|
||||
1048576, 0.797, 9.550, 9.540, 8.462, 3.033, 2.182, 1.741,, 1.741, Multiword
|
||||
2097152, 0.781, 9.576, 9.559, 8.481, 3.052, 2.176, 1.766,, 1.766, Multiword
|
||||
4194304, 0.797, 9.624, 9.639, 8.519, 3.064, 2.175, 1.771,, 1.771, Multiword
|
||||
8388608, 0.913, 9.867, 9.785, 8.734, 3.186, 2.290, 1.878,, 1.878, Multiword
|
||||
16777216, 0.911, 9.877, 9.866, 8.763, 3.192, 2.296, 1.887,, 1.887, Multiword
|
||||
33554432, 0.919, 9.880, 9.868, 8.765, 3.195, 2.303, 1.890,, 1.890, Multiword
|
||||
67108864, 0.916, 9.876, 9.873, 8.778, 3.196, 2.301, 1.893,, 1.893, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 3, 0, 66736, 1083447
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 12.107, 10.316,, 10.316, Multiword
|
||||
8, 5.252, 4.667,, 4.667, Multiword
|
||||
16, 3.848, 3.403,, 3.403, Multiword
|
||||
32, 3.219, 2.886,, 2.886, Multiword
|
||||
64, 2.800, 2.470,, 2.470, Multiword
|
||||
128, 2.631, 2.053,, 2.053, Multiword
|
||||
256, 2.541, 1.867,, 1.867, Multiword
|
||||
512, 2.525, 1.809,, 1.809, Multiword
|
||||
1024, 2.753, 1.899,, 1.899, Multiword
|
||||
2048, 2.922, 1.903,, 1.903, Multiword
|
||||
4096, 2.822, 1.845,, 1.845, Multiword
|
||||
8192, 2.906, 1.808,, 1.808, Multiword
|
||||
16384, 2.967, 1.823,, 1.823, Multiword
|
||||
32768, 2.967, 1.816,, 1.816, Multiword
|
||||
65536, 2.890, 1.814,, 1.814, Multiword
|
||||
131072, 2.653, 1.814,, 1.814, Multiword
|
||||
262144, 2.385, 1.805,, 1.805, Multiword
|
||||
524288, 2.247, 1.814,, 1.814, Multiword
|
||||
1048576, 2.221, 1.833,, 1.833, Multiword
|
||||
2097152, 2.203, 1.839,, 1.839, Multiword
|
||||
4194304, 2.205, 1.840,, 1.840, Multiword
|
||||
8388608, 2.313, 1.961,, 1.961, Multiword
|
||||
16777216, 2.314, 1.970,, 1.970, Multiword
|
||||
33554432, 2.315, 1.979,, 1.979, Multiword
|
||||
67108864, 2.313, 1.981,, 1.981, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 4, 0, 33968, 1020492
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 4.761, 9.089, 9.327, 9.260, 6.906, 9.585, 8.501,, 6.906, Word
|
||||
8, 2.750, 8.550, 8.589, 8.739, 5.095, 6.398, 5.794,, 5.095, Word
|
||||
16, 1.620, 9.000, 8.999, 8.069, 4.314, 4.885, 4.829,, 4.314, Word
|
||||
32, 1.125, 9.222, 9.230, 8.076, 4.018, 4.219, 3.593,, 3.593, Multiword
|
||||
64, 0.940, 9.329, 9.323, 8.300, 3.954, 4.045, 2.824,, 2.824, Multiword
|
||||
128, 0.870, 9.672, 9.378, 8.326, 3.840, 3.914, 2.484,, 2.484, Multiword
|
||||
256, 0.832, 9.568, 9.389, 8.337, 3.825, 3.987, 2.293,, 2.293, Multiword
|
||||
512, 0.814, 9.516, 9.455, 8.355, 3.856, 3.972, 2.219,, 2.219, Multiword
|
||||
1024, 0.806, 9.483, 9.447, 8.348, 3.847, 3.913, 2.184,, 2.184, Multiword
|
||||
2048, 0.812, 9.474, 9.434, 8.360, 3.842, 3.705, 2.167,, 2.167, Multiword
|
||||
4096, 0.804, 9.458, 9.390, 8.360, 3.893, 3.949, 2.129,, 2.129, Multiword
|
||||
8192, 0.801, 9.458, 9.422, 8.366, 3.843, 3.677, 2.144,, 2.144, Multiword
|
||||
16384, 0.799, 9.446, 9.361, 8.308, 3.861, 3.718, 2.148,, 2.148, Multiword
|
||||
32768, 0.799, 9.435, 9.396, 8.336, 3.848, 3.745, 2.157,, 2.157, Multiword
|
||||
65536, 0.796, 9.434, 9.379, 8.360, 3.858, 3.010, 2.158,, 2.158, Multiword
|
||||
131072, 0.796, 9.451, 9.386, 8.358, 3.857, 2.759, 2.160,, 2.160, Multiword
|
||||
262144, 0.796, 9.480, 9.500, 8.411, 3.876, 2.636, 2.161,, 2.161, Multiword
|
||||
524288, 0.796, 9.542, 9.517, 8.445, 3.920, 2.574, 2.162,, 2.162, Multiword
|
||||
1048576, 0.796, 9.555, 9.545, 8.458, 3.923, 2.470, 2.179,, 2.179, Multiword
|
||||
2097152, 0.796, 9.575, 9.573, 8.479, 3.969, 2.457, 2.183,, 2.183, Multiword
|
||||
4194304, 0.807, 9.612, 9.620, 8.520, 4.052, 2.457, 2.195,, 2.195, Multiword
|
||||
8388608, 0.904, 9.856, 9.859, 8.750, 4.242, 2.539, 2.317,, 2.317, Multiword
|
||||
16777216, 0.908, 9.861, 9.862, 8.765, 4.262, 2.589, 2.326,, 2.326, Multiword
|
||||
33554432, 0.909, 9.874, 9.873, 8.761, 4.307, 2.591, 2.328,, 2.328, Multiword
|
||||
67108864, 0.912, 9.875, 9.875, 8.769, 4.277, 2.593, 2.333,, 2.333, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 3, 0, 33968, 1007226
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.259, 7.651,, 7.651, Multiword
|
||||
8, 6.145, 5.478,, 5.478, Multiword
|
||||
16, 4.896, 4.501,, 4.501, Multiword
|
||||
32, 4.313, 3.761,, 3.761, Multiword
|
||||
64, 4.023, 2.782,, 2.782, Multiword
|
||||
128, 3.872, 2.528,, 2.528, Multiword
|
||||
256, 3.922, 2.327,, 2.327, Multiword
|
||||
512, 3.838, 2.234,, 2.234, Multiword
|
||||
1024, 3.956, 2.197,, 2.197, Multiword
|
||||
2048, 4.092, 2.178,, 2.178, Multiword
|
||||
4096, 4.000, 2.110,, 2.110, Multiword
|
||||
8192, 3.940, 2.124,, 2.124, Multiword
|
||||
16384, 3.672, 2.135,, 2.135, Multiword
|
||||
32768, 3.742, 2.155,, 2.155, Multiword
|
||||
65536, 3.447, 2.158,, 2.158, Multiword
|
||||
131072, 3.199, 2.159,, 2.159, Multiword
|
||||
262144, 2.821, 2.158,, 2.158, Multiword
|
||||
524288, 2.622, 2.159,, 2.159, Multiword
|
||||
1048576, 2.597, 2.173,, 2.173, Multiword
|
||||
2097152, 2.568, 2.182,, 2.182, Multiword
|
||||
4194304, 2.567, 2.193,, 2.193, Multiword
|
||||
8388608, 2.683, 2.321,, 2.321, Multiword
|
||||
16777216, 2.680, 2.328,, 2.328, Multiword
|
||||
33554432, 2.685, 2.324,, 2.324, Multiword
|
||||
67108864, 2.689, 2.332,, 2.332, Multiword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 4, 0, 66736, 262791
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.001, 13.419, 16.982, 16.828, 14.598, 16.502, 16.251,, 13.419, Byte
|
||||
8, 3.751, 12.002, 13.741, 13.501, 6.127, 6.898, 6.855,, 6.127, Word
|
||||
16, 2.000, 11.202, 12.332, 12.626, 4.594, 5.087, 5.124,, 4.594, Word
|
||||
32, 1.125, 10.867, 11.957, 11.804, 3.794, 4.214, 4.231,, 3.794, Word
|
||||
64, 0.644, 10.595, 11.493, 12.657, 3.454, 3.738, 3.985,, 3.454, Word
|
||||
128, 0.423, 10.680, 11.304, 12.328, 3.324, 3.482, 3.493,, 3.324, Word
|
||||
256, 0.320, 10.562, 11.168, 12.184, 3.217, 3.393, 3.258,, 3.217, Word
|
||||
512, 0.265, 10.498, 11.176, 12.129, 3.200, 3.337, 3.229,, 3.200, Word
|
||||
1024, 0.247, 10.464, 11.135, 12.094, 3.396, 3.603, 3.305,, 3.305, Multiword
|
||||
2048, 0.233, 10.449, 11.113, 12.087, 3.555, 3.737, 3.321,, 3.321, Multiword
|
||||
4096, 0.232, 10.430, 11.093, 12.090, 3.534, 3.698, 3.230,, 3.230, Multiword
|
||||
8192, 0.225, 10.429, 11.091, 12.091, 3.583, 3.743, 3.204,, 3.204, Multiword
|
||||
16384, 0.225, 10.408, 10.851, 12.088, 3.621, 3.792, 3.220,, 3.220, Multiword
|
||||
32768, 0.229, 10.446, 11.045, 12.090, 3.635, 3.785, 3.220,, 3.220, Multiword
|
||||
65536, 0.258, 10.442, 10.962, 12.091, 3.634, 3.497, 3.217,, 3.217, Multiword
|
||||
131072, 0.258, 10.446, 10.973, 12.096, 3.643, 3.424, 3.211,, 3.211, Multiword
|
||||
262144, 0.258, 10.491, 10.956, 12.182, 3.665, 3.389, 3.214,, 3.214, Multiword
|
||||
524288, 0.257, 10.539, 11.076, 12.199, 3.703, 3.368, 3.215,, 3.215, Multiword
|
||||
1048576, 0.258, 10.573, 11.164, 12.230, 3.713, 3.352, 3.238,, 3.238, Multiword
|
||||
2097152, 0.260, 10.589, 11.204, 12.254, 3.733, 3.363, 3.251,, 3.251, Multiword
|
||||
4194304, 0.260, 10.638, 11.326, 12.356, 3.750, 3.376, 3.265,, 3.265, Multiword
|
||||
8388608, 0.534, 10.890, 11.538, 12.575, 3.896, 3.520, 3.408,, 3.408, Multiword
|
||||
16777216, 0.556, 10.863, 11.542, 12.602, 3.887, 3.528, 3.427,, 3.427, Multiword
|
||||
33554432, 0.556, 10.918, 11.550, 12.598, 3.895, 3.539, 3.429,, 3.429, Multiword
|
||||
67108864, 0.566, 10.895, 11.566, 12.617, 3.902, 3.537, 3.419,, 3.419, Multiword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 3, 0, 66736, 252585
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 16.251, 16.335,, 16.251, Blockword
|
||||
8, 6.751, 6.506,, 6.506, Multiword
|
||||
16, 5.027, 4.876,, 4.876, Multiword
|
||||
32, 4.119, 4.181,, 4.119, Blockword
|
||||
64, 3.705, 3.938,, 3.705, Blockword
|
||||
128, 3.483, 3.227,, 3.227, Multiword
|
||||
256, 3.388, 3.020,, 3.020, Multiword
|
||||
512, 3.336, 2.952,, 2.952, Multiword
|
||||
1024, 3.582, 3.057,, 3.057, Multiword
|
||||
2048, 3.781, 3.072,, 3.072, Multiword
|
||||
4096, 3.673, 2.999,, 2.999, Multiword
|
||||
8192, 3.754, 2.962,, 2.962, Multiword
|
||||
16384, 3.785, 3.001,, 3.001, Multiword
|
||||
32768, 3.791, 2.999,, 2.999, Multiword
|
||||
65536, 3.688, 2.996,, 2.996, Multiword
|
||||
131072, 3.623, 2.990,, 2.990, Multiword
|
||||
262144, 3.521, 2.991,, 2.991, Multiword
|
||||
524288, 3.465, 2.993,, 2.993, Multiword
|
||||
1048576, 3.484, 3.017,, 3.017, Multiword
|
||||
2097152, 3.479, 3.031,, 3.031, Multiword
|
||||
4194304, 3.492, 3.046,, 3.046, Multiword
|
||||
8388608, 3.634, 3.193,, 3.193, Multiword
|
||||
16777216, 3.640, 3.196,, 3.196, Multiword
|
||||
33554432, 3.651, 3.175,, 3.175, Multiword
|
||||
67108864, 3.657, 3.205,, 3.205, Multiword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 4, 0, 33968, 236781
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.751, 13.230, 16.787, 16.753, 12.003, 12.069, 11.627,, 11.627, Multiword
|
||||
8, 3.626, 12.158, 14.033, 13.368, 8.060, 8.269, 8.207,, 8.060, Word
|
||||
16, 1.813, 11.208, 12.362, 12.500, 6.669, 6.660, 6.585,, 6.585, Multiword
|
||||
32, 1.000, 10.867, 11.924, 11.715, 5.734, 5.857, 6.656,, 5.734, Word
|
||||
64, 0.594, 10.594, 11.492, 12.657, 5.322, 5.450, 5.500,, 5.322, Word
|
||||
128, 0.391, 10.680, 11.312, 12.405, 5.115, 5.236, 4.930,, 4.930, Multiword
|
||||
256, 0.303, 10.562, 11.168, 12.217, 4.962, 5.129, 4.750,, 4.750, Multiword
|
||||
512, 0.278, 10.499, 11.176, 12.129, 4.955, 5.053, 4.604,, 4.604, Multiword
|
||||
1024, 0.264, 10.467, 11.135, 12.120, 4.926, 5.073, 4.540,, 4.540, Multiword
|
||||
2048, 0.265, 10.447, 11.116, 12.102, 4.924, 5.076, 4.505,, 4.505, Multiword
|
||||
4096, 0.258, 10.434, 11.100, 12.102, 4.928, 5.044, 4.481,, 4.481, Multiword
|
||||
8192, 0.254, 10.433, 11.090, 12.098, 4.886, 5.041, 4.480,, 4.480, Multiword
|
||||
16384, 0.252, 10.307, 10.859, 12.095, 4.896, 5.038, 4.494,, 4.494, Multiword
|
||||
32768, 0.260, 10.427, 11.031, 12.089, 4.895, 5.038, 4.507,, 4.507, Multiword
|
||||
65536, 0.308, 10.324, 11.002, 12.089, 4.900, 4.065, 4.508,, 4.065, Blockword
|
||||
131072, 0.308, 10.446, 10.981, 12.096, 4.902, 3.993, 4.519,, 3.993, Blockword
|
||||
262144, 0.308, 10.492, 11.044, 12.153, 4.907, 3.957, 4.513,, 3.957, Blockword
|
||||
524288, 0.308, 10.539, 11.151, 12.224, 4.952, 3.970, 4.551,, 3.970, Blockword
|
||||
1048576, 0.309, 10.561, 11.141, 12.231, 4.982, 3.893, 4.563,, 3.893, Blockword
|
||||
2097152, 0.312, 10.591, 11.232, 12.254, 4.975, 3.902, 4.577,, 3.902, Blockword
|
||||
4194304, 0.312, 10.679, 11.333, 12.355, 5.007, 3.910, 4.600,, 3.910, Blockword
|
||||
8388608, 0.542, 10.913, 11.524, 12.587, 5.177, 4.064, 4.775,, 4.064, Blockword
|
||||
16777216, 0.546, 10.909, 11.536, 12.611, 5.176, 4.086, 4.777,, 4.086, Blockword
|
||||
33554432, 0.556, 10.909, 11.550, 12.608, 5.210, 4.086, 4.784,, 4.086, Blockword
|
||||
67108864, 0.554, 10.922, 11.556, 12.612, 5.203, 4.087, 4.790,, 4.087, Blockword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 3, 0, 33968, 234432
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 12.069, 11.993,, 11.993, Multiword
|
||||
8, 8.269, 8.167,, 8.167, Multiword
|
||||
16, 6.660, 6.510,, 6.510, Multiword
|
||||
32, 5.846, 5.954,, 5.846, Blockword
|
||||
64, 5.448, 5.156,, 5.156, Multiword
|
||||
128, 5.235, 4.819,, 4.819, Multiword
|
||||
256, 5.096, 4.669,, 4.669, Multiword
|
||||
512, 5.053, 4.595,, 4.595, Multiword
|
||||
1024, 5.074, 4.548,, 4.548, Multiword
|
||||
2048, 5.088, 4.537,, 4.537, Multiword
|
||||
4096, 5.044, 4.517,, 4.517, Multiword
|
||||
8192, 5.041, 4.514,, 4.514, Multiword
|
||||
16384, 5.035, 4.519,, 4.519, Multiword
|
||||
32768, 5.038, 4.522,, 4.522, Multiword
|
||||
65536, 4.364, 4.520,, 4.364, Blockword
|
||||
131072, 4.285, 4.521,, 4.285, Blockword
|
||||
262144, 4.039, 4.520,, 4.039, Blockword
|
||||
524288, 3.934, 4.532,, 3.934, Blockword
|
||||
1048576, 3.939, 4.567,, 3.939, Blockword
|
||||
2097152, 3.926, 4.575,, 3.926, Blockword
|
||||
4194304, 3.932, 4.604,, 3.932, Blockword
|
||||
8388608, 4.081, 4.777,, 4.081, Blockword
|
||||
16777216, 4.042, 4.785,, 4.042, Blockword
|
||||
33554432, 4.092, 4.790,, 4.092, Blockword
|
||||
67108864, 4.097, 4.790,, 4.097, Blockword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 64, 8, 8, 8, 4, 0, 33408, 89388
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.232, 6.192, 7.112, 6.661, 8.257, 10.502, 7.726,, 6.192, Byte
|
||||
8, 2.560, 6.136, 6.595, 5.317, 4.064, 4.761, 3.228,, 3.228, Multiword
|
||||
16, 1.381, 6.751, 7.094, 5.761, 3.014, 3.444, 2.721,, 2.721, Multiword
|
||||
32, 0.828, 7.029, 7.395, 5.800, 2.485, 2.797, 2.433,, 2.433, Multiword
|
||||
64, 0.516, 7.219, 7.485, 5.975, 2.287, 2.446, 1.679,, 1.679, Multiword
|
||||
128, 0.372, 7.539, 7.601, 6.101, 2.153, 2.332, 1.404,, 1.404, Multiword
|
||||
256, 0.294, 7.461, 7.604, 6.127, 2.118, 2.276, 1.268,, 1.268, Multiword
|
||||
512, 0.258, 7.436, 7.678, 6.127, 2.076, 2.222, 1.201,, 1.201, Multiword
|
||||
1024, 0.239, 7.373, 7.661, 6.146, 2.060, 2.236, 1.167,, 1.167, Multiword
|
||||
2048, 0.230, 7.398, 7.638, 6.155, 2.063, 2.217, 1.151,, 1.151, Multiword
|
||||
4096, 0.230, 7.427, 7.633, 6.154, 2.064, 2.176, 1.145,, 1.145, Multiword
|
||||
8192, 0.225, 7.384, 7.629, 6.177, 2.058, 2.146, 1.147,, 1.147, Multiword
|
||||
16384, 0.224, 7.336, 7.627, 6.171, 2.062, 2.180, 1.152,, 1.152, Multiword
|
||||
32768, 0.229, 7.338, 7.627, 6.163, 2.062, 2.187, 1.170,, 1.170, Multiword
|
||||
65536, 0.258, 7.336, 7.626, 6.161, 2.064, 2.302, 1.173,, 1.173, Multiword
|
||||
131072, 0.258, 7.336, 7.626, 6.163, 2.065, 2.280, 1.172,, 1.172, Multiword
|
||||
262144, 0.258, 7.366, 7.654, 6.165, 2.065, 2.268, 1.172,, 1.172, Multiword
|
||||
524288, 0.258, 7.404, 7.678, 6.214, 2.066, 2.264, 1.172,, 1.172, Multiword
|
||||
1048576, 0.258, 7.412, 7.712, 6.237, 2.076, 2.286, 1.173,, 1.173, Multiword
|
||||
2097152, 0.260, 7.426, 7.724, 6.245, 2.080, 2.283, 1.186,, 1.186, Multiword
|
||||
4194304, 0.260, 7.473, 7.773, 6.293, 2.101, 2.294, 1.188,, 1.188, Multiword
|
||||
8388608, 0.534, 7.681, 7.975, 6.481, 2.223, 2.421, 1.295,, 1.295, Multiword
|
||||
16777216, 0.557, 7.697, 7.983, 6.492, 2.235, 2.432, 1.293,, 1.293, Multiword
|
||||
33554432, 0.558, 7.680, 7.997, 6.498, 2.243, 2.438, 1.302,, 1.302, Multiword
|
||||
67108864, 0.558, 7.714, 8.003, 6.501, 2.247, 2.440, 1.304,, 1.304, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 64, 8, 8, 8, 3, 0, 33408, 95526
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 10.165, 8.551,, 8.551, Multiword
|
||||
8, 4.756, 3.940,, 3.940, Multiword
|
||||
16, 3.419, 3.052,, 3.052, Multiword
|
||||
32, 2.794, 2.566,, 2.566, Multiword
|
||||
64, 2.504, 2.201,, 2.201, Multiword
|
||||
128, 2.337, 1.920,, 1.920, Multiword
|
||||
256, 2.258, 1.833,, 1.833, Multiword
|
||||
512, 2.232, 1.764,, 1.764, Multiword
|
||||
1024, 2.237, 1.761,, 1.761, Multiword
|
||||
2048, 2.213, 1.756,, 1.756, Multiword
|
||||
4096, 2.202, 1.736,, 1.736, Multiword
|
||||
8192, 2.197, 1.736,, 1.736, Multiword
|
||||
16384, 2.177, 1.745,, 1.745, Multiword
|
||||
32768, 2.198, 1.751,, 1.751, Multiword
|
||||
65536, 2.204, 1.752,, 1.752, Multiword
|
||||
131072, 2.178, 1.751,, 1.751, Multiword
|
||||
262144, 2.153, 1.751,, 1.751, Multiword
|
||||
524288, 2.144, 1.750,, 1.750, Multiword
|
||||
1048576, 2.164, 1.752,, 1.752, Multiword
|
||||
2097152, 2.160, 1.771,, 1.771, Multiword
|
||||
4194304, 2.168, 1.779,, 1.779, Multiword
|
||||
8388608, 2.296, 1.901,, 1.901, Multiword
|
||||
16777216, 2.300, 1.914,, 1.914, Multiword
|
||||
33554432, 2.301, 1.914,, 1.914, Multiword
|
||||
67108864, 2.311, 1.917,, 1.917, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 8, 8, 8, 4, 0, 33408, 1196946
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 6.229, 6.188, 7.108, 6.660, 8.265, 10.610, 7.743, 9.713,, 6.188, Byte
|
||||
8, 2.558, 6.132, 6.534, 5.269, 4.064, 4.760, 3.261, 4.044,, 3.261, Multiword
|
||||
16, 1.379, 6.751, 7.094, 5.761, 3.011, 3.444, 2.721, 3.014,, 2.721, Multiword
|
||||
32, 0.830, 7.069, 7.398, 5.802, 2.563, 2.798, 2.433, 2.375,, 2.375, CRC32C
|
||||
64, 0.516, 7.233, 7.485, 5.975, 2.287, 2.459, 1.678, 2.115,, 1.678, Multiword
|
||||
128, 0.372, 7.539, 7.568, 6.092, 2.171, 2.332, 1.404, 2.143,, 1.404, Multiword
|
||||
256, 0.295, 7.461, 7.607, 6.127, 2.110, 2.276, 1.268, 2.081,, 1.268, Multiword
|
||||
512, 0.259, 7.436, 7.678, 6.127, 2.075, 2.221, 1.203, 2.398,, 1.203, Multiword
|
||||
1024, 0.240, 7.373, 7.656, 6.152, 2.070, 2.234, 1.167, 2.182,, 1.167, Multiword
|
||||
2048, 0.229, 7.398, 7.639, 6.154, 2.063, 2.216, 1.151, 2.176,, 1.151, Multiword
|
||||
4096, 0.229, 7.431, 7.633, 6.154, 2.064, 2.203, 1.145, 2.251,, 1.145, Multiword
|
||||
8192, 0.226, 7.384, 7.629, 6.176, 2.058, 2.203, 1.147, 2.240,, 1.147, Multiword
|
||||
16384, 0.224, 7.336, 7.634, 6.171, 2.061, 2.189, 1.157, 2.247,, 1.157, Multiword
|
||||
32768, 0.229, 7.335, 7.627, 6.165, 2.062, 2.190, 1.171, 2.253,, 1.171, Multiword
|
||||
65536, 0.258, 7.336, 7.626, 6.161, 2.064, 2.260, 1.173, 2.256,, 1.173, Multiword
|
||||
131072, 0.258, 7.335, 7.626, 6.163, 2.063, 2.248, 1.172, 2.258,, 1.172, Multiword
|
||||
262144, 0.258, 7.355, 7.652, 6.165, 2.066, 2.244, 1.172, 2.258,, 1.172, Multiword
|
||||
524288, 0.258, 7.417, 7.686, 6.216, 2.066, 2.242, 1.172, 2.260,, 1.172, Multiword
|
||||
1048576, 0.258, 7.417, 7.706, 6.239, 2.076, 2.262, 1.173, 2.277,, 1.173, Multiword
|
||||
2097152, 0.260, 7.430, 7.716, 6.249, 2.090, 2.268, 1.186, 2.284,, 1.186, Multiword
|
||||
4194304, 0.260, 7.496, 7.779, 6.271, 2.097, 2.276, 1.188, 2.292,, 1.188, Multiword
|
||||
8388608, 0.538, 7.689, 7.975, 6.479, 2.224, 2.407, 1.295, 2.440,, 1.295, Multiword
|
||||
16777216, 0.553, 7.600, 7.994, 6.480, 2.232, 2.407, 1.294, 2.445,, 1.294, Multiword
|
||||
33554432, 0.553, 7.701, 7.987, 6.497, 2.244, 2.420, 1.299, 2.451,, 1.299, Multiword
|
||||
67108864, 0.558, 7.711, 7.997, 6.499, 2.247, 2.422, 1.302, 2.454,, 1.302, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 8, 8, 8, 3, 0, 33408, 1201599
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 10.501, 8.551, 9.630,, 8.551, Multiword
|
||||
8, 4.756, 3.982, 4.044,, 3.982, Multiword
|
||||
16, 3.423, 3.063, 3.001,, 3.001, CRC32C
|
||||
32, 2.794, 2.595, 2.377,, 2.377, CRC32C
|
||||
64, 2.503, 2.189, 2.115,, 2.115, CRC32C
|
||||
128, 2.338, 1.920, 2.142,, 1.920, Multiword
|
||||
256, 2.254, 1.834, 2.062,, 1.834, Multiword
|
||||
512, 2.232, 1.771, 2.418,, 1.771, Multiword
|
||||
1024, 2.227, 1.742, 2.182,, 1.742, Multiword
|
||||
2048, 2.213, 1.744, 2.176,, 1.744, Multiword
|
||||
4096, 2.208, 1.742, 2.248,, 1.742, Multiword
|
||||
8192, 2.206, 1.738, 2.240,, 1.738, Multiword
|
||||
16384, 2.185, 1.747, 2.245,, 1.747, Multiword
|
||||
32768, 2.193, 1.750, 2.254,, 1.750, Multiword
|
||||
65536, 2.164, 1.753, 2.256,, 1.753, Multiword
|
||||
131072, 2.153, 1.752, 2.259,, 1.752, Multiword
|
||||
262144, 2.134, 1.751, 2.258,, 1.751, Multiword
|
||||
524288, 2.125, 1.751, 2.261,, 1.751, Multiword
|
||||
1048576, 2.143, 1.753, 2.282,, 1.753, Multiword
|
||||
2097152, 2.147, 1.776, 2.281,, 1.776, Multiword
|
||||
4194304, 2.152, 1.778, 2.292,, 1.778, Multiword
|
||||
8388608, 2.277, 1.896, 2.440,, 1.896, Multiword
|
||||
16777216, 2.284, 1.908, 2.450,, 1.908, Multiword
|
||||
33554432, 2.293, 1.910, 2.452,, 1.910, Multiword
|
||||
67108864, 2.291, 1.918, 2.453,, 1.918, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 4, 4, 4, 4, 0, 8544, 1187748
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 3.251, 6.191, 6.979, 6.170, 5.251, 7.502, 6.512, 9.451,, 5.251, Word
|
||||
8, 1.875, 6.140, 6.620, 5.605, 3.756, 4.890, 4.251, 4.211,, 3.756, Word
|
||||
16, 1.125, 6.751, 7.043, 5.502, 3.027, 3.646, 3.498, 3.046,, 3.027, Word
|
||||
32, 0.656, 7.042, 7.414, 5.817, 2.956, 3.332, 2.516, 2.417,, 2.417, CRC32C
|
||||
64, 0.422, 7.219, 7.487, 6.083, 2.863, 3.047, 2.032, 2.281,, 2.032, Multiword
|
||||
128, 0.324, 7.539, 7.572, 6.137, 2.833, 2.919, 1.736, 2.141,, 1.736, Multiword
|
||||
256, 0.287, 7.461, 7.595, 6.167, 2.825, 2.870, 1.678, 2.100,, 1.678, Multiword
|
||||
512, 0.268, 7.436, 7.689, 6.177, 2.811, 2.962, 1.616, 2.380,, 1.616, Multiword
|
||||
1024, 0.260, 7.373, 7.658, 6.180, 2.824, 2.852, 1.595, 2.208,, 1.595, Multiword
|
||||
2048, 0.264, 7.398, 7.649, 6.202, 2.838, 2.838, 1.593, 2.182,, 1.593, Multiword
|
||||
4096, 0.257, 7.423, 7.636, 6.208, 2.853, 2.830, 1.578, 2.235,, 1.578, Multiword
|
||||
8192, 0.254, 7.383, 7.655, 6.187, 2.842, 2.824, 1.571, 2.233,, 1.571, Multiword
|
||||
16384, 0.252, 7.336, 7.627, 6.213, 2.823, 2.716, 1.568, 2.241,, 1.568, Multiword
|
||||
32768, 0.259, 7.336, 7.640, 6.198, 2.807, 2.806, 1.577, 2.257,, 1.577, Multiword
|
||||
65536, 0.308, 7.336, 7.626, 6.194, 2.809, 1.819, 1.580, 2.260,, 1.580, Multiword
|
||||
131072, 0.308, 7.336, 7.610, 6.200, 2.805, 1.805, 1.581, 2.259,, 1.581, Multiword
|
||||
262144, 0.308, 7.369, 7.657, 6.202, 2.810, 1.800, 1.582, 2.259,, 1.582, Multiword
|
||||
524288, 0.309, 7.395, 7.681, 6.263, 2.813, 1.798, 1.581, 2.258,, 1.581, Multiword
|
||||
1048576, 0.309, 7.423, 7.708, 6.271, 2.830, 1.738, 1.583, 2.282,, 1.583, Multiword
|
||||
2097152, 0.312, 7.430, 7.718, 6.301, 2.860, 1.758, 1.596, 2.288,, 1.596, Multiword
|
||||
4194304, 0.312, 7.470, 7.772, 6.327, 2.878, 1.757, 1.601, 2.295,, 1.601, Multiword
|
||||
8388608, 0.550, 7.671, 7.986, 6.425, 3.027, 1.879, 1.712, 2.429,, 1.712, Multiword
|
||||
16777216, 0.554, 7.699, 7.980, 6.544, 3.026, 1.888, 1.724, 2.445,, 1.724, Multiword
|
||||
33554432, 0.557, 7.701, 8.000, 6.546, 3.013, 1.886, 1.726, 2.448,, 1.726, Multiword
|
||||
67108864, 0.553, 7.715, 8.005, 6.553, 3.050, 1.889, 1.727, 2.451,, 1.727, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 4, 4, 4, 3, 0, 8544, 1182339
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 7.850, 6.712, 9.448,, 6.712, Multiword
|
||||
8, 4.973, 4.304, 4.211,, 4.211, CRC32C
|
||||
16, 3.824, 3.571, 3.453,, 3.453, CRC32C
|
||||
32, 3.415, 2.563, 2.611,, 2.563, Multiword
|
||||
64, 3.196, 1.914, 2.276,, 1.914, Multiword
|
||||
128, 3.090, 1.702, 2.137,, 1.702, Multiword
|
||||
256, 3.070, 1.539, 2.046,, 1.539, Multiword
|
||||
512, 3.093, 1.484, 2.380,, 1.484, Multiword
|
||||
1024, 3.026, 1.455, 2.207,, 1.455, Multiword
|
||||
2048, 3.010, 1.436, 2.186,, 1.436, Multiword
|
||||
4096, 2.999, 1.419, 2.233,, 1.419, Multiword
|
||||
8192, 2.994, 1.418, 2.231,, 1.418, Multiword
|
||||
16384, 2.991, 1.411, 2.242,, 1.411, Multiword
|
||||
32768, 2.991, 1.426, 2.259,, 1.426, Multiword
|
||||
65536, 2.340, 1.425, 2.260,, 1.425, Multiword
|
||||
131072, 2.332, 1.427, 2.259,, 1.427, Multiword
|
||||
262144, 2.142, 1.427, 2.260,, 1.427, Multiword
|
||||
524288, 2.057, 1.428, 2.258,, 1.428, Multiword
|
||||
1048576, 2.074, 1.429, 2.272,, 1.429, Multiword
|
||||
2097152, 2.056, 1.442, 2.285,, 1.442, Multiword
|
||||
4194304, 2.062, 1.448, 2.296,, 1.448, Multiword
|
||||
8388608, 2.184, 1.554, 2.442,, 1.554, Multiword
|
||||
16777216, 2.183, 1.556, 2.445,, 1.556, Multiword
|
||||
33554432, 2.185, 1.569, 2.448,, 1.569, Multiword
|
||||
67108864, 2.190, 1.567, 2.453,, 1.567, Multiword
|
||||
|
||||
|
434
crcutil-1.0/doc/data/test-gcc-64-noasm-1.csv
Normal file
434
crcutil-1.0/doc/data/test-gcc-64-noasm-1.csv
Normal file
@@ -0,0 +1,434 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 4, 0, 66736, 1114677
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.777, 9.090, 9.327, 9.257, 9.503, 12.251, 11.302,, 9.090, Byte
|
||||
8, 3.209, 8.601, 8.614, 8.695, 4.241, 5.419, 4.848,, 4.241, Word
|
||||
16, 1.890, 8.956, 8.997, 8.048, 3.368, 3.954, 3.551,, 3.368, Word
|
||||
32, 1.386, 9.223, 9.230, 8.212, 2.826, 3.211, 3.016,, 2.826, Word
|
||||
64, 1.110, 9.329, 9.323, 8.298, 2.645, 2.829, 2.485,, 2.485, Multiword
|
||||
128, 0.961, 9.672, 9.378, 8.326, 2.537, 2.659, 2.055,, 2.055, Multiword
|
||||
256, 0.881, 9.568, 9.389, 8.338, 2.451, 2.554, 1.833,, 1.833, Multiword
|
||||
512, 0.847, 9.516, 9.455, 8.356, 2.446, 2.505, 1.788,, 1.788, Multiword
|
||||
1024, 0.830, 9.483, 9.448, 8.352, 2.692, 2.758, 1.813,, 1.813, Multiword
|
||||
2048, 0.821, 9.474, 9.434, 8.360, 2.888, 2.931, 1.810,, 1.810, Multiword
|
||||
4096, 0.820, 9.455, 9.391, 8.360, 2.829, 2.835, 1.769,, 1.769, Multiword
|
||||
8192, 0.813, 9.460, 9.422, 8.366, 2.880, 2.878, 1.752,, 1.752, Multiword
|
||||
16384, 0.808, 9.446, 9.379, 8.308, 2.931, 2.969, 1.747,, 1.747, Multiword
|
||||
32768, 0.808, 9.451, 9.386, 8.344, 2.961, 2.961, 1.739,, 1.739, Multiword
|
||||
65536, 0.800, 9.451, 9.370, 8.324, 2.938, 2.681, 1.732,, 1.732, Multiword
|
||||
131072, 0.786, 9.451, 9.415, 8.358, 2.976, 2.432, 1.737,, 1.737, Multiword
|
||||
262144, 0.793, 9.540, 9.512, 8.405, 2.980, 2.303, 1.728,, 1.728, Multiword
|
||||
524288, 0.790, 9.541, 9.511, 8.449, 3.010, 2.244, 1.738,, 1.738, Multiword
|
||||
1048576, 0.797, 9.564, 9.550, 8.482, 3.033, 2.187, 1.762,, 1.762, Multiword
|
||||
2097152, 0.789, 9.568, 9.564, 8.479, 3.051, 2.175, 1.760,, 1.760, Multiword
|
||||
4194304, 0.803, 9.607, 9.603, 8.515, 3.060, 2.174, 1.768,, 1.768, Multiword
|
||||
8388608, 0.898, 9.853, 9.866, 8.760, 3.187, 2.286, 1.876,, 1.876, Multiword
|
||||
16777216, 0.915, 9.820, 9.865, 8.776, 3.200, 2.294, 1.882,, 1.882, Multiword
|
||||
33554432, 0.919, 9.876, 9.878, 8.739, 3.199, 2.297, 1.879,, 1.879, Multiword
|
||||
67108864, 0.924, 9.888, 9.844, 8.788, 3.203, 2.300, 1.886,, 1.886, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 3, 0, 66736, 1077048
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 12.135, 10.314,, 10.314, Multiword
|
||||
8, 5.314, 4.189,, 4.189, Multiword
|
||||
16, 3.884, 3.355,, 3.355, Multiword
|
||||
32, 3.063, 2.895,, 2.895, Multiword
|
||||
64, 2.758, 2.470,, 2.470, Multiword
|
||||
128, 2.610, 2.053,, 2.053, Multiword
|
||||
256, 2.530, 1.869,, 1.869, Multiword
|
||||
512, 2.482, 1.827,, 1.827, Multiword
|
||||
1024, 2.691, 1.898,, 1.898, Multiword
|
||||
2048, 2.926, 1.913,, 1.913, Multiword
|
||||
4096, 2.848, 1.847,, 1.847, Multiword
|
||||
8192, 2.871, 1.808,, 1.808, Multiword
|
||||
16384, 2.942, 1.824,, 1.824, Multiword
|
||||
32768, 2.959, 1.816,, 1.816, Multiword
|
||||
65536, 2.888, 1.818,, 1.818, Multiword
|
||||
131072, 2.637, 1.813,, 1.813, Multiword
|
||||
262144, 2.371, 1.812,, 1.812, Multiword
|
||||
524288, 2.240, 1.815,, 1.815, Multiword
|
||||
1048576, 2.236, 1.820,, 1.820, Multiword
|
||||
2097152, 2.204, 1.839,, 1.839, Multiword
|
||||
4194304, 2.203, 1.845,, 1.845, Multiword
|
||||
8388608, 2.307, 1.967,, 1.967, Multiword
|
||||
16777216, 2.307, 1.972,, 1.972, Multiword
|
||||
33554432, 2.321, 1.978,, 1.978, Multiword
|
||||
67108864, 2.322, 1.976,, 1.976, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 4, 0, 33968, 1012923
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 4.762, 9.090, 9.327, 9.254, 6.907, 9.587, 8.501,, 6.907, Word
|
||||
8, 2.751, 8.603, 8.644, 8.739, 5.139, 6.410, 5.794,, 5.139, Word
|
||||
16, 1.622, 9.000, 8.997, 8.080, 4.314, 4.788, 4.843,, 4.314, Word
|
||||
32, 1.125, 9.222, 9.230, 8.087, 4.071, 4.219, 3.544,, 3.544, Multiword
|
||||
64, 0.940, 9.329, 9.323, 8.296, 3.954, 4.046, 2.815,, 2.815, Multiword
|
||||
128, 0.870, 9.672, 9.378, 8.326, 3.840, 3.936, 2.473,, 2.473, Multiword
|
||||
256, 0.832, 9.568, 9.389, 8.337, 3.826, 3.987, 2.292,, 2.292, Multiword
|
||||
512, 0.814, 9.516, 9.455, 8.358, 3.856, 3.972, 2.221,, 2.221, Multiword
|
||||
1024, 0.806, 9.483, 9.448, 8.349, 3.847, 3.913, 2.182,, 2.182, Multiword
|
||||
2048, 0.812, 9.474, 9.435, 8.360, 3.842, 3.705, 2.167,, 2.167, Multiword
|
||||
4096, 0.804, 9.458, 9.390, 8.360, 3.891, 3.950, 2.150,, 2.150, Multiword
|
||||
8192, 0.801, 9.457, 9.418, 8.366, 3.843, 3.677, 2.141,, 2.141, Multiword
|
||||
16384, 0.799, 9.449, 9.363, 8.308, 3.853, 3.677, 2.154,, 2.154, Multiword
|
||||
32768, 0.798, 9.422, 9.386, 8.351, 3.816, 3.826, 2.159,, 2.159, Multiword
|
||||
65536, 0.785, 9.384, 9.386, 8.324, 3.854, 3.005, 2.162,, 2.162, Multiword
|
||||
131072, 0.796, 9.392, 9.413, 8.358, 3.855, 2.754, 2.157,, 2.157, Multiword
|
||||
262144, 0.796, 9.496, 9.508, 8.398, 3.875, 2.629, 2.162,, 2.162, Multiword
|
||||
524288, 0.796, 9.528, 9.512, 8.447, 3.921, 2.552, 2.162,, 2.162, Multiword
|
||||
1048576, 0.796, 9.562, 9.543, 8.461, 3.938, 2.469, 2.185,, 2.185, Multiword
|
||||
2097152, 0.805, 9.579, 9.564, 8.477, 4.002, 2.457, 2.188,, 2.188, Multiword
|
||||
4194304, 0.803, 9.603, 9.613, 8.525, 4.078, 2.461, 2.195,, 2.195, Multiword
|
||||
8388608, 0.909, 9.852, 9.858, 8.755, 4.266, 2.579, 2.321,, 2.321, Multiword
|
||||
16777216, 0.908, 9.770, 9.865, 8.761, 4.301, 2.594, 2.324,, 2.324, Multiword
|
||||
33554432, 0.906, 9.876, 9.873, 8.730, 4.318, 2.596, 2.332,, 2.332, Multiword
|
||||
67108864, 0.911, 9.882, 9.855, 8.782, 4.317, 2.586, 2.332,, 2.332, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 3, 0, 33968, 997623
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.264, 7.827,, 7.827, Multiword
|
||||
8, 6.227, 5.517,, 5.517, Multiword
|
||||
16, 4.896, 4.501,, 4.501, Multiword
|
||||
32, 4.313, 3.761,, 3.761, Multiword
|
||||
64, 4.008, 2.786,, 2.786, Multiword
|
||||
128, 3.871, 2.528,, 2.528, Multiword
|
||||
256, 3.922, 2.323,, 2.323, Multiword
|
||||
512, 3.838, 2.233,, 2.233, Multiword
|
||||
1024, 3.957, 2.197,, 2.197, Multiword
|
||||
2048, 4.092, 2.173,, 2.173, Multiword
|
||||
4096, 4.000, 2.142,, 2.142, Multiword
|
||||
8192, 3.950, 2.143,, 2.143, Multiword
|
||||
16384, 3.712, 2.135,, 2.135, Multiword
|
||||
32768, 3.738, 2.158,, 2.158, Multiword
|
||||
65536, 3.442, 2.158,, 2.158, Multiword
|
||||
131072, 3.171, 2.159,, 2.159, Multiword
|
||||
262144, 2.821, 2.159,, 2.159, Multiword
|
||||
524288, 2.623, 2.158,, 2.158, Multiword
|
||||
1048576, 2.610, 2.177,, 2.177, Multiword
|
||||
2097152, 2.562, 2.184,, 2.184, Multiword
|
||||
4194304, 2.570, 2.191,, 2.191, Multiword
|
||||
8388608, 2.690, 2.320,, 2.320, Multiword
|
||||
16777216, 2.681, 2.326,, 2.326, Multiword
|
||||
33554432, 2.684, 2.332,, 2.332, Multiword
|
||||
67108864, 2.696, 2.338,, 2.338, Multiword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 4, 0, 66736, 263376
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.001, 13.278, 17.014, 16.939, 14.533, 16.501, 16.252,, 13.278, Byte
|
||||
8, 3.751, 12.126, 13.881, 13.501, 6.139, 6.756, 6.855,, 6.139, Word
|
||||
16, 2.000, 11.204, 12.330, 12.671, 4.504, 5.028, 5.127,, 4.504, Word
|
||||
32, 1.130, 10.867, 11.936, 11.790, 3.794, 4.165, 4.158,, 3.794, Word
|
||||
64, 0.641, 10.595, 11.491, 12.657, 3.454, 3.715, 3.985,, 3.454, Word
|
||||
128, 0.421, 10.680, 11.304, 12.405, 3.244, 3.493, 3.578,, 3.244, Word
|
||||
256, 0.321, 10.562, 11.168, 12.217, 3.230, 3.390, 3.278,, 3.230, Word
|
||||
512, 0.271, 10.499, 11.176, 12.129, 3.200, 3.356, 3.241,, 3.200, Word
|
||||
1024, 0.245, 10.464, 11.136, 12.120, 3.390, 3.609, 3.285,, 3.285, Multiword
|
||||
2048, 0.233, 10.449, 11.116, 12.102, 3.528, 3.713, 3.311,, 3.311, Multiword
|
||||
4096, 0.236, 10.434, 11.097, 12.102, 3.521, 3.682, 3.230,, 3.230, Multiword
|
||||
8192, 0.227, 10.434, 11.086, 12.100, 3.603, 3.753, 3.208,, 3.208, Multiword
|
||||
16384, 0.224, 10.387, 10.919, 12.092, 3.633, 3.802, 3.214,, 3.214, Multiword
|
||||
32768, 0.229, 10.404, 11.007, 12.089, 3.641, 3.786, 3.214,, 3.214, Multiword
|
||||
65536, 0.258, 10.445, 10.987, 12.090, 3.631, 3.506, 3.210,, 3.210, Multiword
|
||||
131072, 0.258, 10.446, 10.986, 12.094, 3.656, 3.433, 3.207,, 3.207, Multiword
|
||||
262144, 0.258, 10.503, 11.027, 12.184, 3.664, 3.396, 3.208,, 3.208, Multiword
|
||||
524288, 0.258, 10.539, 11.131, 12.191, 3.668, 3.377, 3.210,, 3.210, Multiword
|
||||
1048576, 0.258, 10.565, 11.158, 12.230, 3.724, 3.358, 3.234,, 3.234, Multiword
|
||||
2097152, 0.260, 10.579, 11.181, 12.255, 3.737, 3.369, 3.249,, 3.249, Multiword
|
||||
4194304, 0.260, 10.628, 11.292, 12.315, 3.747, 3.368, 3.269,, 3.269, Multiword
|
||||
8388608, 0.533, 10.772, 11.522, 12.591, 3.895, 3.530, 3.409,, 3.409, Multiword
|
||||
16777216, 0.556, 10.912, 11.532, 12.613, 3.903, 3.539, 3.415,, 3.415, Multiword
|
||||
33554432, 0.556, 10.921, 11.531, 12.608, 3.903, 3.537, 3.423,, 3.423, Multiword
|
||||
67108864, 0.562, 10.908, 11.563, 12.592, 3.903, 3.542, 3.431,, 3.431, Multiword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 8, 3, 0, 66736, 251253
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 16.251, 16.044,, 16.044, Multiword
|
||||
8, 6.751, 6.530,, 6.530, Multiword
|
||||
16, 5.027, 4.876,, 4.876, Multiword
|
||||
32, 4.119, 4.074,, 4.074, Multiword
|
||||
64, 3.704, 3.938,, 3.704, Blockword
|
||||
128, 3.490, 3.227,, 3.227, Multiword
|
||||
256, 3.388, 3.037,, 3.037, Multiword
|
||||
512, 3.336, 2.953,, 2.953, Multiword
|
||||
1024, 3.597, 3.065,, 3.065, Multiword
|
||||
2048, 3.753, 3.078,, 3.078, Multiword
|
||||
4096, 3.691, 2.997,, 2.997, Multiword
|
||||
8192, 3.731, 2.962,, 2.962, Multiword
|
||||
16384, 3.763, 3.002,, 3.002, Multiword
|
||||
32768, 3.769, 2.998,, 2.998, Multiword
|
||||
65536, 3.680, 2.995,, 2.995, Multiword
|
||||
131072, 3.610, 2.991,, 2.991, Multiword
|
||||
262144, 3.512, 2.991,, 2.991, Multiword
|
||||
524288, 3.464, 2.994,, 2.994, Multiword
|
||||
1048576, 3.477, 3.017,, 3.017, Multiword
|
||||
2097152, 3.479, 3.028,, 3.028, Multiword
|
||||
4194304, 3.499, 3.040,, 3.040, Multiword
|
||||
8388608, 3.641, 3.187,, 3.187, Multiword
|
||||
16777216, 3.642, 3.198,, 3.198, Multiword
|
||||
33554432, 3.651, 3.203,, 3.203, Multiword
|
||||
67108864, 3.648, 3.208,, 3.208, Multiword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 4, 0, 33968, 236997
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.751, 13.313, 16.871, 16.801, 12.064, 12.128, 12.005,, 12.005, Multiword
|
||||
8, 3.626, 11.997, 13.934, 13.391, 8.076, 8.269, 8.200,, 8.076, Word
|
||||
16, 1.813, 11.201, 12.343, 12.603, 6.727, 6.660, 6.582,, 6.582, Multiword
|
||||
32, 1.000, 10.867, 11.886, 11.746, 5.789, 5.842, 6.407,, 5.789, Word
|
||||
64, 0.594, 10.595, 11.494, 12.657, 5.366, 5.448, 5.500,, 5.366, Word
|
||||
128, 0.391, 10.680, 11.311, 12.405, 5.160, 5.239, 4.907,, 4.907, Multiword
|
||||
256, 0.303, 10.562, 11.168, 12.217, 4.974, 5.129, 4.735,, 4.735, Multiword
|
||||
512, 0.277, 10.499, 11.176, 12.129, 4.955, 5.053, 4.607,, 4.607, Multiword
|
||||
1024, 0.263, 10.464, 11.134, 12.120, 4.926, 5.073, 4.524,, 4.524, Multiword
|
||||
2048, 0.265, 10.449, 11.108, 12.102, 4.950, 5.076, 4.505,, 4.505, Multiword
|
||||
4096, 0.258, 10.431, 11.093, 12.104, 4.940, 5.044, 4.479,, 4.479, Multiword
|
||||
8192, 0.254, 10.424, 11.088, 12.104, 4.887, 5.043, 4.483,, 4.483, Multiword
|
||||
16384, 0.252, 10.309, 10.853, 12.096, 4.902, 5.032, 4.498,, 4.498, Multiword
|
||||
32768, 0.260, 10.444, 11.033, 12.094, 4.900, 5.040, 4.511,, 4.511, Multiword
|
||||
65536, 0.308, 10.400, 11.011, 12.091, 4.903, 4.066, 4.512,, 4.066, Blockword
|
||||
131072, 0.308, 10.446, 10.911, 12.095, 4.901, 3.996, 4.510,, 3.996, Blockword
|
||||
262144, 0.308, 10.510, 11.072, 12.184, 4.906, 3.957, 4.520,, 3.957, Blockword
|
||||
524288, 0.309, 10.539, 11.126, 12.228, 4.953, 3.966, 4.547,, 3.966, Blockword
|
||||
1048576, 0.309, 10.561, 11.190, 12.234, 4.976, 3.903, 4.567,, 3.903, Blockword
|
||||
2097152, 0.312, 10.591, 11.226, 12.254, 4.974, 3.899, 4.580,, 3.899, Blockword
|
||||
4194304, 0.312, 10.630, 11.280, 12.301, 4.982, 3.912, 4.587,, 3.912, Blockword
|
||||
8388608, 0.549, 10.873, 11.528, 12.598, 5.191, 4.080, 4.775,, 4.080, Blockword
|
||||
16777216, 0.557, 10.909, 11.553, 12.619, 5.195, 4.087, 4.779,, 4.087, Blockword
|
||||
33554432, 0.557, 10.903, 11.557, 12.617, 5.195, 4.031, 4.787,, 4.031, Blockword
|
||||
67108864, 0.561, 10.926, 11.560, 12.622, 5.192, 4.091, 4.791,, 4.091, Blockword
|
||||
|
||||
ClassTitle, CRC-128-u128/u128/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 128, 16, 16, 4, 3, 0, 33968, 234801
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 12.274, 12.002,, 12.002, Multiword
|
||||
8, 8.272, 8.167,, 8.167, Multiword
|
||||
16, 6.630, 6.494,, 6.494, Multiword
|
||||
32, 5.891, 6.063,, 5.891, Blockword
|
||||
64, 5.473, 5.188,, 5.188, Multiword
|
||||
128, 5.268, 4.907,, 4.907, Multiword
|
||||
256, 5.129, 4.676,, 4.676, Multiword
|
||||
512, 5.053, 4.602,, 4.602, Multiword
|
||||
1024, 5.074, 4.573,, 4.573, Multiword
|
||||
2048, 5.076, 4.527,, 4.527, Multiword
|
||||
4096, 4.953, 4.521,, 4.521, Multiword
|
||||
8192, 5.043, 4.516,, 4.516, Multiword
|
||||
16384, 5.040, 4.519,, 4.519, Multiword
|
||||
32768, 5.042, 4.520,, 4.520, Multiword
|
||||
65536, 4.361, 4.520,, 4.361, Blockword
|
||||
131072, 4.291, 4.520,, 4.291, Blockword
|
||||
262144, 4.040, 4.520,, 4.040, Blockword
|
||||
524288, 3.951, 4.552,, 3.951, Blockword
|
||||
1048576, 3.949, 4.566,, 3.949, Blockword
|
||||
2097152, 3.926, 4.577,, 3.926, Blockword
|
||||
4194304, 3.934, 4.601,, 3.934, Blockword
|
||||
8388608, 4.088, 4.764,, 4.088, Blockword
|
||||
16777216, 4.096, 4.789,, 4.096, Blockword
|
||||
33554432, 4.094, 4.795,, 4.094, Blockword
|
||||
67108864, 4.092, 4.787,, 4.092, Blockword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 64, 8, 8, 8, 4, 0, 33408, 89820
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.231, 6.188, 7.109, 7.001, 8.253, 10.006, 9.252,, 6.188, Byte
|
||||
8, 2.559, 6.140, 6.578, 5.390, 3.810, 4.760, 3.976,, 3.810, Word
|
||||
16, 1.376, 6.751, 7.094, 5.761, 3.002, 3.443, 2.938,, 2.938, Multiword
|
||||
32, 0.828, 7.033, 7.398, 5.807, 2.457, 2.797, 2.674,, 2.457, Word
|
||||
64, 0.517, 7.219, 7.485, 5.975, 2.287, 2.472, 2.307,, 2.287, Word
|
||||
128, 0.367, 7.539, 7.600, 6.102, 2.189, 2.332, 2.186,, 2.186, Multiword
|
||||
256, 0.294, 7.461, 7.604, 6.127, 2.119, 2.277, 2.092,, 2.092, Multiword
|
||||
512, 0.258, 7.436, 7.678, 6.127, 2.086, 2.222, 2.054,, 2.054, Multiword
|
||||
1024, 0.240, 7.373, 7.661, 6.151, 2.065, 2.223, 2.031,, 2.031, Multiword
|
||||
2048, 0.230, 7.398, 7.639, 6.154, 2.062, 2.217, 2.018,, 2.018, Multiword
|
||||
4096, 0.231, 7.434, 7.633, 6.154, 2.056, 2.208, 2.032,, 2.032, Multiword
|
||||
8192, 0.228, 7.383, 7.629, 6.177, 2.061, 2.191, 2.030,, 2.030, Multiword
|
||||
16384, 0.223, 7.336, 7.627, 6.171, 2.060, 2.177, 2.036,, 2.036, Multiword
|
||||
32768, 0.228, 7.337, 7.618, 6.166, 2.060, 2.195, 2.045,, 2.045, Multiword
|
||||
65536, 0.258, 7.336, 7.626, 6.161, 2.063, 2.307, 2.047,, 2.047, Multiword
|
||||
131072, 0.258, 7.335, 7.626, 6.163, 2.062, 2.281, 2.047,, 2.047, Multiword
|
||||
262144, 0.258, 7.353, 7.655, 6.165, 2.064, 2.268, 2.047,, 2.047, Multiword
|
||||
524288, 0.258, 7.386, 7.697, 6.216, 2.066, 2.263, 2.047,, 2.047, Multiword
|
||||
1048576, 0.258, 7.420, 7.717, 6.220, 2.089, 2.287, 2.069,, 2.069, Multiword
|
||||
2097152, 0.260, 7.430, 7.721, 6.247, 2.089, 2.288, 2.069,, 2.069, Multiword
|
||||
4194304, 0.260, 7.466, 7.762, 6.279, 2.099, 2.295, 2.074,, 2.074, Multiword
|
||||
8388608, 0.537, 7.677, 7.989, 6.457, 2.232, 2.427, 2.207,, 2.207, Multiword
|
||||
16777216, 0.558, 7.710, 7.994, 6.486, 2.234, 2.432, 2.224,, 2.224, Multiword
|
||||
33554432, 0.559, 7.710, 8.000, 6.492, 2.240, 2.420, 2.228,, 2.228, Multiword
|
||||
67108864, 0.565, 7.712, 7.997, 6.467, 2.245, 2.444, 2.223,, 2.223, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 64, 8, 8, 8, 3, 0, 33408, 96165
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 10.483, 9.160,, 9.160, Multiword
|
||||
8, 4.695, 3.965,, 3.965, Multiword
|
||||
16, 3.403, 3.053,, 3.053, Multiword
|
||||
32, 2.780, 2.594,, 2.594, Multiword
|
||||
64, 2.501, 2.191,, 2.191, Multiword
|
||||
128, 2.333, 1.920,, 1.920, Multiword
|
||||
256, 2.251, 1.833,, 1.833, Multiword
|
||||
512, 2.217, 1.764,, 1.764, Multiword
|
||||
1024, 2.212, 1.762,, 1.762, Multiword
|
||||
2048, 2.210, 1.747,, 1.747, Multiword
|
||||
4096, 2.174, 1.739,, 1.739, Multiword
|
||||
8192, 2.197, 1.738,, 1.738, Multiword
|
||||
16384, 2.184, 1.745,, 1.745, Multiword
|
||||
32768, 2.195, 1.750,, 1.750, Multiword
|
||||
65536, 2.212, 1.752,, 1.752, Multiword
|
||||
131072, 2.186, 1.750,, 1.750, Multiword
|
||||
262144, 2.164, 1.751,, 1.751, Multiword
|
||||
524288, 2.153, 1.750,, 1.750, Multiword
|
||||
1048576, 2.159, 1.752,, 1.752, Multiword
|
||||
2097152, 2.173, 1.767,, 1.767, Multiword
|
||||
4194304, 2.179, 1.776,, 1.776, Multiword
|
||||
8388608, 2.302, 1.906,, 1.906, Multiword
|
||||
16777216, 2.292, 1.912,, 1.912, Multiword
|
||||
33554432, 2.314, 1.914,, 1.914, Multiword
|
||||
67108864, 2.322, 1.918,, 1.918, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 8, 8, 8, 4, 0, 33408, 1179666
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 6.229, 6.190, 7.109, 7.001, 8.965, 10.620, 8.413, 8.962,, 6.190, Byte
|
||||
8, 2.630, 6.133, 6.616, 5.384, 4.063, 4.760, 4.022, 4.041,, 4.022, Multiword
|
||||
16, 1.377, 6.751, 7.095, 5.761, 3.010, 3.444, 2.938, 3.025,, 2.938, Multiword
|
||||
32, 0.828, 7.028, 7.395, 5.804, 2.563, 2.798, 2.680, 2.346,, 2.346, CRC32C
|
||||
64, 0.516, 7.222, 7.485, 5.975, 2.287, 2.498, 2.329, 2.133,, 2.133, CRC32C
|
||||
128, 0.370, 7.539, 7.567, 6.094, 2.177, 2.332, 2.172, 2.144,, 2.144, CRC32C
|
||||
256, 0.297, 7.461, 7.604, 6.127, 2.097, 2.280, 2.087, 2.062,, 2.062, CRC32C
|
||||
512, 0.259, 7.436, 7.678, 6.127, 2.081, 2.222, 2.053, 2.397,, 2.053, Multiword
|
||||
1024, 0.240, 7.373, 7.661, 6.143, 2.071, 2.234, 2.034, 2.201,, 2.034, Multiword
|
||||
2048, 0.230, 7.398, 7.639, 6.156, 2.059, 2.216, 2.024, 2.174,, 2.024, Multiword
|
||||
4096, 0.231, 7.431, 7.633, 6.154, 2.063, 2.205, 2.030, 2.224,, 2.030, Multiword
|
||||
8192, 0.225, 7.383, 7.629, 6.177, 2.053, 2.202, 2.025, 2.236,, 2.025, Multiword
|
||||
16384, 0.224, 7.336, 7.628, 6.171, 2.059, 2.182, 2.033, 2.244,, 2.033, Multiword
|
||||
32768, 0.229, 7.335, 7.627, 6.165, 2.063, 2.185, 2.045, 2.249,, 2.045, Multiword
|
||||
65536, 0.258, 7.335, 7.626, 6.161, 2.065, 2.261, 2.047, 2.254,, 2.047, Multiword
|
||||
131072, 0.258, 7.335, 7.626, 6.163, 2.063, 2.251, 2.046, 2.256,, 2.046, Multiword
|
||||
262144, 0.258, 7.373, 7.644, 6.165, 2.066, 2.245, 2.047, 2.259,, 2.047, Multiword
|
||||
524288, 0.258, 7.402, 7.693, 6.215, 2.066, 2.242, 2.047, 2.260,, 2.047, Multiword
|
||||
1048576, 0.258, 7.421, 7.707, 6.239, 2.090, 2.268, 2.070, 2.276,, 2.070, Multiword
|
||||
2097152, 0.260, 7.440, 7.721, 6.249, 2.088, 2.269, 2.071, 2.287,, 2.071, Multiword
|
||||
4194304, 0.260, 7.473, 7.767, 6.265, 2.103, 2.278, 2.074, 2.295,, 2.074, Multiword
|
||||
8388608, 0.540, 7.686, 7.981, 6.484, 2.224, 2.408, 2.203, 2.441,, 2.203, Multiword
|
||||
16777216, 0.556, 7.695, 7.996, 6.498, 2.241, 2.419, 2.219, 2.444,, 2.219, Multiword
|
||||
33554432, 0.559, 7.706, 8.001, 6.491, 2.248, 2.422, 2.222, 2.459,, 2.222, Multiword
|
||||
67108864, 0.560, 7.680, 8.006, 6.504, 2.246, 2.419, 2.224, 2.452,, 2.224, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 8, 8, 8, 3, 0, 33408, 1198881
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 10.215, 8.553, 9.697,, 8.553, Multiword
|
||||
8, 4.695, 4.000, 4.049,, 4.000, Multiword
|
||||
16, 3.405, 3.069, 3.026,, 3.026, CRC32C
|
||||
32, 2.780, 2.596, 2.391,, 2.391, CRC32C
|
||||
64, 2.511, 2.191, 2.115,, 2.115, CRC32C
|
||||
128, 2.314, 1.920, 2.143,, 1.920, Multiword
|
||||
256, 2.248, 1.834, 2.062,, 1.834, Multiword
|
||||
512, 2.226, 1.771, 2.398,, 1.771, Multiword
|
||||
1024, 2.212, 1.742, 2.182,, 1.742, Multiword
|
||||
2048, 2.210, 1.744, 2.176,, 1.744, Multiword
|
||||
4096, 2.206, 1.740, 2.248,, 1.740, Multiword
|
||||
8192, 2.198, 1.741, 2.240,, 1.741, Multiword
|
||||
16384, 2.166, 1.746, 2.248,, 1.746, Multiword
|
||||
32768, 2.193, 1.751, 2.253,, 1.751, Multiword
|
||||
65536, 2.172, 1.752, 2.257,, 1.752, Multiword
|
||||
131072, 2.163, 1.751, 2.259,, 1.751, Multiword
|
||||
262144, 2.146, 1.751, 2.257,, 1.751, Multiword
|
||||
524288, 2.137, 1.750, 2.259,, 1.750, Multiword
|
||||
1048576, 2.157, 1.752, 2.282,, 1.752, Multiword
|
||||
2097152, 2.156, 1.776, 2.285,, 1.776, Multiword
|
||||
4194304, 2.162, 1.777, 2.299,, 1.777, Multiword
|
||||
8388608, 2.289, 1.894, 2.443,, 1.894, Multiword
|
||||
16777216, 2.296, 1.905, 2.450,, 1.905, Multiword
|
||||
33554432, 2.303, 1.912, 2.451,, 1.912, Multiword
|
||||
67108864, 2.305, 1.918, 2.456,, 1.918, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 4, 4, 4, 4, 0, 8544, 1181124
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 3.251, 6.189, 7.038, 6.147, 5.251, 7.910, 6.512, 9.450,, 5.251, Word
|
||||
8, 1.875, 6.137, 6.613, 5.604, 3.752, 4.906, 4.173, 4.211,, 3.752, Word
|
||||
16, 1.000, 6.751, 7.043, 5.518, 3.108, 3.782, 3.513, 3.053,, 3.053, CRC32C
|
||||
32, 0.594, 7.070, 7.388, 5.817, 2.956, 3.415, 2.516, 2.417,, 2.417, CRC32C
|
||||
64, 0.412, 7.220, 7.487, 6.085, 2.860, 3.200, 2.032, 2.144,, 2.032, Multiword
|
||||
128, 0.323, 7.539, 7.543, 6.138, 2.851, 3.112, 1.735, 2.140,, 1.735, Multiword
|
||||
256, 0.287, 7.461, 7.584, 6.173, 2.825, 3.013, 1.678, 2.046,, 1.678, Multiword
|
||||
512, 0.268, 7.436, 7.662, 6.177, 2.804, 3.093, 1.617, 2.380,, 1.617, Multiword
|
||||
1024, 0.260, 7.373, 7.649, 6.181, 2.826, 3.047, 1.595, 2.208,, 1.595, Multiword
|
||||
2048, 0.263, 7.398, 7.636, 6.202, 2.838, 3.010, 1.591, 2.182,, 1.591, Multiword
|
||||
4096, 0.257, 7.431, 7.631, 6.208, 2.853, 2.999, 1.579, 2.235,, 1.579, Multiword
|
||||
8192, 0.253, 7.384, 7.627, 6.187, 2.842, 2.994, 1.571, 2.232,, 1.571, Multiword
|
||||
16384, 0.252, 7.336, 7.629, 6.213, 2.821, 2.990, 1.567, 2.241,, 1.567, Multiword
|
||||
32768, 0.259, 7.343, 7.626, 6.198, 2.806, 2.992, 1.579, 2.257,, 1.579, Multiword
|
||||
65536, 0.308, 7.336, 7.616, 6.194, 2.807, 2.000, 1.581, 2.261,, 1.581, Multiword
|
||||
131072, 0.308, 7.336, 7.609, 6.200, 2.802, 1.990, 1.580, 2.258,, 1.580, Multiword
|
||||
262144, 0.308, 7.378, 7.657, 6.202, 2.814, 1.988, 1.582, 2.259,, 1.582, Multiword
|
||||
524288, 0.309, 7.411, 7.699, 6.265, 2.833, 1.986, 1.580, 2.259,, 1.580, Multiword
|
||||
1048576, 0.309, 7.418, 7.706, 6.287, 2.825, 1.935, 1.583, 2.283,, 1.583, Multiword
|
||||
2097152, 0.312, 7.433, 7.722, 6.300, 2.875, 1.941, 1.596, 2.284,, 1.596, Multiword
|
||||
4194304, 0.312, 7.460, 7.757, 6.323, 2.880, 1.944, 1.602, 2.295,, 1.602, Multiword
|
||||
8388608, 0.546, 7.694, 7.967, 6.518, 3.021, 2.070, 1.715, 2.435,, 1.715, Multiword
|
||||
16777216, 0.558, 7.687, 7.989, 6.436, 3.030, 2.072, 1.691, 2.442,, 1.691, Multiword
|
||||
33554432, 0.556, 7.696, 8.004, 6.553, 3.049, 2.082, 1.726, 2.455,, 1.726, Multiword
|
||||
67108864, 0.562, 7.690, 7.997, 6.560, 3.048, 2.082, 1.726, 2.455,, 1.726, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
GCC-4.5.0, 64, 32, 4, 4, 4, 3, 0, 8544, 1179927
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 7.577, 6.597, 9.416,, 6.597, Multiword
|
||||
8, 4.887, 4.201, 4.211,, 4.201, Multiword
|
||||
16, 3.647, 3.571, 3.044,, 3.044, CRC32C
|
||||
32, 3.248, 2.563, 2.417,, 2.417, CRC32C
|
||||
64, 3.032, 1.914, 2.151,, 1.914, Multiword
|
||||
128, 2.918, 1.709, 2.139,, 1.709, Multiword
|
||||
256, 2.877, 1.533, 2.066,, 1.533, Multiword
|
||||
512, 2.961, 1.482, 2.380,, 1.482, Multiword
|
||||
1024, 2.871, 1.456, 2.207,, 1.456, Multiword
|
||||
2048, 2.918, 1.433, 2.182,, 1.433, Multiword
|
||||
4096, 2.982, 1.419, 2.233,, 1.419, Multiword
|
||||
8192, 2.897, 1.417, 2.233,, 1.417, Multiword
|
||||
16384, 2.783, 1.410, 2.241,, 1.410, Multiword
|
||||
32768, 2.812, 1.425, 2.257,, 1.425, Multiword
|
||||
65536, 2.333, 1.426, 2.261,, 1.426, Multiword
|
||||
131072, 2.301, 1.426, 2.258,, 1.426, Multiword
|
||||
262144, 2.168, 1.427, 2.260,, 1.427, Multiword
|
||||
524288, 2.100, 1.428, 2.259,, 1.428, Multiword
|
||||
1048576, 2.116, 1.429, 2.283,, 1.429, Multiword
|
||||
2097152, 2.108, 1.442, 2.283,, 1.442, Multiword
|
||||
4194304, 2.114, 1.448, 2.293,, 1.448, Multiword
|
||||
8388608, 2.226, 1.550, 2.436,, 1.550, Multiword
|
||||
16777216, 2.237, 1.564, 2.449,, 1.564, Multiword
|
||||
33554432, 2.248, 1.567, 2.452,, 1.567, Multiword
|
||||
67108864, 2.248, 1.571, 2.454,, 1.571, Multiword
|
||||
|
||||
|
310
crcutil-1.0/doc/data/test-icl-32-1.csv
Normal file
310
crcutil-1.0/doc/data/test-icl-32-1.csv
Normal file
@@ -0,0 +1,310 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 128, 16, 16, 8, 4, 0, 66736, 1475559
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 13.501, 20.001, 21.125, 20.256, 20.001, 21.501, 20.252,, 20.001, Byte
|
||||
8, 7.126, 15.905, 15.813, 15.626, 8.894, 10.001, 8.651,, 8.651, Multiword
|
||||
16, 4.227, 13.690, 13.505, 13.407, 6.555, 7.996, 6.500,, 6.500, Multiword
|
||||
32, 3.391, 12.422, 12.385, 11.860, 5.475, 6.879, 5.432,, 5.432, Multiword
|
||||
64, 1.953, 11.727, 11.766, 11.094, 4.923, 6.386, 5.455,, 4.923, Word
|
||||
128, 1.352, 11.399, 11.477, 10.743, 4.578, 6.166, 4.289,, 4.289, Multiword
|
||||
256, 1.055, 11.200, 11.333, 10.563, 4.413, 6.020, 3.711,, 3.711, Multiword
|
||||
512, 0.907, 11.100, 11.311, 10.469, 4.345, 5.945, 3.524,, 3.524, Multiword
|
||||
1024, 0.832, 11.050, 11.264, 10.422, 4.598, 6.091, 3.470,, 3.470, Multiword
|
||||
2048, 0.795, 11.025, 11.240, 10.399, 4.638, 6.179, 3.451,, 3.451, Multiword
|
||||
4096, 0.781, 11.026, 11.241, 10.387, 4.574, 6.111, 3.403,, 3.403, Multiword
|
||||
8192, 0.770, 11.020, 11.237, 10.385, 4.642, 6.166, 3.366,, 3.366, Multiword
|
||||
16384, 0.764, 11.017, 11.206, 10.381, 4.735, 6.207, 3.369,, 3.369, Multiword
|
||||
32768, 0.769, 11.016, 11.204, 10.379, 4.721, 6.229, 3.373,, 3.373, Multiword
|
||||
65536, 0.766, 11.015, 11.203, 10.378, 4.679, 5.611, 3.365,, 3.365, Multiword
|
||||
131072, 0.764, 11.018, 11.207, 10.377, 4.716, 5.312, 3.353,, 3.353, Multiword
|
||||
262144, 0.761, 11.079, 11.295, 10.450, 4.721, 5.166, 3.358,, 3.358, Multiword
|
||||
524288, 0.759, 11.160, 11.337, 10.469, 4.771, 5.100, 3.365,, 3.365, Multiword
|
||||
1048576, 0.760, 11.210, 11.370, 10.498, 4.788, 5.016, 3.409,, 3.409, Multiword
|
||||
2097152, 0.764, 11.298, 11.395, 10.515, 4.803, 4.995, 3.412,, 3.412, Multiword
|
||||
4194304, 0.765, 11.381, 11.450, 10.532, 4.831, 5.010, 3.424,, 3.424, Multiword
|
||||
8388608, 0.870, 11.613, 11.670, 10.785, 4.982, 5.124, 3.555,, 3.555, Multiword
|
||||
16777216, 0.864, 11.599, 11.676, 10.789, 4.983, 5.144, 3.562,, 3.562, Multiword
|
||||
33554432, 0.867, 11.635, 11.679, 10.794, 4.991, 5.138, 3.564,, 3.564, Multiword
|
||||
67108864, 0.876, 11.640, 11.680, 10.800, 4.997, 5.157, 3.571,, 3.571, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 128, 16, 16, 8, 3, 0, 66736, 1426932
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 21.564, 23.376,, 21.564, Blockword
|
||||
8, 10.450, 10.350,, 10.350, Multiword
|
||||
16, 8.190, 7.094,, 7.094, Multiword
|
||||
32, 6.992, 5.532,, 5.532, Multiword
|
||||
64, 6.428, 5.610,, 5.610, Multiword
|
||||
128, 6.138, 4.196,, 4.196, Multiword
|
||||
256, 6.016, 3.590,, 3.590, Multiword
|
||||
512, 5.955, 3.277,, 3.277, Multiword
|
||||
1024, 6.111, 3.252,, 3.252, Multiword
|
||||
2048, 6.116, 3.187,, 3.187, Multiword
|
||||
4096, 6.117, 3.120,, 3.120, Multiword
|
||||
8192, 6.145, 3.078,, 3.078, Multiword
|
||||
16384, 6.236, 3.087,, 3.087, Multiword
|
||||
32768, 6.221, 3.075,, 3.075, Multiword
|
||||
65536, 5.648, 3.060,, 3.060, Multiword
|
||||
131072, 5.312, 3.064,, 3.064, Multiword
|
||||
262144, 4.890, 3.063,, 3.063, Multiword
|
||||
524288, 4.694, 3.070,, 3.070, Multiword
|
||||
1048576, 4.668, 3.091,, 3.091, Multiword
|
||||
2097152, 4.627, 3.107,, 3.107, Multiword
|
||||
4194304, 4.628, 3.112,, 3.112, Multiword
|
||||
8388608, 4.692, 3.247,, 3.247, Multiword
|
||||
16777216, 4.752, 3.251,, 3.251, Multiword
|
||||
33554432, 4.766, 3.256,, 3.256, Multiword
|
||||
67108864, 4.760, 3.262,, 3.262, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 128, 16, 16, 4, 4, 0, 33968, 1351098
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 14.001, 20.439, 20.281, 20.251, 13.901, 14.489, 13.754,, 13.754, Multiword
|
||||
8, 7.407, 15.943, 15.885, 15.813, 9.665, 9.842, 9.292,, 9.292, Multiword
|
||||
16, 6.500, 13.439, 13.657, 13.407, 7.129, 7.397, 6.782,, 6.782, Multiword
|
||||
32, 3.688, 12.453, 12.542, 11.860, 5.913, 6.522, 6.905,, 5.913, Word
|
||||
64, 2.047, 11.758, 11.875, 11.094, 5.204, 5.938, 4.812,, 4.812, Multiword
|
||||
128, 1.414, 11.383, 11.602, 10.743, 4.888, 5.654, 3.898,, 3.898, Multiword
|
||||
256, 1.114, 11.192, 11.422, 10.563, 4.751, 5.525, 3.377,, 3.377, Multiword
|
||||
512, 0.964, 11.096, 11.309, 10.469, 4.681, 5.484, 3.090,, 3.090, Multiword
|
||||
1024, 0.934, 11.048, 11.263, 10.422, 4.641, 5.435, 2.964,, 2.964, Multiword
|
||||
2048, 0.860, 11.024, 11.239, 10.399, 4.697, 5.431, 2.922,, 2.922, Multiword
|
||||
4096, 0.838, 11.026, 11.240, 10.387, 4.590, 5.418, 2.892,, 2.892, Multiword
|
||||
8192, 0.829, 11.020, 11.234, 10.385, 4.581, 5.416, 2.881,, 2.881, Multiword
|
||||
16384, 0.823, 11.019, 11.231, 10.381, 4.578, 5.411, 2.880,, 2.880, Multiword
|
||||
32768, 0.877, 11.070, 11.279, 10.379, 4.576, 5.412, 2.879,, 2.879, Multiword
|
||||
65536, 0.876, 11.041, 11.257, 10.377, 4.575, 3.713, 2.876,, 2.876, Multiword
|
||||
131072, 0.823, 11.057, 11.235, 10.377, 4.574, 3.404, 2.874,, 2.874, Multiword
|
||||
262144, 0.860, 11.189, 11.321, 10.434, 4.575, 3.250, 2.880,, 2.880, Multiword
|
||||
524288, 0.850, 11.352, 11.338, 10.467, 4.629, 3.172, 2.875,, 2.875, Multiword
|
||||
1048576, 0.858, 11.466, 11.382, 10.491, 4.670, 3.009, 2.899,, 2.899, Multiword
|
||||
2097152, 0.835, 11.500, 11.396, 10.511, 4.713, 3.004, 2.915,, 2.915, Multiword
|
||||
4194304, 0.840, 11.567, 11.440, 10.561, 4.760, 3.001, 2.921,, 2.921, Multiword
|
||||
8388608, 0.923, 11.810, 11.682, 10.762, 4.906, 3.120, 3.060,, 3.060, Multiword
|
||||
16777216, 0.930, 11.815, 11.687, 10.755, 4.933, 3.127, 3.063,, 3.063, Multiword
|
||||
33554432, 0.936, 11.829, 11.659, 10.797, 4.949, 3.127, 3.063,, 3.063, Multiword
|
||||
67108864, 0.937, 11.826, 11.692, 10.794, 4.951, 3.126, 3.072,, 3.072, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 128, 16, 16, 4, 3, 0, 33968, 1333206
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 14.207, 16.002,, 14.207, Blockword
|
||||
8, 9.566, 10.378,, 9.566, Blockword
|
||||
16, 7.651, 7.439,, 7.439, Multiword
|
||||
32, 6.505, 7.656,, 6.505, Blockword
|
||||
64, 5.927, 4.938,, 4.938, Multiword
|
||||
128, 5.655, 3.875,, 3.875, Multiword
|
||||
256, 5.498, 3.258,, 3.258, Multiword
|
||||
512, 5.469, 2.963,, 2.963, Multiword
|
||||
1024, 5.432, 2.821,, 2.821, Multiword
|
||||
2048, 5.443, 2.754,, 2.754, Multiword
|
||||
4096, 5.425, 2.710,, 2.710, Multiword
|
||||
8192, 5.414, 2.694,, 2.694, Multiword
|
||||
16384, 5.415, 2.697,, 2.697, Multiword
|
||||
32768, 5.412, 2.704,, 2.704, Multiword
|
||||
65536, 4.269, 2.703,, 2.703, Multiword
|
||||
131072, 3.958, 2.703,, 2.703, Multiword
|
||||
262144, 3.361, 2.702,, 2.702, Multiword
|
||||
524288, 3.063, 2.702,, 2.702, Multiword
|
||||
1048576, 3.044, 2.727,, 2.727, Multiword
|
||||
2097152, 2.981, 2.731,, 2.731, Multiword
|
||||
4194304, 2.981, 2.742,, 2.742, Multiword
|
||||
8388608, 3.086, 2.872,, 2.872, Multiword
|
||||
16777216, 3.086, 2.887,, 2.887, Multiword
|
||||
33554432, 3.086, 2.885,, 2.885, Multiword
|
||||
67108864, 3.086, 2.816,, 2.816, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 64, 8, 8, 8, 4, 0, 33368, 124902
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.737, 11.498, 11.841, 15.248, 15.121, 14.716, 11.178,, 11.178, Multiword
|
||||
8, 4.773, 9.290, 9.418, 10.346, 8.089, 8.251, 9.177,, 8.089, Word
|
||||
16, 2.658, 7.938, 8.092, 8.609, 5.974, 6.171, 5.625,, 5.625, Multiword
|
||||
32, 1.305, 7.687, 7.813, 7.740, 4.819, 5.059, 3.813,, 3.813, Multiword
|
||||
64, 0.771, 7.223, 7.436, 7.342, 4.426, 4.736, 2.573,, 2.573, Multiword
|
||||
128, 0.519, 6.862, 7.397, 7.186, 4.134, 4.485, 1.868,, 1.868, Multiword
|
||||
256, 0.396, 6.730, 7.242, 7.013, 4.033, 4.334, 1.540,, 1.540, Multiword
|
||||
512, 0.324, 6.671, 7.405, 7.002, 3.939, 4.328, 1.427,, 1.427, Multiword
|
||||
1024, 0.293, 6.627, 7.365, 6.933, 3.918, 4.291, 1.338,, 1.338, Multiword
|
||||
2048, 0.279, 6.552, 7.341, 6.894, 3.915, 4.261, 1.293,, 1.293, Multiword
|
||||
4096, 0.276, 6.543, 7.329, 6.917, 3.903, 4.251, 1.275,, 1.275, Multiword
|
||||
8192, 0.270, 6.541, 7.329, 6.914, 3.894, 4.250, 1.272,, 1.272, Multiword
|
||||
16384, 0.267, 6.539, 6.739, 6.910, 3.895, 4.252, 1.281,, 1.281, Multiword
|
||||
32768, 0.274, 6.652, 7.209, 6.909, 3.894, 4.259, 1.288,, 1.288, Multiword
|
||||
65536, 0.303, 6.485, 7.237, 6.908, 3.893, 5.376, 1.289,, 1.289, Multiword
|
||||
131072, 0.303, 6.428, 7.176, 6.896, 3.894, 5.338, 1.288,, 1.288, Multiword
|
||||
262144, 0.303, 6.538, 7.152, 6.944, 3.899, 5.321, 1.287,, 1.287, Multiword
|
||||
524288, 0.302, 6.825, 7.214, 6.959, 3.927, 5.348, 1.287,, 1.287, Multiword
|
||||
1048576, 0.303, 7.164, 7.324, 6.974, 3.932, 5.435, 1.288,, 1.288, Multiword
|
||||
2097152, 0.305, 7.411, 7.376, 7.030, 3.952, 5.440, 1.301,, 1.301, Multiword
|
||||
4194304, 0.305, 7.507, 7.486, 7.085, 3.964, 5.440, 1.304,, 1.304, Multiword
|
||||
8388608, 0.547, 7.563, 7.691, 7.270, 4.116, 5.607, 1.408,, 1.408, Multiword
|
||||
16777216, 0.551, 7.625, 7.658, 7.278, 4.130, 5.615, 1.412,, 1.412, Multiword
|
||||
33554432, 0.549, 7.732, 7.718, 7.287, 4.129, 5.624, 1.415,, 1.415, Multiword
|
||||
67108864, 0.553, 7.748, 7.725, 7.285, 4.139, 5.628, 1.419,, 1.419, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 64, 8, 8, 8, 3, 0, 33368, 134622
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 14.512, 14.751,, 14.512, Blockword
|
||||
8, 8.174, 7.805,, 7.805, Multiword
|
||||
16, 6.313, 5.938,, 5.938, Multiword
|
||||
32, 5.261, 5.135,, 5.135, Multiword
|
||||
64, 4.588, 5.781,, 4.588, Blockword
|
||||
128, 4.493, 5.602,, 4.493, Blockword
|
||||
256, 4.378, 5.410,, 4.378, Blockword
|
||||
512, 4.332, 5.393,, 4.332, Blockword
|
||||
1024, 4.291, 5.316,, 4.291, Blockword
|
||||
2048, 4.255, 5.310,, 4.255, Blockword
|
||||
4096, 4.226, 5.301,, 4.226, Blockword
|
||||
8192, 4.243, 5.300,, 4.243, Blockword
|
||||
16384, 4.248, 5.312,, 4.248, Blockword
|
||||
32768, 4.250, 5.308,, 4.250, Blockword
|
||||
65536, 5.039, 5.322,, 5.039, Blockword
|
||||
131072, 5.001, 5.324,, 5.001, Blockword
|
||||
262144, 5.161, 5.324,, 5.161, Blockword
|
||||
524288, 5.286, 5.365,, 5.286, Blockword
|
||||
1048576, 5.290, 5.382,, 5.290, Blockword
|
||||
2097152, 5.326, 5.387,, 5.326, Blockword
|
||||
4194304, 5.334, 5.412,, 5.334, Blockword
|
||||
8388608, 5.500, 5.590,, 5.500, Blockword
|
||||
16777216, 5.517, 5.601,, 5.517, Blockword
|
||||
33554432, 5.524, 5.606,, 5.524, Blockword
|
||||
67108864, 5.529, 5.604,, 5.529, Blockword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 32, 8, 8, 8, 4, 0, 33368, 1051641
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 9.317, 11.407, 11.414, 15.212, 14.841, 14.753, 11.312, 8.790,, 8.790, CRC32C
|
||||
8, 4.770, 9.321, 9.428, 10.464, 8.112, 8.251, 9.389, 5.946,, 5.946, CRC32C
|
||||
16, 2.659, 7.942, 8.209, 8.439, 5.970, 6.283, 5.563, 3.698,, 3.698, CRC32C
|
||||
32, 1.313, 7.445, 7.811, 7.728, 4.835, 5.225, 3.813, 3.319,, 3.319, CRC32C
|
||||
64, 0.777, 7.255, 7.437, 7.307, 4.415, 4.720, 2.563, 3.298,, 2.563, Multiword
|
||||
128, 0.517, 6.902, 7.371, 7.169, 4.130, 4.509, 1.891, 3.210,, 1.891, Multiword
|
||||
256, 0.373, 6.849, 7.221, 7.013, 4.018, 4.351, 1.584, 3.060,, 1.584, Multiword
|
||||
512, 0.324, 6.682, 7.403, 7.003, 3.947, 4.328, 1.416, 2.012,, 1.416, Multiword
|
||||
1024, 0.294, 6.587, 7.367, 6.930, 3.924, 4.280, 1.330, 1.962,, 1.330, Multiword
|
||||
2048, 0.280, 6.559, 7.342, 6.894, 3.912, 4.261, 1.292, 1.936,, 1.292, Multiword
|
||||
4096, 0.276, 6.532, 7.347, 6.921, 3.905, 4.248, 1.281, 1.927,, 1.281, Multiword
|
||||
8192, 0.270, 6.573, 7.286, 6.908, 3.893, 4.256, 1.269, 1.923,, 1.269, Multiword
|
||||
16384, 0.268, 6.557, 6.739, 6.909, 3.895, 4.253, 1.281, 1.927,, 1.281, Multiword
|
||||
32768, 0.274, 6.505, 7.311, 6.910, 3.897, 4.258, 1.288, 1.936,, 1.288, Multiword
|
||||
65536, 0.303, 6.485, 7.262, 6.898, 3.900, 5.303, 1.288, 1.934,, 1.288, Multiword
|
||||
131072, 0.303, 6.392, 7.202, 6.902, 3.899, 5.294, 1.287, 1.934,, 1.287, Multiword
|
||||
262144, 0.303, 6.626, 7.086, 6.935, 3.899, 5.284, 1.287, 1.934,, 1.287, Multiword
|
||||
524288, 0.302, 6.754, 7.222, 6.985, 3.928, 5.326, 1.287, 1.936,, 1.287, Multiword
|
||||
1048576, 0.303, 7.167, 7.274, 7.002, 3.935, 5.403, 1.288, 1.944,, 1.288, Multiword
|
||||
2097152, 0.305, 7.239, 7.400, 7.031, 3.954, 5.410, 1.301, 1.960,, 1.301, Multiword
|
||||
4194304, 0.305, 7.451, 7.490, 7.068, 3.962, 5.417, 1.301, 1.963,, 1.301, Multiword
|
||||
8388608, 0.541, 7.630, 7.695, 7.281, 4.123, 5.575, 1.409, 2.081,, 1.409, Multiword
|
||||
16777216, 0.552, 7.628, 7.674, 7.288, 4.132, 5.585, 1.414, 2.092,, 1.414, Multiword
|
||||
33554432, 0.553, 7.651, 7.723, 7.280, 4.137, 5.598, 1.417, 2.096,, 1.417, Multiword
|
||||
67108864, 0.553, 7.719, 7.725, 7.303, 4.115, 5.596, 1.419, 2.098,, 1.419, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 32, 8, 8, 8, 3, 0, 33368, 1049103
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 14.206, 13.817, 8.828,, 8.828, CRC32C
|
||||
8, 8.207, 7.659, 6.026,, 6.026, CRC32C
|
||||
16, 6.243, 5.943, 4.032,, 4.032, CRC32C
|
||||
32, 5.252, 5.167, 3.485,, 3.485, CRC32C
|
||||
64, 4.611, 5.719, 3.448,, 3.448, CRC32C
|
||||
128, 4.456, 5.578, 3.166,, 3.166, CRC32C
|
||||
256, 4.379, 5.399, 3.060,, 3.060, CRC32C
|
||||
512, 4.289, 5.369, 2.020,, 2.020, CRC32C
|
||||
1024, 4.289, 5.297, 1.959,, 1.959, CRC32C
|
||||
2048, 4.282, 5.279, 1.935,, 1.935, CRC32C
|
||||
4096, 4.262, 5.305, 1.922,, 1.922, CRC32C
|
||||
8192, 4.241, 5.293, 1.924,, 1.924, CRC32C
|
||||
16384, 4.249, 5.304, 1.925,, 1.925, CRC32C
|
||||
32768, 4.258, 5.320, 1.935,, 1.935, CRC32C
|
||||
65536, 4.977, 5.320, 1.935,, 1.935, CRC32C
|
||||
131072, 4.963, 5.322, 1.934,, 1.934, CRC32C
|
||||
262144, 5.131, 5.323, 1.936,, 1.936, CRC32C
|
||||
524288, 5.239, 5.369, 1.936,, 1.936, CRC32C
|
||||
1048576, 5.272, 5.382, 1.950,, 1.950, CRC32C
|
||||
2097152, 5.296, 5.389, 1.956,, 1.956, CRC32C
|
||||
4194304, 5.309, 5.410, 1.963,, 1.963, CRC32C
|
||||
8388608, 5.482, 5.591, 2.086,, 2.086, CRC32C
|
||||
16777216, 5.493, 5.598, 2.091,, 2.091, CRC32C
|
||||
33554432, 5.501, 5.601, 2.098,, 2.098, CRC32C
|
||||
67108864, 5.496, 5.608, 2.100,, 2.100, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 32, 4, 4, 4, 4, 0, 8500, 1011924
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 8.781, 8.707, 7.040, 9.954, 8.894, 8.733, 8.001, 8.127,, 7.040, ByteUnrolled
|
||||
8, 4.501, 6.794, 6.636, 7.759, 5.501, 5.752, 5.203, 5.729,, 5.203, Multiword
|
||||
16, 1.992, 7.121, 6.876, 6.846, 4.315, 4.365, 4.106, 3.689,, 3.689, CRC32C
|
||||
32, 1.132, 7.232, 7.216, 6.589, 3.609, 3.686, 4.266, 3.261,, 3.261, CRC32C
|
||||
64, 0.737, 7.393, 7.274, 6.349, 3.275, 3.384, 3.750, 3.407,, 3.275, Word
|
||||
128, 0.516, 7.389, 7.344, 6.340, 3.111, 3.260, 3.551, 3.149,, 3.111, Word
|
||||
256, 0.416, 7.623, 7.385, 6.332, 3.010, 3.158, 3.311, 3.113,, 3.010, Word
|
||||
512, 0.364, 7.534, 7.398, 6.299, 2.963, 3.091, 3.297, 2.015,, 2.015, CRC32C
|
||||
1024, 0.341, 7.494, 7.354, 6.315, 2.948, 3.152, 3.251, 1.951,, 1.951, CRC32C
|
||||
2048, 0.323, 7.475, 7.343, 6.342, 2.976, 3.027, 3.222, 1.942,, 1.942, CRC32C
|
||||
4096, 0.312, 7.466, 7.335, 6.339, 2.965, 3.096, 3.208, 1.928,, 1.928, CRC32C
|
||||
8192, 0.303, 7.460, 7.331, 6.335, 2.963, 3.012, 3.201, 1.925,, 1.925, CRC32C
|
||||
16384, 0.300, 7.467, 7.332, 6.333, 2.960, 3.016, 3.203, 1.930,, 1.930, CRC32C
|
||||
32768, 0.304, 7.529, 7.431, 6.331, 2.959, 3.020, 3.234, 1.933,, 1.933, CRC32C
|
||||
65536, 0.319, 7.494, 7.401, 6.327, 2.954, 3.097, 3.237, 1.934,, 1.934, CRC32C
|
||||
131072, 0.318, 7.484, 7.356, 6.320, 2.944, 3.073, 3.237, 1.932,, 1.932, CRC32C
|
||||
262144, 0.319, 7.498, 7.442, 6.329, 2.943, 3.080, 3.238, 1.935,, 1.935, CRC32C
|
||||
524288, 0.319, 7.586, 7.466, 6.368, 2.942, 3.086, 3.251, 1.936,, 1.936, CRC32C
|
||||
1048576, 0.319, 7.596, 7.472, 6.386, 2.978, 3.110, 3.267, 1.949,, 1.949, CRC32C
|
||||
2097152, 0.321, 7.590, 7.485, 6.403, 2.985, 3.122, 3.284, 1.957,, 1.957, CRC32C
|
||||
4194304, 0.321, 7.647, 7.521, 6.419, 3.013, 3.130, 3.296, 1.966,, 1.966, CRC32C
|
||||
8388608, 0.546, 7.857, 7.726, 6.605, 3.138, 3.264, 3.440, 2.087,, 2.087, CRC32C
|
||||
16777216, 0.556, 7.867, 7.736, 6.614, 3.151, 3.271, 3.447, 2.093,, 2.093, CRC32C
|
||||
33554432, 0.559, 7.872, 7.737, 6.614, 3.152, 3.278, 3.451, 2.082,, 2.082, CRC32C
|
||||
67108864, 0.560, 7.878, 7.715, 6.626, 3.158, 3.276, 3.454, 2.098,, 2.098, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 32, 32, 4, 4, 4, 3, 0, 8500, 1008315
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 10.252, 8.126, 8.142,, 8.126, Multiword
|
||||
8, 7.196, 5.376, 5.710,, 5.376, Multiword
|
||||
16, 4.746, 4.063, 3.782,, 3.782, CRC32C
|
||||
32, 3.784, 4.750, 3.261,, 3.261, CRC32C
|
||||
64, 3.521, 3.938, 3.362,, 3.362, CRC32C
|
||||
128, 3.313, 3.448, 3.149,, 3.149, CRC32C
|
||||
256, 3.173, 3.223, 3.110,, 3.110, CRC32C
|
||||
512, 3.190, 3.112, 2.010,, 2.010, CRC32C
|
||||
1024, 3.156, 3.068, 1.951,, 1.951, CRC32C
|
||||
2048, 3.071, 3.038, 1.946,, 1.946, CRC32C
|
||||
4096, 3.088, 3.030, 1.927,, 1.927, CRC32C
|
||||
8192, 3.076, 3.023, 1.924,, 1.924, CRC32C
|
||||
16384, 3.013, 3.018, 1.926,, 1.926, CRC32C
|
||||
32768, 3.003, 3.034, 1.934,, 1.934, CRC32C
|
||||
65536, 2.905, 3.023, 1.933,, 1.933, CRC32C
|
||||
131072, 2.890, 2.999, 1.934,, 1.934, CRC32C
|
||||
262144, 2.835, 3.003, 1.934,, 1.934, CRC32C
|
||||
524288, 2.808, 3.002, 1.936,, 1.936, CRC32C
|
||||
1048576, 2.828, 3.040, 1.945,, 1.945, CRC32C
|
||||
2097152, 2.831, 3.060, 1.957,, 1.957, CRC32C
|
||||
4194304, 2.841, 3.067, 1.960,, 1.960, CRC32C
|
||||
8388608, 2.970, 3.207, 2.086,, 2.086, CRC32C
|
||||
16777216, 2.982, 3.190, 2.088,, 2.088, CRC32C
|
||||
33554432, 2.984, 3.215, 2.099,, 2.099, CRC32C
|
||||
67108864, 2.986, 3.224, 2.098,, 2.098, CRC32C
|
||||
|
||||
|
310
crcutil-1.0/doc/data/test-icl-64-1.csv
Normal file
310
crcutil-1.0/doc/data/test-icl-64-1.csv
Normal file
@@ -0,0 +1,310 @@
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 128, 16, 16, 8, 4, 0, 66736, 1101915
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 5.501, 10.343, 10.361, 11.685, 11.734, 13.631, 12.491,, 10.343, Byte
|
||||
8, 2.546, 10.376, 10.265, 10.678, 4.629, 6.750, 5.171,, 4.629, Word
|
||||
16, 1.613, 10.754, 10.566, 9.938, 3.852, 5.121, 4.183,, 3.852, Word
|
||||
32, 1.173, 10.938, 10.993, 10.313, 3.633, 4.656, 3.474,, 3.474, Multiword
|
||||
64, 1.097, 11.016, 11.094, 10.516, 3.396, 4.332, 3.089,, 3.089, Multiword
|
||||
128, 1.040, 11.227, 11.141, 10.375, 3.289, 4.228, 2.521,, 2.521, Multiword
|
||||
256, 1.016, 11.114, 11.164, 10.411, 3.240, 4.156, 2.205,, 2.205, Multiword
|
||||
512, 0.998, 11.058, 11.253, 10.401, 3.199, 4.117, 2.152,, 2.152, Multiword
|
||||
1024, 0.991, 11.030, 11.221, 10.401, 3.380, 4.330, 2.167,, 2.167, Multiword
|
||||
2048, 0.989, 11.015, 11.206, 10.396, 3.609, 4.458, 2.125,, 2.125, Multiword
|
||||
4096, 0.992, 11.024, 11.213, 10.394, 3.559, 4.362, 2.073,, 2.073, Multiword
|
||||
8192, 0.988, 11.026, 11.206, 10.396, 3.597, 4.437, 2.052,, 2.052, Multiword
|
||||
16384, 0.986, 11.017, 11.204, 10.394, 3.674, 4.480, 2.060,, 2.060, Multiword
|
||||
32768, 0.986, 11.016, 11.204, 10.393, 3.711, 4.503, 2.048,, 2.048, Multiword
|
||||
65536, 0.985, 11.016, 11.205, 10.392, 3.664, 2.980, 2.048,, 2.048, Multiword
|
||||
131072, 0.985, 11.109, 11.241, 10.392, 3.725, 2.775, 2.049,, 2.049, Multiword
|
||||
262144, 0.985, 11.178, 11.363, 10.527, 3.736, 2.664, 2.053,, 2.053, Multiword
|
||||
524288, 0.984, 11.231, 11.417, 10.554, 3.799, 2.610, 2.055,, 2.055, Multiword
|
||||
1048576, 0.984, 11.242, 11.431, 10.590, 3.783, 2.488, 2.085,, 2.085, Multiword
|
||||
2097152, 0.996, 11.255, 11.458, 10.616, 3.833, 2.489, 2.099,, 2.099, Multiword
|
||||
4194304, 1.003, 11.281, 11.473, 10.628, 3.844, 2.481, 2.101,, 2.101, Multiword
|
||||
8388608, 1.090, 11.492, 11.692, 10.847, 3.953, 2.588, 2.201,, 2.201, Multiword
|
||||
16777216, 1.090, 11.511, 11.718, 10.875, 3.965, 2.600, 2.210,, 2.210, Multiword
|
||||
33554432, 1.093, 11.518, 11.717, 10.880, 3.969, 2.595, 2.200,, 2.200, Multiword
|
||||
67108864, 1.096, 11.525, 11.727, 10.882, 3.983, 2.588, 2.215,, 2.215, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 128, 16, 16, 8, 3, 0, 66736, 1064394
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 13.945, 12.789,, 12.789, Multiword
|
||||
8, 6.684, 5.157,, 5.157, Multiword
|
||||
16, 5.225, 4.195,, 4.195, Multiword
|
||||
32, 4.317, 3.663,, 3.663, Multiword
|
||||
64, 4.368, 3.194,, 3.194, Multiword
|
||||
128, 4.239, 2.533,, 2.533, Multiword
|
||||
256, 4.157, 2.310,, 2.310, Multiword
|
||||
512, 4.131, 2.194,, 2.194, Multiword
|
||||
1024, 4.310, 2.280,, 2.280, Multiword
|
||||
2048, 4.448, 2.273,, 2.273, Multiword
|
||||
4096, 4.395, 2.224,, 2.224, Multiword
|
||||
8192, 4.436, 2.186,, 2.186, Multiword
|
||||
16384, 4.466, 2.196,, 2.196, Multiword
|
||||
32768, 4.502, 2.192,, 2.192, Multiword
|
||||
65536, 3.565, 2.182,, 2.182, Multiword
|
||||
131072, 3.358, 2.181,, 2.181, Multiword
|
||||
262144, 2.919, 2.187,, 2.187, Multiword
|
||||
524288, 2.688, 2.189,, 2.189, Multiword
|
||||
1048576, 2.693, 2.224,, 2.224, Multiword
|
||||
2097152, 2.651, 2.224,, 2.224, Multiword
|
||||
4194304, 2.653, 2.239,, 2.239, Multiword
|
||||
8388608, 2.751, 2.351,, 2.351, Multiword
|
||||
16777216, 2.757, 2.358,, 2.358, Multiword
|
||||
33554432, 2.751, 2.351,, 2.351, Multiword
|
||||
67108864, 2.756, 2.362,, 2.362, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 128, 16, 16, 4, 4, 0, 33968, 999252
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.589, 10.343, 10.361, 11.697, 7.809, 10.250, 8.532,, 7.809, Word
|
||||
8, 3.751, 10.365, 10.313, 10.678, 5.839, 7.192, 6.306,, 5.839, Word
|
||||
16, 1.716, 10.732, 10.564, 9.938, 5.252, 6.126, 5.434,, 5.252, Word
|
||||
32, 1.313, 10.938, 10.993, 10.315, 4.737, 5.630, 4.157,, 4.157, Multiword
|
||||
64, 1.196, 11.016, 11.094, 10.516, 4.642, 5.342, 3.119,, 3.119, Multiword
|
||||
128, 1.133, 11.227, 11.141, 10.375, 4.547, 5.248, 2.643,, 2.643, Multiword
|
||||
256, 1.114, 11.114, 11.164, 10.411, 4.644, 5.199, 2.360,, 2.360, Multiword
|
||||
512, 1.104, 11.057, 11.253, 10.401, 4.737, 5.256, 2.244,, 2.244, Multiword
|
||||
1024, 1.098, 11.030, 11.221, 10.401, 4.658, 5.206, 2.180,, 2.180, Multiword
|
||||
2048, 1.105, 11.017, 11.206, 10.396, 4.631, 5.196, 2.150,, 2.150, Multiword
|
||||
4096, 1.100, 11.027, 11.212, 10.394, 4.604, 5.192, 2.135,, 2.135, Multiword
|
||||
8192, 1.097, 11.023, 11.206, 10.396, 4.593, 5.186, 2.130,, 2.130, Multiword
|
||||
16384, 1.095, 11.017, 11.204, 10.394, 4.588, 5.195, 2.135,, 2.135, Multiword
|
||||
32768, 1.095, 11.016, 11.203, 10.393, 4.579, 5.199, 2.137,, 2.137, Multiword
|
||||
65536, 1.094, 11.016, 11.203, 10.392, 4.577, 3.231, 2.139,, 2.139, Multiword
|
||||
131072, 1.094, 11.112, 11.260, 10.392, 4.579, 3.025, 2.134,, 2.134, Multiword
|
||||
262144, 1.093, 11.202, 11.370, 10.501, 4.580, 2.916, 2.138,, 2.138, Multiword
|
||||
524288, 1.093, 11.226, 11.418, 10.565, 4.687, 2.884, 2.139,, 2.139, Multiword
|
||||
1048576, 1.093, 11.256, 11.431, 10.584, 4.704, 2.712, 2.169,, 2.169, Multiword
|
||||
2097152, 1.107, 11.253, 11.458, 10.603, 4.724, 2.717, 2.180,, 2.180, Multiword
|
||||
4194304, 1.112, 11.262, 11.475, 10.638, 4.733, 2.713, 2.184,, 2.184, Multiword
|
||||
8388608, 1.201, 11.480, 11.691, 10.847, 4.886, 2.818, 2.295,, 2.295, Multiword
|
||||
16777216, 1.203, 11.507, 11.714, 10.864, 4.900, 2.831, 2.295,, 2.295, Multiword
|
||||
33554432, 1.208, 11.518, 11.711, 10.872, 4.911, 2.830, 2.301,, 2.301, Multiword
|
||||
67108864, 1.206, 11.508, 11.730, 10.865, 4.918, 2.829, 2.308,, 2.308, Multiword
|
||||
|
||||
ClassTitle, CRC-128-sse2/sse2/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 128, 16, 16, 4, 3, 0, 33968, 983592
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 10.126, 8.425,, 8.425, Multiword
|
||||
8, 7.204, 6.224,, 6.224, Multiword
|
||||
16, 6.082, 5.429,, 5.429, Multiword
|
||||
32, 5.567, 4.351,, 4.351, Multiword
|
||||
64, 5.370, 3.175,, 3.175, Multiword
|
||||
128, 5.254, 2.844,, 2.844, Multiword
|
||||
256, 5.207, 2.520,, 2.520, Multiword
|
||||
512, 5.242, 2.416,, 2.416, Multiword
|
||||
1024, 5.192, 2.368,, 2.368, Multiword
|
||||
2048, 5.203, 2.331,, 2.331, Multiword
|
||||
4096, 5.203, 2.313,, 2.313, Multiword
|
||||
8192, 5.198, 2.312,, 2.312, Multiword
|
||||
16384, 5.195, 2.313,, 2.313, Multiword
|
||||
32768, 5.199, 2.319,, 2.319, Multiword
|
||||
65536, 3.917, 2.319,, 2.319, Multiword
|
||||
131072, 3.703, 2.319,, 2.319, Multiword
|
||||
262144, 3.178, 2.319,, 2.319, Multiword
|
||||
524288, 2.915, 2.321,, 2.321, Multiword
|
||||
1048576, 2.921, 2.355,, 2.355, Multiword
|
||||
2097152, 2.864, 2.363,, 2.363, Multiword
|
||||
4194304, 2.862, 2.372,, 2.372, Multiword
|
||||
8388608, 2.959, 2.482,, 2.482, Multiword
|
||||
16777216, 2.968, 2.490,, 2.490, Multiword
|
||||
33554432, 2.903, 2.500,, 2.500, Multiword
|
||||
67108864, 2.949, 2.496,, 2.496, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 64, 8, 8, 8, 4, 0, 33384, 79965
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 6.502, 6.521, 6.124, 8.293, 8.280, 9.355, 8.799,, 6.124, ByteUnrolled
|
||||
8, 2.876, 6.187, 6.135, 5.969, 3.788, 4.341, 4.115,, 3.788, Word
|
||||
16, 1.501, 6.755, 6.801, 6.418, 3.015, 3.283, 3.188,, 3.015, Word
|
||||
32, 0.856, 7.126, 7.130, 6.376, 2.535, 2.799, 2.791,, 2.535, Word
|
||||
64, 0.528, 7.312, 7.251, 6.216, 2.313, 2.513, 2.225,, 2.225, Multiword
|
||||
128, 0.377, 7.407, 7.364, 6.154, 2.196, 2.399, 1.836,, 1.836, Multiword
|
||||
256, 0.321, 7.578, 7.402, 6.180, 2.171, 2.328, 1.649,, 1.649, Multiword
|
||||
512, 0.290, 7.530, 7.533, 6.172, 2.130, 2.287, 1.536,, 1.536, Multiword
|
||||
1024, 0.278, 7.525, 7.515, 6.199, 2.130, 2.316, 1.494,, 1.494, Multiword
|
||||
2048, 0.270, 7.536, 7.508, 6.195, 2.124, 2.290, 1.465,, 1.465, Multiword
|
||||
4096, 0.274, 7.535, 7.518, 6.206, 2.124, 2.281, 1.454,, 1.454, Multiword
|
||||
8192, 0.271, 7.407, 7.521, 6.202, 2.118, 2.276, 1.458,, 1.458, Multiword
|
||||
16384, 0.271, 7.492, 7.515, 6.200, 2.118, 2.278, 1.453,, 1.453, Multiword
|
||||
32768, 0.274, 7.436, 7.409, 6.199, 2.114, 2.280, 1.456,, 1.456, Multiword
|
||||
65536, 0.303, 7.341, 7.431, 6.201, 2.108, 1.640, 1.454,, 1.454, Multiword
|
||||
131072, 0.303, 7.345, 7.408, 6.201, 2.115, 1.617, 1.453,, 1.453, Multiword
|
||||
262144, 0.302, 7.605, 7.546, 6.228, 2.123, 1.605, 1.455,, 1.455, Multiword
|
||||
524288, 0.302, 7.639, 7.570, 6.283, 2.124, 1.599, 1.455,, 1.455, Multiword
|
||||
1048576, 0.302, 7.670, 7.607, 6.312, 2.155, 1.566, 1.467,, 1.467, Multiword
|
||||
2097152, 0.305, 7.676, 7.609, 6.331, 2.163, 1.578, 1.480,, 1.480, Multiword
|
||||
4194304, 0.305, 7.689, 7.618, 6.335, 2.169, 1.584, 1.485,, 1.485, Multiword
|
||||
8388608, 0.549, 7.900, 7.808, 6.514, 2.285, 1.687, 1.584,, 1.584, Multiword
|
||||
16777216, 0.549, 7.840, 7.840, 6.524, 2.294, 1.697, 1.591,, 1.591, Multiword
|
||||
33554432, 0.554, 7.918, 7.838, 6.518, 2.305, 1.700, 1.591,, 1.591, Multiword
|
||||
67108864, 0.552, 7.905, 7.845, 6.539, 2.304, 1.703, 1.598,, 1.598, Multiword
|
||||
|
||||
ClassTitle, CRC-64-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 64, 8, 8, 8, 3, 0, 33384, 85698
|
||||
|
||||
, Blockword, Multiword,, BestTime, BestMethod
|
||||
4, 9.267, 9.134,, 9.134, Multiword
|
||||
8, 4.326, 4.126,, 4.126, Multiword
|
||||
16, 3.251, 3.195,, 3.195, Multiword
|
||||
32, 2.811, 2.717,, 2.717, Multiword
|
||||
64, 2.540, 2.282,, 2.282, Multiword
|
||||
128, 2.385, 1.821,, 1.821, Multiword
|
||||
256, 2.354, 1.650,, 1.650, Multiword
|
||||
512, 2.323, 1.518,, 1.518, Multiword
|
||||
1024, 2.328, 1.475,, 1.475, Multiword
|
||||
2048, 2.303, 1.452,, 1.452, Multiword
|
||||
4096, 2.297, 1.438,, 1.438, Multiword
|
||||
8192, 2.292, 1.432,, 1.432, Multiword
|
||||
16384, 2.296, 1.441,, 1.441, Multiword
|
||||
32768, 2.298, 1.445,, 1.445, Multiword
|
||||
65536, 1.822, 1.446,, 1.446, Multiword
|
||||
131072, 1.796, 1.445,, 1.445, Multiword
|
||||
262144, 1.660, 1.445,, 1.445, Multiword
|
||||
524288, 1.589, 1.445,, 1.445, Multiword
|
||||
1048576, 1.598, 1.452,, 1.452, Multiword
|
||||
2097152, 1.594, 1.471,, 1.471, Multiword
|
||||
4194304, 1.601, 1.477,, 1.477, Multiword
|
||||
8388608, 1.697, 1.588,, 1.588, Multiword
|
||||
16777216, 1.703, 1.597,, 1.597, Multiword
|
||||
33554432, 1.703, 1.600,, 1.600, Multiword
|
||||
67108864, 1.707, 1.603,, 1.603, Multiword
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 32, 8, 8, 8, 4, 0, 33384, 1118907
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 6.502, 6.520, 6.126, 8.290, 8.280, 9.413, 9.084, 8.001,, 6.126, ByteUnrolled
|
||||
8, 2.876, 6.191, 6.130, 6.304, 3.788, 4.550, 4.376, 3.751,, 3.751, CRC32C
|
||||
16, 1.502, 6.777, 6.815, 6.418, 3.004, 3.447, 3.188, 2.876,, 2.876, CRC32C
|
||||
32, 0.851, 7.138, 7.128, 6.376, 2.602, 2.860, 2.805, 2.314,, 2.314, CRC32C
|
||||
64, 0.516, 7.280, 7.250, 6.214, 2.313, 2.515, 2.224, 2.235,, 2.224, Multiword
|
||||
128, 0.381, 7.407, 7.363, 6.154, 2.223, 2.399, 1.811, 2.313,, 1.811, Multiword
|
||||
256, 0.321, 7.578, 7.403, 6.180, 2.156, 2.310, 1.630, 2.243,, 1.630, Multiword
|
||||
512, 0.291, 7.530, 7.533, 6.171, 2.131, 2.291, 1.545, 1.532,, 1.532, CRC32C
|
||||
1024, 0.274, 7.524, 7.515, 6.204, 2.133, 2.317, 1.492, 1.467,, 1.467, CRC32C
|
||||
2048, 0.270, 7.534, 7.508, 6.195, 2.124, 2.289, 1.471, 1.453,, 1.453, CRC32C
|
||||
4096, 0.276, 7.536, 7.514, 6.206, 2.125, 2.281, 1.458, 1.417,, 1.417, CRC32C
|
||||
8192, 0.271, 7.408, 7.517, 6.202, 2.118, 2.276, 1.448, 1.416,, 1.416, CRC32C
|
||||
16384, 0.270, 7.489, 7.516, 6.200, 2.119, 2.275, 1.453, 1.423,, 1.423, CRC32C
|
||||
32768, 0.273, 7.436, 7.409, 6.199, 2.114, 2.278, 1.453, 1.317,, 1.317, CRC32C
|
||||
65536, 0.303, 7.324, 7.413, 6.201, 2.110, 1.594, 1.454, 1.320,, 1.320, CRC32C
|
||||
131072, 0.302, 7.402, 7.441, 6.199, 2.115, 1.585, 1.455, 1.318,, 1.318, CRC32C
|
||||
262144, 0.302, 7.616, 7.576, 6.244, 2.112, 1.581, 1.455, 1.317,, 1.317, CRC32C
|
||||
524288, 0.302, 7.639, 7.580, 6.283, 2.124, 1.579, 1.455, 1.318,, 1.318, CRC32C
|
||||
1048576, 0.302, 7.658, 7.600, 6.310, 2.152, 1.544, 1.467, 1.321,, 1.321, CRC32C
|
||||
2097152, 0.305, 7.665, 7.609, 6.323, 2.156, 1.559, 1.478, 1.339,, 1.339, CRC32C
|
||||
4194304, 0.305, 7.684, 7.628, 6.334, 2.170, 1.566, 1.484, 1.347,, 1.347, CRC32C
|
||||
8388608, 0.544, 7.907, 7.740, 6.407, 2.292, 1.672, 1.585, 1.460,, 1.460, CRC32C
|
||||
16777216, 0.552, 7.911, 7.825, 6.527, 2.297, 1.678, 1.591, 1.467,, 1.467, CRC32C
|
||||
33554432, 0.555, 7.913, 7.838, 6.539, 2.303, 1.677, 1.594, 1.471,, 1.471, CRC32C
|
||||
67108864, 0.555, 7.920, 7.845, 6.514, 2.303, 1.684, 1.595, 1.470,, 1.470, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u64/u64/u64-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 32, 8, 8, 8, 3, 0, 33384, 1117989
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 9.288, 9.134, 7.851,, 7.851, CRC32C
|
||||
8, 4.326, 4.126, 3.677,, 3.677, CRC32C
|
||||
16, 3.289, 3.195, 2.877,, 2.877, CRC32C
|
||||
32, 2.810, 2.727, 2.313,, 2.313, CRC32C
|
||||
64, 2.540, 2.282, 2.235,, 2.235, CRC32C
|
||||
128, 2.384, 1.821, 2.302,, 1.821, Multiword
|
||||
256, 2.351, 1.650, 2.249,, 1.650, Multiword
|
||||
512, 2.323, 1.519, 1.526,, 1.519, Multiword
|
||||
1024, 2.329, 1.473, 1.462,, 1.462, CRC32C
|
||||
2048, 2.303, 1.444, 1.447,, 1.444, Multiword
|
||||
4096, 2.297, 1.439, 1.417,, 1.417, CRC32C
|
||||
8192, 2.292, 1.431, 1.416,, 1.416, CRC32C
|
||||
16384, 2.294, 1.441, 1.423,, 1.423, CRC32C
|
||||
32768, 2.296, 1.445, 1.317,, 1.317, CRC32C
|
||||
65536, 1.783, 1.446, 1.319,, 1.319, CRC32C
|
||||
131072, 1.775, 1.445, 1.318,, 1.318, CRC32C
|
||||
262144, 1.634, 1.445, 1.317,, 1.317, CRC32C
|
||||
524288, 1.570, 1.445, 1.319,, 1.319, CRC32C
|
||||
1048576, 1.581, 1.458, 1.319,, 1.319, CRC32C
|
||||
2097152, 1.575, 1.469, 1.337,, 1.337, CRC32C
|
||||
4194304, 1.582, 1.476, 1.349,, 1.349, CRC32C
|
||||
8388608, 1.682, 1.589, 1.461,, 1.461, CRC32C
|
||||
16777216, 1.684, 1.597, 1.469,, 1.469, CRC32C
|
||||
33554432, 1.690, 1.598, 1.467,, 1.467, CRC32C
|
||||
67108864, 1.693, 1.604, 1.474,, 1.474, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-4-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 32, 4, 4, 4, 4, 0, 8528, 1104507
|
||||
|
||||
, MemSpeed, Byte, ByteUnrolled, ByteWord, Word, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 6.752, 6.511, 6.053, 7.464, 6.251, 7.182, 6.766, 7.729,, 6.053, ByteUnrolled
|
||||
8, 3.751, 6.085, 6.135, 6.463, 4.295, 4.641, 4.626, 3.720,, 3.720, CRC32C
|
||||
16, 1.501, 6.784, 6.815, 6.085, 3.334, 3.867, 3.680, 2.906,, 2.906, CRC32C
|
||||
32, 0.876, 7.133, 7.128, 6.288, 3.163, 3.438, 2.922, 2.297,, 2.297, CRC32C
|
||||
64, 0.563, 7.303, 7.256, 6.217, 2.992, 3.282, 2.204, 2.219,, 2.204, Multiword
|
||||
128, 0.413, 7.404, 7.363, 6.208, 2.939, 3.161, 1.841, 2.324,, 1.841, Multiword
|
||||
256, 0.342, 7.578, 7.428, 6.286, 2.930, 3.141, 1.678, 2.248,, 1.678, Multiword
|
||||
512, 0.306, 7.530, 7.547, 6.275, 2.929, 3.116, 1.586, 1.530,, 1.530, CRC32C
|
||||
1024, 0.295, 7.524, 7.531, 6.285, 2.937, 3.088, 1.536, 1.463,, 1.463, CRC32C
|
||||
2048, 0.298, 7.535, 7.510, 6.285, 2.931, 3.073, 1.517, 1.449,, 1.449, CRC32C
|
||||
4096, 0.289, 7.529, 7.522, 6.279, 2.957, 3.065, 1.505, 1.415,, 1.415, CRC32C
|
||||
8192, 0.281, 7.407, 7.406, 6.275, 2.942, 3.057, 1.497, 1.415,, 1.415, CRC32C
|
||||
16384, 0.284, 7.454, 7.395, 6.273, 2.934, 3.055, 1.497, 1.423,, 1.423, CRC32C
|
||||
32768, 0.286, 7.344, 7.389, 6.274, 2.918, 3.083, 1.509, 1.317,, 1.317, CRC32C
|
||||
65536, 0.307, 7.335, 7.400, 6.271, 2.907, 1.759, 1.510, 1.320,, 1.320, CRC32C
|
||||
131072, 0.307, 7.252, 7.426, 6.272, 2.898, 1.746, 1.511, 1.318,, 1.318, CRC32C
|
||||
262144, 0.307, 7.601, 7.539, 6.310, 2.913, 1.743, 1.510, 1.316,, 1.316, CRC32C
|
||||
524288, 0.307, 7.640, 7.567, 6.358, 2.949, 1.741, 1.510, 1.318,, 1.318, CRC32C
|
||||
1048576, 0.308, 7.667, 7.595, 6.382, 2.986, 1.667, 1.522, 1.321,, 1.321, CRC32C
|
||||
2097152, 0.310, 7.678, 7.612, 6.401, 3.004, 1.679, 1.535, 1.342,, 1.342, CRC32C
|
||||
4194304, 0.313, 7.689, 7.617, 6.407, 3.009, 1.691, 1.545, 1.347,, 1.347, CRC32C
|
||||
8388608, 0.546, 7.903, 7.810, 6.581, 3.143, 1.793, 1.643, 1.463,, 1.463, CRC32C
|
||||
16777216, 0.554, 7.878, 7.832, 6.602, 3.147, 1.797, 1.646, 1.466,, 1.466, CRC32C
|
||||
33554432, 0.557, 7.915, 7.841, 6.605, 3.150, 1.799, 1.650, 1.468,, 1.468, CRC32C
|
||||
67108864, 0.556, 7.918, 7.841, 6.616, 3.150, 1.804, 1.655, 1.476,, 1.476, CRC32C
|
||||
|
||||
ClassTitle, CRC-32-u32/u32/u32-3-canonical
|
||||
Compiler, CpuBits, Degree, Crc, TableEntry, Word, Stride, Alignment, TableBytes, InitCycles
|
||||
ICL-1110, 64, 32, 4, 4, 4, 3, 0, 8528, 1112589
|
||||
|
||||
, Blockword, Multiword, CRC32C,, BestTime, BestMethod
|
||||
4, 7.220, 6.817, 7.869,, 6.817, Multiword
|
||||
8, 4.651, 4.501, 3.703,, 3.703, CRC32C
|
||||
16, 3.888, 3.796, 2.904,, 2.904, CRC32C
|
||||
32, 3.482, 2.881, 2.297,, 2.297, CRC32C
|
||||
64, 3.266, 2.117, 2.219,, 2.117, Multiword
|
||||
128, 3.176, 1.860, 2.324,, 1.860, Multiword
|
||||
256, 3.091, 1.668, 2.240,, 1.668, Multiword
|
||||
512, 3.170, 1.600, 1.531,, 1.531, CRC32C
|
||||
1024, 3.156, 1.562, 1.463,, 1.463, CRC32C
|
||||
2048, 3.082, 1.545, 1.449,, 1.449, CRC32C
|
||||
4096, 3.072, 1.526, 1.414,, 1.414, CRC32C
|
||||
8192, 3.067, 1.522, 1.416,, 1.416, CRC32C
|
||||
16384, 3.074, 1.520, 1.423,, 1.423, CRC32C
|
||||
32768, 3.120, 1.539, 1.317,, 1.317, CRC32C
|
||||
65536, 2.109, 1.540, 1.320,, 1.320, CRC32C
|
||||
131072, 2.087, 1.541, 1.318,, 1.318, CRC32C
|
||||
262144, 1.841, 1.541, 1.316,, 1.316, CRC32C
|
||||
524288, 1.716, 1.541, 1.317,, 1.317, CRC32C
|
||||
1048576, 1.739, 1.550, 1.326,, 1.326, CRC32C
|
||||
2097152, 1.712, 1.567, 1.342,, 1.342, CRC32C
|
||||
4194304, 1.715, 1.575, 1.347,, 1.347, CRC32C
|
||||
8388608, 1.805, 1.675, 1.463,, 1.463, CRC32C
|
||||
16777216, 1.815, 1.679, 1.469,, 1.469, CRC32C
|
||||
33554432, 1.813, 1.681, 1.472,, 1.472, CRC32C
|
||||
67108864, 1.816, 1.686, 1.473,, 1.473, CRC32C
|
||||
|
||||
|
BIN
crcutil-1.0/doc/text/CRC128-full.pdf
Normal file
BIN
crcutil-1.0/doc/text/CRC128-full.pdf
Normal file
Binary file not shown.
BIN
crcutil-1.0/doc/text/CRC128-small.pdf
Normal file
BIN
crcutil-1.0/doc/text/CRC128-small.pdf
Normal file
Binary file not shown.
BIN
crcutil-1.0/doc/text/CRC32-full.pdf
Normal file
BIN
crcutil-1.0/doc/text/CRC32-full.pdf
Normal file
Binary file not shown.
BIN
crcutil-1.0/doc/text/CRC32-small.pdf
Normal file
BIN
crcutil-1.0/doc/text/CRC32-small.pdf
Normal file
Binary file not shown.
BIN
crcutil-1.0/doc/text/CRC64-full.pdf
Normal file
BIN
crcutil-1.0/doc/text/CRC64-full.pdf
Normal file
Binary file not shown.
BIN
crcutil-1.0/doc/text/CRC64-small.pdf
Normal file
BIN
crcutil-1.0/doc/text/CRC64-small.pdf
Normal file
Binary file not shown.
BIN
crcutil-1.0/doc/text/CompilerComparison.pdf
Normal file
BIN
crcutil-1.0/doc/text/CompilerComparison.pdf
Normal file
Binary file not shown.
18
crcutil-1.0/doc/text/convert.awk
Normal file
18
crcutil-1.0/doc/text/convert.awk
Normal file
@@ -0,0 +1,18 @@
|
||||
BEGIN {
|
||||
first_line = 1;
|
||||
}
|
||||
|
||||
{
|
||||
if (first_line) {
|
||||
printf("%20s", "");
|
||||
}
|
||||
for (i = 1; i <= NF; ++i) {
|
||||
if (i == 1 && !first_line) {
|
||||
printf("%20s", $i);
|
||||
} else {
|
||||
printf(" &%6s", $i);
|
||||
}
|
||||
}
|
||||
printf(" \\\\\n");
|
||||
first_line = 0;
|
||||
}
|
||||
198
crcutil-1.0/doc/text/crc.bib
Normal file
198
crcutil-1.0/doc/text/crc.bib
Normal file
@@ -0,0 +1,198 @@
|
||||
@InProceedings{braun01fast,
|
||||
Author = {Florian Braun and Marcel Waldvogel},
|
||||
Title = {Fast Incremental {CRC} Updates for {IP} over {ATM}
|
||||
networks},
|
||||
BookTitle = {2001 {IEEE} Workshop on High
|
||||
Performance Switching and Routing (HPSR 2001)},
|
||||
Address = {Dallas, TX, USA},
|
||||
Year = 2001,
|
||||
Month = may,
|
||||
Pages = {48--52}
|
||||
}
|
||||
|
||||
@TechReport{braun01fast-techreport,
|
||||
Author = {Florian Braun and Marcel Waldvogel},
|
||||
Title = {Fast Incremental {CRC} Updates for {IP} over {ATM}
|
||||
networks},
|
||||
Institution = {Washington University in St.\ Louis},
|
||||
Number = {WUCS-01-08},
|
||||
Year = 2001,
|
||||
Month = apr,
|
||||
Note = {Available at \url{http://marcel.wanda.ch/Publications/braun01fast-techreport.pdf}}
|
||||
}
|
||||
|
||||
@article{DBLP:journals/tc/KounavisB08,
|
||||
author = {Michael E. Kounavis and
|
||||
Frank L. Berry},
|
||||
title = {Novel Table Lookup-Based Algorithms for High-Performance
|
||||
{CRC} Generation},
|
||||
journal = {IEEE Trans. Computers},
|
||||
volume = {57},
|
||||
number = {11},
|
||||
year = {2008},
|
||||
pages = {1550-1560},
|
||||
ee = {http://dx.doi.org/10.1109/TC.2008.85},
|
||||
bibsource = {DBLP, http://dblp.uni-trier.de}
|
||||
}
|
||||
|
||||
|
||||
@inproceedings{DBLP:conf/iscc/KounavisB05,
|
||||
author = {Michael E. Kounavis and
|
||||
Frank L. Berry},
|
||||
title = {A Systematic Approach to Building High Performance Software-Based
|
||||
{CRC} Generators},
|
||||
booktitle = {ISCC},
|
||||
year = {2005},
|
||||
pages = {855-862},
|
||||
ee = {http://doi.ieeecomputersociety.org/10.1109/ISCC.2005.18},
|
||||
crossref = {DBLP:conf/iscc/2005},
|
||||
bibsource = {DBLP, http://dblp.uni-trier.de}
|
||||
}
|
||||
|
||||
@misc{Kounavis2005,
|
||||
author = {Michael E. Kounavis and
|
||||
Frank L. Berry},
|
||||
title = {A Systematic Approach to Building High Performance, Software-Based,
|
||||
{CRC} Generators},
|
||||
year = {2005},
|
||||
howpublished={\url{http://www.intel.com/technology/comms/perfnet/download/CRC_generators.pdf}},
|
||||
}
|
||||
|
||||
@proceedings{DBLP:conf/iscc/2005,
|
||||
title = {Proceedings of the 10th {IEEE} Symposium on Computers and
|
||||
Communications ({ISCC} 2005), 27-30 June 2005, Murcia, Cartagena,
|
||||
Spain},
|
||||
booktitle = {ISCC},
|
||||
publisher = {{IEEE} Computer Society},
|
||||
year = {2005},
|
||||
isbn = {0-7695-2373-0},
|
||||
bibsource = {DBLP, http://dblp.uni-trier.de}
|
||||
}
|
||||
|
||||
@article{DBLP:journals/cacm/Sarwate88,
|
||||
author = {Dilip V. Sarwate},
|
||||
title = {Computation of Cyclic Redundancy Checks via Table Look-Up},
|
||||
journal = {Commun. {ACM}},
|
||||
volume = {31},
|
||||
number = {8},
|
||||
year = {1988},
|
||||
pages = {1008-1013},
|
||||
bibsource = {DBLP, http://dblp.uni-trier.de}
|
||||
}
|
||||
|
||||
@article{Perez83,
|
||||
author = {Perez, Aram},
|
||||
title = {Byte-Wise {CRC} Calculations},
|
||||
journal = {{IEEE} Micro},
|
||||
volume = {3},
|
||||
number = {3},
|
||||
year = {1983},
|
||||
issn = {0272-1732},
|
||||
pages = {40--50},
|
||||
doi = {http://dx.doi.org/10.1109/MM.1983.291120},
|
||||
publisher = {{IEEE} Computer Society Press},
|
||||
address = {Los Alamitos, CA, USA},
|
||||
}
|
||||
|
||||
@article{Ramabadran88,
|
||||
author = {Ramabadran, Tenkasi V. and Gaitonde, Sunil S.},
|
||||
title = {A Tutorial on {CRC} Computations},
|
||||
journal = {IEEE Micro},
|
||||
volume = {8},
|
||||
number = {4},
|
||||
year = {1988},
|
||||
issn = {0272-1732},
|
||||
pages = {62--75},
|
||||
doi = {http://dx.doi.org/10.1109/40.7773},
|
||||
publisher = {IEEE Computer Society Press},
|
||||
address = {Los Alamitos, CA, USA},
|
||||
}
|
||||
|
||||
@inproceedings{DBLP:conf/icc/JoshiDK00,
|
||||
author = {Sanjay M. Joshi and
|
||||
Pradeep K. Dubey and
|
||||
Marc A. Kaplan},
|
||||
title = {A New Parallel Algorithm for {CRC} Generation},
|
||||
booktitle = {{ICC} (3)},
|
||||
year = {2000},
|
||||
pages = {1764-1768},
|
||||
bibsource = {DBLP, http://dblp.uni-trier.de}
|
||||
}
|
||||
|
||||
@misc{Black93,
|
||||
author = {Richard Black},
|
||||
title = {Fast {CRC32} in Software},
|
||||
year = {1993},
|
||||
howpublished = {\url{http://www.cl.cam.ac.uk/research/srg/bluebook/21/crc/crc.html}},
|
||||
}
|
||||
|
||||
@misc{Zemtsov90,
|
||||
author = {Pavel Zemtsov},
|
||||
title = {Proprietary copy protection system},
|
||||
year = {1990},
|
||||
month = aug,
|
||||
howpublished = {Personal communication}
|
||||
}
|
||||
|
||||
@article{Hill79,
|
||||
author = {Hill, John R.},
|
||||
title = {A table driven approach to cyclic redundancy check calculations},
|
||||
journal = {{SIGCOMM} Comput. Commun. Rev.},
|
||||
volume = {9},
|
||||
number = {2},
|
||||
year = {1979},
|
||||
issn = {0146-4833},
|
||||
pages = {40--60},
|
||||
doi = {http://doi.acm.org/10.1145/1015860.1015862},
|
||||
publisher = {ACM},
|
||||
address = {New York, NY, USA},
|
||||
}
|
||||
|
||||
@InProceedings{Peterson61,
|
||||
Author = {W.W. Peterson and D.T. Brown},
|
||||
Title = {Cyclic Codes for Error Detection},
|
||||
BookTitle = {{IRE(1)}},
|
||||
Volume = {49},
|
||||
Year = {1961},
|
||||
Month = jan,
|
||||
Pages = {228--235}
|
||||
}
|
||||
|
||||
@InProceedings{JiKillian02,
|
||||
Author = {H. Michael Ji and Eeal Killian},
|
||||
Title = {Fast Parallel CRC Algorithm and Implementation on a Configurable Processor},
|
||||
BookTItle = {{ICC}},
|
||||
Volume = {3},
|
||||
Year = {2002},
|
||||
Month = apr,
|
||||
Pages = {1813<EFBFBD>-1817}
|
||||
}
|
||||
|
||||
@inproceedings{Hasan01,
|
||||
author = {Hasan, M. A.},
|
||||
title = {Efficient Computation of Multiplicative Inverses for Cryptographic Applications},
|
||||
booktitle = {ARITH '01: Proceedings of the 15th IEEE Symposium on Computer Arithmetic},
|
||||
year = {2001},
|
||||
pages = {66},
|
||||
publisher = {IEEE Computer Society},
|
||||
address = {Washington, DC, USA},
|
||||
}
|
||||
|
||||
|
||||
@Misc{Gopal2010,
|
||||
Author = {
|
||||
Vinodh Gopal and
|
||||
Jim Guilford and
|
||||
Erdinc Ozturk and
|
||||
Gil Wolrich and
|
||||
Wajdi Feghali and
|
||||
Martin Dixon and
|
||||
Deniz Karakoyunlu
|
||||
},
|
||||
Title = {Fast {CRC} Computation for {iSCSI} Polynomial Using {CRC32} Instruction},
|
||||
Howpublished = {Intel White Paper 323405},
|
||||
Year = 2010,
|
||||
Month = feb,
|
||||
Note = {Available at \url{http://download.intel.com/design/intarch/papers/323405.pdf}},
|
||||
}
|
||||
|
||||
1513
crcutil-1.0/doc/text/crc.tex
Normal file
1513
crcutil-1.0/doc/text/crc.tex
Normal file
File diff suppressed because it is too large
Load Diff
BIN
crcutil-1.0/doc/text/data.xlsx
Normal file
BIN
crcutil-1.0/doc/text/data.xlsx
Normal file
Binary file not shown.
4
crcutil-1.0/doc/text/mk.cmd
Normal file
4
crcutil-1.0/doc/text/mk.cmd
Normal file
@@ -0,0 +1,4 @@
|
||||
@echo off
|
||||
pdflatex crc.tex
|
||||
if not exist crc.bbl bibtex crc && pdflatex crc.tex && pdflatex crc.tex
|
||||
start crc.pdf
|
||||
307
crcutil-1.0/examples/interface.cc
Normal file
307
crcutil-1.0/examples/interface.cc
Normal file
@@ -0,0 +1,307 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// This is the only file where all details of CRC implementation are buried.
|
||||
|
||||
#include "interface.h"
|
||||
|
||||
#include "aligned_alloc.h"
|
||||
#include "crc32c_sse4.h"
|
||||
#include "generic_crc.h"
|
||||
#include "protected_crc.h"
|
||||
#include "rolling_crc.h"
|
||||
|
||||
// Align all CRC tables on kAlign boundary.
|
||||
// Shall be exact power of 2.
|
||||
static size_t kAlign = 4 * 1024;
|
||||
|
||||
using namespace crcutil;
|
||||
|
||||
#if defined(__GNUC__)
|
||||
// Suppress 'invalid access to non-static data member ... of NULL object'
|
||||
#undef offsetof
|
||||
#define offsetof(TYPE, MEMBER) (reinterpret_cast <size_t> \
|
||||
((&reinterpret_cast <const char &>( \
|
||||
reinterpret_cast <const TYPE *>(1)->MEMBER))) - 1)
|
||||
#endif // defined(__GNUC__)
|
||||
|
||||
namespace crcutil_interface {
|
||||
|
||||
template<typename CrcImplementation, typename RollingCrcImplementation>
|
||||
class Implementation : public CRC {
|
||||
public:
|
||||
typedef typename CrcImplementation::Crc Crc;
|
||||
typedef Implementation<CrcImplementation, RollingCrcImplementation> Self;
|
||||
|
||||
Implementation(const Crc &poly,
|
||||
size_t degree,
|
||||
bool canonical,
|
||||
const Crc &roll_start_value,
|
||||
size_t roll_length)
|
||||
: crc_(poly, degree, canonical),
|
||||
rolling_crc_(crc_, roll_length, roll_start_value) {
|
||||
}
|
||||
|
||||
static Self *Create(const Crc &poly,
|
||||
size_t degree,
|
||||
bool canonical,
|
||||
const Crc &roll_start_value,
|
||||
size_t roll_length,
|
||||
const void **allocated_memory) {
|
||||
void *memory = AlignedAlloc(sizeof(Self),
|
||||
offsetof(Self, crc_),
|
||||
kAlign,
|
||||
allocated_memory);
|
||||
return new(memory) Self(poly,
|
||||
degree,
|
||||
canonical,
|
||||
roll_start_value,
|
||||
roll_length);
|
||||
}
|
||||
|
||||
virtual void Delete() {
|
||||
AlignedFree(this);
|
||||
}
|
||||
|
||||
void *operator new(size_t, void *p) {
|
||||
return p;
|
||||
}
|
||||
|
||||
virtual void GeneratingPolynomial(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(crc_.Base().GeneratingPolynomial(), lo, hi);
|
||||
}
|
||||
|
||||
virtual size_t Degree() const {
|
||||
return crc_.Base().Degree();
|
||||
}
|
||||
|
||||
virtual void CanonizeValue(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(crc_.Base().Canonize(), lo, hi);
|
||||
}
|
||||
|
||||
virtual void RollStartValue(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(rolling_crc_.StartValue(), lo, hi);
|
||||
}
|
||||
|
||||
virtual size_t RollWindowBytes() const {
|
||||
return rolling_crc_.WindowBytes();
|
||||
}
|
||||
|
||||
virtual void SelfCheckValue(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const {
|
||||
Crc crc = crc_.CrcDefault(&crc_, sizeof(crc_), 0);
|
||||
crc = crc_.CrcDefault(&rolling_crc_, sizeof(rolling_crc_), crc);
|
||||
SetValue(crc, lo, hi);
|
||||
}
|
||||
|
||||
virtual void Compute(const void *data,
|
||||
size_t bytes,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(crc_.CrcDefault(data, bytes, GetValue(lo, hi)), lo, hi);
|
||||
}
|
||||
|
||||
virtual void RollStart(const void *data,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(rolling_crc_.Start(data), lo, hi);
|
||||
}
|
||||
|
||||
virtual void Roll(size_t byte_out,
|
||||
size_t byte_in,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(rolling_crc_.Roll(GetValue(lo, hi), byte_out, byte_in), lo, hi);
|
||||
}
|
||||
|
||||
virtual void CrcOfZeroes(UINT64 bytes,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(crc_.Base().CrcOfZeroes(bytes, GetValue(lo, hi)), lo, hi);
|
||||
}
|
||||
|
||||
virtual void ChangeStartValue(
|
||||
UINT64 start_old_lo, UINT64 start_old_hi,
|
||||
UINT64 start_new_lo, UINT64 start_new_hi,
|
||||
UINT64 bytes,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(crc_.Base().ChangeStartValue(
|
||||
GetValue(lo, hi),
|
||||
bytes,
|
||||
GetValue(start_old_lo, start_old_hi),
|
||||
GetValue(start_new_lo, start_new_hi)),
|
||||
lo,
|
||||
hi);
|
||||
}
|
||||
|
||||
virtual void Concatenate(UINT64 crcB_lo, UINT64 crcB_hi,
|
||||
UINT64 bytes_B,
|
||||
/* INOUT */ UINT64* crcA_lo,
|
||||
/* INOUT */ UINT64* crcA_hi = NULL) const {
|
||||
SetValue(crc_.Base().Concatenate(GetValue(crcA_lo, crcA_hi),
|
||||
GetValue(crcB_lo, crcB_hi),
|
||||
bytes_B),
|
||||
crcA_lo,
|
||||
crcA_hi);
|
||||
}
|
||||
|
||||
virtual size_t StoreComplementaryCrc(
|
||||
void *dst,
|
||||
UINT64 message_crc_lo, UINT64 message_crc_hi,
|
||||
UINT64 result_crc_lo, UINT64 result_crc_hi = 0) const {
|
||||
return crc_.Base().StoreComplementaryCrc(
|
||||
dst,
|
||||
GetValue(message_crc_lo, message_crc_hi),
|
||||
GetValue(result_crc_lo, result_crc_hi));
|
||||
}
|
||||
|
||||
virtual size_t StoreCrc(void *dst,
|
||||
UINT64 lo,
|
||||
UINT64 hi = 0) const {
|
||||
return crc_.Base().StoreCrc(dst, GetValue(lo, hi));
|
||||
}
|
||||
|
||||
virtual void CrcOfCrc(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const {
|
||||
SetValue(crc_.Base().CrcOfCrc(), lo, hi);
|
||||
}
|
||||
|
||||
private:
|
||||
static Crc GetValue(UINT64 *lo, UINT64 *hi) {
|
||||
if (sizeof(Crc) <= sizeof(*lo)) {
|
||||
return CrcFromUint64<Crc>(*lo);
|
||||
} else {
|
||||
return CrcFromUint64<Crc>(*lo, *hi);
|
||||
}
|
||||
}
|
||||
|
||||
static Crc GetValue(UINT64 lo, UINT64 hi) {
|
||||
return CrcFromUint64<Crc>(lo, hi);
|
||||
}
|
||||
|
||||
static void SetValue(const Crc &crc, UINT64 *lo, UINT64 *hi) {
|
||||
Uint64FromCrc<Crc>(crc,
|
||||
reinterpret_cast<crcutil::uint64 *>(lo),
|
||||
reinterpret_cast<crcutil::uint64 *>(hi));
|
||||
}
|
||||
|
||||
const CrcImplementation crc_;
|
||||
const RollingCrcImplementation rolling_crc_;
|
||||
|
||||
const Self &operator =(const Self &) {}
|
||||
};
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
// 'use_sse4_2' : unreferenced formal parameter
|
||||
#pragma warning(disable: 4100)
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
bool CRC::IsSSE42Available() {
|
||||
#if HAVE_AMD64 || HAVE_I386
|
||||
return Crc32cSSE4::IsSSE42Available();
|
||||
#else
|
||||
return false;
|
||||
#endif // HAVE_AMD64 || HAVE_I386
|
||||
}
|
||||
|
||||
CRC::~CRC() {}
|
||||
CRC::CRC() {}
|
||||
|
||||
CRC *CRC::Create(UINT64 poly_lo,
|
||||
UINT64 poly_hi,
|
||||
size_t degree,
|
||||
bool canonical,
|
||||
UINT64 roll_start_value_lo,
|
||||
UINT64 roll_start_value_hi,
|
||||
size_t roll_length,
|
||||
bool use_sse4_2,
|
||||
const void **allocated_memory) {
|
||||
if (degree == 0) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (degree > 64) {
|
||||
#if !HAVE_SSE2
|
||||
return NULL;
|
||||
#else
|
||||
if (degree > 128) {
|
||||
return NULL;
|
||||
}
|
||||
uint128_sse2 poly = CrcFromUint64<uint128_sse2>(poly_lo, poly_hi);
|
||||
if (degree != 128 && (poly >> degree) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
uint128_sse2 roll_start_value =
|
||||
CrcFromUint64<uint128_sse2>(roll_start_value_lo, roll_start_value_hi);
|
||||
if (degree != 128 && (roll_start_value >> degree) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
#if HAVE_I386
|
||||
typedef GenericCrc<uint128_sse2, uint128_sse2, crcutil::uint32, 3> Crc128;
|
||||
#elif defined(__GNUC__) && GCC_VERSION_AVAILABLE(4, 5)
|
||||
typedef GenericCrc<uint128_sse2, uint128_sse2, crcutil::uint64, 6> Crc128;
|
||||
#else
|
||||
typedef GenericCrc<uint128_sse2, uint128_sse2, crcutil::uint64, 4> Crc128;
|
||||
#endif // HAVE_I386
|
||||
return Implementation<Crc128, RollingCrc<Crc128> >::Create(
|
||||
poly,
|
||||
degree,
|
||||
canonical,
|
||||
roll_start_value,
|
||||
roll_length,
|
||||
allocated_memory);
|
||||
#endif // !HAVE_SSE2
|
||||
}
|
||||
|
||||
#if CRCUTIL_USE_MM_CRC32 && (HAVE_I386 || HAVE_AMD64)
|
||||
if (use_sse4_2 &&
|
||||
degree == Crc32cSSE4::FixedDegree() &&
|
||||
poly_lo == Crc32cSSE4::FixedGeneratingPolynomial() &&
|
||||
poly_hi == 0) {
|
||||
if (roll_start_value_hi != 0 || (roll_start_value_lo >> 32) != 0) {
|
||||
return NULL;
|
||||
}
|
||||
return Implementation<Crc32cSSE4, RollingCrc32cSSE4>::Create(
|
||||
static_cast<size_t>(poly_lo),
|
||||
degree,
|
||||
canonical,
|
||||
static_cast<size_t>(roll_start_value_lo),
|
||||
static_cast<size_t>(roll_length),
|
||||
allocated_memory);
|
||||
}
|
||||
#endif // CRCUTIL_USE_MM_CRC32 && (HAVE_I386 || HAVE_AMD64)
|
||||
|
||||
if (poly_hi != 0 || (degree != 64 && (poly_lo >> degree) != 0)) {
|
||||
return NULL;
|
||||
}
|
||||
if (roll_start_value_hi != 0 ||
|
||||
(degree != 64 && (roll_start_value_lo >> degree) != 0)) {
|
||||
return NULL;
|
||||
}
|
||||
typedef GenericCrc<crcutil::uint64, crcutil::uint64, crcutil::uint64, 4>
|
||||
Crc64;
|
||||
return Implementation<Crc64, RollingCrc<Crc64> >::Create(
|
||||
poly_lo,
|
||||
degree,
|
||||
canonical,
|
||||
roll_start_value_lo,
|
||||
roll_length,
|
||||
allocated_memory);
|
||||
}
|
||||
|
||||
} // namespace crcutil_interface
|
||||
204
crcutil-1.0/examples/interface.h
Normal file
204
crcutil-1.0/examples/interface.h
Normal file
@@ -0,0 +1,204 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Example how to use CRC implementation via the interface which
|
||||
// hides details of implementation.
|
||||
//
|
||||
// The raw implementation is not indended to be used in a project
|
||||
// directly because:
|
||||
// - Implementation lives in the header files because that is the
|
||||
// only way to use templates efficiently.
|
||||
// - Header files are quite "dirty" -- they define and use a
|
||||
// lot of macros. Bringing these macros to all files in
|
||||
// a project is not particularly good idea.
|
||||
// - The code takes forever to compile with GCC (e.g. GCC
|
||||
// 4.4.3 and 4.5.0 compile the unittest for about 30 seconds).
|
||||
//
|
||||
// Solution:
|
||||
// - Create your own, clean interface.
|
||||
// - Do not expose interface internals in a header file.
|
||||
// - Proxy all calls to your interface to CRC implementation.
|
||||
// - Keep only one copy of actual implementation.
|
||||
|
||||
#ifndef CRCUTIL_INTERFACE_H_
|
||||
#define CRCUTIL_INTERFACE_H_
|
||||
|
||||
#include "std_headers.h" // size_t
|
||||
|
||||
namespace crcutil_interface {
|
||||
|
||||
// Many projects define their own uint64. Do it here.
|
||||
typedef unsigned long long UINT64;
|
||||
|
||||
class CRC {
|
||||
public:
|
||||
// Creates new instance of CRC class.
|
||||
// If arguments are illegal (e.g. provided generating polynomial
|
||||
// has more bits than provided degree), returns NULL.
|
||||
//
|
||||
// poly_* - generating polynomial (reversed bit format).
|
||||
// degree - degree of generating polynomial.
|
||||
// canonical - if true, input CRC value will be XOR'ed with
|
||||
// (inverted) before and after CRC computation.
|
||||
// roll_start_value - starting value of rolling CRC.
|
||||
// roll_window_bytes - length of rolling CRC window in bytes.
|
||||
// If roll_length is 0, roll_start_value
|
||||
// shall be 0.
|
||||
// use_sse4_2 - if true, use SSE4.2 crc32 instruction to compute
|
||||
// CRC when generating polynomial is CRC32C (Castagnoli)
|
||||
// allocated_memory - optional (may be NULL) address of a variable
|
||||
// to store the address of actually allocated memory.
|
||||
static CRC *Create(UINT64 poly_lo,
|
||||
UINT64 poly_hi,
|
||||
size_t degree,
|
||||
bool canonical,
|
||||
UINT64 roll_start_value_lo,
|
||||
UINT64 roll_start_value_hi,
|
||||
size_t roll_window_bytes,
|
||||
bool use_sse4_2,
|
||||
const void **allocated_memory);
|
||||
|
||||
// Deletes the instance of CRC class.
|
||||
virtual void Delete() = 0;
|
||||
|
||||
// Returns true if SSE4.2 is available.
|
||||
static bool IsSSE42Available();
|
||||
|
||||
// Returns generating polynomial.
|
||||
virtual void GeneratingPolynomial(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Returns degree of generating polynomial.
|
||||
virtual size_t Degree() const = 0;
|
||||
|
||||
// Returns canonization constant used to XOR crc value
|
||||
// before and after CRC computation.
|
||||
virtual void CanonizeValue(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Returns rolling CRC starting value.
|
||||
virtual void RollStartValue(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Returns length of rolling CRC window.
|
||||
virtual size_t RollWindowBytes() const = 0;
|
||||
|
||||
// Returns CRC of CRC tables to enable verification
|
||||
// of integrity of CRC function itself by comparing
|
||||
// the result with pre-computed value.
|
||||
virtual void SelfCheckValue(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Given CRC value of previous chunk of data,
|
||||
// extends it to new chunk, retuning the result in-place.
|
||||
//
|
||||
// If degree of CRC polynomial is 64 or less,
|
||||
// (*hi) will not be touched.
|
||||
virtual void Compute(const void *data,
|
||||
size_t bytes,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Starts rolling CRC by computing CRC of first
|
||||
// "roll_length" bytes of "data", using "roll_start_value"
|
||||
// as starting value (see Create()).
|
||||
// Should not be called if the value of "roll_value" was 0.
|
||||
virtual void RollStart(const void *data,
|
||||
/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Rolls CRC by 1 byte, given the bytes leaving and
|
||||
// entering the window of "roll_length" bytes.
|
||||
// RollStart() should be called before "Roll".
|
||||
// Should not be called if the value of "roll_value" was 0.
|
||||
virtual void Roll(size_t byte_out,
|
||||
size_t byte_in,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Computes CRC of sequence of zeroes -- without touching the data.
|
||||
virtual void CrcOfZeroes(UINT64 bytes,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Computes value of CRC(A, bytes, start_new) given known
|
||||
// crc=CRC(A, bytes, start_old) -- without touching the data.
|
||||
virtual void ChangeStartValue(
|
||||
UINT64 start_old_lo, UINT64 start_old_hi,
|
||||
UINT64 start_new_lo, UINT64 start_new_hi,
|
||||
UINT64 bytes,
|
||||
/* INOUT */ UINT64 *lo,
|
||||
/* INOUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
// Returns CRC of concatenation of blocks A and B when CRCs
|
||||
// of blocks A and B are known -- without touching the data.
|
||||
//
|
||||
// To be precise, given CRC(A, |A|, startA) and CRC(B, |B|, 0),
|
||||
// returns CRC(AB, |AB|, startA).
|
||||
virtual void Concatenate(UINT64 crcB_lo, UINT64 crcB_hi,
|
||||
UINT64 bytes_B,
|
||||
/* INOUT */ UINT64* crcA_lo,
|
||||
/* INOUT */ UINT64* crcA_hi = NULL) const = 0;
|
||||
|
||||
// Given CRC of a message, stores extra (degree + 7)/8 bytes after
|
||||
// the message so that CRC(message+extra, start) = result.
|
||||
// Does not change CRC start value (use ChangeStartValue for that).
|
||||
// Returns number of stored bytes.
|
||||
virtual size_t StoreComplementaryCrc(
|
||||
void *dst,
|
||||
UINT64 message_crc_lo, UINT64 message_crc_hi,
|
||||
UINT64 result_crc_lo, UINT64 result_crc_hi = 0) const = 0;
|
||||
|
||||
// Stores given CRC of a message as (degree + 7)/8 bytes filled
|
||||
// with 0s to the right. Returns number of stored bytes.
|
||||
// CRC of the message and stored CRC is a constant value returned
|
||||
// by CrcOfCrc() -- it does not depend on contents of the message.
|
||||
virtual size_t StoreCrc(/* OUT */ void *dst,
|
||||
UINT64 lo,
|
||||
UINT64 hi = 0) const = 0;
|
||||
|
||||
// Computes expected CRC value of CRC(Message,CRC(Message))
|
||||
// when CRC is stored after the message. This value is fixed
|
||||
// and does not depend on the message or CRC start value.
|
||||
virtual void CrcOfCrc(/* OUT */ UINT64 *lo,
|
||||
/* OUT */ UINT64 *hi = NULL) const = 0;
|
||||
|
||||
protected:
|
||||
// CRC instance should be created only once (most of the time):
|
||||
// - Creation and initializion is relatively expensive.
|
||||
// - CRC is fully defined by its generating polynomials
|
||||
// (well, and few more parameters).
|
||||
// - CRC instances are pure constants. There is no
|
||||
// reason to have 2 instances of the same CRC.
|
||||
// - There are not too many generating polynomials that are
|
||||
// used on practice. It is hard to imagine a project
|
||||
// which uses 50 different generating polynomials.
|
||||
// Thus, a handful of CRC instances is sufficient
|
||||
// to cover the needs of even very large project.
|
||||
// - Finally and most importantly, CRC tables should be
|
||||
// aligned properly. No, the instances of CRC class
|
||||
// are not created by blind "new" -- they use placement
|
||||
// "new" and, in absense of placement "delete",
|
||||
// should be deleted by calling explicit Delete() method.
|
||||
virtual ~CRC();
|
||||
|
||||
// Cannot instantiate the class -- instances may be created
|
||||
// by CRC::Create() only.
|
||||
CRC();
|
||||
};
|
||||
|
||||
} // namespace crcutil_interface
|
||||
|
||||
|
||||
#endif // CRCUTIL_INTERFACE_H_
|
||||
209
crcutil-1.0/examples/usage.cc
Normal file
209
crcutil-1.0/examples/usage.cc
Normal file
@@ -0,0 +1,209 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "std_headers.h"
|
||||
#include "interface.h"
|
||||
|
||||
static const size_t kRollWindow = 4;
|
||||
static const unsigned char kTestData[] = "abcdefgh";
|
||||
|
||||
static const int kTestDataHead =
|
||||
static_cast<size_t>((sizeof(kTestData) - 1) / 4);
|
||||
static const int kTestDataTail =
|
||||
static_cast<size_t>(sizeof(kTestData) - 1 - kTestDataHead);
|
||||
|
||||
typedef crcutil_interface::UINT64 uint64;
|
||||
|
||||
// GCC -- up to 4.5.0 inclusively -- is not aware that the right format
|
||||
// to print "long long" is "%ll[oudx]". Such nonsense does not prevent
|
||||
// it from complaining about format mismatch, though. Here is the cure.
|
||||
void xprintf(const char *format, ...) {
|
||||
va_list va;
|
||||
va_start(va, format);
|
||||
vprintf(format, va);
|
||||
va_end(va);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
//
|
||||
// Please notice that when working with 64-bit and smaller CRCs,
|
||||
// the use of "hi" part of CRC value is unnecessary.
|
||||
//
|
||||
void Show(const crcutil_interface::CRC *crc) {
|
||||
char buffer[sizeof(kTestData) + 32];
|
||||
|
||||
//
|
||||
// Access CRC properties.
|
||||
//
|
||||
uint64 lo;
|
||||
crc->GeneratingPolynomial(&lo);
|
||||
xprintf("Generating polynomial 0x%llx, degree %llu",
|
||||
lo,
|
||||
static_cast<uint64>(crc->Degree()));
|
||||
crc->CanonizeValue(&lo);
|
||||
xprintf(", canonize_value=0x%llx", lo);
|
||||
|
||||
crc->RollStartValue(&lo);
|
||||
xprintf(", roll start value=0x%llx, roll window=%llu",
|
||||
lo,
|
||||
static_cast<uint64>(crc->RollWindowBytes()));
|
||||
|
||||
//
|
||||
// Check integrity of CRC tables.
|
||||
//
|
||||
crc->SelfCheckValue(&lo);
|
||||
xprintf(", self check value 0x%llx\n", lo);
|
||||
|
||||
//
|
||||
// Compute CRC.
|
||||
//
|
||||
lo = 0;
|
||||
crc->Compute(kTestData, sizeof(kTestData) - 1, &lo);
|
||||
xprintf("CRC32C(\"%s\") = 0x%llx\n", kTestData, lo);
|
||||
|
||||
//
|
||||
// Compute CRC (incrementally).
|
||||
//
|
||||
lo = 0;
|
||||
crc->Compute(kTestData, kTestDataHead, &lo);
|
||||
xprintf("CRC32C(\"%.*s\", 0) = 0x%llx, ", kTestDataHead, kTestData, lo);
|
||||
crc->Compute(kTestData + kTestDataHead, kTestDataTail, &lo);
|
||||
xprintf("CRC32C(\"%s\", CRC32(\"%.*s\", 0)) = 0x%llx = CRC32(\"%s\")\n",
|
||||
kTestData + kTestDataHead, kTestDataHead, kTestData, lo, kTestData);
|
||||
|
||||
//
|
||||
// Compute CRC of a message filled with 0s.
|
||||
//
|
||||
lo = 1;
|
||||
crc->CrcOfZeroes(sizeof(buffer), &lo);
|
||||
|
||||
uint64 lo1 = 1;
|
||||
memset(buffer, 0, sizeof(buffer));
|
||||
crc->Compute(buffer, sizeof(buffer), &lo1);
|
||||
xprintf("CRC of %d zeroes = %llx, expected %llx\n",
|
||||
static_cast<int>(sizeof(buffer)),
|
||||
lo,
|
||||
lo1);
|
||||
|
||||
|
||||
//
|
||||
// Use rolling CRC.
|
||||
//
|
||||
xprintf("RollingCrc expected =");
|
||||
for (size_t i = 0; i <= kRollWindow; ++i) {
|
||||
crc->RollStartValue(&lo);
|
||||
crc->Compute(kTestData + i, kRollWindow, &lo);
|
||||
xprintf(" 0x%llx", lo);
|
||||
}
|
||||
xprintf("\n");
|
||||
|
||||
crc->RollStart(kTestData, &lo, NULL);
|
||||
xprintf("RollingCrc actual = 0x%llx", lo);
|
||||
for (size_t i = 1; i <= kRollWindow; ++i) {
|
||||
crc->Roll(kTestData[i - 1], kTestData[i - 1 + kRollWindow], &lo, NULL);
|
||||
xprintf(" 0x%llx", lo);
|
||||
}
|
||||
xprintf("\n");
|
||||
|
||||
//
|
||||
// Change initial value.
|
||||
//
|
||||
lo = 0;
|
||||
crc->Compute(kTestData, sizeof(kTestData) - 1, &lo);
|
||||
uint64 lo1_expected = 1;
|
||||
crc->Compute(kTestData, sizeof(kTestData) - 1, &lo1_expected);
|
||||
lo1 = lo;
|
||||
crc->ChangeStartValue(0, 0, // old start value
|
||||
1, 0, // new start value
|
||||
sizeof(kTestData) - 1,
|
||||
&lo1);
|
||||
xprintf("CRC(\"%s\", 0) = 0x%llx, CRC(\"%s\", 1)=0x%llx, expected 0x%llx\n",
|
||||
kTestData, lo, kTestData, lo1, lo1_expected);
|
||||
|
||||
//
|
||||
// Concatenate CRCs.
|
||||
//
|
||||
uint64 start_value = 1;
|
||||
lo = start_value;
|
||||
crc->Compute(kTestData, kTestDataHead, &lo);
|
||||
lo1 = 0;
|
||||
crc->Compute(kTestData + kTestDataHead, kTestDataTail, &lo1);
|
||||
|
||||
uint64 lo2 = lo;
|
||||
crc->Concatenate(lo1, 0, kTestDataTail, &lo2);
|
||||
|
||||
uint64 lo2_expected = start_value;
|
||||
crc->Compute(kTestData, sizeof(kTestData) - 1, &lo2_expected);
|
||||
|
||||
xprintf("CRC(\"%.*s\", 1) = 0x%llx, CRC(\"%s\", 0)=0x%llx, "
|
||||
"CRC(\"%s\", 1) = 0x%llx, expected 0x%llx\n",
|
||||
kTestDataHead, kTestData, lo,
|
||||
kTestData + kTestDataHead, lo1,
|
||||
kTestData, lo2,
|
||||
lo2_expected);
|
||||
|
||||
//
|
||||
// Store complementary CRC so that CRC of a message followed
|
||||
// by complementary CRC value produces predefined result (e.g. 0).
|
||||
//
|
||||
memcpy(buffer, kTestData, sizeof(kTestData) - 1);
|
||||
lo = 1;
|
||||
crc->Compute(buffer, sizeof(kTestData) - 1, &lo);
|
||||
size_t stored_crc_bytes = crc->StoreComplementaryCrc(
|
||||
buffer + sizeof(kTestData) - 1,
|
||||
lo, 0,
|
||||
0);
|
||||
|
||||
// Compute CRC of message + complementary CRC using the same start value
|
||||
// (start value could be changed via ChangeStartValue()).
|
||||
lo1 = 1;
|
||||
crc->Compute(buffer, sizeof(kTestData) - 1 + stored_crc_bytes, &lo1);
|
||||
|
||||
xprintf("Crc of message + complementary CRC = %llx, expected 0\n", lo1);
|
||||
|
||||
//
|
||||
// Store CRC after the message and ensure that CRC of message + its
|
||||
// CRC produces constant result irrespective of message data.
|
||||
//
|
||||
memcpy(buffer, kTestData, sizeof(kTestData) - 1);
|
||||
lo = 1;
|
||||
crc->Compute(buffer, sizeof(kTestData) - 1, &lo);
|
||||
stored_crc_bytes = crc->StoreCrc(buffer + sizeof(kTestData) - 1, lo);
|
||||
|
||||
// Compute CRC of message + its CRC using start value of 0.
|
||||
lo1 = 1;
|
||||
crc->Compute(buffer, sizeof(kTestData) - 1 + stored_crc_bytes, &lo1);
|
||||
|
||||
// Ensure that it matches "predicted" constant value, irrespective
|
||||
// of a message or CRC start value.
|
||||
crc->CrcOfCrc(&lo2);
|
||||
xprintf("CrcOfCrc=%llx, expected %llx\n", lo1, lo2);
|
||||
|
||||
xprintf("\n");
|
||||
}
|
||||
|
||||
void ShowAndDelete(crcutil_interface::CRC *crc) {
|
||||
Show(crc);
|
||||
crc->Delete();
|
||||
}
|
||||
|
||||
int main() {
|
||||
ShowAndDelete(crcutil_interface::CRC::Create(
|
||||
0xEB31D82E, 0, 32, true, 0x1111, 0, kRollWindow,
|
||||
crcutil_interface::CRC::IsSSE42Available(), NULL));
|
||||
ShowAndDelete(crcutil_interface::CRC::Create(
|
||||
0x82f63b78, 0, 32, true, 0x2222, 0, kRollWindow,
|
||||
crcutil_interface::CRC::IsSSE42Available(), NULL));
|
||||
return 0;
|
||||
}
|
||||
520
crcutil-1.0/install-sh
Executable file
520
crcutil-1.0/install-sh
Executable file
@@ -0,0 +1,520 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
nl='
|
||||
'
|
||||
IFS=" "" $nl"
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit=${DOITPROG-}
|
||||
if test -z "$doit"; then
|
||||
doit_exec=exec
|
||||
else
|
||||
doit_exec=$doit
|
||||
fi
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_glob='?'
|
||||
initialize_posix_glob='
|
||||
test "$posix_glob" != "?" || {
|
||||
if (set -f) 2>/dev/null; then
|
||||
posix_glob=
|
||||
else
|
||||
posix_glob=:
|
||||
fi
|
||||
}
|
||||
'
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
no_target_directory=
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve the last data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *' '* | *'
|
||||
'* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-t) dst_arg=$2
|
||||
shift;;
|
||||
|
||||
-T) no_target_directory=true;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dst_arg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dst=$dstdir/`basename "$src"`
|
||||
dstdir_status=0
|
||||
else
|
||||
# Prefer dirname, but fall back on a substitute if dirname fails.
|
||||
dstdir=`
|
||||
(dirname "$dst") 2>/dev/null ||
|
||||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
||||
X"$dst" : 'X\(//\)[^/]' \| \
|
||||
X"$dst" : 'X\(//\)$' \| \
|
||||
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
||||
echo X"$dst" |
|
||||
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)[^/].*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\/\)$/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
/^X\(\/\).*/{
|
||||
s//\1/
|
||||
q
|
||||
}
|
||||
s/.*/./; q'
|
||||
`
|
||||
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||
umask=`umask`
|
||||
case $stripcmd.$umask in
|
||||
# Optimize common cases.
|
||||
*[2367][2367]) mkdir_umask=$umask;;
|
||||
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
mkdir_umask=`expr $umask + 22 \
|
||||
- $umask % 100 % 40 + $umask % 20 \
|
||||
- $umask % 10 % 4 + $umask % 2
|
||||
`;;
|
||||
*) mkdir_umask=$umask,go-w;;
|
||||
esac
|
||||
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
case $umask in
|
||||
*[123567][0-7][0-7])
|
||||
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||
;;
|
||||
*)
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||
|
||||
if (umask $mkdir_umask &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibilities with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writeable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/d" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
-*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
eval "$initialize_posix_glob"
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
$posix_glob set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
$posix_glob set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test -z "$d" && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask=$mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
|
||||
eval "$initialize_posix_glob" &&
|
||||
$posix_glob set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
$posix_glob set +f &&
|
||||
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
376
crcutil-1.0/missing
Executable file
376
crcutil-1.0/missing
Executable file
@@ -0,0 +1,376 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2009-04-28.21; # UTC
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
|
||||
# 2008, 2009 Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
|
||||
sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case $1 in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
autom4te touch the output file, or create a stub one
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
|
||||
\`g' are ignored when checking the name.
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# normalize program name to check for.
|
||||
program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program). This is about non-GNU programs, so use $1 not
|
||||
# $program.
|
||||
case $1 in
|
||||
lex*|yacc*)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
tar*)
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case $program in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case $f in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison*|yacc*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case $LASTARG in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f y.tab.h; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if test ! -f y.tab.c; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex*|flex*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if test $# -ne 1; then
|
||||
eval LASTARG="\${$#}"
|
||||
case $LASTARG in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if test -f "$SRCFILE"; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test ! -f lex.yy.c; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit $?
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n "$sed_output"`
|
||||
test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '
|
||||
/^@setfilename/{
|
||||
s/.* \([^ ]*\) *$/\1/
|
||||
p
|
||||
q
|
||||
}' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
# If the file does not exist, the user really needs makeinfo;
|
||||
# let's fail without touching anything.
|
||||
test -f $file || exit 1
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar*)
|
||||
shift
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar "$@" && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar "$@" && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case $firstarg in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case $firstarg in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
||||
66
crcutil-1.0/tests/aligned_alloc.h
Normal file
66
crcutil-1.0/tests/aligned_alloc.h
Normal file
@@ -0,0 +1,66 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
// Poor man's platform-independent implementation of aligned memory allocator.
|
||||
|
||||
#ifndef CRCUTIL_ALIGNED_ALLOC_H_
|
||||
#define CRCUTIL_ALIGNED_ALLOC_H_
|
||||
|
||||
#include "std_headers.h" // size_t, ptrdiff_t
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
// Allocates a block of memory of "size" bytes so that a field
|
||||
// at "field_offset" is aligned on "align" boundary.
|
||||
//
|
||||
// NB #1: "align" shall be exact power of two.
|
||||
//
|
||||
// NB #2: memory allocated by AlignedAlloc should be release by AlignedFree().
|
||||
//
|
||||
inline void *AlignedAlloc(size_t size,
|
||||
size_t field_offset,
|
||||
size_t align,
|
||||
const void **allocated_mem) {
|
||||
if (align == 0 || (align & (align - 1)) != 0 || align < sizeof(char *)) {
|
||||
align = sizeof(*allocated_mem);
|
||||
}
|
||||
size += align - 1 + sizeof(*allocated_mem);
|
||||
char *allocated_memory = new char[size];
|
||||
char *aligned_memory = allocated_memory + sizeof(*allocated_mem);
|
||||
field_offset &= align - 1;
|
||||
size_t actual_alignment =
|
||||
reinterpret_cast<size_t>(aligned_memory + field_offset) & (align - 1);
|
||||
if (actual_alignment != 0) {
|
||||
aligned_memory += align - actual_alignment;
|
||||
}
|
||||
reinterpret_cast<char **>(aligned_memory)[-1] = allocated_memory;
|
||||
|
||||
if (allocated_mem != NULL) {
|
||||
*allocated_mem = allocated_memory;
|
||||
}
|
||||
|
||||
return aligned_memory;
|
||||
}
|
||||
|
||||
// Frees memory allocated by AlignedAlloc().
|
||||
inline void AlignedFree(void *aligned_memory) {
|
||||
if (aligned_memory != NULL) {
|
||||
char *allocated_memory = reinterpret_cast<char **>(aligned_memory)[-1];
|
||||
delete[] allocated_memory;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_ALIGNED_ALLOC_H_
|
||||
126
crcutil-1.0/tests/bob_jenkins_rng.h
Normal file
126
crcutil-1.0/tests/bob_jenkins_rng.h
Normal file
@@ -0,0 +1,126 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Glorified C++ version of Bob Jenkins' random number generator.
|
||||
// See http://burtleburtle.net/bob/rand/smallprng.html for more details.
|
||||
|
||||
#ifndef CRCUTIL_BOB_JENKINS_RNG_H_
|
||||
#define CRCUTIL_BOB_JENKINS_RNG_H_
|
||||
|
||||
#include "base_types.h"
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
#define _rotl(value, bits) \
|
||||
static_cast<uint32>(((value) << (bits)) + ((value) >> (32 - (bits))))
|
||||
#define _rotl64(value, bits) \
|
||||
static_cast<uint64>(((value) << (bits)) + ((value) >> (64 - (bits))))
|
||||
#endif // !defined(_MSC_VER)
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
#pragma pack(push, 8)
|
||||
|
||||
template<typename T> class BobJenkinsRng;
|
||||
|
||||
template<> class BobJenkinsRng<uint32> {
|
||||
public:
|
||||
typedef uint32 value;
|
||||
|
||||
value Get() {
|
||||
value e = a_ - _rotl(b_, 23);
|
||||
a_ = b_ ^ _rotl(c_, 16);
|
||||
b_ = c_ + _rotl(d_, 11);
|
||||
c_ = d_ + e;
|
||||
d_ = e + a_;
|
||||
return (d_);
|
||||
}
|
||||
|
||||
void Init(value seed) {
|
||||
a_ = 0xf1ea5eed;
|
||||
b_ = seed;
|
||||
c_ = seed;
|
||||
d_ = seed;
|
||||
for (size_t i = 0; i < 20; ++i) {
|
||||
(void) Get();
|
||||
}
|
||||
}
|
||||
|
||||
explicit BobJenkinsRng(value seed) {
|
||||
Init(seed);
|
||||
}
|
||||
|
||||
BobJenkinsRng() {
|
||||
Init(0x1234567);
|
||||
}
|
||||
|
||||
private:
|
||||
value a_;
|
||||
value b_;
|
||||
value c_;
|
||||
value d_;
|
||||
};
|
||||
|
||||
|
||||
#if HAVE_UINT64
|
||||
|
||||
template<> class BobJenkinsRng<uint64> {
|
||||
public:
|
||||
typedef uint64 value;
|
||||
|
||||
value Get() {
|
||||
value e = a_ - _rotl64(b_, 7);
|
||||
a_ = b_ ^ _rotl64(c_, 13);
|
||||
b_ = c_ + _rotl64(d_, 37);
|
||||
c_ = d_ + e;
|
||||
d_ = e + a_;
|
||||
return d_;
|
||||
}
|
||||
|
||||
void Init(value seed) {
|
||||
a_ = 0xf1ea5eed;
|
||||
b_ = seed;
|
||||
c_ = seed;
|
||||
d_ = seed;
|
||||
for (size_t i = 0; i < 20; ++i) {
|
||||
(void) Get();
|
||||
}
|
||||
}
|
||||
|
||||
explicit BobJenkinsRng(value seed) {
|
||||
Init(seed);
|
||||
}
|
||||
|
||||
BobJenkinsRng() {
|
||||
Init(0x1234567);
|
||||
}
|
||||
|
||||
private:
|
||||
value a_;
|
||||
value b_;
|
||||
value c_;
|
||||
value d_;
|
||||
};
|
||||
|
||||
#endif // HAVE_UINT64
|
||||
|
||||
#if !defined(_MSC_VER)
|
||||
#undef _rotl
|
||||
#undef _rotl64
|
||||
#endif // !defined(_MSC_VER)
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_BOB_JENKINS_RNG_H_
|
||||
59
crcutil-1.0/tests/rdtsc.h
Normal file
59
crcutil-1.0/tests/rdtsc.h
Normal file
@@ -0,0 +1,59 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Reads CPU cycle counter on AMD64 and I386 (for performance measurements).
|
||||
// Thanks to __rdtsc() intrinsic, it's easy with Microsoft and Intel
|
||||
// compilers, but real pain with GCC.
|
||||
|
||||
#ifndef CRCUTIL_RDTSC_H_
|
||||
#define CRCUTIL_RDTSC_H_
|
||||
|
||||
#include "platform.h"
|
||||
|
||||
namespace crcutil {
|
||||
|
||||
struct Rdtsc {
|
||||
static inline uint64 Get() {
|
||||
#if defined(_MSC_VER) && (HAVE_AMD64 || HAVE_I386)
|
||||
return __rdtsc();
|
||||
#elif defined(__GNUC__) && HAVE_AMD64
|
||||
int64 result;
|
||||
__asm__ volatile(
|
||||
"rdtsc\n"
|
||||
: "=a" (result));
|
||||
return result;
|
||||
#elif defined(__GNUC__) && HAVE_I386
|
||||
// If "low" and "high" are defined as "uint64" to
|
||||
// avoid explicit cast to uint64, GCC 4.5.0 in "-m32" mode
|
||||
// fails with "impossible register constraint" error
|
||||
// (no, it is not because one cannot use 64-bit value as argument
|
||||
// for 32-bit register, but because its register allocator
|
||||
// could not resolve a conflict under high register pressure).
|
||||
uint32 low;
|
||||
uint32 high;
|
||||
__asm__ volatile(
|
||||
"rdtsc\n"
|
||||
: "=a" (low), "=d" (high));
|
||||
return ((static_cast<uint64>(high) << 32) | low);
|
||||
#else
|
||||
// It is hard to find low overhead timer with
|
||||
// sub-millisecond resolution and granularity.
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace crcutil
|
||||
|
||||
#endif // CRCUTIL_RDTSC_H_
|
||||
55
crcutil-1.0/tests/set_hi_pri.c
Normal file
55
crcutil-1.0/tests/set_hi_pri.c
Normal file
@@ -0,0 +1,55 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Raises priority of test process and main thread to reduce
|
||||
// timing variations caused by context switches. Windows only.
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
// Disable warnings generated by "windows.h" compiled with -Wall.
|
||||
|
||||
// N bytes padding added after data member X
|
||||
#pragma warning(disable: 4820)
|
||||
|
||||
// no function prototype given: converting '()' to '(void)'
|
||||
#pragma warning(disable: 4255)
|
||||
|
||||
// '__midl' is not defined as a preprocessor macro,
|
||||
// replacing with '0' for '#if/#elif'
|
||||
#pragma warning(disable: 4668)
|
||||
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <windows.h>
|
||||
#endif // defined(_WIN32)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif // __cplusplus
|
||||
void SetHiPri(void)
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
#if 1
|
||||
// These setting are extremely dangerous. E.g. if app hits infinite loop,
|
||||
// computer may turn unresponsive and will require a power cycle.
|
||||
// Use for final testing only.
|
||||
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
|
||||
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
|
||||
#else
|
||||
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
|
||||
SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
|
||||
#endif
|
||||
#endif // defined(_WIN32)
|
||||
}
|
||||
176
crcutil-1.0/tests/unittest.cc
Normal file
176
crcutil-1.0/tests/unittest.cc
Normal file
@@ -0,0 +1,176 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "unittest.h"
|
||||
|
||||
extern "C" void SetHiPri();
|
||||
|
||||
using namespace crcutil;
|
||||
|
||||
#if !defined(HAVE_INT128)
|
||||
#if defined(__GNUC__) && HAVE_AMD64
|
||||
#define HAVE_INT128 1
|
||||
#else
|
||||
#define HAVE_INT128 0
|
||||
#endif // defined(__GNUC__) && HAVE_AMD64
|
||||
#endif // defined(HAVE_INT128)
|
||||
|
||||
#if HAVE_INT128
|
||||
typedef unsigned int uint128_t __attribute__((mode(TI)));
|
||||
#endif // HAVE_INT128
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
bool test_perf_main = true;
|
||||
bool test_perf_all = false;
|
||||
bool canonical = false;
|
||||
|
||||
for (int i = 1; i < argc; ++i) {
|
||||
if (strcmp(argv[i], "--noperf") == 0) {
|
||||
test_perf_main = false;
|
||||
test_perf_all = false;
|
||||
} else if (strcmp(argv[i], "--perfall") == 0) {
|
||||
test_perf_all = true;
|
||||
} else if (strcmp(argv[i], "--canonical") == 0) {
|
||||
canonical = true;
|
||||
} else if (strcmp(argv[i], "help") == 0) {
|
||||
fprintf(stderr, "Usage: unittest {options}\n");
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Options:\n");
|
||||
fprintf(stderr, " --canonical - test canonical variant of CRC\n");
|
||||
fprintf(stderr, " --noperf - do not test performance\n");
|
||||
fprintf(stderr, " --perfall - test performance of all CRC width "
|
||||
"(not just 32, 64, and 128)\n");
|
||||
fprintf(stderr, "\n");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SetHiPri();
|
||||
|
||||
CrcVerifier v;
|
||||
|
||||
CreateTest<uint64, uint64, uint64>(
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "u64/u64/u64", test_perf_main, &v);
|
||||
CreateTest<uint64, uint64, uint32>(
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "u64/u64/u32", test_perf_all, &v);
|
||||
|
||||
CreateTest<uint64, uint64, uint64>(
|
||||
32, 0, 0x82f63b78, "u64/u64/u64", test_perf_main, &v);
|
||||
CreateTest<uint32, uint32, uint32>(
|
||||
32, 0, 0x82f63b78, "u32/u32/u32", test_perf_main, &v);
|
||||
|
||||
CreateTest<uint64, uint32, uint32>(
|
||||
32, 0, 0x82f63b78, "u64/u32/u32", test_perf_all, &v);
|
||||
CreateTest<uint64, uint32, uint64>(
|
||||
32, 0, 0x82f63b78, "u64/u32/u64", test_perf_all, &v);
|
||||
|
||||
CreateTest<uint64, uint64, uint64>(
|
||||
15, 0, 0x00004CD1, "u64/u64/u64", test_perf_all, &v);
|
||||
CreateTest<uint32, uint32, uint32>(
|
||||
15, 0, 0x00004CD1, "u32/u32/u32", test_perf_all, &v);
|
||||
|
||||
CreateTest<uint64, uint64, uint64>(
|
||||
07, 0, 0x00000048, "u64/u64/u64", test_perf_all, &v);
|
||||
CreateTest<uint32, uint32, uint32>(
|
||||
07, 0, 0x00000048, "u32/u32/u32", test_perf_all, &v);
|
||||
|
||||
#if HAVE_SSE2
|
||||
CreateTest<uint128_sse2, uint128_sse2, uint64>(
|
||||
128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"sse2/sse2/u64", test_perf_main, &v);
|
||||
CreateTest<uint128_sse2, uint128_sse2, uint32>(
|
||||
128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"sse2/sse2/u32", test_perf_main, &v);
|
||||
CreateTest<uint128_sse2, uint128_sse2, uint64>(
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull,
|
||||
"sse2/sse2/u64", test_perf_main, &v);
|
||||
CreateTest<uint128_sse2, uint128_sse2, uint32>(
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull,
|
||||
"sse2/sse2/u32", test_perf_main, &v);
|
||||
CreateTest<uint128_sse2, uint128_sse2, uint64>(
|
||||
32, 0, 0x82f63b78,
|
||||
"sse2/sse2/u64", test_perf_main, &v);
|
||||
CreateTest<uint128_sse2, uint128_sse2, uint32>(
|
||||
32, 0, 0x82f63b78,
|
||||
"sse2/sse2/u32", test_perf_main, &v);
|
||||
#endif // HAVE_SSE2
|
||||
#if HAVE_INT128
|
||||
CreateTest<uint128_t, uint128_t, uint64>(
|
||||
128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"u128/u128/u64", test_perf_main, &v);
|
||||
CreateTest<uint128_t, uint128_t, uint32>(
|
||||
128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"u128/u128/u32", test_perf_main, &v);
|
||||
#endif // HAVE_INT128
|
||||
|
||||
v.add(new CrcVerifierFactory<uint64, uint64, uint64, 2>(canonical,
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "CRC-64-64/64/2", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint64, uint64, uint64, 3>(canonical,
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "CRC-64-64/64/3", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint64, uint64, uint64, 4>(canonical,
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "CRC-64-64/64/4", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint64, uint64, uint64, 5>(canonical,
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "CRC-64-64/64/5", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint64, uint64, uint64, 6>(canonical,
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "CRC-64-64/64/6", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint64, uint64, uint64, 7>(canonical,
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "CRC-64-64/64/7", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint64, uint64, uint64, 8>(canonical,
|
||||
64, 0, 0x9a6c9329ac4bc9b5ull, "CRC-64-64/64/8", test_perf_main, true));
|
||||
|
||||
#if HAVE_SSE2
|
||||
v.add(new CrcVerifierFactory<uint128_sse2, uint128_sse2, size_t, 2>(
|
||||
canonical, 128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"CRC-128-sse2/size_t/2", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint128_sse2, uint128_sse2, size_t, 3>(
|
||||
canonical, 128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"CRC-128-sse2/size_t/3", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint128_sse2, uint128_sse2, size_t, 4>(
|
||||
canonical, 128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"CRC-128-sse2/size_t/4", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint128_sse2, uint128_sse2, size_t, 5>(
|
||||
canonical, 128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"CRC-128-sse2/size_t/5", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint128_sse2, uint128_sse2, size_t, 6>(
|
||||
canonical, 128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"CRC-128-sse2/size_t/6", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint128_sse2, uint128_sse2, size_t, 7>(
|
||||
canonical, 128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"CRC-128-sse2/size_t/7", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<uint128_sse2, uint128_sse2, size_t, 8>(
|
||||
canonical, 128, 0xeca61dca77452c88ull, 0x21fe865c87bc0e61ull,
|
||||
"CRC-128-sse2/size_t/8", test_perf_main, true));
|
||||
#endif // HAVE_SSE2
|
||||
|
||||
v.add(new CrcVerifierFactory<size_t, size_t, size_t, 2>(canonical,
|
||||
32, 0, 0x82f63b78, "CRC-32-size_t/size_t/2", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<size_t, size_t, size_t, 3>(canonical,
|
||||
32, 0, 0x82f63b78, "CRC-32-size_t/size_t/3", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<size_t, size_t, size_t, 4>(canonical,
|
||||
32, 0, 0x82f63b78, "CRC-32-size_t/size_t/4", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<size_t, size_t, size_t, 5>(canonical,
|
||||
32, 0, 0x82f63b78, "CRC-32-size_t/size_t/5", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<size_t, size_t, size_t, 6>(canonical,
|
||||
32, 0, 0x82f63b78, "CRC-32-size_t/size_t/6", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<size_t, size_t, size_t, 7>(canonical,
|
||||
32, 0, 0x82f63b78, "CRC-32-size_t/size_t/7", test_perf_main, true));
|
||||
v.add(new CrcVerifierFactory<size_t, size_t, size_t, 8>(canonical,
|
||||
32, 0, 0x82f63b78, "CRC-32-size_t/size_t/8", test_perf_main, true));
|
||||
|
||||
v.TestFunctionality();
|
||||
v.TestPerformance();
|
||||
|
||||
return (0);
|
||||
}
|
||||
1105
crcutil-1.0/tests/unittest.h
Normal file
1105
crcutil-1.0/tests/unittest.h
Normal file
File diff suppressed because it is too large
Load Diff
45
crcutil-1.0/tests/unittest_helper.h
Normal file
45
crcutil-1.0/tests/unittest_helper.h
Normal file
@@ -0,0 +1,45 @@
|
||||
// Copyright 2010 Google Inc. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// A set of useful macros for crcutil_unittest.
|
||||
|
||||
#ifndef CRCUTIL_UNITTEST_HELPER_H_
|
||||
#define CRCUTIL_UNITTEST_HELPER_H_
|
||||
|
||||
#include "std_headers.h" // printf
|
||||
|
||||
#if !defined(CHECK)
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#define DEBUG_BREAK() __debugbreak()
|
||||
#else
|
||||
#define DEBUG_BREAK() exit(1)
|
||||
#endif // defined(_MSC_VER)
|
||||
|
||||
#define CHECK(cond) do { \
|
||||
if (!(cond)) { \
|
||||
fprintf(stderr, "%s, %d: ASSERT(%s)\n", __FILE__, __LINE__, #cond); \
|
||||
fflush(stderr); \
|
||||
DEBUG_BREAK(); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define CHECK_GE(a, b) CHECK((a) >= (b))
|
||||
#define CHECK_NE(a, b) CHECK((a) != (b))
|
||||
#define CHECK_EQ(a, b) CHECK((a) == (b))
|
||||
|
||||
#endif // !defined(CHECK)
|
||||
|
||||
#endif // CRCUTIL_UNITTEST_HELPER_H_
|
||||
147
findcrcs.cc
Normal file
147
findcrcs.cc
Normal file
@@ -0,0 +1,147 @@
|
||||
/*
|
||||
Copyright 2013, V.
|
||||
|
||||
This file is part of findcrcs.
|
||||
|
||||
findcrcs is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
findcrcs is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with findcrcs. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
findcrcs is using crcutil-1.0 for providing fast crc calculations
|
||||
crcutil is made by Andrew Kadatch and Bob Jenkins and can be found on http://code.google.com/p/crcutil/
|
||||
Do not contact them for support on findcrcs
|
||||
|
||||
Also, findcrcs makes use of the MD5 implementation of Alexander Peslyak.
|
||||
This is found at http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
|
||||
A small casting patch was made to support g++.
|
||||
This patch is released under the same license as the original md5.c file.
|
||||
*/
|
||||
|
||||
// Usage: findcrcs <file> <size of window> <crc> [more crcs...]
|
||||
// not yet idiotproof
|
||||
// code comments also not included (yet, if ever)
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "md5.h"
|
||||
#include "interface.h"
|
||||
|
||||
#ifndef O_BINARY
|
||||
#define O_BINARY 0
|
||||
#endif
|
||||
|
||||
#define BUFFERSIZE 65536
|
||||
#define MD5_DIGEST_LENGTH 16
|
||||
|
||||
void checkcrcs(unsigned int crc, unsigned int crcs[], int totalcrcs, int fd, int offset, int windowsize);
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int i1, i2, fd1, fd2, fd3, filesize, windowsize, readbytes;
|
||||
char *filename;
|
||||
crcutil_interface::CRC *crc;
|
||||
unsigned long long returnvalue;
|
||||
unsigned char buffer1[BUFFERSIZE], buffer2[BUFFERSIZE];
|
||||
struct stat stats;
|
||||
unsigned int crcs[argc - 3];
|
||||
|
||||
if (argc < 4) {
|
||||
fprintf(stderr, "usage: findcrcs <file> <size of window> <crc> [more crcs...]\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
filename = argv[1];
|
||||
if (stat(filename, &stats) == -1) {
|
||||
perror("findcrcs");
|
||||
return 1;
|
||||
}
|
||||
filesize = stats.st_size;
|
||||
|
||||
windowsize = atoi(argv[2]);
|
||||
if (windowsize > filesize) {
|
||||
fprintf(stderr, "findcrcs: window size too big\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
for (i1 = 0; i1 < argc - 3; i1++) {
|
||||
crcs[i1] = (unsigned int)strtoul(argv[i1 + 3], 0, 16);
|
||||
}
|
||||
|
||||
crc = crcutil_interface::CRC::Create(0xedb88320, 0, 32, true, 0, 0, windowsize, 0, NULL);
|
||||
|
||||
fd1 = open(filename, O_RDONLY | O_BINARY);
|
||||
fd2 = open(filename, O_RDONLY | O_BINARY);
|
||||
fd3 = open(filename, O_RDONLY | O_BINARY);
|
||||
|
||||
returnvalue = 0;
|
||||
for (i1 = 0; i1 < windowsize / BUFFERSIZE; i1++) {
|
||||
read(fd1, &buffer1, BUFFERSIZE);
|
||||
crc->Compute(&buffer1, BUFFERSIZE, &returnvalue);
|
||||
}
|
||||
if ((windowsize % BUFFERSIZE) != 0) {
|
||||
read(fd1, &buffer1, (windowsize % BUFFERSIZE));
|
||||
crc->Compute(&buffer1, (windowsize % BUFFERSIZE), &returnvalue);
|
||||
}
|
||||
checkcrcs((unsigned int)returnvalue, crcs, argc - 3, fd3, 0, windowsize);
|
||||
|
||||
for (i1 = 0; i1 < ((filesize - windowsize) / BUFFERSIZE) + 1; i1++) {
|
||||
readbytes = read(fd1, &buffer1, BUFFERSIZE);
|
||||
read(fd2, &buffer2, BUFFERSIZE);
|
||||
for (i2 = 0; i2 < readbytes; i2++) {
|
||||
crc->Roll(buffer2[i2], buffer1[i2], &returnvalue, NULL);
|
||||
checkcrcs((unsigned int)returnvalue, crcs, argc - 3, fd3, (i1 * BUFFERSIZE) + i2 + 1, windowsize);
|
||||
}
|
||||
}
|
||||
|
||||
close(fd3);
|
||||
close(fd2);
|
||||
close(fd1);
|
||||
crc->Delete();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void checkcrcs(unsigned int crc, unsigned int crcs[], int totalcrcs, int fd, int offset, int windowsize) {
|
||||
int i1, i2;
|
||||
unsigned int buffer[BUFFERSIZE];
|
||||
unsigned char md5[MD5_DIGEST_LENGTH];
|
||||
MD5_CTX ctx;
|
||||
|
||||
for (i1 = 0; i1 < totalcrcs; i1++) {
|
||||
if (crc == crcs[i1]) {
|
||||
lseek(fd, offset, SEEK_SET);
|
||||
MD5_Init(&ctx);
|
||||
|
||||
for (i2 = 0; i2 < windowsize / BUFFERSIZE; i2++) {
|
||||
read(fd, &buffer, BUFFERSIZE);
|
||||
MD5_Update(&ctx, &buffer, BUFFERSIZE);
|
||||
}
|
||||
if ((windowsize % BUFFERSIZE) != 0) {
|
||||
read(fd, &buffer, (windowsize % BUFFERSIZE));
|
||||
MD5_Update(&ctx, &buffer, (windowsize % BUFFERSIZE));
|
||||
}
|
||||
|
||||
MD5_Final(md5, &ctx);
|
||||
printf("%d %08x ", offset, crc);
|
||||
for (i2 = 0; i2 < MD5_DIGEST_LENGTH; i2++) {
|
||||
printf("%02x", md5[i2]);
|
||||
}
|
||||
printf("\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
295
md5.c
Normal file
295
md5.c
Normal file
@@ -0,0 +1,295 @@
|
||||
/*
|
||||
* This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
|
||||
* MD5 Message-Digest Algorithm (RFC 1321).
|
||||
*
|
||||
* Homepage:
|
||||
* http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
|
||||
*
|
||||
* Author:
|
||||
* Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
|
||||
*
|
||||
* This software was written by Alexander Peslyak in 2001. No copyright is
|
||||
* claimed, and the software is hereby placed in the public domain.
|
||||
* In case this attempt to disclaim copyright and place the software in the
|
||||
* public domain is deemed null and void, then the software is
|
||||
* Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
|
||||
* general public under the following terms:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted.
|
||||
*
|
||||
* There's ABSOLUTELY NO WARRANTY, express or implied.
|
||||
*
|
||||
* (This is a heavily cut-down "BSD license".)
|
||||
*
|
||||
* This differs from Colin Plumb's older public domain implementation in that
|
||||
* no exactly 32-bit integer data type is required (any 32-bit or wider
|
||||
* unsigned integer data type will do), there's no compile-time endianness
|
||||
* configuration, and the function prototypes match OpenSSL's. No code from
|
||||
* Colin Plumb's implementation has been reused; this comment merely compares
|
||||
* the properties of the two independent implementations.
|
||||
*
|
||||
* The primary goals of this implementation are portability and ease of use.
|
||||
* It is meant to be fast, but not as fast as possible. Some known
|
||||
* optimizations are not included to reduce source code size and avoid
|
||||
* compile-time configuration.
|
||||
*/
|
||||
|
||||
#ifndef HAVE_OPENSSL
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "md5.h"
|
||||
|
||||
/*
|
||||
* The basic MD5 functions.
|
||||
*
|
||||
* F and G are optimized compared to their RFC 1321 definitions for
|
||||
* architectures that lack an AND-NOT instruction, just like in Colin Plumb's
|
||||
* implementation.
|
||||
*/
|
||||
#define F(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
|
||||
#define G(x, y, z) ((y) ^ ((z) & ((x) ^ (y))))
|
||||
#define H(x, y, z) ((x) ^ (y) ^ (z))
|
||||
#define I(x, y, z) ((y) ^ ((x) | ~(z)))
|
||||
|
||||
/*
|
||||
* The MD5 transformation for all four rounds.
|
||||
*/
|
||||
#define STEP(f, a, b, c, d, x, t, s) \
|
||||
(a) += f((b), (c), (d)) + (x) + (t); \
|
||||
(a) = (((a) << (s)) | (((a) & 0xffffffff) >> (32 - (s)))); \
|
||||
(a) += (b);
|
||||
|
||||
/*
|
||||
* SET reads 4 input bytes in little-endian byte order and stores them
|
||||
* in a properly aligned word in host byte order.
|
||||
*
|
||||
* The check for little-endian architectures that tolerate unaligned
|
||||
* memory accesses is just an optimization. Nothing will break if it
|
||||
* doesn't work.
|
||||
*/
|
||||
#if defined(__i386__) || defined(__x86_64__) || defined(__vax__)
|
||||
#define SET(n) \
|
||||
(*(MD5_u32plus *)&ptr[(n) * 4])
|
||||
#define GET(n) \
|
||||
SET(n)
|
||||
#else
|
||||
#define SET(n) \
|
||||
(ctx->block[(n)] = \
|
||||
(MD5_u32plus)ptr[(n) * 4] | \
|
||||
((MD5_u32plus)ptr[(n) * 4 + 1] << 8) | \
|
||||
((MD5_u32plus)ptr[(n) * 4 + 2] << 16) | \
|
||||
((MD5_u32plus)ptr[(n) * 4 + 3] << 24))
|
||||
#define GET(n) \
|
||||
(ctx->block[(n)])
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This processes one or more 64-byte data blocks, but does NOT update
|
||||
* the bit counters. There are no alignment requirements.
|
||||
*/
|
||||
static void *body(MD5_CTX *ctx, void *data, unsigned long size)
|
||||
{
|
||||
unsigned char *ptr;
|
||||
MD5_u32plus a, b, c, d;
|
||||
MD5_u32plus saved_a, saved_b, saved_c, saved_d;
|
||||
|
||||
ptr = (unsigned char *)data;
|
||||
|
||||
a = ctx->a;
|
||||
b = ctx->b;
|
||||
c = ctx->c;
|
||||
d = ctx->d;
|
||||
|
||||
do {
|
||||
saved_a = a;
|
||||
saved_b = b;
|
||||
saved_c = c;
|
||||
saved_d = d;
|
||||
|
||||
/* Round 1 */
|
||||
STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
|
||||
STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
|
||||
STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
|
||||
STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
|
||||
STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
|
||||
STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
|
||||
STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
|
||||
STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
|
||||
STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
|
||||
STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
|
||||
STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
|
||||
STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
|
||||
STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
|
||||
STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
|
||||
STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
|
||||
STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
|
||||
|
||||
/* Round 2 */
|
||||
STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
|
||||
STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
|
||||
STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
|
||||
STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
|
||||
STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
|
||||
STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
|
||||
STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
|
||||
STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
|
||||
STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
|
||||
STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
|
||||
STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
|
||||
STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
|
||||
STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
|
||||
STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
|
||||
STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
|
||||
STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
|
||||
|
||||
/* Round 3 */
|
||||
STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
|
||||
STEP(H, d, a, b, c, GET(8), 0x8771f681, 11)
|
||||
STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
|
||||
STEP(H, b, c, d, a, GET(14), 0xfde5380c, 23)
|
||||
STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
|
||||
STEP(H, d, a, b, c, GET(4), 0x4bdecfa9, 11)
|
||||
STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
|
||||
STEP(H, b, c, d, a, GET(10), 0xbebfbc70, 23)
|
||||
STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
|
||||
STEP(H, d, a, b, c, GET(0), 0xeaa127fa, 11)
|
||||
STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
|
||||
STEP(H, b, c, d, a, GET(6), 0x04881d05, 23)
|
||||
STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
|
||||
STEP(H, d, a, b, c, GET(12), 0xe6db99e5, 11)
|
||||
STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
|
||||
STEP(H, b, c, d, a, GET(2), 0xc4ac5665, 23)
|
||||
|
||||
/* Round 4 */
|
||||
STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
|
||||
STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
|
||||
STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
|
||||
STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
|
||||
STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
|
||||
STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
|
||||
STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
|
||||
STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
|
||||
STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
|
||||
STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
|
||||
STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
|
||||
STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
|
||||
STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
|
||||
STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
|
||||
STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
|
||||
STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
|
||||
|
||||
a += saved_a;
|
||||
b += saved_b;
|
||||
c += saved_c;
|
||||
d += saved_d;
|
||||
|
||||
ptr += 64;
|
||||
} while (size -= 64);
|
||||
|
||||
ctx->a = a;
|
||||
ctx->b = b;
|
||||
ctx->c = c;
|
||||
ctx->d = d;
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void MD5_Init(MD5_CTX *ctx)
|
||||
{
|
||||
ctx->a = 0x67452301;
|
||||
ctx->b = 0xefcdab89;
|
||||
ctx->c = 0x98badcfe;
|
||||
ctx->d = 0x10325476;
|
||||
|
||||
ctx->lo = 0;
|
||||
ctx->hi = 0;
|
||||
}
|
||||
|
||||
void MD5_Update(MD5_CTX *ctx, void *data, unsigned long size)
|
||||
{
|
||||
MD5_u32plus saved_lo;
|
||||
unsigned long used, free;
|
||||
|
||||
saved_lo = ctx->lo;
|
||||
if ((ctx->lo = (saved_lo + size) & 0x1fffffff) < saved_lo)
|
||||
ctx->hi++;
|
||||
ctx->hi += size >> 29;
|
||||
|
||||
used = saved_lo & 0x3f;
|
||||
|
||||
if (used) {
|
||||
free = 64 - used;
|
||||
|
||||
if (size < free) {
|
||||
memcpy(&ctx->buffer[used], data, size);
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(&ctx->buffer[used], data, free);
|
||||
data = (unsigned char *)data + free;
|
||||
size -= free;
|
||||
body(ctx, ctx->buffer, 64);
|
||||
}
|
||||
|
||||
if (size >= 64) {
|
||||
data = body(ctx, data, size & ~(unsigned long)0x3f);
|
||||
size &= 0x3f;
|
||||
}
|
||||
|
||||
memcpy(ctx->buffer, data, size);
|
||||
}
|
||||
|
||||
void MD5_Final(unsigned char *result, MD5_CTX *ctx)
|
||||
{
|
||||
unsigned long used, free;
|
||||
|
||||
used = ctx->lo & 0x3f;
|
||||
|
||||
ctx->buffer[used++] = 0x80;
|
||||
|
||||
free = 64 - used;
|
||||
|
||||
if (free < 8) {
|
||||
memset(&ctx->buffer[used], 0, free);
|
||||
body(ctx, ctx->buffer, 64);
|
||||
used = 0;
|
||||
free = 64;
|
||||
}
|
||||
|
||||
memset(&ctx->buffer[used], 0, free - 8);
|
||||
|
||||
ctx->lo <<= 3;
|
||||
ctx->buffer[56] = ctx->lo;
|
||||
ctx->buffer[57] = ctx->lo >> 8;
|
||||
ctx->buffer[58] = ctx->lo >> 16;
|
||||
ctx->buffer[59] = ctx->lo >> 24;
|
||||
ctx->buffer[60] = ctx->hi;
|
||||
ctx->buffer[61] = ctx->hi >> 8;
|
||||
ctx->buffer[62] = ctx->hi >> 16;
|
||||
ctx->buffer[63] = ctx->hi >> 24;
|
||||
|
||||
body(ctx, ctx->buffer, 64);
|
||||
|
||||
result[0] = ctx->a;
|
||||
result[1] = ctx->a >> 8;
|
||||
result[2] = ctx->a >> 16;
|
||||
result[3] = ctx->a >> 24;
|
||||
result[4] = ctx->b;
|
||||
result[5] = ctx->b >> 8;
|
||||
result[6] = ctx->b >> 16;
|
||||
result[7] = ctx->b >> 24;
|
||||
result[8] = ctx->c;
|
||||
result[9] = ctx->c >> 8;
|
||||
result[10] = ctx->c >> 16;
|
||||
result[11] = ctx->c >> 24;
|
||||
result[12] = ctx->d;
|
||||
result[13] = ctx->d >> 8;
|
||||
result[14] = ctx->d >> 16;
|
||||
result[15] = ctx->d >> 24;
|
||||
|
||||
memset(ctx, 0, sizeof(*ctx));
|
||||
}
|
||||
|
||||
#endif
|
||||
45
md5.h
Normal file
45
md5.h
Normal file
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
|
||||
* MD5 Message-Digest Algorithm (RFC 1321).
|
||||
*
|
||||
* Homepage:
|
||||
* http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
|
||||
*
|
||||
* Author:
|
||||
* Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
|
||||
*
|
||||
* This software was written by Alexander Peslyak in 2001. No copyright is
|
||||
* claimed, and the software is hereby placed in the public domain.
|
||||
* In case this attempt to disclaim copyright and place the software in the
|
||||
* public domain is deemed null and void, then the software is
|
||||
* Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
|
||||
* general public under the following terms:
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted.
|
||||
*
|
||||
* There's ABSOLUTELY NO WARRANTY, express or implied.
|
||||
*
|
||||
* See md5.c for more information.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
#include <openssl/md5.h>
|
||||
#elif !defined(_MD5_H)
|
||||
#define _MD5_H
|
||||
|
||||
/* Any 32-bit or wider unsigned integer data type will do */
|
||||
typedef unsigned int MD5_u32plus;
|
||||
|
||||
typedef struct {
|
||||
MD5_u32plus lo, hi;
|
||||
MD5_u32plus a, b, c, d;
|
||||
unsigned char buffer[64];
|
||||
MD5_u32plus block[16];
|
||||
} MD5_CTX;
|
||||
|
||||
extern void MD5_Init(MD5_CTX *ctx);
|
||||
extern void MD5_Update(MD5_CTX *ctx, void *data, unsigned long size);
|
||||
extern void MD5_Final(unsigned char *result, MD5_CTX *ctx);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user