diff --git a/benchmark/Jamfile.v2 b/benchmark/Jamfile.v2 index 9fc614c..f61061a 100644 --- a/benchmark/Jamfile.v2 +++ b/benchmark/Jamfile.v2 @@ -1,4 +1,4 @@ -# Build endian/test/speed_test.cpp +# Build and install benchmark programs # Copyright Beman Dawes 2013 # Distributed under the Boost Software License, Version 1.0. @@ -7,16 +7,19 @@ project : source-location ../test : requirements msvc:on + /boost/timer//boost_timer ; SOURCES = speed_test speed_test_functions ; exe "speed_test" - : $(SOURCES).cpp ../../timer/build//boost_timer + : $(SOURCES).cpp : gcc:-march=native ; -exe "loop_time_test" - : loop_time_test.cpp ../../timer/build//boost_timer +exe "loop_time_test" + : loop_time_test.cpp : gcc:-march=native ; + +install bin : speed_test loop_time_test ; diff --git a/benchmark/test.bat b/benchmark/test.bat new file mode 100644 index 0000000..9007d32 --- /dev/null +++ b/benchmark/test.bat @@ -0,0 +1,8 @@ +b2 -a toolset=msvc-14.0 variant=release link=static address-model=64 +bin\loop_time_test 1000 >msvc-loop-time.html +msvc-loop-time.html + +echo The GCC build does not work, probably because of a bjam/b2 bug +b2 -a toolset=gcc-c++11 variant=release link=static address-model=64 +bin\loop_time_test 1000 >gcc-loop-time.html +gcc-loop-time.html diff --git a/doc/choosing_approach.html b/doc/choosing_approach.html index a1208be..b50386b 100644 --- a/doc/choosing_approach.html +++ b/doc/choosing_approach.html @@ -296,13 +296,60 @@ conversion from native to the desired output endianness.

typically used regardless of record content or other circumstances

Convert -generally only as needed, but locally in anticipation of need

+only as needed, except locally in anticipation of need

This pattern in general defers conversion but for specific local needs does -anticipatory conversion.

+anticipatory conversion. Although particularly appropriate when coupled with the endian buffer +or arithmetic types, it also works well with the conversion functions.

-

This pattern is particularly appropriate when coupled with the endian buffer -or arithmetic types.

+

Example:

+ +
+
struct data_t
+{
+  big_int32_t   v1;
+  big_int32_t   v2;
+  big_int32_t   v3;
+};
+
+data_t data;
+
+read(data);
+
+...
+++v1;
+...
+
+int32_t v3_temp = data.v3;  // hoist conversion out of loop
+
+for (int32_t i = 0; i < large-number; ++i)
+{
+  ... lengthy computation that accesses v3_temp many times ...
+}
+data.v3 = v3_temp; 
+
+write(data);
+
+
+ +

In general the above pseudo-code leaves conversion up to the endian +arithmetic type big_int32_t. But to avoid conversion inside the +loop, a temporary is created before the loop is entered, and then used to set +the new value of data.v3 after the loop is complete.

+ +
+ +

Question: Won't the compiler's optimizer hoist the conversion out +of the loop anyhow?

+ +

Answer: VC++ 2015 Preview, and probably others, does not, even for +a toy test program. Although the savings is small (two register +bswap instructions), the cost might +be significant if the loop is repeated enough times. On the other hand, the +program may be so dominated by I/O time that even a lengthy loop will be +immaterial.

+ +

Use case examples

@@ -363,7 +410,7 @@ arithmetic approach.


Last revised: -04 January, 2015

+08 January, 2015

© Copyright Beman Dawes, 2011, 2013, 2014

Distributed under the Boost Software License, Version 1.0. See www.boost.org/ LICENSE_1_0.txt

diff --git a/doc/index.html b/doc/index.html index ed49cbb..0fce3e5 100644 --- a/doc/index.html +++ b/doc/index.html @@ -200,6 +200,9 @@ intrinsics as a source of performance issues.

Consider this problem:

+
+
+
@@ -240,15 +243,20 @@ native_to_big_inplace(x);
+
+
+

There will be no performance difference between the two approaches in release builds, -regardless of the native endianness of the machine. That's because optimizing compilers will likely -generate exactly the same code for each. That conclusion was confirmed by +regardless of the native endianness of the machine. That's because optimizing compilers will generate exactly the same code for each. That conclusion was confirmed by studying the generated assembly code for GCC and Visual C++. Furthermore, time spent doing I/O will determine the speed of this application.

Now consider a slightly different problem: 

+
+
+
@@ -292,6 +300,9 @@ native_to_big_inplace(x);
+
+
+

With the Endian arithmetic approach, on little endian platforms an implicit conversion from and then back to big endian is done inside the loop. With the Endian conversion function approach, the user has ensured the conversions are done outside the loop, so the @@ -305,11 +316,12 @@ CPU @ 3.40GHz under Windows 7.

Caveat emptor: The Windows CPU timer has very high granularity. Repeated runs of the same tests often yield considerably different results.

-

See loop_time_test.cpp and -Jamfile.v2 for the actual code and build -setup. -(For GCC 4.7, there are no 16-bit intrinsics, so they are emulated by using -32-bit intrinsics.)

+

See loop_time_test.cpp and +Jamfile.v2 for the actual code and build +setup.

+ +
+
@@ -399,10 +411,16 @@ setup.
GNU C++ version 4.7.0
+
+
+

Comment: Note that the 32-bit aligned big endian timings are the same with or without intrinsics turned on. Presumably the optimizer is recognizing the byte swapping and applying the intrinsics itself.

+
+
+ @@ -492,6 +510,10 @@ optimizer is recognizing the byte swapping and applying the intrinsics itself. + + + +

Conclusions

When program logic dictates many more conversions for the Endian arithmetic @@ -654,7 +676,7 @@ Blechmann, Tim Moore, tymofey, Tomas Puverle, Vincente Botet, Yuval Ronen and Vitaly Budovsk. Apologies if anyone has been missed.


Last revised: -06 January, 2015

+12 January, 2015

© Copyright Beman Dawes, 2011, 2013

Distributed under the Boost Software License, Version 1.0. See www.boost.org/ LICENSE_1_0.txt

diff --git a/doc/styles.css b/doc/styles.css index d1b8958..f761bcb 100644 --- a/doc/styles.css +++ b/doc/styles.css @@ -3,6 +3,7 @@ body { font-family: sans-serif; max-width: 6.5in; + margin: 0px auto; font-size: 85%; } ins {background-color: #CCFFCC;} @@ -12,7 +13,7 @@ body table{font-size: 100%;} /* - © Copyright Beman Dawes, 2014 + © Copyright Beman Dawes, 2014 Distributed under the Boost Software License, Version 1.0. See www.boost.org/LICENSE_1_0.txt */ diff --git a/test/loop_time_test.cpp b/test/loop_time_test.cpp index 3af3641..d73921a 100644 --- a/test/loop_time_test.cpp +++ b/test/loop_time_test.cpp @@ -16,8 +16,10 @@ #include #include #include +#include #include #include +#include #include using namespace boost; @@ -47,7 +49,7 @@ namespace if (argc >=2) #ifndef _MSC_VER - n = std::atoll(argv[1]); + n = atoll(argv[1]); #else n = _atoi64(argv[1]); #endif @@ -77,6 +79,20 @@ namespace } } + std::string with_digit_separator(int64_t x) + { + std::string s = boost::lexical_cast(x); + std::string s2; + + for (std::string::size_type i = 0; i < s.size(); ++i) + { + if (i && ((s.size()-i) % 3) == 0) + s2 += '\''; + s2 += s[i]; + } + return s2; + } + //--------------------------------------------------------------------------------------// template @@ -208,36 +224,37 @@ int cpp_main(int argc, char* argv[]) cout << "\n\nEndian Loop Time Test\n\n\n" + << "
\n" << "
Microsoft Visual C++ version 11.0
Iterations: 1000000000, Intrinsics: cstdlib _byteswap_ushort, etc.
\n" << "\n" << "\n" << "\n" - "\n" + "\n" "\n" "\n" ; test_big_align_int16(); test_little_align_int16(); - test_big_int16(); - test_little_int16(); - test_big_align_int32(); test_little_align_int32(); - test_big_int32(); - test_little_int32(); - test_big_align_int64(); test_little_align_int64(); + + test_big_int16(); + test_little_int16(); + test_big_int32(); + test_little_int32(); test_big_int64(); test_little_int64(); - cout << "\n
" << BOOST_COMPILER << "
" - << " Iterations: " << n + << " Iterations: " << with_digit_separator(n) << ", Intrinsics: " BOOST_ENDIAN_INTRINSIC_MSG << "
Test CaseEndian
type
Endian
arithmetic
type
Endian
conversion
function
\n\n\n"; + cout << "\n
\n" + << "\n\n\n\n"; return 0; } diff --git a/test/msvc/endian.sln b/test/msvc/endian.sln index b36444c..4fe29e0 100644 --- a/test/msvc/endian.sln +++ b/test/msvc/endian.sln @@ -25,12 +25,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "loop_time_test", "loop_time EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "buffer_test", "buffer_test\buffer_test.vcxproj", "{BFB68CF4-EB92-4E5C-9694-A939496C5CDE}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uses_cases", "uses_cases\uses_cases.vcxproj", "{36BF451A-EAEF-4140-92E4-6EA461A26107}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "conversion_use_case", "conversion_use_case\conversion_use_case.vcxproj", "{1139E765-DE0F-497A-A7D9-EB2683521DF1}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "associated-files", "associated-files\associated-files.vcxproj", "{D9C80FE0-20A6-4711-A3F4-676019BD5A06}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "experiment", "experiment\experiment.vcxproj", "{CE9D8719-6E86-41D0-97CA-5BE5272594E9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -123,11 +123,6 @@ Global {BFB68CF4-EB92-4E5C-9694-A939496C5CDE}.Release|Win32.Build.0 = Release|Win32 {BFB68CF4-EB92-4E5C-9694-A939496C5CDE}.Release|x64.ActiveCfg = Release|x64 {BFB68CF4-EB92-4E5C-9694-A939496C5CDE}.Release|x64.Build.0 = Release|x64 - {36BF451A-EAEF-4140-92E4-6EA461A26107}.Debug|Win32.ActiveCfg = Debug|Win32 - {36BF451A-EAEF-4140-92E4-6EA461A26107}.Debug|x64.ActiveCfg = Debug|x64 - {36BF451A-EAEF-4140-92E4-6EA461A26107}.Release|Win32.ActiveCfg = Release|Win32 - {36BF451A-EAEF-4140-92E4-6EA461A26107}.Release|Win32.Build.0 = Release|Win32 - {36BF451A-EAEF-4140-92E4-6EA461A26107}.Release|x64.ActiveCfg = Release|Win32 {1139E765-DE0F-497A-A7D9-EB2683521DF1}.Debug|Win32.ActiveCfg = Debug|Win32 {1139E765-DE0F-497A-A7D9-EB2683521DF1}.Debug|Win32.Build.0 = Debug|Win32 {1139E765-DE0F-497A-A7D9-EB2683521DF1}.Debug|x64.ActiveCfg = Debug|x64 @@ -144,6 +139,12 @@ Global {D9C80FE0-20A6-4711-A3F4-676019BD5A06}.Release|Win32.Build.0 = Release|Win32 {D9C80FE0-20A6-4711-A3F4-676019BD5A06}.Release|x64.ActiveCfg = Release|x64 {D9C80FE0-20A6-4711-A3F4-676019BD5A06}.Release|x64.Build.0 = Release|x64 + {CE9D8719-6E86-41D0-97CA-5BE5272594E9}.Debug|Win32.ActiveCfg = Debug|Win32 + {CE9D8719-6E86-41D0-97CA-5BE5272594E9}.Debug|Win32.Build.0 = Debug|Win32 + {CE9D8719-6E86-41D0-97CA-5BE5272594E9}.Debug|x64.ActiveCfg = Debug|Win32 + {CE9D8719-6E86-41D0-97CA-5BE5272594E9}.Release|Win32.ActiveCfg = Release|Win32 + {CE9D8719-6E86-41D0-97CA-5BE5272594E9}.Release|Win32.Build.0 = Release|Win32 + {CE9D8719-6E86-41D0-97CA-5BE5272594E9}.Release|x64.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/test/msvc/loop_time_test/loop_time_test.vcxproj b/test/msvc/loop_time_test/loop_time_test.vcxproj index b738984..0973428 100644 --- a/test/msvc/loop_time_test/loop_time_test.vcxproj +++ b/test/msvc/loop_time_test/loop_time_test.vcxproj @@ -97,7 +97,7 @@ true - "$(TargetDir)\$(TargetName).exe" 1 + "$(TargetDir)\$(TargetName).exe" 1234 @@ -133,7 +133,7 @@ true - "$(TargetDir)\$(TargetName).exe" 1000000000 + "$(TargetDir)\$(TargetName).exe" 100000000 diff --git a/test/speed_test.cpp b/test/speed_test.cpp index 72d600e..70fc92b 100644 --- a/test/speed_test.cpp +++ b/test/speed_test.cpp @@ -48,7 +48,7 @@ namespace if (argc >=2) #ifndef _MSC_VER - n = std::atoll(argv[1]); + n = atoll(argv[1]); #else n = _atoi64(argv[1]); #endif @@ -97,60 +97,60 @@ namespace void test_big_int16() { cout << "16-bit aligned big endian"; - time(user::return_x_big_int16); - time(user::return_x_value_big_int16); - time(user::return_x_inplace_big_int16); - time(user::return_x_big_int16); + time(user::return_x_big_int16); + time(user::return_x_value_big_int16); + time(user::return_x_inplace_big_int16); + time(user::return_y_big_int16); cout << "\n"; } void test_little_int16() { cout << "16-bit aligned little endian"; - time(user::return_x_little_int16); - time(user::return_x_value_little_int16); - time(user::return_x_inplace_little_int16); - time(user::return_x_little_int16); + time(user::return_x_little_int16); + time(user::return_x_value_little_int16); + time(user::return_x_inplace_little_int16); + time(user::return_y_little_int16); cout << "\n"; } void test_big_int32() { cout << "32-bit aligned big endian"; - time(user::return_x_big_int32); - time(user::return_x_value_big_int32); - time(user::return_x_inplace_big_int32); - time(user::return_x_big_int32); + time(user::return_x_big_int32); + time(user::return_x_value_big_int32); + time(user::return_x_inplace_big_int32); + time(user::return_y_big_int32); cout << "\n"; } void test_little_int32() { cout << "32-bit aligned little endian"; - time(user::return_x_little_int32); - time(user::return_x_value_little_int32); - time(user::return_x_inplace_little_int32); - time(user::return_x_little_int32); + time(user::return_x_little_int32); + time(user::return_x_value_little_int32); + time(user::return_x_inplace_little_int32); + time(user::return_y_little_int32); cout << "\n"; } void test_big_int64() { cout << "64-bit aligned big endian"; - time(user::return_x_big_int64); - time(user::return_x_value_big_int64); - time(user::return_x_inplace_big_int64); - time(user::return_x_big_int64); + time(user::return_x_big_int64); + time(user::return_x_value_big_int64); + time(user::return_x_inplace_big_int64); + time(user::return_y_big_int64); cout << "\n"; } void test_little_int64() { cout << "64-bit aligned little endian"; - time(user::return_x_little_int64); - time(user::return_x_value_little_int64); - time(user::return_x_inplace_little_int64); - time(user::return_x_little_int64); + time(user::return_x_little_int64); + time(user::return_x_value_little_int64); + time(user::return_x_inplace_little_int64); + time(user::return_y_little_int64); cout << "\n"; } diff --git a/test/speed_test_functions.cpp b/test/speed_test_functions.cpp index 34512d8..518962d 100644 --- a/test/speed_test_functions.cpp +++ b/test/speed_test_functions.cpp @@ -26,67 +26,71 @@ namespace user { - int16_t return_x_big_int16(int16_t x, big_int16_ut) BOOST_NOEXCEPT { return x; } - int16_t return_x_little_int16(int16_t x, little_int16_ut) BOOST_NOEXCEPT { return x; } - int16_t return_x_value_big_int16(int16_t x, big_int16_ut) BOOST_NOEXCEPT + int16_t return_x_big_int16(int16_t x, big_int16_t) BOOST_NOEXCEPT { return x; } + int16_t return_x_little_int16(int16_t x, little_int16_t) BOOST_NOEXCEPT { return x; } + int16_t return_x_value_big_int16(int16_t x, big_int16_t) BOOST_NOEXCEPT { return conditional_reverse(x); } - int16_t return_x_value_little_int16(int16_t x, little_int16_ut) BOOST_NOEXCEPT + int16_t return_x_value_little_int16(int16_t x, little_int16_t) BOOST_NOEXCEPT { return conditional_reverse(x); } - int16_t return_x_inplace_big_int16(int16_t x, big_int16_ut) BOOST_NOEXCEPT + int16_t return_x_inplace_big_int16(int16_t x, big_int16_t) BOOST_NOEXCEPT { conditional_reverse_inplace(x); return x; } - int16_t return_x_inplace_little_int16(int16_t x, little_int16_ut) BOOST_NOEXCEPT + int16_t return_x_inplace_little_int16(int16_t x, little_int16_t) BOOST_NOEXCEPT { conditional_reverse_inplace(x); return x; } - int16_t return_y_big_int16(int16_t x, big_int16_ut y) BOOST_NOEXCEPT { return y; } - int16_t return_y_little_int16(int16_t x, little_int16_ut y) BOOST_NOEXCEPT { return y; } + int16_t return_y_big_int16(int16_t x, big_int16_t y) BOOST_NOEXCEPT { return y; } + int16_t return_y_little_int16(int16_t x, little_int16_t y) BOOST_NOEXCEPT { return y; } - int32_t return_x_big_int32(int32_t x, big_int32_ut) BOOST_NOEXCEPT { return x; } - int32_t return_x_little_int32(int32_t x, little_int32_ut) BOOST_NOEXCEPT { return x; } - int32_t return_x_value_big_int32(int32_t x, big_int32_ut) BOOST_NOEXCEPT - { - return conditional_reverse(x); - } - int32_t return_x_value_little_int32(int32_t x, little_int32_ut) BOOST_NOEXCEPT - { - return conditional_reverse(x); - } - int32_t return_x_inplace_big_int32(int32_t x, big_int32_ut) BOOST_NOEXCEPT - { - conditional_reverse_inplace(x); return x; - } - int32_t return_x_inplace_little_int32(int32_t x, little_int32_ut) BOOST_NOEXCEPT - { - conditional_reverse_inplace(x); return x; - } - int32_t return_y_big_int32(int32_t x, big_int32_ut y) BOOST_NOEXCEPT { return y; } - int32_t return_y_little_int32(int32_t x, little_int32_ut y) BOOST_NOEXCEPT { return y; } + //------------------------------------------------------------------------------------// - int64_t return_x_big_int64(int64_t x, big_int64_ut) BOOST_NOEXCEPT { return x; } - int64_t return_x_little_int64(int64_t x, little_int64_ut) BOOST_NOEXCEPT { return x; } - int64_t return_x_value_big_int64(int64_t x, big_int64_ut) BOOST_NOEXCEPT + int32_t return_x_big_int32(int32_t x, big_int32_t) BOOST_NOEXCEPT { return x; } + int32_t return_x_little_int32(int32_t x, little_int32_t) BOOST_NOEXCEPT { return x; } + int32_t return_x_value_big_int32(int32_t x, big_int32_t) BOOST_NOEXCEPT { return conditional_reverse(x); } - int64_t return_x_value_little_int64(int64_t x, little_int64_ut) BOOST_NOEXCEPT + int32_t return_x_value_little_int32(int32_t x, little_int32_t) BOOST_NOEXCEPT { return conditional_reverse(x); } - int64_t return_x_inplace_big_int64(int64_t x, big_int64_ut) BOOST_NOEXCEPT + int32_t return_x_inplace_big_int32(int32_t x, big_int32_t) BOOST_NOEXCEPT { conditional_reverse_inplace(x); return x; } - int64_t return_x_inplace_little_int64(int64_t x, little_int64_ut) BOOST_NOEXCEPT + int32_t return_x_inplace_little_int32(int32_t x, little_int32_t) BOOST_NOEXCEPT { conditional_reverse_inplace(x); return x; } - int64_t return_y_big_int64(int64_t x, big_int64_ut y) BOOST_NOEXCEPT { return y; } - int64_t return_y_little_int64(int64_t x, little_int64_ut y) BOOST_NOEXCEPT { return y; } + int32_t return_y_big_int32(int32_t x, big_int32_t y) BOOST_NOEXCEPT { return y; } + int32_t return_y_little_int32(int32_t x, little_int32_t y) BOOST_NOEXCEPT { return y; } + + //------------------------------------------------------------------------------------// + + int64_t return_x_big_int64(int64_t x, big_int64_t) BOOST_NOEXCEPT { return x; } + int64_t return_x_little_int64(int64_t x, little_int64_t) BOOST_NOEXCEPT { return x; } + int64_t return_x_value_big_int64(int64_t x, big_int64_t) BOOST_NOEXCEPT + { + return conditional_reverse(x); + } + int64_t return_x_value_little_int64(int64_t x, little_int64_t) BOOST_NOEXCEPT + { + return conditional_reverse(x); + } + int64_t return_x_inplace_big_int64(int64_t x, big_int64_t) BOOST_NOEXCEPT + { + conditional_reverse_inplace(x); return x; + } + int64_t return_x_inplace_little_int64(int64_t x, little_int64_t) BOOST_NOEXCEPT + { + conditional_reverse_inplace(x); return x; + } + int64_t return_y_big_int64(int64_t x, big_int64_t y) BOOST_NOEXCEPT { return y; } + int64_t return_y_little_int64(int64_t x, little_int64_t y) BOOST_NOEXCEPT { return y; } } diff --git a/test/speed_test_functions.hpp b/test/speed_test_functions.hpp index 775b368..df1634f 100644 --- a/test/speed_test_functions.hpp +++ b/test/speed_test_functions.hpp @@ -24,32 +24,32 @@ namespace user using namespace boost; using namespace boost::endian; - int16_t return_x_big_int16(int16_t x, big_int16_ut y) BOOST_NOEXCEPT; - int16_t return_x_little_int16(int16_t x, little_int16_ut y) BOOST_NOEXCEPT; - int16_t return_x_value_big_int16(int16_t x, big_int16_ut) BOOST_NOEXCEPT; - int16_t return_x_value_little_int16(int16_t x, little_int16_ut y) BOOST_NOEXCEPT; - int16_t return_x_inplace_big_int16(int16_t x, big_int16_ut y) BOOST_NOEXCEPT; - int16_t return_x_inplace_little_int16(int16_t x, little_int16_ut y) BOOST_NOEXCEPT; - int16_t return_y_big_int16(int16_t x, big_int16_ut y) BOOST_NOEXCEPT; - int16_t return_y_little_int16(int16_t x, little_int16_ut y) BOOST_NOEXCEPT; + int16_t return_x_big_int16(int16_t x, big_int16_t y) BOOST_NOEXCEPT; + int16_t return_x_little_int16(int16_t x, little_int16_t y) BOOST_NOEXCEPT; + int16_t return_x_value_big_int16(int16_t x, big_int16_t) BOOST_NOEXCEPT; + int16_t return_x_value_little_int16(int16_t x, little_int16_t y) BOOST_NOEXCEPT; + int16_t return_x_inplace_big_int16(int16_t x, big_int16_t y) BOOST_NOEXCEPT; + int16_t return_x_inplace_little_int16(int16_t x, little_int16_t y) BOOST_NOEXCEPT; + int16_t return_y_big_int16(int16_t x, big_int16_t y) BOOST_NOEXCEPT; + int16_t return_y_little_int16(int16_t x, little_int16_t y) BOOST_NOEXCEPT; - int32_t return_x_big_int32(int32_t x, big_int32_ut y) BOOST_NOEXCEPT; - int32_t return_x_little_int32(int32_t x, little_int32_ut y) BOOST_NOEXCEPT; - int32_t return_x_value_big_int32(int32_t x, big_int32_ut) BOOST_NOEXCEPT; - int32_t return_x_value_little_int32(int32_t x, little_int32_ut y) BOOST_NOEXCEPT; - int32_t return_x_inplace_big_int32(int32_t x, big_int32_ut y) BOOST_NOEXCEPT; - int32_t return_x_inplace_little_int32(int32_t x, little_int32_ut y) BOOST_NOEXCEPT; - int32_t return_y_big_int32(int32_t x, big_int32_ut y) BOOST_NOEXCEPT; - int32_t return_y_little_int32(int32_t x, little_int32_ut y) BOOST_NOEXCEPT; + int32_t return_x_big_int32(int32_t x, big_int32_t y) BOOST_NOEXCEPT; + int32_t return_x_little_int32(int32_t x, little_int32_t y) BOOST_NOEXCEPT; + int32_t return_x_value_big_int32(int32_t x, big_int32_t) BOOST_NOEXCEPT; + int32_t return_x_value_little_int32(int32_t x, little_int32_t y) BOOST_NOEXCEPT; + int32_t return_x_inplace_big_int32(int32_t x, big_int32_t y) BOOST_NOEXCEPT; + int32_t return_x_inplace_little_int32(int32_t x, little_int32_t y) BOOST_NOEXCEPT; + int32_t return_y_big_int32(int32_t x, big_int32_t y) BOOST_NOEXCEPT; + int32_t return_y_little_int32(int32_t x, little_int32_t y) BOOST_NOEXCEPT; - int64_t return_x_big_int64(int64_t x, big_int64_ut y) BOOST_NOEXCEPT; - int64_t return_x_little_int64(int64_t x, little_int64_ut y) BOOST_NOEXCEPT; - int64_t return_x_value_big_int64(int64_t x, big_int64_ut) BOOST_NOEXCEPT; - int64_t return_x_value_little_int64(int64_t x, little_int64_ut y) BOOST_NOEXCEPT; - int64_t return_x_inplace_big_int64(int64_t x, big_int64_ut y) BOOST_NOEXCEPT; - int64_t return_x_inplace_little_int64(int64_t x, little_int64_ut y) BOOST_NOEXCEPT; - int64_t return_y_big_int64(int64_t x, big_int64_ut y) BOOST_NOEXCEPT; - int64_t return_y_little_int64(int64_t x, little_int64_ut y) BOOST_NOEXCEPT; + int64_t return_x_big_int64(int64_t x, big_int64_t y) BOOST_NOEXCEPT; + int64_t return_x_little_int64(int64_t x, little_int64_t y) BOOST_NOEXCEPT; + int64_t return_x_value_big_int64(int64_t x, big_int64_t) BOOST_NOEXCEPT; + int64_t return_x_value_little_int64(int64_t x, little_int64_t y) BOOST_NOEXCEPT; + int64_t return_x_inplace_big_int64(int64_t x, big_int64_t y) BOOST_NOEXCEPT; + int64_t return_x_inplace_little_int64(int64_t x, little_int64_t y) BOOST_NOEXCEPT; + int64_t return_y_big_int64(int64_t x, big_int64_t y) BOOST_NOEXCEPT; + int64_t return_y_little_int64(int64_t x, little_int64_t y) BOOST_NOEXCEPT; }