diff options
author | f0b0s <f0b0s@yandex-team.ru> | 2022-02-10 16:46:51 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:51 +0300 |
commit | deabc5260ac2e17b8f5152ee060bec1740613540 (patch) | |
tree | bc498b2fe3c447d13c2abea85b429fee8dd485ef /contrib/libs/crcutil/rdtsc.h | |
parent | 2e6009493e74f88988b81f219b301f450331648d (diff) | |
download | ydb-deabc5260ac2e17b8f5152ee060bec1740613540.tar.gz |
Restoring authorship annotation for <f0b0s@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/crcutil/rdtsc.h')
-rw-r--r-- | contrib/libs/crcutil/rdtsc.h | 118 |
1 files changed, 59 insertions, 59 deletions
diff --git a/contrib/libs/crcutil/rdtsc.h b/contrib/libs/crcutil/rdtsc.h index 57aea1f1fb..ead586f842 100644 --- a/contrib/libs/crcutil/rdtsc.h +++ b/contrib/libs/crcutil/rdtsc.h @@ -1,59 +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_ +// 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_ |